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>
84 lines
3.0 KiB
Markdown
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.
|