Skip to main content
Glama
bhonick

lunchmoney-readonly-mcp

by bhonick

面向 ChatGPT 的只读 Lunch Money MCP

一个为 Lunch Money 设计的单用户远程 MCP 服务器,专为 ChatGPT Business 打造,部署在 Cloudflare Workers 上。它仅使用 Google OAuth 来识别已列入白名单的用户;Lunch Money API 令牌作为 Cloudflare 加密密钥存储,绝不会返回给 ChatGPT 或 MCP 工具。

该项目最初基于 bm1549/lunchmoney-mcp-cloudflare 项目,并已改编为面向 Cloudflare Workers 和 ChatGPT 的只读 Lunch Money MCP 模板。 上游实现以 vendor-lunchmoney-mcp 的形式保留,包含其原始 MIT 许可证和署名。感谢 Brian Marks 的原始工作。

此仓库是一个模板。它不包含任何在线部署 URL、API 令牌、Google OAuth 密钥、电子邮件地址或 Cloudflare 资源 ID。

只读特性

服务器通过两个独立层强制实施只读访问:

  1. createReadonlyServer() 公开了 25 个检索工具的正向白名单。创建、更新、删除、上传、同步、刷新、拆分、分组和预算变更工具均未注册。

  2. runWithReadonlyConfig() 在发起网络请求前拒绝任何对 Lunch Money API 的非 GET 请求。

所有公开的工具均声明 readOnlyHint: truedestructiveHint: falseopenWorldHint: false

需求

  • 一个 Lunch Money API 令牌

  • 一个已启用 Workers 和 KV 的 Cloudflare 账户

  • 一个 Google Cloud OAuth 2.0 Web 客户端

  • 一个 ChatGPT Business 工作空间,你需为该空间的管理员或所有者

部署你自己的副本

  1. 克隆此仓库,然后安装并验证依赖项:

    npm install
    npm run typecheck
    npm run lint
    npm run test:readonly
  2. wrangler.jsonc 中,选择一个唯一的 Worker name 并创建 OAuth KV 命名空间:

    npx wrangler kv namespace create OAUTH_KV

    将返回的命名空间 ID 复制到 wrangler.jsonc 中的 REPLACE_WITH_OAUTH_KV_NAMESPACE_ID 处。

  3. 首次部署以获取你的 Worker URL:

    npx wrangler deploy
  4. 创建一个 Google OAuth 2.0 Web 应用程序。添加此重定向 URI,并将主机替换为你的 Worker URL:

    https://YOUR-WORKER.YOUR-SUBDOMAIN.workers.dev/authorize/callback
  5. 以交互方式设置生产密钥。切勿将其值放入 Git:

    npx wrangler secret put GOOGLE_CLIENT_ID
    npx wrangler secret put GOOGLE_CLIENT_SECRET
    npx wrangler secret put ALLOWED_EMAILS
    npx wrangler secret put STATE_SECRET
    npx wrangler secret put LUNCHMONEY_API_TOKEN

    ALLOWED_EMAILS 是一个逗号分隔的 Google 账户列表,这些账户被允许连接。当此列表为空时,服务器将默认拒绝连接。

  6. 再次部署。你的 MCP 端点为:

    https://YOUR-WORKER.YOUR-SUBDOMAIN.workers.dev/mcp

连接 ChatGPT Business

  1. 在 ChatGPT 中,打开 Workspace settings → Apps → Create

  2. 输入上述 /mcp 端点,然后选择 OAuth 身份验证。

  3. 查看自定义应用警告,创建草稿,然后发布并启用它。

  4. 每个用户从 Settings → Plugins → [你的应用] → Connect 连接,并使用已列入白名单的 Google 账户登录。

  5. 启动一个新的 Work 对话,选择该应用,并在要求其检查 Lunch Money 数据前验证工具列表。

在公开仓库前

运行:

npm run check:public-release

同时检查 git status,确认 .dev.vars 未被跟踪,并确保 Worker 名称、端点、Cloudflare 资源 ID 以及示例文档不会泄露你的个人部署信息。

如果你正在整理现有部署,请将其配置保留在仓库外部,或放在已加入 gitignore 的 wrangler.personal.jsonc 文件中。使用 npx wrangler deploy --config wrangler.personal.jsonc 部署该私有配置。

验证

重点安全测试验证精确的白名单、其注解、代表性变更工具的缺失,以及对外发 POST 请求的拒绝:

npm run test:readonly

详见 THIRD_PARTY_NOTICES.md 了解归属信息。

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • Read-only MCP server for ClassQuill, a tutoring-business-management platform.

  • Hosted remote MCP server for YNAB on Cloudflare Workers with OAuth

  • Multi-tenant FastMCP server for Charles Schwab brokerage data, monetized via DPYC Tollbooth

View all MCP Connectors

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/bhonick/lunchmoney-readonly-mcp'

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