YNAB API服务器

一个基于Ruby/Rails的MCP服务器,将完整的YNAB API作为工具暴露给Claude和ChatGPT使用。

  • by xkel
  • Ruby
  • 本地部署
  • 更新于
在 GitHub 查看 xkel/ynab-mcp-server

使用说明

YNAB MCP服务器

一个Ruby/RailsMCP(模型上下文协议)服务器,它公开了完整的YNABneneneba API作为Claude和ChatGPT的工具。

先决条件

设置

  1. 安装依赖项:
bundle install
  1. 配置您的YNAB令牌(和身份验证令牌):
cp .env.example .env
# Edit .env and add your YNAB Personal Access Token

集 MCP_AUTH_TOKEN 对于随机秘密,要求在每个密钥上都有一个承载令牌 请求 /mcp (建议用于localhost以外的任何地方):

openssl rand -hex 32   # paste the result as MCP_AUTH_TOKEN in .env

如果 MCP_AUTH_TOKEN 如果留空,则端点为 未认证的 --很好 地方发展 localhost,但切勿公开未经身份验证的URL 公开,因为服务器持有你的YNAB令牌,任何到达它的人都可以 读写你的预算。

  1. 启动服务器:
bin/rails server -p 3000

MCP端点位于 POST http://localhost:3000/mcp.

连接到ChatGPT

地方发展(与ngrok)

  1. 启动Rails服务器: bin/rails server -p 3000
  2. 在另一个终端中: ngrok http 3000
  3. 从ngrok复制HTTPS URL(例如。 https://abc123.ngrok.app)
  4. 在ChatGPT中:
    • 打开 设置 >启用 开发者模式
    • 去 连接器 标签
    • 点击 添加连接器 并输入您的ngrok URL+ /mcp
    • 例子: https://abc123.ngrok.app/mcp
  5. 开始新的聊天,单击 添加源,然后选择YNAB连接器

生产部署

部署到任何Ruby友好的主机(Fly.io、Render、Heroku等):

# Example with Fly.io
fly launch
fly secrets set YNAB_API_TOKEN=your_token_here
fly secrets set MCP_AUTH_TOKEN=$(openssl rand -hex 32)
fly deploy

然后添加生产URL(https://<your-app>/mcp)作为连接器。保持 MCP_AUTH_TOKEN value handy——客户端必须将其作为承载令牌发送。

连接到克劳德

此服务器正在讲话 可流式传输的HTTP 在 POST /mcp 并返回明文 application/json 这正是Claude的MCP客户所期望的。这 端点由静态承载令牌保护(MCP_AUTH_TOKEN),那么你怎么 连接取决于您使用的Claude客户端——从三条路径中选择一条 在......下面

注: 静态承载令牌不是OAuth。这 claude.ai网络连接器 UI不提供自定义标题字段,因此它只能连接到 使用OAuth或无身份验证的服务器。从以下位置使用此服务器的承载令牌 克劳德,用 API 或 克劳德桌面版 下面的路径。(参见 OAuth 如果你特别需要web UI。)

路径1-Claude API(MCP连接器)

通过API的MCP连接器直接传递URL和承载令牌:

{
  "model": "claude-opus-4-8",
  "mcp_servers": [
    {
      "type": "url",
      "url": "https://your-app.fly.dev/mcp",
      "name": "ynab",
      "authorization_token": "YOUR_MCP_AUTH_TOKEN"
    }
  ],
  "messages": [{ "role": "user", "content": "Show me my budgets" }]
}

请求需要 anthropic-beta: mcp-client-2025-04-04 头球这 authorization_token 以以下方式发送到服务器 Authorization: Bearer ....

路径2——克劳德桌面(通过 mcp-remote)

Claude Desktop连接到本地(stdio)服务器,因此桥接到此远程服务器 服务器与 mcp-remote,通过 承载令牌作为标头。编辑 claude_desktop_config.json (设置→ 开发者→ 编辑配置):

{
  "mcpServers": {
    "ynab": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://your-app.fly.dev/mcp",
        "--header",
        "Authorization: Bearer YOUR_MCP_AUTH_TOKEN"
      ]
    }
  }
}

重新启动克劳德桌面;YNAB工具出现在工具菜单中。用于本地 将URL指向您的ngrok隧道(https://abc123.ngrok.app/mcp).

路径3-claude.ai web(连接器UI)

Pro/Max/Team/Enterprise计划可以在以下位置添加远程服务器 设置→ 连接器→ 添加自定义连接器 使用URL https://your-app.fly.dev/mcp.

web UI具有 无承载令牌字段,因此此路径仅在以下情况下有效 没有服务器也可以访问。两种选择:

  • 跑 没有 MCP_AUTH_TOKEN 在难以猜测的URL后面(较弱;URL 成为唯一的秘密),或
  • 添加 OAuth 到服务器(见下文),以便UI可以正确地进行身份验证。

OAuth

web连接器UI通过OAuth 2.0对远程服务器进行身份验证(它执行 授权服务器元数据发现和标准认证代码流)。这 潜在的 mcp gem不附带OAuth层,因此支持此路径意味着 在Rails应用程序中添加一个。此处尚未实现——如果满足以下条件,请使用路径1或2 您今天需要经过身份验证的访问权限。

可用工具(18)

预算

  • list_budgets -列出你所有的YNAB预算(先用这个!)
  • get_budget -获取特定预算的摘要信息

账户

  • list_计数 -列出所有有余额的账户
  • 获取计数 -获取单个帐户的详细信息

分类

  • 列表_类别 -列出按组分组的所有类别
  • get_category -获取单个类别的详细信息
  • update_month_category -为特定月份的类别分配资金

交易

  • list_交易 -使用可选过滤器(帐户、类别、月份、类型、日期)列出交易
  • get_transaction -获取单笔交易的完整详细信息
  • create_transaction -创建新交易
  • update_transaction -更新/批准现有交易
  • 删除交易 -删除交易

收款人和月份

  • 列表_员工 -列出所有收款人
  • list_budget_months -列出预算月份和收入/支出摘要
  • get_budget_month -获取特定月份的详细明细

定期交易

  • list_scheduled_transactions -列出经常性交易
  • create_scheduled_transaction -创建新的定期交易
  • update_scheduled_transaction -更新定期交易

示例提示

连接到ChatGPT后,请尝试:

  • “显示我的预算”
  • “我的支票账户余额是多少?”
  • “这个月我在杂货上花了多少钱?”
  • “在我的Chase卡上向Target添加45.99美元的交易”
  • “显示所有未批准的交易”
  • “这个月我还有多少钱来做预算?”
  • “我即将收到的经常性账单是什么?”

备注

  • 所有货币金额都使用美元(例如45.99美元),而不是YNAB百万单位
  • 您的YNAB令牌存储为环境变量,从不发送到AI客户端
  • 集 MCP_AUTH_TOKEN 要求在 /mcp;客户端将其作为 Authorization: Bearer <token>
  • YNAB API速率限制:每小时200个请求