# Norman MCP Server

Connect Claude Code to company records in Norman to draft invoices, sort receipts, and review transactions. It covers accounting workflows for Germany and Poland.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 62
- Author: norman-finance
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/norman-finance/norman-mcp-server
- Updated: 2026-10-23
- HTML: https://affpapa.org/en/nevibecode/mcp/norman-mcp-server

## What it does

The server gives an AI assistant access to a company’s Norman records. It can draft invoices and quotes, sort receipts, check transactions, and prepare tax paperwork. Use `list_companies` and `switch_company` to move between company records.

German workflows include tax-return previews and submission of supported forms after confirmation. In Poland, the server can show registers and filing status, but it cannot sign or submit returns. That boundary matters if you expect the assistant to file Polish taxes.

Remote access uses HTTP at `https://mcp.norman.finance/mcp` with OAuth. Claude Code can add the server with `claude mcp add`; the local option requires `NORMAN_EMAIL`, `NORMAN_PASSWORD`, and `NORMAN_ENVIRONMENT`.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Remote server: `https://mcp.norman.finance/mcp`
- Environment variables: `NORMAN_EMAIL`, `NORMAN_PASSWORD`, `NORMAN_ENVIRONMENT` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

1. **Platform CLI: remote server**
```bash
claude mcp add --transport http mcp-server https://mcp.norman.finance/mcp
```

2. **Platform CLI**
```bash
claude mcp add --env NORMAN_EMAIL=<NORMAN_EMAIL> --env NORMAN_PASSWORD=<NORMAN_PASSWORD> --env NORMAN_ENVIRONMENT=<NORMAN_ENVIRONMENT> --transport stdio norman-mcp-server -- uvx norman-mcp-server
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from norman-mcp-server <command>

### Codex

1. **Platform CLI: remote server**
```bash
codex mcp add norman-mcp-server --url https://mcp.norman.finance/mcp
```

2. **Platform CLI**
```bash
codex mcp add norman-mcp-server --env NORMAN_EMAIL=<NORMAN_EMAIL> --env NORMAN_PASSWORD=<NORMAN_PASSWORD> --env NORMAN_ENVIRONMENT=<NORMAN_ENVIRONMENT> -- uvx norman-mcp-server
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from norman-mcp-server <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "norman-mcp-server": {
            "url": "https://mcp.norman.finance/mcp"
        }
    }
}
```
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "norman-mcp-server": {
            "command": "uvx",
            "args": [
                "norman-mcp-server"
            ],
            "env": {
                "NORMAN_EMAIL": "<NORMAN_EMAIL>",
                "NORMAN_PASSWORD": "<NORMAN_PASSWORD>",
                "NORMAN_ENVIRONMENT": "<NORMAN_ENVIRONMENT>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from norman-mcp-server <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "norman-mcp-server": {
            "type": "http",
            "url": "https://mcp.norman.finance/mcp"
        }
    }
}
```
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "norman-mcp-server": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "norman-mcp-server"
            ],
            "env": {
                "NORMAN_EMAIL": "<NORMAN_EMAIL>",
                "NORMAN_PASSWORD": "<NORMAN_PASSWORD>",
                "NORMAN_ENVIRONMENT": "<NORMAN_ENVIRONMENT>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from norman-mcp-server <command>

### Gemini CLI

1. **Platform CLI: remote server**
```bash
gemini mcp add -t http norman-mcp-server https://mcp.norman.finance/mcp
```

2. **Platform CLI**
```bash
gemini mcp add -e NORMAN_EMAIL=<NORMAN_EMAIL> -e NORMAN_PASSWORD=<NORMAN_PASSWORD> -e NORMAN_ENVIRONMENT=<NORMAN_ENVIRONMENT> norman-mcp-server uvx norman-mcp-server
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from norman-mcp-server <command>

## When to use it
- draft an invoice using company details
- find transactions without receipts
- reconcile bookkeeping entries
- prepare a VAT return preview
- check a Polish filing status

## Example prompts
- Draft a consulting invoice using my company branding.
- Find transactions that have no receipt attached.
- Show my Polish company’s JPK register and explain which operations are excluded.

## Similar
- [World Monitor](https://affpapa.org/en/nevibecode/mcp/world-monitor.md) — MCP server · ★ 89408
- [CCXT](https://affpapa.org/en/nevibecode/mcp/ccxt.md) — MCP server · ★ 44583
- [Finance Toolkit](https://affpapa.org/en/nevibecode/mcp/finance-toolkit.md) — MCP server · ★ 5458
- [EdgarTools](https://affpapa.org/en/nevibecode/mcp/edgartools.md) — MCP server · ★ 2814
- [LetsFG — Flights & Hotels](https://affpapa.org/en/nevibecode/mcp/letsfg-flights-hotels.md) — MCP server · ★ 2188
- [AutoTS](https://affpapa.org/en/nevibecode/mcp/autots.md) — MCP server · ★ 1434

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
