Connect with Claude
Talk to your bookkeeping. Connect Accounted to Claude (claude.ai, Claude Desktop, or Claude Code) and ask questions, categorise transactions, and prepare a momsdeklaration in plain language: every write still stages for your approval first.
Den här sidan på svenska: Anslut Claude.
Accounted ships an MCP server that exposes the full bookkeeping engine (150+ tools) to any MCP client. The endpoint is:
https://app.accounted.se/api/extensions/ext/mcp-server/mcp?tool_namespace=accounted
There are three ways to connect, depending on your client. All three reach the same tools and the same approval model: read tools answer immediately, write tools (categorise, mark paid, create voucher, year-end) stage a pending operation that you confirm in chat or in the /pending web UI before anything is booked.
Path A: claude.ai or Claude Desktop (one click)
The link opens claude.ai with the connector name and URL already filled in. You review the values and confirm; the link only prefills the dialog, it grants nothing on its own. No API key to manage.
You do not need an Accounted account yet. Adding the connector opens the Accounted sign-in straight away, and a new user creates the account right there (BankID or e-mail + 2FA).
All permissions pre-selected, every write still staged. The consent page grants the full scope set with one click. Expand Behörigheter and choose Endast läs to connect read-only (list invoices, read reports, compute VAT): a reviewer can do that while you keep a write-enabled connection for daily work. Whatever the scopes, write tools (create invoice, categorise, book vouchers, run year-end) only stage a pending operation that you confirm before anything is booked, and the grant can be revoked under Settings → API & MCP.
What happens after you click
The rest of the setup happens on Claude's side, in this order:
- The connector dialog. claude.ai opens Add custom connector with the name and URL filled in. Check the URL and continue: the dialog detects that the server requires a sign-in (Always required) and that Claude can register itself automatically. Keep those and click Add. Claude Desktop shows the same dialog under Settings → Connectors.
- The sign-in opens. claude.ai asks you to connect and opens the Accounted sign-in (BankID or e-mail + 2FA), followed by the consent page. It shows the company that is currently active in the app (switch company in the app first if you have several) with every permission pre-selected; expand Behörigheter and choose Endast läs for a read-only connection. Approve, and the connector shows as connected with the Accounted tools listed.
- Ask your first question. For example "Which company am I connected to?". From here every question runs against that company; writes stage at /pending until you confirm.
Signed in, but Claude still says it cannot reach the server? Ask again in the same chat first. If that does not help, open Settings → Connectors, remove the connector, and add it again from the link above, with authentication left on Always required.
Adding it by hand instead
In claude.ai (Settings → Connectors) or Claude Desktop (Settings → Connectors → Add custom connector), choose Add custom connector and paste:
https://app.accounted.se/api/extensions/ext/mcp-server/mcp?tool_namespace=accounted&client=claude-connector&auth=required
Keep all three parameters. tool_namespace=accounted selects the tool names this guide uses. auth=required makes the dialog detect the sign-in (Always required): without it the server accepts an anonymous handshake, the dialog suggests None, and a connector added with that default never opens the sign-in. If you do add the bare URL, choose Required when the server asks by hand. client=claude-connector is telemetry-only.
Path B: Claude Code (plugin)
Best in the terminal. The plugin installs the connection and seven workflow commands that follow the Swedish bookkeeping rhythm.
/plugin marketplace add erp-mafia/accounted
/plugin install accounted@accounted
Then run /mcp and sign in with Accounted (the same OAuth consent screen as Path A). Start with /accounted:start.
| Command | What it does |
|---|---|
/accounted:start | Connect, orient, and surface what needs attention |
/accounted:bookkeep | Clear unbooked bank transactions and receipts |
/accounted:check | Read-only health check with a prioritized fix list |
/accounted:month-close | Close the month against the product's checklist |
/accounted:vat | Prepare and reconcile the momsdeklaration |
/accounted:payroll | Monthly salary run and AGI underlag |
/accounted:year-end | Bokslut, readiness-gated |
Prefer plain MCP without the workflow commands? claude mcp add wires the same connection into Claude Code:
claude mcp add --transport http accounted \
"https://app.accounted.se/api/extensions/ext/mcp-server/mcp?tool_namespace=accounted&client=claude-code"
Cursor has no plugin format and does not read claude mcp add. Add the server to ~/.cursor/mcp.json (global) or .cursor/mcp.json (per project) instead:
{
"mcpServers": {
"accounted": {
"url": "https://app.accounted.se/api/extensions/ext/mcp-server/mcp?tool_namespace=accounted&client=cursor"
}
}
}
Path C: npx accounted-mcp with an API key (stdio bridge)
Best for Claude Desktop on a machine where you'd rather use a long-lived API key than the OAuth flow, or for scripting.
- Mint an API key in the Accounted dashboard under Settings → API & MCP (
/settings/api). Use agnubok_sk_test_*key against the sandbox while you evaluate; switch tognubok_sk_live_*for real data. - Add the stdio bridge to your
claude_desktop_config.json:
Running Accounted yourself? Point the bridge at your own host with{ "mcpServers": { "accounted": { "command": "npx", "args": ["-y", "accounted-mcp"], "env": { "ACCOUNTED_API_KEY": "gnubok_sk_test_...", "ACCOUNTED_CLIENT": "claude-desktop" } } } }ACCOUNTED_URL. - Restart Claude Desktop. The bridge proxies stdio JSON-RPC to the hosted MCP endpoint over HTTPS; the key carries the scopes you granted it at mint time.
The key's scopes gate exactly which tools are callable: a key without write scopes can read reports and ledgers but cannot stage a booking.
The API-key value still begins with gnubok_sk_. That is a stable credential
format, not the MCP integration name. Existing gnubok-mcp configurations
continue to work without changes.
Try these prompts
All three run against the deterministic sandbox seed (use a gnubok_sk_test_* key, or make the sandbox company the active company in the app before you sign in from Claude). They exercise the read path end-to-end without booking anything.
- "Show my uncategorized bank transactions and suggest categories."
Claude calls
accounted_list_uncategorized_transactionsthenaccounted_suggest_categoriesand walks you through the proposals. Approving one stages anaccounted_categorize_transactionpending operation: nothing is booked until you confirm. - "Which invoices are overdue?"
Claude calls
accounted_get_ar_ledger(kundreskontra) and lists outstanding customer invoices with aging. - "Compute my VAT report for this quarter and tell me if I can close it."
Claude calls
accounted_get_vat_reportfor the momsdeklaration rutor, thenaccounted_vat_close_checkto scan for blockers (uncategorised rows, unapproved supplier invoices, missing receipts on expenses ≥ 4 000 kr: the tool's high-value heuristic; BFL requires underlag for every affärshändelse regardless of amount) and reportsready_to_close.
10-minute reviewer test
A quick end-to-end pass to confirm the connection works before you trust it with real data. Run the steps in order; each lists what you do and what you should see.
- Connect. Use Path A (choose Endast läs on the consent page), Path B, or Path C with a
gnubok_sk_test_*key. → Claude lists the Accounted tools (titles like List Uncategorized Transactions, VAT Declaration (Momsdeklaration)). - Confirm the company. Ask "Which company am I connected to?" → Claude names the sandbox company (e.g. Sandlådan Konsult).
- Run prompt 1 (uncategorized + suggest categories). → A list of uncategorised rows plus category suggestions; no booking happens.
- Run prompt 2 (overdue invoices). → At least one overdue customer invoice with aging.
- Run prompt 3 (VAT report + can I close). → Momsdeklaration rutor returned;
accounted_vat_close_checkreports a non-empty blocker list (uncategorised transactions, an unapproved leverantörsfaktura, and a high-value business expense without a receipt). - Stage a write. Ask Claude to categorise one transaction. → Claude stages a pending operation and asks you to confirm: the booking does not post until you approve in chat or at /pending.
If every step matches, the connector is wired correctly and the approval model is enforced.
Support
Stuck connecting, or seeing an unexpected blocker? Use the in-app support form at /help: it routes straight to the product team with your company context attached. Include the client (claude.ai / Desktop / Code), the path you used (A, B, or C), and the tool name from any error message.