Files
accounted/packages/accounted-mcp/README.md
T
a1af9adb05 docs(connector): name the Claude.ai auth mode and OAuth client to pick (#1914)
Claude.ai's Add custom connector dialog auto-detects Authentication
"None" for a server that answers the handshake without credentials,
which is exactly what lazy auth does; a user who accepts that default
gets an error instead of the sign-in on the first company-scoped call.
State the two correct choices ("Required when the server asks", DCR
client registration) in the bridge README and the plugin's CONNECTORS.md.


Claude-Session: https://claude.ai/code/session_018wCdzRTatKiDByKB8hCNT6

Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-26 08:58:02 +02:00

84 lines
3.0 KiB
Markdown

# accounted-mcp
Connect Claude Desktop, Claude Code, or another stdio MCP client to your
[Accounted](https://app.accounted.se) bookkeeping account.
This zero-dependency bridge forwards JSON-RPC over stdio to the hosted Accounted
MCP server. New connections receive the `accounted_*` tool namespace. Existing
`gnubok-mcp` configurations remain supported separately.
## Setup
1. Create an API key in Accounted under **Settings > API**.
2. Add the bridge to your MCP client:
```json
{
"mcpServers": {
"accounted": {
"command": "npx",
"args": ["-y", "accounted-mcp"],
"env": {
"ACCOUNTED_API_KEY": "gnubok_sk_test_...",
"ACCOUNTED_CLIENT": "claude-desktop"
}
}
}
}
```
The credential value retains the legacy `gnubok_sk_*` wire prefix for backward
compatibility. Only the MCP integration is being renamed in this release.
## Environment variables
| Variable | Required | Default | Description |
|---|---:|---|---|
| `ACCOUNTED_API_KEY` | yes | none | Your existing Accounted API key. |
| `ACCOUNTED_URL` | no | Accounted hosted MCP endpoint | Override for self-hosted Accounted. The bridge adds `tool_namespace=accounted` when omitted. |
| `ACCOUNTED_CLIENT` | no | none | Telemetry-only distribution marker such as `claude-desktop`. |
The API key scopes determine which tools are visible and callable. Write tools
stage pending operations for explicit approval before anything is booked.
## OAuth connector (no API key, no account needed up front)
Clients with OAuth support connect directly without this bridge and without an
existing API key. The sign-in screen lets a new user create the Accounted
account (BankID or e-mail), and company setup then continues in the
conversation through the `onboarding` skill and `accounted_create_company`:
```text
https://app.accounted.se/api/extensions/ext/mcp-server/mcp?tool_namespace=accounted
```
```bash
# Claude Code
claude mcp add --transport http accounted \
"https://app.accounted.se/api/extensions/ext/mcp-server/mcp?tool_namespace=accounted"
# OpenAI Codex
codex mcp add accounted --url \
"https://app.accounted.se/api/extensions/ext/mcp-server/mcp?tool_namespace=accounted"
```
Claude.ai and Claude Desktop: Settings > Connectors > Add custom connector,
paste the URL, then in step 2 choose:
- **Authentication: "Required when the server asks."** Claude auto-detects
"None" because the server answers the handshake without credentials; with
"None" the first company-scoped call shows an error instead of the sign-in.
- **OAuth client: "No client ID, register one automatically" (DCR).** The
server does not advertise Anthropic's hosted client metadata (CIMD) yet.
- No additional headers; transport stays Streamable HTTP.
The connector works before you connect (documentation tools); the first
company-scoped call opens the sign-in prompt, where a new user creates the
account.
## Compatibility
The legacy `gnubok-mcp` package, environment variables, endpoint behavior, and
`gnubok_*` tool aliases remain supported. Existing installations do not need to
change.