Read and write your Dough finances from Claude.ai and Claude Code. It offers every tool the Dough instance it points at has, because it takes them from that instance. It runs over stdio for Claude Code, or behind an OAuth 2.1 login so it can be added to Claude.ai as a custom connector.
Since Dough 4.4.0 every instance is an MCP server itself at /mcp, and a client that can connect to a remote MCP server with OAuth can use that directly. dough-mcp is for the rest: a local process over stdio, or a separately hosted endpoint.
Dough is a standalone self-hosted budget app with its own ledger (bank-synced or manual). It is not a YNAB frontend: Dough's data is corrected through these tools or Dough's own UI, never in YNAB.
Warning
Using this server with a paid AI service costs money. Tool definitions and results are billed as input tokens, and an agent can call tools repeatedly on its own. You are responsible for every charge, so set spending limits with your provider. The author accepts no liability for any costs. See DISCLAIMER.md.
dough (web app) ── /mcp (the instance's own tools, API-key auth)
▲ HTTPS + Bearer key
dough-mcp ── stdio (Claude Code) ──or── HTTP + OAuth 2.1 (Claude.ai connector)
The server never sees your database. It passes each tool call to the instance's /mcp with an API key you supply through the environment, so the key stays on your machine and nothing about your ledger is exposed on the internet. Needs Dough 4.4.0 or later.
Whatever the instance offers, which is one tool for every part of its API: accounts, transactions and splits, budget and targets, categories, bills, subscriptions, income, savings goals, debts, investments, payees, budget links, settings, Dougie and more. An instance that gains a tool gains it here without a new dough-mcp. Read tools work with any key; write tools need a key minted with --scopes write and return 403 otherwise.
Settings, Connectors, Add custom connector, and paste the MCP URL of your deployment, for example:
https://dough-mcp.example.com/mcp
Leave client ID and secret blank. The OAuth 2.1 login in front (auth-server.cjs) handles registration and sign-in, and issues the token.
Over HTTP, with the fixed token the login also accepts:
claude mcp add --transport http dough https://dough-mcp.example.com/mcp \
--header "Authorization: Bearer $(cat ~/.config/dough-mcp/token)" --scope userOr over stdio, with DOUGH_API_URL and DOUGH_API_KEY set in the environment.
git clone git@github.com:rollecode/dough-mcp.git
cd dough-mcp
npm install && npm run build # dist/ is committed; rebuild only when changing src/Configure via environment:
DOUGH_API_URL— base URL of the Dough instance, e.g.https://dough.example.comDOUGH_API_KEY— an API key minted in the Dough repo (see below)
In the Dough repo, on the host that owns the database:
npx tsx scripts/create-api-key.ts --name "dough-mcp" --scopes writeThe key is printed once. Use --scopes read for a query-only key. See Dough's docs/public-api.md for details.
