Myfinance Mcp

io.github.alex-odoo由 GitHub 帳號 alex-odoo 發布v0.18.0更新於 Oct 24, 2026

Personal finance by conversation: expenses, receipts, statement import, budgets, net worth.

已驗證Streamable HTTP可網頁執行效率與工作流金融資料與分析

概覽

AI 產生的概覽

遠端個人財務 MCP 伺服器:透過對話記錄支出、收入與轉帳,匯入銀行對帳單,並取得預算、趨勢與淨資產統計。

可以做什麼
  • 記錄支出、收入、轉帳與退款,並修改或刪除既有交易
  • 批次匯入 CSV、PDF 或截圖形式的銀行對帳單,自動去重並核對總額
  • 依類別、商家、月份或週檢視支出,支援與前一週期比較及趨勢分析
  • 管理帳戶、餘額、淨資產、預算與週期性付款,並在對話中顯示儀表板
  • 匯出個人資料 JSON 與交易 CSV,或以唯讀方式同步 ZenMoney 及封測中的開放銀行資料
  • 修改基礎貨幣、時區與電子郵件摘要設定,或徹底刪除全部資料
適用情境
適合想用對話而非試算表或記帳軟體來記錄個人或小型生意開銷的人,包括匯入既有銀行匯出檔、查看預算執行情況與淨資產。也適合希望由 AI 用戶端依已存紀錄計算合計、而非自行估算的使用者。
執行需求
透過 Streamable HTTP 連線至 myfinance-mcp.com 的遠端端點,無需本機安裝。必須以 OAuth 登入,可使用 Google 或電子郵件一次性驗證碼,首次登入即建立帳戶。ZenMoney 同步需要使用者自己的 API 權杖;開放銀行僅限受邀帳戶。
安裝前請注意
伺服器會保存你的財務紀錄,應將該帳戶視為敏感帳戶。多個工具會寫入或刪除資料,包括 delete_transactions 與 delete_all_data,後者會永久刪除個人資料及全部資料。銀行與 ZenMoney 連線為唯讀,但需要提供者權杖。收據照片由你的 AI 用戶端解析,不會傳送到伺服器。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Myfinance Mcp,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/io.github.alex-odoo%2Fmyfinance-mcp/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "mcpServers": {
    "myfinance": {
      "type": "http",
      "url": "https://myfinance-mcp.com/mcp"
    }
  }
}

README

MyFinance MCP

A remote MCP server for personal finance, an AI expense tracker for Claude, ChatGPT, Codex and Cursor - log expenses by talking, snap receipt photos, import statements from any bank (CSV, PDF or a screenshot), and get budgets, trends and net worth computed for you, in 150+ currencies.

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: Customize → Connectors → + Add → Add custom connector → name it and paste the URL → Continue → Authentication: Sign in now (if the form asks for an OAuth client, keep Use Claude's published identity (Recommended); Register automatically works too) → Add. Never choose "Use your own OAuth client" or fill a Client ID/Secret - that breaks sign-in. Works on every Claude plan (Free allows one custom connector).

On ChatGPT (web): turn on Developer mode (Settings → Apps → Advanced settings), then Plugins → + → Add custom MCP server (older menu: Settings → Apps → Create) → paste the URL → OAuth, client ID/secret empty → create and sign in → type @ in a chat to use it. Per OpenAI's help center, custom MCP servers with write actions (needed for logging) are available on Business, Enterprise and Edu; Pro gets read-only access; the help center does not list Developer mode for Free, Go or Plus, so if you do not see it, use Codex.

On Cursor: Add to Cursor, or add "myfinance": { "url": "https://myfinance-mcp.com/mcp" } under mcpServers in ~/.cursor/mcp.json, then click Connect next to MyFinance in Customize.

On Codex (included in every ChatGPT plan, Free too):

bash
codex mcp add myfinance --url https://myfinance-mcp.com/mcpcodex mcp login myfinance

On first connect you sign in with Google or with a one-time code sent to your email; that first sign-in creates your MyFinance account. Your data persists across reconnections. Step-by-step guides per client: myfinance-mcp.com/install.

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.
  • 150+ currencies. Transactions keep their original currency (ECB and National Bank of Ukraine rates, plus a public daily snapshot for every other ISO currency from March 2024); the FX rate to your base currency is frozen at transaction date, so history never rewrites itself.
  • Any bank, by statement. Drop a CSV/PDF export or a screenshot from your banking app; hundreds of rows import in one call with idempotent deduplication, hand-logged twins merged, totals reconciled. ZenMoney users can sync read-only instead.
  • 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 and client ID metadata documents (Claude's published identity); sign-in with Google or an emailed one-time code (each optional)
  • Prisma + PostgreSQL - all money as numeric, all stats as SQL aggregates
  • Docker - single container deployment

MCP Tools

ToolDescription
log_expenseRecord one purchase, bill or receipt (negative amount = refund)
log_incomeRecord income: salary, invoice, refund, interest
log_transferMove money between accounts, cross-currency supported; never counts as spending
import_transactionsBulk statement import (up to 500 rows/call): dedup by bank reference or derived key, twin merge, reconciliation check; names the recurring payments it finds
get_summaryPeriod totals by category, merchant, month or week; expense or income breakdown, comparison with the period before, any report currency; trend_months for month-by-month trends
get_transactionsList and filter transactions, paged (total, has_more, offset)
update_transactionFix any field of an existing transaction, including its type or account; category fixes are remembered per merchant
delete_transactionsDelete one or many transactions by id in one call
get_accountsAll accounts with balances and net worth, converted to base currency
manage_accountAccounts: create, update, set_balance (anchor the real balance at a date), merge (fold one into another, de-duplicating), delete
set_budgetMonthly cap per category or overall; a log or import that crosses it says so
get_budget_progressLive budget progress with days left; renders as a dashboard
get_recurringSubscriptions, rent and bills: saved ones and the ones found in the records, monthly and yearly total, what is coming up in 30 days
set_recurringSave, change or remove a recurring payment; auto_log writes it on its date for people who log by hand
get_settingsSigned-in account, base currency, timezone, email summary choice, server version
update_settingsChange base currency, timezone or the email summary
export_dataprofile: everything but the transactions as JSON; transactions: CSV, 2000 rows per page
zenmoneyZenMoney (international and .ru backends auto-detected): paste_token, sync, status, per-account toggle, disconnect; read-only, incremental, keeps manual edits
bankClosed beta, invited accounts only. Open banking (Enable Banking, EU/UK): list_banks, start consent, sync, status, per-account toggle, disconnect; healthy connections also auto-sync daily
delete_all_dataPermanently delete the user profile and ALL data (GDPR erasure)

Tools merged in 0.18.0 (ping, get_trends, delete_transaction, create_account, update_account, delete_account, merge_accounts, log_balance, export_profile, export_transactions, connect_zenmoney, sync_zenmoney, connect_bank, sync_bank) are no longer listed but still answer under their old names, so a client that kept an older tool list keeps working.

MCP Apps

Three tools return an interactive dashboard (ui://myfinancemcp/dashboard) rendered directly in the chat on clients that support MCP Apps: budget rings (get_budget_progress), category summaries and monthly trends (get_summary) and the accounts/net-worth panel (get_accounts). 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); usage events keep tool names, timings, error classes and coded argument values, keyed to the account and deleted with it.
  • OAuth 2.1 with PKCE, rotating refresh tokens (offline_access advertised), rate-limited sign-in.
  • All 20 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: ZenMoney via the user's own API token, and, in the closed beta, open banking consent via Enable Banking (the bank authenticates the user; we never see credentials). 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 (Supabase, eu-central-1), TLS to the database with a pinned CA. Every query is scoped to your account by the server; the database's own API is closed to everyone (row-level security, deny-all).
  • 401 automated end-to-end checks (full OAuth flow for public and confidential clients incl. browser binding and audience checks, every tool, import dedup semantics, GDPR deletion) run as a hard deploy gate; CI runs lint and typecheck on every push.

See SECURITY.md for the disclosure policy.

Self-hosting

MIT-licensed; runs anywhere Bun and Postgres run.

The landing page in site/ is set in Switzer, whose free licence does not allow redistribution, so the font file is not in this repository. For the same look, download it from Fontshare and put Switzer-Variable.woff2 in site/fonts/; without it the pages fall back to the system font. The MCP server does not need it.

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, then close the tables to Supabase's public Data API (Prisma creates tables with row-level security OFF, and Supabase exposes every public table to anyone holding the project's anon key). Re-run the second command after every db push that adds a table:

bash
bun installbunx prisma db pushpsql "$DATABASE_URL" -f prisma/rls.sql

Database TLS: Supabase hosts are verified against Supabase's root CA automatically; for any other host, put sslmode= in DATABASE_URL.

2. Environment variables

VariableDescription
PORTServer port (default 8788)
BASE_URLPublic URL of the server (OAuth issuer)
LEGACY_BASE_URLS(optional) Older public origins served by the same container, comma-separated; tokens bound to them stay valid and their /authorize redirects to BASE_URL
DATABASE_URLPostgres connection string
MYFINANCE_MCP_EMAILBootstrap user email
MYFINANCE_MCP_PASSWORD_HASHBootstrap 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: email sign-in codes and signup notifications
NOTIFY_EMAIL(optional) Where signup notifications go
FROM_EMAIL(optional) Verified sender; with RESEND_API_KEY it turns on email sign-in
TELEGRAM_BOT_TOKEN(optional) Telegram bot for new-signup notifications
TELEGRAM_CHAT_ID(optional) Chat that receives them
TOKEN_ENC_KEYRequired for ZenMoney and bank connections: 64 hex chars (openssl rand -hex 32), encrypts stored provider tokens
EB_APP_ID(optional) Enable Banking application id; bank connections stay off until it and the key are set
EB_PRIVATE_KEY_B64(optional) Base64 of the Enable Banking application's private key PEM
EB_API_ORIGIN(optional) Enable Banking API origin, default https://api.enablebanking.com
REFRESH_REUSE_GRACE_MS(optional) How long a rotated refresh token keeps working, default 30000 (parallel refreshes)
AUTO_SYNC_INTERVAL_MS(optional) Bank auto-sync tick, default hourly (syncs connections >20h stale); 0 disables

Generate the password hash:

bash
bun -e "console.log(await Bun.password.hash(process.argv[1]))" 'your-password'

3. Run

bash
cp .env.example app.env   # docker compose reads app.env, not .envdocker 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

bash
bun installcp .env.example .env   # fill in your valuesbun run dev            # hot reload on :8788bun run e2e            # end-to-end suite (spawns its own server; WRITES to the DATABASE_URL database)bun run lint

The e2e suite (359 checks) covers the full OAuth flow (discovery, dynamic registration, client ID metadata documents, PKCE, refresh rotation, revocation; public and confidential clients), every tool, statement-import dedup semantics, ZenMoney sync against a stubbed Diff API, and GDPR deletion.

API Endpoints

EndpointDescription
POST /mcpMCP endpoint (Bearer auth)
GET /healthHealth check
GET /.well-known/oauth-authorization-serverOAuth metadata discovery
GET /.well-known/oauth-protected-resource/mcpProtected resource metadata
POST /registerDynamic client registration (clients may instead use an https client_id: a client ID metadata document)
GET /authorizeOAuth authorization (sign-in page)
POST /tokenToken exchange
GET /auth/googleGoogle sign-in start (when configured)
POST /login/email, POST /login/email/verifyEmail sign-in code: send, verify (when configured)
GET /connect/enablebanking/callback, POST /connect/enablebanking/confirmBank consent return and the confirm step
GET /api/statsPublic aggregate counters (counts only, never amounts)

License

MIT - Rteam FZE LLC

來源:README.md,提交 4283315

工具

0
該伺服器需要登入,因此 SourceWeft 無法在沒有帳號的情況下讀取其工具,也未收錄。已連接帳號所能看到的內容可能因帳號及其權限而異。

版本歷史

3
  1. v0.18.0最新Oct 14, 2026
  2. v0.14.0Oct 1, 2026
  3. v0.12.0Sep 16, 2026

評分

已滿足適用檢查項的 85%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分