myfinance-mcp
Enables personal finance management through natural language: log expenses, snap receipt photos, and import bank statements. Computes budgets, trends, and net worth in any currency, with data persisted and accessible via MCP.
README
MyFinance MCP
A remote MCP server for personal finance - log expenses by talking, snap receipt photos, import whole bank statements, and get budgets, trends and net worth computed for you, in any currency.
Website: myfinance-mcp.com · Free while in beta · Built by Rteam
Quick Start
Already hosted and ready to use - just connect it to your MCP client:
https://myfinance-mcp.com/mcp
On Claude.ai: Customize → Connectors → + → Add custom connector → paste the URL → Connect. Leave the OAuth Client ID and Client Secret fields empty - filling them breaks sign-in.
On ChatGPT: Settings → Apps → Create app → paste the URL → choose OAuth → Create.
On first connect you sign in with Google or register with an email and password. Your data persists across reconnections.
Why
- No app, no forms, no spreadsheet. "Spent 24.50 eur on groceries at Lidl" is the whole workflow.
- Every number is computed in SQL. The server owns the data and the math; the AI reads the results, it never guesses arithmetic.
- Any currency. Transactions keep their original currency; the FX rate to your base currency is frozen at transaction date, so history never rewrites itself.
- Statements in one message. Drop a CSV/PDF export; hundreds of rows import in one call with idempotent deduplication, hand-logged twins merged, totals reconciled.
- Personal vs business. Entity tag on accounts and transactions, filterable everywhere, included in CSV export for your accountant.
- Dashboards in the chat. Budgets, trends, summaries and accounts render as interactive panels (MCP Apps) right in the conversation.
Tech Stack
- Bun - runtime and package manager
- Express - HTTP layer
- MCP SDK - Model Context Protocol over Streamable HTTP (stateless)
- OAuth 2.1 - PKCE + dynamic client registration, Google sign-in optional
- Prisma + PostgreSQL - all money as
numeric, all stats as SQL aggregates - Docker - single container deployment
MCP Tools
| Tool | Description |
|---|---|
log_expense |
Record one purchase, bill or receipt (negative amount = refund) |
log_income |
Record income: salary, invoice, refund, interest |
log_transfer |
Move money between accounts, cross-currency supported; never counts as spending |
log_balance |
Anchor an account's balance at a date; later flows compute from the snapshot |
import_transactions |
Bulk statement import (up to 500 rows/call): dedup by bank reference or derived key, twin merge, reconciliation check |
create_account |
Create a bank / card / cash / investment account with currency and personal/business entity |
update_account |
Rename an account or change its type, entity or main currency |
delete_account |
Delete one money account (with its transactions after explicit confirmation) |
merge_accounts |
Fold one account into another: move rows, de-duplicate both sides, rewrite transfers |
get_accounts |
All accounts with balances and net worth, converted to base currency |
get_summary |
Period totals by category, merchant or month; expense or income breakdown, category drill-down and exclusions |
get_transactions |
List and filter raw transactions |
get_trends |
Month-over-month spending trends and deltas |
set_budget |
Monthly cap per category or overall |
get_budget_progress |
Live budget progress with days left; renders as a dashboard |
update_transaction |
Fix any field of an existing transaction, including its type (e.g. turn a cash withdrawal into a transfer); category fixes are remembered per merchant for future syncs |
delete_transaction |
Delete one transaction by id |
delete_transactions |
Bulk delete by ids |
get_settings |
Base currency and timezone |
update_settings |
Change base currency or timezone |
export_transactions |
Full CSV export (includes the entity column for accountant handoff) |
connect_bank |
Link a real bank via open banking (Enable Banking, EU/UK): list banks, start consent, status, per-account sync toggle, disconnect |
sync_bank |
Pull booked transactions and balances from the connected bank; incremental, transfer pairing, dedup-safe. Healthy connections also auto-sync server-side roughly daily |
connect_zenmoney |
Link a ZenMoney account (international and .ru backends auto-detected) for read-only sync |
sync_zenmoney |
Pull ZenMoney accounts and transactions; incremental, dedup-safe, keeps your manual edits |
delete_all_data |
Permanently delete the user profile and ALL data (GDPR erasure) |
ping |
Health and auth check |
MCP Apps
Four tools return an interactive dashboard (ui://myfinancemcp/dashboard) rendered directly in the chat on clients that support MCP Apps: budget rings, monthly trends, category summaries and the accounts/net-worth panel. Light and dark theme aware.
Security & Privacy
- Receipt photos are parsed by YOUR AI client; images never reach this server.
- Amounts, merchants and notes are never written to server logs (blind logs); telemetry stores event types and ids only.
- OAuth 2.1 with PKCE, encrypted tokens, rate-limited sign-in.
- All 27 tools carry MCP annotations (read-only and destructive ops flagged, connector tools marked open-world), so clients can gate confirmations correctly.
- Bank access is strictly read-only: open banking consent via Enable Banking (the bank authenticates the user; we never see credentials), ZenMoney via the user's own API token. Session ids and tokens are stored AES-256-GCM encrypted.
- CSV export and instant full deletion are tools, not support tickets.
- Hosted instance: EU data residency, row-level security keyed to your account.
- 154 automated end-to-end checks (full OAuth flow, every tool, import dedup semantics, GDPR deletion) run in CI and as a hard deploy gate.
See SECURITY.md for the disclosure policy.
Self-hosting
MIT-licensed; runs anywhere Bun and Postgres run.
1. Postgres
Any PostgreSQL 15+ works. Supabase free tier is a good fit: create a project and copy the session pooler connection string (IPv4).
Apply the schema:
bun install
bunx prisma db push
2. Environment variables
| Variable | Description |
|---|---|
PORT |
Server port (default 8788) |
BASE_URL |
Public URL of the server (OAuth issuer) |
DATABASE_URL |
Postgres connection string |
MYFINANCE_MCP_EMAIL |
Bootstrap user email |
MYFINANCE_MCP_PASSWORD_HASH |
Bootstrap user password hash (see below) |
GOOGLE_CLIENT_ID |
(optional) Google OAuth client ID for "Continue with Google" |
GOOGLE_CLIENT_SECRET |
(optional) Google OAuth client secret |
RESEND_API_KEY |
(optional) Resend key for new-signup email notifications |
NOTIFY_EMAIL |
(optional) Where signup notifications go |
FROM_EMAIL |
(optional) Verified sender for notifications |
AUTO_SYNC_INTERVAL_MS |
(optional) Bank auto-sync tick, default hourly (syncs connections >20h stale); 0 disables |
Generate the password hash:
bun -e "console.log(await Bun.password.hash(process.argv[1]))" 'your-password'
3. Run
docker compose up -d # uses the included Dockerfile, port 8788
Put nginx (or any TLS-terminating proxy) in front and point BASE_URL at your domain. The static landing in site/ is optional - serve it from the same origin if you want one.
Development
bun install
cp .env.example .env # fill in your values
bun run dev # hot reload on :8788
bun run e2e # self-contained end-to-end suite (spawns its own server)
bun run lint
The e2e suite (154 checks) covers the full OAuth flow (discovery, dynamic registration, PKCE, refresh rotation), every tool, statement-import dedup semantics, ZenMoney sync against a stubbed Diff API, and GDPR deletion.
API Endpoints
| Endpoint | Description |
|---|---|
POST /mcp |
MCP endpoint (Bearer auth) |
GET /health |
Health check |
GET /.well-known/oauth-authorization-server |
OAuth metadata discovery |
GET /.well-known/oauth-protected-resource/mcp |
Protected resource metadata |
POST /register |
Dynamic client registration |
GET /authorize |
OAuth authorization (sign-in page) |
POST /token |
Token exchange |
GET /auth/google |
Google sign-in start (when configured) |
GET /api/stats |
Public aggregate counters (counts only, never amounts) |
License
MIT - Rteam FZE LLC
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。