Skip to main content
Glama
rollecode

dough-mcp

by rollecode

Dough MCP server

Version Node TypeScript OAuth MCP

Read and write your Dough finances from Claude.ai and Claude Code. Covers every part of Dough: accounts, transactions, budget, bills, subscriptions, savings goals, debts, investments and income, all read and write. 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.

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.

How it fits together

dough (web app)  ──  /api/v1/*  (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 calls the Dough HTTP API 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.

Related MCP server: LunchMoney MCP Server

Tools

43 tools across every part of Dough. Read tools work with any key; write tools need a key minted with --scopes write and return 403 otherwise.

Readdough_summary, dough_accounts, dough_transactions, dough_budget, dough_net_worth, dough_bills, dough_subscriptions, dough_savings_goals, dough_debts, dough_investments, dough_income

Transactions — create, update and delete, including pending card holds and per-transaction budget exclusion

Budget — auto-assign preview and apply, assign a category, move money, snooze / unsnooze, set targets

Manage — create / update / delete for bills, subscriptions, savings goals, accounts, categories and income, plus update and reorder for debts and investments

Add to Claude.ai

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.

Claude Code

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 user

Or over stdio, with DOUGH_API_URL and DOUGH_API_KEY set in the environment.

Install

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.com

  • DOUGH_API_KEY — an API key minted in the Dough repo (see below)

Get an API key

In the Dough repo, on the host that owns the database:

npx tsx scripts/create-api-key.ts --name "dough-mcp" --scopes write

The key is printed once. Use --scopes read for a query-only key. See Dough's docs/public-api.md for details.

Available Tools

8 tools
dough_accountsB

All accounts with balances. Set include_closed to also return closed accounts.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_closedNoInclude closed accounts (default false)

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries full responsibility. It does not disclose whether the operation is read-only, requires authentication, or has side effects. The behavior is implied as a list, but not explicitly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is composed of two concise sentences. The first sentence provides the main purpose, and the second adds the parameter detail. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one optional parameter and no output schema, the description is adequate. It explains the result and the parameter, but could be more precise about what 'accounts with balances' means (e.g., fields returned, default filter).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter include_closed is described in the schema with equal clarity. The description adds minimal extra value ('also return closed accounts'), but since schema coverage is 100%, baseline is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it returns all accounts with balances, which distinguishes it from sibling tools like dough_bills or dough_transactions. However, it does not explicitly state the action (e.g., 'list'), but it is still clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides guidance for the include_closed parameter but does not specify when to use this tool versus alternatives like dough_summary. No contextual usage advice is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dough_billsB

Recurring bills with amount and due day of month.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It only states the data contained (amount, due day) but does not disclose whether the operation is read-only, requires authentication, or has side effects. This is insufficient for an agent to understand the tool's impact.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, highly concise, and front-loaded with the core concept. Every word is necessary and informative, achieving maximum efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters, no output schema, and no annotations, the description is moderately complete for a simple listing tool. It identifies the core subject and key fields, but lacks behavioral context (e.g., is it a list or a form?) and any usage instructions. Sibling tools provide some context but the description itself is minimal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters, and schema description coverage is 100%. The description adds no parameter info because none exist. With no parameters, a baseline of 4 is appropriate; the description is adequate for this case.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as related to recurring bills with amount and due day of month. It effectively distinguishes from siblings like dough_transactions (one-time) and dough_subscriptions (recurring payments with different semantics). However, it lacks a verb to specify the action (list, create, etc.), leaving some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives. While the description implies it's for viewing recurring bills, it does not mention when to prefer it over dough_subscriptions or dough_transactions. Missing context on prerequisites or use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dough_budgetB

The month's budget: income, total budgeted, Ready to Assign, age of money and every active category's budgeted / activity / available.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoMonth as YYYY-MM; defaults to the current month

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It only describes returned data, not behavioral traits like read-only nature, authentication needs, or side effects. For a tool returning sensitive budget data, this is insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the key information. While concise, it could be improved by starting with an action verb (e.g., 'Retrieve the month's budget...'). No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description lists included fields but lacks details on data structure (array vs object), pagination, or limits. For a tool likely returning nested category data, this is moderately complete but has gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear parameter description ('Month as YYYY-MM; defaults to the current month'). The description adds no additional meaning beyond what the schema provides, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the resource (budget for a month) and specific fields (income, total budgeted, Ready to Assign, age of money, etc.). It distinguishes from sibling tools like dough_transactions or dough_summary by specifying budget-specific data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for viewing monthly budget details but does not provide explicit guidance on when to use this tool versus alternatives like dough_summary or dough_accounts. No 'when not to use' or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dough_net_worthA

Current net worth by kind (checking, savings, investments, debts) plus the snapshot history.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses the data returned but does not state that the tool is read-only or any other behavioral traits. It could be more explicit about safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, front-loaded with key information, no superfluous words. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters and no output schema, the description sufficiently conveys the main value. It could mention that data is aggregated from accounts, but it's reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so baseline is 4. The description adds meaningful context about what the output contains (by kind and history), which is useful beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves current net worth broken down by kind (checking, savings, investments, debts) and also provides snapshot history, making it distinct from sibling tools like dough_accounts or dough_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for net worth queries but gives no explicit guidance on when to use it versus alternatives (e.g., dough_summary) or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dough_savings_goalsD

Active savings goals with target and derived saved amount.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoMonth as YYYY-MM; defaults to the current month

TDQS

D1.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It fails to state that the tool is read-only, whether it returns a list or a single item, or any side effects. The minimal info ('target and derived saved amount') does not cover key behaviors like authentication, pagination, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (one sentence), but it lacks essential information. Conciseness should not come at the expense of clarity; here, the tool is under-specified to the point of being unhelpful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of output schema and annotations, the description must provide more context. It fails to explain what the output format is, what 'derived saved amount' means, or any limitations. This is inadequate for an agent to correctly use the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the single parameter 'month' is well-documented in the schema itself (format, default). The description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is a noun phrase ('Active savings goals with target and derived saved amount') rather than a verb phrase stating the tool's action. It does not explicitly say what the tool does (e.g., list, retrieve, or fetch). This vagueness makes it hard for an AI agent to understand the tool's purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus its siblings (e.g., dough_accounts, dough_transactions). Agents cannot distinguish the context for using savings goals over other financial data tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dough_subscriptionsC

Subscriptions with amount and due day of month.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but only mentions the data fields. It does not disclose read-only nature, access requirements, or any side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short phrase, concise and front-loaded. While efficient, it could include more context without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and no parameters, the description should clarify the operation (e.g., list or retrieve). It is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist, so schema coverage is 100% trivially. Baseline 3 applies; description adds no extra meaning for parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses a noun phrase 'Subscriptions with amount and due day of month' rather than a verb, so it does not explicitly state the action (e.g., list, get). It is somewhat clearer than a tautology but lacks a specific verb-resource combination.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus siblings like dough_bills or dough_transactions. No alternatives or context provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dough_summaryA

Compact financial snapshot: total balance and this month's income, spending, budgeted and Ready to Assign.

ParametersJSON Schema
NameRequiredDescriptionDefault
monthNoMonth as YYYY-MM; defaults to the current month

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses output content but lacks details on scope (e.g., whether it aggregates all accounts), caching, or error behavior. It adequately indicates a read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no fluff. It effectively communicates the tool's purpose, though it could be slightly more structured (e.g., listing fields explicitly).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description lists key output items (total balance, income, spending, budgeted, RTA) but does not specify the structure (e.g., if it's a flat object or nested). It is adequate but not fully detailed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already describes the month parameter. The description adds minor context ('this month's') but no additional semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it provides a 'compact financial snapshot' with specific elements (total balance, income, spending, budgeted, Ready to Assign), distinguishing it from sibling tools that target individual areas like accounts, bills, or budget.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for a quick overview but does not explicitly mention when to use it versus alternatives like dough_accounts or dough_budget. No exclusions or prerequisites are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dough_transactionsC

Transactions newest first, with optional filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoSearch payee and memo
limitNoMax rows, 1-500 (default 50)
monthNoMonth as YYYY-MM; defaults to the current month
categoryNoOnly this category name
account_idNoOnly this account's transactions

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It mentions sort order ('newest first') but does not specify read-only nature, pagination, rate limits, or other key behaviors. It adds minimal context beyond what the parameter schema already implies.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the key information (sort order). It is efficient with no wasted words, though it could be slightly expanded for completeness without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters with full schema descriptions and no output schema, the description should provide more context about the return format or behavior. It only covers sort order and filter optionality, leaving the agent to infer other aspects like available fields or response structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description states 'optional filters' which is already clear from no required parameters in schema. It does not add new semantic meaning for any parameter beyond the schema's own descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool retrieves transactions, sorted newest first, with optional filters. While it lacks an explicit verb like 'list' or 'get', the phrase 'transactions newest first' implies a retrieval operation. The purpose is easily understood and distinguishes from sibling tools which cover other resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. Sibling tools like dough_accounts or dough_budget cover different resources, so usage is implied by domain, but no explicit when/when-not or alternatives are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 8 tool updatesv0.1.0
    • First observeddough_accounts
    • First observeddough_bills
    • First observeddough_budget
    • First observeddough_net_worth
    • First observeddough_savings_goals
    • First observeddough_subscriptions
    • First observeddough_summary
    • First observeddough_transactions

TDQS

B3.3/5.0
Disambiguation5/5

Each tool targets a distinct financial data domain (accounts, bills, budget, net worth, savings goals, subscriptions, transactions) with no overlapping purposes. Descriptions clearly differentiate them.

Naming Consistency5/5

All tools follow a consistent 'dough_' prefix with a plural noun representing the resource (e.g., dough_accounts, dough_bills). This pattern makes it predictable for an agent.

Tool Count5/5

With 8 tools covering core personal finance areas, the count feels well-scoped for a finance data provider. Each tool serves a distinct purpose without redundancy.

Completeness5/5

The tool set covers major financial categories: accounts, bills, budget, net worth, savings, subscriptions, and transactions. For a read-only data access server, it offers a comprehensive snapshot without obvious gaps.

Maintenance

ActivityActive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that provides access to personal financial data from Monarch Money, allowing users to retrieve account information, transactions, budgets, goals, and net worth through natural language queries.
    15
    -
  • A
    license
    B
    quality
    A
    maintenance
    An MCP server implementation that provides programmatic access to personal finance data through LunchMoney's API, enabling AI assistants to manage transactions, budgets, categories, and assets.
    59
    2,361
    98
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    MCP server for accessing and managing Banktivity personal finance data, enabling account, transaction, and budget operations through natural language.
    3
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Read-only MCP server for accessing Wallet by BudgetBakers financial data, allowing users to query accounts, transactions, categories, budgets, and more via natural language.
    10
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/rollecode/dough-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server