Skip to main content
Glama
robshox

Lunch Money MCP Server

by robshox

Lunch Money MCP 服务器

TypeScript Node.js 许可证

一个 模型上下文协议 (MCP) 服务器,使 AI 智能体能够与您的 Lunch Money 个人财务数据进行交互。

功能

此 MCP 服务器提供了 15 个用于管理财务数据的工具:

用户与账户

  • get_user — 获取您的个人资料和账户信息

类别

  • get_categories — 列出所有类别(扁平或嵌套)

  • create_category — 创建新的自定义类别

  • update_category — 修改现有类别

交易

  • get_transactions — 使用过滤器(日期范围、类别、状态等)查询交易

  • create_transaction — 添加新交易(单笔或批量最多 500 笔)

  • update_transaction — 更新交易或将其拆分为多个条目

资产与账户

  • get_assets — 列出手动管理的资产

  • create_asset — 添加新的手动资产

  • get_plaid_accounts — 列出已连接 Plaid 的银行账户

  • trigger_plaid_fetch — 触发 Plaid 账户同步

预算与规划

  • get_budgets — 查看任何日期范围内的预算和支出

  • upsert_budget — 设置或更新预算金额

  • get_recurring_items — 查看定期支出和收入

标签

  • get_tags — 列出所有交易标签

Related MCP server: YNAB Assistant

先决条件

  • Node.js 18 或更高版本

  • 拥有 API 访问权限的 Lunch Money 账户

  • 开发者页面 获取的 Lunch Money API 密钥

安装

选项 1:克隆并构建(本地 stdio 传输)

适用于 Cursor、Claude Desktop 或其他基于 stdio 的 MCP 客户端的本地使用:

# Clone the repository
git clone https://github.com/yourusername/lunchmoney-mcp.git
cd lunchmoney-mcp

# Install dependencies
npm install

# Build the TypeScript
npm run build

选项 2:Cloudflare Workers(远程 HTTP 传输)

部署为可通过 HTTP 访问的远程 MCP 服务器:

# Clone the repository
git clone https://github.com/yourusername/lunchmoney-mcp.git
cd lunchmoney-mcp

# Install dependencies
npm install

# Set your API key as a secret
npx wrangler secret put LUNCH_MONEY_API_KEY
# Enter your Lunch Money API key when prompted

# Deploy to Cloudflare Workers
npm run deploy

选项 3:使用 npx(仅限本地)

您可以直接运行 MCP 服务器而无需克隆:

npx -y lunchmoney-mcp

注意:您仍然需要设置 LUNCH_MONEY_API_KEY 环境变量。

配置

获取您的 API 密钥

  1. 登录 Lunch Money

  2. 前往 设置 → 开发者

  3. 生成一个新的 API 密钥

  4. 复制密钥(请妥善保管!)

Cursor IDE

添加到您的 Cursor MCP 配置 (~/.cursor/mcp.json) 中:

{
  "mcpServers": {
    "lunchmoney": {
      "command": "node",
      "args": ["/path/to/lunchmoney-mcp/dist/index.js"],
      "env": {
        "LUNCH_MONEY_API_KEY": "your_api_key_here"
      }
    }
  }
}

或者使用 npx:

{
  "mcpServers": {
    "lunchmoney": {
      "command": "npx",
      "args": ["-y", "lunchmoney-mcp"],
      "env": {
        "LUNCH_MONEY_API_KEY": "your_api_key_here"
      }
    }
  }
}

Claude Desktop

添加到您的 Claude Desktop 配置(macOS 上为 ~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "lunchmoney": {
      "command": "node",
      "args": ["/path/to/lunchmoney-mcp/dist/index.js"],
      "env": {
        "LUNCH_MONEY_API_KEY": "your_api_key_here"
      }
    }
  }
}

其他 MCP 客户端

任何支持 stdio 传输的 MCP 客户端都可以使用此服务器。设置 LUNCH_MONEY_API_KEY 环境变量并运行:

node /path/to/lunchmoney-mcp/dist/index.js

通过 Cloudflare Workers 进行远程 MCP(自带 API 密钥)

Cloudflare Workers 部署被设计为一个公共 MCP 服务器,每个用户使用自己的 API 密钥。服务器从不存储任何 API 密钥。

工作原理:

  1. 将服务器部署到 Cloudflare Workers(或使用共享实例)

  2. 每个用户使用自己的 Lunch Money API 密钥进行连接

  3. API 密钥随每个请求在 X-LunchMoney-API-Key 请求头中发送

使用 mcp-remote 代理连接:

{
  "mcpServers": {
    "lunchmoney": {
      "command": "npx",
      "args": ["mcp-remote", "https://lunchmoney-mcp.your-subdomain.workers.dev/mcp"],
      "env": {
        "MCP_HEADERS": "X-LunchMoney-API-Key: your_api_key_here"
      }
    }
  }
}

注意: mcp-remote 代理必须支持自定义请求头。某些 MCP 客户端可能尚不支持此功能。

⚠️ 请像对待凭据文件一样对待您的 mcp.json 文件。 它现在包含您的 Lunch Money API 密钥。切勿将其提交到 Git 仓库(包括 dotfiles 仓库)。如果它位于其中,请将其添加到 .gitignore。任何拥有此文件读取权限的人都可以读取和修改您的 Lunch Money 数据。

安全性: 这是最安全的模型,因为:

  • 服务器从不存储任何 API 密钥

  • 每个用户仅访问自己的数据

  • API 密钥按请求传递,不存储在服务器上

  • 公共 worker 强制执行基于 IP 的速率限制,且从不记录请求体或请求头

Cloudflare Workers 部署(公共服务器)

这将创建一个公共 MCP 服务器,任何人都可以使用自己的 API 密钥使用它。服务器不存储任何凭据。

先决条件

  • Cloudflare 账户(免费层级即可)

  • 已安装 Wrangler CLI

部署

  1. 安装依赖项:

 npm install
  1. 部署到 Cloudflare Workers:

 npm run deploy
  1. 您的公共 MCP 服务器现已上线! URL 将显示在输出中:

 https://lunchmoney-mcp.your-account.workers.dev/mcp

可选: 您可以设置一个默认的 API 密钥用于测试:

npx wrangler secret put LUNCH_MONEY_API_KEY

用户如何连接

用户使用他们自己的 Lunch Money API 密钥连接到您的公共服务器:

{
  "mcpServers": {
    "lunchmoney": {
      "command": "npx",
      "args": ["mcp-remote", "https://lunchmoney-mcp.your-account.workers.dev/mcp"],
      "env": {
        "MCP_HEADERS": "X-LunchMoney-API-Key: their_api_key_here"
      }
    }
  }
}

使用 Wrangler 进行本地开发

# Run locally with hot reload
npm run dev:worker

安全模型

  • 服务器从不存储 API 密钥 — 密钥通过请求头按请求传递

  • 用户仅访问自己的数据 — 每个请求使用用户自己的密钥

  • 公开可访问 — 任何人都可以使用该服务器,但他们需要自己的 Lunch Money 账户

这类似于公共 API 网关的工作方式 — 基础设施是共享的,但凭据是针对每个用户的。

使用示例

配置完成后,您可以向 AI 助手询问如下问题:

  • “显示我本月按类别划分的支出”

  • “我上周最大的一笔支出是什么?”

  • “对三月份所有未分类的交易进行分类”

  • “创建一个名为 '自由职业收入' 的新类别”

  • “我在第一季度在杂货上花了多少钱?”

  • “列出我所有的定期订阅”

开发

本地 stdio 模式(适用于 Cursor、Claude Desktop)

# Install dependencies
npm install

# Run in development mode with hot reload
npm run dev

# Build for production
npm run build

# Type check without emitting
npm run typecheck

# Test with MCP Inspector
npm run inspect

Cloudflare Workers 模式(适用于远程 HTTP 访问)

# Build the Worker
npm run build

# Run locally with Wrangler
npm run dev:worker

# Deploy to production
npm run deploy

项目结构

src/
├── index.ts           # MCP server entry point (stdio mode)
├── worker.ts          # Cloudflare Workers entry point (HTTP mode)
├── client.ts          # Lunch Money API client
├── types.ts           # TypeScript type definitions
├── tool-utils.ts      # Shared tool utilities
└── tools/             # Individual tool implementations
    ├── user.ts
    ├── categories.ts
    ├── transactions.ts
    ├── assets.ts
    ├── plaid.ts
    ├── budgets.ts
    ├── recurring.ts
    └── tags.ts

部署模式

模式

传输

用例

入口点

本地

stdio

Cursor, Claude Desktop

src/index.ts

Cloudflare Workers

流式 HTTP

远程访问, Web 客户端

src/worker.ts

两种模式共享相同的工具实现和 API 客户端。

安全性

API 密钥保护

  • 切勿提交您的 API 密钥。 因此 .env 文件已包含在 .gitignore 中。

  • 将您的密钥存储在环境变量或安全的 MCP 配置文件中。

  • 如果您的密钥泄露,请立即在 Lunch Money 开发者页面 撤销它并生成一个新的。

数据隐私

  • 此服务器充当您的 AI 助手和 Lunch Money 之间的代理。

  • 您的财务数据根据 Lunch Money 的隐私政策 进行处理。

  • 错误消息经过脱敏处理,以防止意外的信息泄露。

权限

您提供的 API 密钥决定了 MCP 服务器可以执行的操作。Lunch Money API 密钥可以:

  • 读取您的所有财务数据

  • 创建、更新和删除交易

  • 修改类别和预算

  • 触发 Plaid 同步

API 参考

此 MCP 服务器使用 Lunch Money API v1

速率限制

Lunch Money API 有速率限制。MCP 服务器将透传来自 API 的任何速率限制错误。如果您遇到速率限制,请等待几分钟后再试。

错误处理

服务器处理 Lunch Money API 错误并将其作为 MCP 工具错误返回。注意事项:

  • Lunch Money 有时会将逻辑错误作为 HTTP 200 响应返回 — 这些会被标准化为正确的错误

  • 服务器会对错误消息进行脱敏处理,以删除潜在的敏感信息

  • 完整的错误详情会记录到 stderr 以供调试

故障排除

“Missing LUNCH_MONEY_API_KEY” 错误

未设置 LUNCH_MONEY_API_KEY 环境变量。检查您的 MCP 配置并确保密钥已正确配置。

“Unauthorized” 错误

您的 API 密钥可能无效或已撤销。请在 https://my.lunchmoney.app/developers 验证您的密钥。

交易未显示

如果您使用已连接 Plaid 的账户,您可能需要触发同步:

  • 使用 trigger_plaid_fetch 工具排队后台同步

  • 请注意,这仅会将作业加入队列 — 交易可能需要几分钟才会显示

贡献

欢迎贡献!请随时提交 Pull Request。

  1. Fork 本仓库

  2. 创建您的功能分支 (git checkout -b feature/amazing-feature)

  3. 提交您的更改 (git commit -m 'feat: add amazing feature')

  4. 推送到分支 (git push origin feature/amazing-feature)

  5. 打开 Pull Request

许可证

本项目采用 ISC 许可证 — 有关详细信息,请参阅 LICENSE 文件。

致谢

支持

  • 如果此 MCP 服务器有问题,请提交 GitHub Issue

  • 有关 Lunch Money API 的问题,请参阅 Lunch Money API 文档

  • 有关 MCP 协议的问题,请参阅 MCP 文档


免责声明: 这是一个非官方的社区项目。它不隶属于 Lunch Money,也不受其认可。

Available Tools

15 tools
create_assetC

Create a manually managed asset in Lunch Money.

ParametersJSON Schema
NameRequiredDescriptionDefault
type_nameYes
subtype_nameNo
nameYes
display_nameNo
balanceYes
balance_as_ofNo
currencyNo
institution_nameNo
closed_onNo
exclude_transactionsNo

TDQS

C2.2/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 for behavioral disclosure. The single sentence only states the action, omitting any details about side effects, required permissions, rate limits, or response behavior. This is critically insufficient for a creation tool.

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

Conciseness3/5

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

The description is a single, grammatically correct sentence. However, it is too brief to be useful; conciseness should not come at the cost of essential information. It could be expanded while remaining concise.

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 tool's complexity (10 parameters, no output schema, and no annotations), the description is extremely incomplete. It fails to explain the concept of a 'manually managed asset', how it fits into the Lunch Money system, or what the return value would be. The agent would struggle to use this tool correctly.

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

Parameters1/5

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

The input schema has 10 parameters with 0% schema description coverage, meaning the names and types are the only clues. The description adds no explanation of parameter meanings, constraints, or relationships. For example, 'balance' is required but its format or default currency is not clarified.

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 the verb ('create') and the resource ('manually managed asset'), and it distinguishes from sibling tools like 'create_category' which deal with different entities. However, it could be more specific about what constitutes a 'manually managed asset' in Lunch Money.

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 alternatives, nor does it mention any prerequisites or scenarios where it should not be used. This lack of context forces the agent to infer usage from the name alone.

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

create_categoryC

Create a new Lunch Money category.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
descriptionNo
is_incomeNo
exclude_from_budgetNo
exclude_from_totalsNo
archivedNo
group_idNo

TDQS

C2.6/5.0
Behavior2/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 only states 'Create a new...', which implies a write operation but does not mention side effects, authentication needs, or whether the operation is idempotent. For a mutation tool, this is minimal transparency.

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 immediately states the purpose. It is front-loaded and efficient, with no extraneous words. However, it is too brief and sacrifices informativeness for brevity.

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 the tool's complexity (7 parameters, no output schema, no annotations), the description is incomplete. It does not explain how parameters like 'group_id' or 'archived' affect the behavior, nor does it describe the return value or success indicators. More context is needed for effective use.

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

Parameters1/5

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

The schema has 7 parameters with 0% description coverage, meaning the description adds no explanation for any parameter. The description does not compensate for the lack of schema descriptions. It does not clarify the meaning of 'is_income', 'exclude_from_budget', etc., which are non-obvious. The baseline is low due to low coverage.

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 the action ('Create') and the resource ('a new Lunch Money category'), specifying the verb and object. It distinguishes from sibling tools like 'update_category' and 'get_categories' by implying the creation operation. However, it lacks additional context such as the domain or scope.

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 alternatives. There is no mention of prerequisites, such as requiring an existing group_id, or when to use 'update_category' instead. The name and siblings imply a create operation, but no explicit context is given.

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

create_transactionC

Create one or more Lunch Money transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
transactionsYes
apply_rulesNo
skip_duplicatesNo
check_for_recurringNo
debit_as_negativeNo
skip_balance_updateNo

TDQS

C2.5/5.0
Behavior1/5

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

The description fails to disclose any behavioral traits (e.g., idempotency, duplicate handling, balance update effects) beyond what is minimally implied by 'Create'. No annotations are present to compensate.

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 extremely concise (one sentence) and front-loaded with the purpose. However, it lacks any structure or additional sections, which is acceptable given the single sentence.

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 complexity of the input schema (many parameters, nested objects) and the absence of annotations and output schema, the description is severely incomplete. It does not explain return values, error cases, or any behavioral details.

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

Parameters1/5

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

Schema description coverage is 0%. The description adds no meaning to the many parameters, such as apply_rules, debit_as_negative, or skip_duplicates, leaving their semantics entirely to 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 the verb 'Create' and the resource 'one or more Lunch Money transactions', which distinguishes it from sibling tools like update_transaction and get_transactions.

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 is provided on when to use this tool versus alternatives such as update_transaction, nor are there any prerequisites or constraints mentioned.

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

get_assetsA
Read-only

List manually managed Lunch Money assets.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, so the description's minimal addition of 'manually managed' provides some extra context about the type of assets, but it doesn't contradict annotations or add significant behavioral traits.

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 short sentence with no waste; perfectly front-loaded and to the point.

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

Completeness5/5

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

For a simple listing tool with no parameters and a readOnly annotation, the description provides adequate context, including the asset type (manually managed). No output schema exists, but the tool's behavior is straightforward.

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?

Input schema has no parameters and is fully covered (100%). Description adds value by specifying 'manually managed', which clarifies the scope 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?

Description uses specific verb 'List' and clearly identifies the resource as 'manually managed Lunch Money assets', distinguishing it from siblings like get_plaid_accounts and create_asset.

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?

No explicit guidance on when to use or when not to use this tool versus alternatives. However, the purpose is clear enough that an agent can infer it's for listing only manual assets, not Plaid accounts.

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

get_budgetsA
Read-only

Get Lunch Money budgets and spending for a date range.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateYes
end_dateYes
currencyNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds that it returns both budgets and spending, providing context beyond the annotation. No contradictions.

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, front-loaded sentence with no wasted words. It is concise but could benefit from slightly more detail without sacrificing brevity.

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?

The description covers purpose and basic output, but lacks parameter explanations and output schema details. For a 3-parameter tool with no output schema, it provides adequate but not comprehensive context.

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

Parameters2/5

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

Schema coverage is 0%: the description does not explain any parameter. While 'date range' hints at start_date/end_date, it omits details on format, optional currency, and usage.

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 action 'Get' and the resource 'Lunch Money budgets and spending', specifying a date range. It effectively distinguishes from sibling tools like upsert_budget, which is for modifications.

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 use when retrieving budget data for a date range but provides no explicit guidance on when to avoid this tool or mention alternatives like upsert_budget.

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

get_categoriesA
Read-only

List Lunch Money categories in flattened or nested form.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, so description's value is limited. It adds the format choice but lacks details on response structure, pagination, or ordering.

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 verb and resource, no unnecessary words. Highly efficient.

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 simple read-only list tool with one optional enum parameter, the description covers the core function and parameter. Lacks mention of output structure, but adequate given simplicity and lack of output schema.

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 single parameter 'format' has an enum, and the description explains its two values ('flattened or nested'), adding meaning beyond the schema (which has 0% description coverage).

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 verb 'List' and the resource 'Lunch Money categories', and distinguishes its output format options ('flattened or nested') from sibling tools like create_category or update_category.

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 similar list tools (e.g., get_assets, get_tags). No mention of use cases, limitations, or exclusions.

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

get_plaid_accountsA
Read-only

List Lunch Money Plaid-connected accounts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior2/5

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

Annotations already indicate readOnlyHint=true, and the description adds no further behavioral details (e.g., data freshness, pagination, or authentication requirements). It simply repeats the read-only nature implied by the annotation.

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, clear sentence with no wasted words. It is concise but could benefit from a bit more detail without becoming verbose.

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 parameterless list tool, the description is adequate but lacks context about potential prerequisites (e.g., Plaid link requirement) or relationship to sibling tools like trigger_plaid_fetch. No output schema exists, but the simplicity of the tool reduces the need for extensive documentation.

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 no parameters in the input schema, so the description does not need to elaborate on parameter meaning. The baseline is 4 for zero-parameter tools.

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 uses the specific verb 'List' and identifies the resource as 'Lunch Money Plaid-connected accounts,' clearly distinguishing it from sibling tools like get_assets or get_categories.

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 does not provide explicit usage guidance, such as when to use this tool versus alternatives like trigger_plaid_fetch. The purpose is clear, but no context on prerequisites or limitations is given.

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

get_recurring_itemsA
Read-only

Get Lunch Money recurring items for the current or specified month range.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNo
end_dateNo
debit_as_negativeNo

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already mark this as readOnlyHint=true, and the description aligns with a read operation. Beyond that, no additional behavioral traits (e.g., rate limits, data freshness) are disclosed. The description adds minimal extra context.

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 of 12 words, front-loaded with the key action and resource. Every word earns its place with no redundancy.

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 the tool has 3 parameters and no output schema, the description covers the core purpose but omits details on the debit_as_negative parameter and response format. It is adequate for low complexity but not fully complete.

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

Parameters2/5

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

Schema description coverage is 0% with 3 parameters. The description hints at start_date/end_date via 'month range' but does not explain debit_as_negative or provide format details. It fails to compensate for low schema coverage.

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 verb 'Get' and resource 'Lunch Money recurring items' with scope 'current or specified month range', distinguishing it clearly from sibling tools like get_transactions and get_budgets.

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 month ranges but provides no explicit guidance on when to use this tool versus alternatives such as get_transactions or get_budgets. No exclusions or comparison are given.

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

get_tagsA
Read-only

List all Lunch Money tags.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, confirming it's a read operation. The description adds the scope 'all', which is useful context beyond annotations.

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?

One sentence of four words, perfectly front-loaded and without any wasted 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?

While the description is adequate for a simple list tool with no parameters, it lacks information about the return format or fields of the tags. Without an output schema, the description should provide more detail.

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?

No parameters exist in the schema (100% coverage), so baseline is 4. The description does not need to add parameter information.

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 uses a specific verb 'List' and resource 'tags', clearly stating it returns all tags. This distinguishes it from sibling tools that deal with 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 Guidelines3/5

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

No explicit guidance on when to use versus alternatives. Since there are no sibling tag tools, usage is implied, but no exclusions or when-not-to-use are provided.

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

get_transactionsC
Read-only

Get Lunch Money transactions with optional filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idNo
recurring_idNo
plaid_account_idNo
category_idNo
asset_idNo
is_groupNo
statusNo
start_dateNo
end_dateNo
debit_as_negativeNo
pendingNo
offsetNo
limitNo

TDQS

C2.4/5.0
Behavior2/5

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

While annotations indicate readOnlyHint=true (safe read), the description does not add any behavioral details beyond the obvious. It omits information about pagination, data format, or potential limits.

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

Conciseness3/5

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

The description is one sentence and concise, but it is too minimal for the complexity of 13 parameters. It is front-loaded but lacks useful structure or breakdown.

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 the tool has 13 optional parameters and no output schema, the description does not provide enough context about typical usage, required constraints (e.g., date range), or how filtering works. The agent might miss important behaviors like pagination defaults.

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

Parameters1/5

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

Schema description coverage is 0%, and the description only says 'optional filters' without explaining any of the 13 parameters. The agent receives no additional meaning over parameter names, some of which (e.g., debit_as_negative, is_group) are not self-explanatory.

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 the verb 'Get' and the resource 'Lunch Money transactions', and mentions optional filters. It is unambiguous and distinguishes from sibling tools like create_transaction or update_transaction by its name and verb.

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 is provided on when to use this tool vs. alternatives (e.g., create_transaction for adding, update_transaction for modifying). The agent must infer from context or tool names.

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

get_userA
Read-only

Get information about the Lunch Money user connected to the configured API key.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint true. The description confirms it's a read operation without adding behavioral details beyond that. It does not specify what specific information is returned 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.

Conciseness5/5

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

Single sentence that is clear and front-loaded. No unnecessary words or repetition.

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?

The description lacks detail about the return structure. With no output schema, the description should elaborate on what 'information' is returned. It is minimally complete but not comprehensive.

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 coverage is 100%. The description does not need to add parameter semantics. Baseline score of 4 applies.

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 retrieves information about the Lunch Money user. The verb 'Get' and resource 'information about the Lunch Money user' are specific, and no sibling tool overlaps in purpose.

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?

No explicit guidance on when or when not to use this tool. Since there are no similar siblings, the usage context is implied, but the description does not provide any prerequisites or context for invocation.

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

trigger_plaid_fetchC

Trigger a Lunch Money fetch for eligible Plaid accounts. This queues a background fetch job.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNo
end_dateNo
plaid_account_idNo

TDQS

C2.4/5.0
Behavior2/5

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

No annotations provided, so description carries the burden. It notes the job is queued (async), but does not disclose safety, auth requirements, rate limits, or what happens if a fetch is already in progress.

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

Conciseness3/5

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

Two sentences are concise, but the description is too brief for a tool with 3 parameters and no output schema. It could be structured better with a brief parameter explanation.

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 the complexity (3 params, no output schema, no annotations), the description lacks details on return value, error handling, or behavior when fetch is already queued. It is incomplete for safe invocation.

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

Parameters1/5

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

Schema has 3 optional parameters with 0% description coverage. The description does not explain any parameter, leaving the agent to guess their purpose (e.g., date range or account filter).

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?

Description clearly states the action (trigger fetch) and target (eligible Plaid accounts). It mentions queuing a background job, which adds context. However, it does not define 'eligible', which could confuse the agent.

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 alternatives. There is no mention of prerequisites (e.g., account must be linked) 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.

update_categoryC

Update an existing Lunch Money category.

ParametersJSON Schema
NameRequiredDescriptionDefault
category_idYes
nameNo
descriptionNo
is_incomeNo
exclude_from_budgetNo
exclude_from_totalsNo
archivedNo
group_idNo

TDQS

C2.4/5.0
Behavior2/5

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

No annotations provided, so the description carries full burden. It only says 'update' without disclosing return behavior, idempotency, or authentication requirements.

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

Conciseness3/5

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

The description is a single concise sentence, but it is too brief and lacks any structuring (e.g., sections, bullet points).

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 8 parameters and no output schema, the description is severely incomplete. It fails to explain what the tool returns or any side effects.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no meaning to any of the 8 parameters. Parameters are completely undocumented.

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 the verb 'update' and the resource 'category', distinguishing it from create_category and get_categories. However, it lacks specifics on which fields can be updated, but the purpose is unambiguous.

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 alternatives like create_category. No conditions 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.

update_transactionC

Update a Lunch Money transaction or split it into multiple child transactions.

ParametersJSON Schema
NameRequiredDescriptionDefault
transaction_idYes
transactionNo
splitNo
debit_as_negativeNo
skip_balance_updateNo

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 does not disclose whether updates are partial or full, what happens to existing data, balance implications, or the behavior of splitting. This is a significant gap for a mutation tool.

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

Conciseness3/5

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

The description is a single sentence, which is concise but lacks structure to cover both operations (update and split). It is adequately short but sacrifices necessary detail.

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 complex input schema and no output schema, the description is severely incomplete. It does not explain return values, error handling, or behavioral details essential for effective use.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no explanation of parameters. The complex nested objects 'transaction' and 'split' are completely undocumented, leaving the agent without guidance on how to structure the input.

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 action ('Update') and the resource ('a Lunch Money transaction'), and includes the special capability ('split it into multiple child transactions'). This differentiates it from siblings like create_transaction and get_transactions effectively.

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 is provided on when to use this tool versus alternatives, nor when splitting is appropriate. There are no prerequisites or contextual conditions mentioned, leaving the agent to infer usage.

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

upsert_budgetC

Create or update a Lunch Money budget entry for a category and month.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateYes
category_idYes
amountYes
currencyNo

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description carries the full burden. It only states 'Create or update', implying a write operation, but provides no details on side effects (e.g., overwriting existing budgets), return values, or required permissions. Behavioral traits are severely under-disclosed.

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 immediately conveys the core purpose. It is front-loaded with the action and resource. However, it lacks any structure (e.g., sections) that could improve scannability for an AI agent.

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 output schema, the description should at least hint at return format or behavior. It mentions 'budget entry for a category and month' but doesn't confirm that start_date should be the first day of the month or that category_id comes from get_categories. The presence of sibling tools like get_budgets for reading is not referenced. Completeness is low.

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

Parameters1/5

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

Schema description coverage is 0%, yet the description adds no parameter information. It fails to explain what start_date, category_id, amount, or currency represent or their constraints (e.g., start_date should be first of month). The description adds zero value beyond the raw 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 verb 'Create or update' and the resource 'Lunch Money budget entry', and specifies the context 'for a category and month'. This distinguishes it from sibling tools like create_category or get_budgets, which involve different resources or actions.

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 is provided on when to use this tool versus alternatives or when not to use it. For example, it doesn't clarify that the upsert replaces existing budgets for the same category and month, or that get_budgets should be used for reading. The description lacks any comparative context.

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.

  1. 15 tool updatesv1.0.0
    • First observedcreate_asset
    • First observedcreate_category
    • First observedcreate_transaction
    • First observedget_assets
    • First observedget_budgets
    • First observedget_categories
    • First observedget_plaid_accounts
    • First observedget_recurring_items
    • First observedget_tags
    • First observedget_transactions
    • First observedget_user
    • First observedtrigger_plaid_fetch
    • First observedupdate_category
    • First observedupdate_transaction
    • First observedupsert_budget

TDQS

B3.2/5.0

Scored across 15 tools

Disambiguation5/5

Each tool targets a distinct resource or action, with clear separation between asset, category, transaction, budget, account, recurring item, tag, and user operations. No overlapping functionality.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (e.g., create_asset, get_transactions, update_category), using the same set of verbs (create, get, update, upsert, trigger) throughout.

Tool Count5/5

With 15 tools, the server covers the core aspects of personal finance management without being overloaded or underdeveloped. Each tool has a clear purpose.

Completeness2/5

The server provides create, read, and update operations for several resources, but lacks delete operations for all resources and missing update for assets and recurring items. Tags only have a get operation, leaving significant gaps in the lifecycle.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with YNAB budgets through natural language. Supports managing accounts, categories, transactions, and budget months with 21 tools for comprehensive budget operations.
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to interact with the Pocketsmith personal finance API to manage accounts, budgets, and transactions through natural language. It supports comprehensive financial tasks including spending analysis, category management, and tracking recurring bills.
    23
    3
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables managing personal finances through the Lunch Money API, including transactions, categories, budgets, and accounts via natural language commands.
    14
    10 npm
    3
    MIT