Files
Jakob Wennberg 678acfe7ef fix(mcp): eager-auth flag so claude.ai's connector dialog detects OAuth, not "None" (#2159)
claude.ai's two-step "Add custom connector" dialog probes the server URL
without credentials and pre-fills the Authentication choice from the
answer. Our lazy-auth endpoint (issue #1814) answers 200 on an anonymous
initialize, which the dialog reads as an authless server: it suggests
"None", and a connector added with that default never opens the sign-in
when the challenge arrives later. Per Anthropic's connector docs a 401 is
the only answer it reads as OAuth ("Claude does not honor a
WWW-Authenticate header on a 200 response").

- `auth=required` on the endpoint URL (extensions/general/mcp-server/
  auth-mode.ts) turns lazy auth off for that URL: every tokenless
  request, initialize included, answers the 401 + WWW-Authenticate
  challenge. Callers with a token are unaffected; the bare URL keeps
  lazy auth for Claude Code, the plugin, Cursor and ChatGPT, and existing
  connector records are untouched.
- The links we control carry the flag: Settings -> API & MCP (install
  link and copy block), the onboarding checklist, both docs pages and
  claude-plugin/CONNECTORS.md (plugin 1.2.3). The docs' Path A now
  describes the eager flow (sign-in opens on Add) instead of telling
  users to override the dialog's "None".
- Tests: eager-auth.test.ts (401 on initialize/tools/list/public tools,
  namespaced metadata pointer, token no-op, exact-flag only); checklist
  link shape updated.

Companion: gnubok-website PR (Kom igång connector link + regenerated
connect-claude / anslut-claude pages).


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

Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 14:51:32 +02:00
..
2026-07-24 15:03:50 +02:00

Accounted plugin for Claude Code

The official plugin for Accounted, the open-source Swedish bookkeeping platform. Installing it gives Claude two things at once:

  1. The connection: the Accounted MCP server (150+ bookkeeping tools, resources, and loadable skills) via OAuth. No API key needed.
  2. The flows: seven short workflow skills that follow the Swedish bookkeeping rhythm. Each one grounds itself in your company's live data, loads the product's Swedish accounting knowledge when it needs it, and stages every write for your approval. Nothing is ever booked without you saying yes.

Install

/plugin marketplace add erp-mafia/accounted
/plugin install accounted@accounted

Then run /accounted:setup. It connects the Accounted connector (/mcp → authenticate; no account yet? create it on that sign-in screen, with BankID or e-mail), and for a brand-new account it sets up the company right here in the conversation (company form, organisationsnummer, VAT, fiscal year), then hands you the bank and Skatteverket connect links. After that, /accounted:start orients you in the books.

Skills

Command What it does
/accounted:setup First run: connect (create the account if needed) and set up the company from the conversation
/accounted:start Connect, orient, and surface what needs attention
/accounted:bookkeep Clear unbooked bank transactions and receipts (daily)
/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

The skills are deliberately thin: the deep procedural and regulatory content (month-end checklist, VAT rutor, payroll rules, bokslut law) lives server-side in Accounted and is loaded at need via accounted_load_skill, so it is always in sync with the product and tailored to your company. accounted_list_skills shows everything available.

How writes work

Every write tool in Accounted stages a pending operation with a preview instead of booking directly. Claude shows you the preview; only accounted_approve_pending_operation, after your explicit approval, books it. Period locks and Swedish accounting law (immutable vouchers, balanced entries, sequential voucher numbers) are enforced by the product itself.

Self-hosted

Point the MCP connection at your own instance instead: remove the bundled server and add your own with claude mcp add --transport http accounted "https://your-host/api/extensions/ext/mcp-server/mcp?tool_namespace=accounted", or use the accounted-mcp stdio bridge with your existing Accounted API key.

Disclaimer

This plugin is not legal, tax, or audit advice. Output is underlag for you and your accountant. Nothing is filed or sent anywhere automatically.

License

The plugin in this directory is MIT licensed; see LICENSE. The Accounted platform it connects to is a separate work, licensed AGPL-3.0 under the LICENSE at the repository root.