myfinance-mcp について
myfinance-mcpは、会話を通じて支出、予算、純資産を管理する個人向けのリモートMCPサーバーです。銀行明細を取り込み、多通貨に対応し、金額はサーバー側でSQL計算します。
主な機能
- 01会話で収入と支出を記録
- 02CSV、PDF、画像の明細を取り込み
- 03予算と定期支払いを管理
- 04口座残高と純資産を表示
- 05150種類以上の通貨に対応
活用シーン
- 01会話で日々の購入を記録
- 02銀行取引をまとめてインポート
- 03予算の進捗や支出傾向を確認
- 04残高と純資産を集計
MCP 対応
Claude、ChatGPT、Codex、Cursorなどのクライアントが接続するリモートMCPサーバーで、記録、取り込み、検索、管理のツールを提供します。MCP Apps対応クライアントではインタラクティブなパネルも表示します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://myfinance-mcp.com/mcpclaude mcp add --transport http alex-odoo-myfinance https://myfinance-mcp.com/mcp{"mcpServers":{"alex-odoo-myfinance":{"type":"http","url":"https://myfinance-mcp.com/mcp"}}}Cursor で開く{"servers":{"alex-odoo-myfinance":{"type":"http","url":"https://myfinance-mcp.com/mcp"}}}VS Code で開く{"mcpServers":{"alex-odoo-myfinance":{"type":"http","url":"https://myfinance-mcp.com/mcp"}}}{"mcpServers":{"alex-odoo-myfinance":{"serverUrl":"https://myfinance-mcp.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
MyFinance MCP
個人向けのリモート MCP サーバーで、Claude、ChatGPT、Codex、Cursor 用の AI 経費トラッカーです。話しかけて支出を記録したり、レシートの写真を撮ったり、あらゆる銀行の明細(CSV、PDF、スクリーンショット)をインポートしたりできます。予算、傾向、純資産は自動で計算され、150 以上の通貨に対応しています。
ウェブサイト: myfinance-mcp.com · ベータ期間中は無料 · Rteam が開発
クイックスタート
すでにホストされており、すぐに使えます。MCP クライアントに接続するだけです。
https://myfinance-mcp.com/mcp
Claude の場合: Customize → Connectors → + Add → Add custom connector → 名前を付けて URL を貼り付け → Continue → Authentication:Sign in now(フォームで OAuth クライアントを求められた場合は、Use Claude's published identity (Recommended) を選択してください。Register automatically でも動作します)→ Add。「Use your own OAuth client」は選択せず、Client ID/Secret も入力しないでください。サインインできなくなります。Claude のすべてのプランで使えます(Free ではカスタムコネクターを 1 つ利用できます)。
ChatGPT(ウェブ)の場合: Developer mode を有効にします(Settings → Apps → Advanced settings)。次に Plugins → + → Add custom MCP server(以前のメニューでは Settings → Apps → Create)→ URL を貼り付け → OAuth を選択し、client ID/secret は空欄のままにする → 作成してサインイン → チャットで @ を入力して使用します。OpenAI のヘルプセンターによると、書き込み操作(記録に必要)に対応するカスタム MCP サーバーは Business、Enterprise、Edu で利用でき、Pro では読み取り専用で利用できます。ヘルプセンターには Free、Go、Plus の Developer mode は記載されていないため、表示されない場合は Codex をお使いください。
Cursor の場合: Cursor に追加するか、~/.cursor/mcp.json の mcpServers の下に "myfinance": { "url": "https://myfinance-mcp.com/mcp" } を追加し、Customize で MyFinance の横にある Connect をクリックします。
Codex の場合(無料プランを含む、すべての ChatGPT プランで利用可能です):
codex mcp add myfinance --url https://myfinance-mcp.com/mcp
codex mcp login myfinance
初回接続時に、Google でサインインするか、メールに届くワンタイムコードを使ってサインインします。この初回サインイン時に MyFinance アカウントが作成されます。データは再接続後も保持されます。クライアントごとの手順ガイドはこちらです:myfinance-mcp.com/install。
特長
- アプリもフォームもスプレッドシートも不要です。「Lidl で食料品に 24.50 ユーロ使った」と伝えるだけで、ワークフローは完了です。
- すべての数値は SQL で計算されます。 データと計算処理はサーバーが管理し、AI は計算結果を読み取ります。計算を推測することはありません。
- 150 以上の通貨に対応しています。 取引は元の通貨で記録されます(ECB とウクライナ国立銀行の為替レートに加え、2024 年 3 月以降はその他すべての ISO 通貨について公開されている日次スナップショットを使用します)。基準通貨への為替レートは取引日に固定されるため、過去の記録が書き換わることはありません。
- 明細を使えば、あらゆる銀行に対応できます。 CSV/PDF のエクスポートファイルや、銀行アプリのスクリーンショットを取り込めます。数百行のデータを 1 回の呼び出しでインポートし、冪等性のある重複排除、手動記録との重複データの統合、合計額の照合を行います。ZenMoney ユーザーは読み取り専用で同期することもできます。
- 個人用と事業用を区別できます。 口座と取引にエンティティタグを付け、あらゆる場所で絞り込めます。会計士向けの CSV エクスポートにも含まれます。
- チャット内でダッシュボードを表示できます。 予算、傾向、概要、口座を、会話内にインタラクティブなパネル(MCP Apps)として表示します。
技術スタック
- Bun - ランタイムおよびパッケージマネージャー
- Express - HTTP レイヤー
- MCP SDK - Streamable HTTP を介した Model Context Protocol(ステートレス)
- OAuth 2.1 - PKCE、動的クライアント登録、クライアント ID メタデータドキュメント(Claude's published identity)。Google またはメールで届くワンタイムコードによるサインイン(どちらも任意)
- Prisma + PostgreSQL - すべての金額に
numericを使用し、すべての統計を SQL 集計で算出 - Docker - 単一コンテナでのデプロイ
MCP ツール
| ツール | 説明 |
|---|---|
log_expense | 購入、請求、領収書を1件記録します(負の金額は払い戻しです) |
log_income | 収入を記録します:給与、請求書、払い戻し、利息 |
log_transfer | 口座間で資金を移動します。異なる通貨にも対応し、支出としては決して計上されません |
import_transactions | 明細を一括インポートします(1回あたり最大500行):銀行照会番号または生成したキーで重複を排除し、重複データを統合して照合を確認します。検出した定期支払いの名称も表示します |
get_summary | 期間ごとのカテゴリ別、加盟店別、月別、週別の合計を取得します。支出または収入の内訳、前期間との比較、任意のレポート通貨に対応します。trend_monthsで月ごとの推移を取得できます |
get_transactions | 取引を一覧表示して絞り込みます。ページ分割に対応します(合計、has_more、offset) |
update_transaction | 種類や口座を含め、既存の取引の任意の項目を修正します。カテゴリの修正は加盟店ごとに記憶されます |
delete_transactions | 1回の呼び出しで、IDを指定して1件または複数の取引を削除します |
get_accounts | 基準通貨に換算した、残高と純資産を含むすべての口座 |
manage_account | 口座を管理します:作成、更新、set_balance(日付時点の実際の残高を設定)、統合(片方にまとめて重複を排除)、削除 |
set_budget | カテゴリ別または全体の月次上限を設定します。上限を超える記録またはインポートには、その旨が表示されます |
get_budget_progress | 日数の残りを含む、リアルタイムの予算進捗を取得し、ダッシュボードとして表示します |
get_recurring | サブスクリプション、家賃、請求を取得します。保存済みのものと記録から検出したもの、月間および年間の合計、今後30日以内の予定を表示します |
set_recurring | 定期支払いを保存、変更、削除します。手動で記録するユーザー向けに、auto_logは支払日に記録します |
get_settings | ログイン中のアカウント、基準通貨、タイムゾーン、メール要約の設定、サーバーのバージョンを取得します |
update_settings | 基準通貨、タイムゾーン、メール要約を変更します |
export_data | profile:取引以外のすべてをJSONでエクスポートします。transactions:1ページあたり2000行のCSVでエクスポートします |
zenmoney | ZenMoney(国際版と.ruバックエンドを自動検出):paste_token、sync、status、口座ごとの切り替え、接続解除に対応します。読み取り専用で差分同期し、手動編集を保持します |
bank | クローズドベータ版。招待されたアカウントのみ利用できます。 オープンバンキング(Enable Banking、EU/UK):list_banks、start consent、sync、status、口座ごとの切り替え、接続解除に対応します。正常な接続は毎日自動同期も行います |
delete_all_data | ユーザープロファイルとすべてのデータを完全に削除します(GDPRに基づく消去) |
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)は一覧に表示されなくなりましたが、旧名称でも引き続き応答するため、古いツール一覧を保持しているクライアントも引き続き動作します。
MCP アプリ
3つのツールは、MCP Appsに対応したクライアントのチャット内に直接表示される、インタラクティブなダッシュボード(ui://myfinancemcp/dashboard)を返します。予算リング(get_budget_progress)、カテゴリ別の概要と月次推移(get_summary)、口座/純資産パネル(get_accounts)を表示します。ライトテーマとダークテーマに対応しています。
セキュリティとプライバシー
- レシートの写真はお使いの AI クライアントが解析します。画像がこのサーバーに送信されることはありません。
- 金額、店舗名、メモがサーバーログに記録されることはありません(ブラインドログ)。利用イベントには、ツール名、所要時間、エラーの種類、コード化された引数の値がアカウントに紐付けて保持され、アカウントとともに削除されます。
- PKCE を使用した OAuth 2.1、更新トークンのローテーション(
offline_accessを提示)、サインインのレート制限。 - 20 個すべてのツールに MCP アノテーションを付与しています(読み取り専用操作と破壊的操作を明示し、コネクタツールをオープンワールドとして指定)。これにより、クライアントは適切に確認を求められます。
- 銀行へのアクセスは厳密に読み取り専用です。ZenMoney にはユーザー自身の API トークンを使用し、クローズドベータでは Enable Banking を介したオープンバンキングの同意を使用します(銀行がユーザーを認証するため、認証情報を当方が見ることはありません)。セッション ID とトークンは AES-256-GCM で暗号化して保存されます。
- CSV エクスポートと即時の完全削除は、サポートチケットではなくツールとして提供しています。
- ホスト環境:EU 内でデータを保管(Supabase、eu-central-1)し、CA をピン留めしてデータベースとの TLS 接続を行います。すべてのクエリはサーバーによってお客様のアカウントに制限されます。データベース独自の API は誰にも公開されていません(行レベルセキュリティ、すべて拒否)。
- 401 件の自動エンドツーエンドチェック(パブリッククライアントと機密クライアントの完全な OAuth フロー、ブラウザーのバインドとオーディエンスの確認を含む、すべてのツール、インポート時の重複排除の仕様、GDPR に基づく削除)は、必須のデプロイゲートとして実行されます。CI ではプッシュのたびに lint と型チェックを実行します。
開示ポリシーについては、SECURITY.md をご覧ください。
セルフホスティング
MIT ライセンスです。Bun と Postgres が動作する環境ならどこでも実行できます。
site/ のランディングページには Switzer を使用しています。このフォントの無料ライセンスでは再配布が許可されていないため、フォントファイルはこのリポジトリに含まれていません。同じ見た目にするには、Fontshare からダウンロードして Switzer-Variable.woff2 を site/fonts/ に配置してください。配置しない場合、ページではシステムフォントが使用されます。MCP サーバーには必要ありません。
1. Postgres
PostgreSQL 15 以降であれば、どれでも動作します。Supabase の無料プランが適しています。プロジェクトを作成し、session pooler の接続文字列(IPv4)をコピーしてください。
スキーマを適用した後、Supabase のパブリック Data API からテーブルにアクセスできないようにします(Prisma は行レベルセキュリティを OFF にしてテーブルを作成し、Supabase はプロジェクトの anon key を持つすべての人に、すべての public テーブルを公開します)。テーブルを追加する db push のたびに、2 つ目のコマンドを再実行してください。
bun install
bunx prisma db push
psql "$DATABASE_URL" -f prisma/rls.sql
データベースの TLS:Supabase のホストは Supabase のルート CA に対して自動的に検証されます。それ以外のホストでは、DATABASE_URL に sslmode= を設定してください。
2. 環境変数
| 変数 | 説明 |
|---|---|
PORT | サーバーのポート(デフォルトは8788) |
BASE_URL | サーバーの公開URL(OAuthの発行者) |
LEGACY_BASE_URLS | (任意) 同じコンテナーで提供される以前の公開オリジン(カンマ区切り)。それらに紐づくトークンは引き続き有効で、各オリジンの/authorizeはBASE_URLにリダイレクトされます |
DATABASE_URL | Postgresの接続文字列 |
MYFINANCE_MCP_EMAIL | 初期ユーザーのメールアドレス |
MYFINANCE_MCP_PASSWORD_HASH | 初期ユーザーのパスワードハッシュ(下記参照) |
GOOGLE_CLIENT_ID | (任意) 「Googleで続行」用のGoogle OAuthクライアントID |
GOOGLE_CLIENT_SECRET | (任意) Google OAuthクライアントシークレット |
RESEND_API_KEY | (任意) Resendキー:メールのサインインコードと登録通知に使用 |
NOTIFY_EMAIL | (任意) 登録通知の送信先 |
FROM_EMAIL | (任意) 認証済みの送信元アドレス。RESEND_API_KEYと併用すると、メールでのサインインが有効になります |
TELEGRAM_BOT_TOKEN | (任意) 新規登録通知用のTelegramボット |
TELEGRAM_CHAT_ID | (任意) 通知を受信するチャット |
TOKEN_ENC_KEY | ZenMoneyおよび銀行接続に必須:64桁の16進数(openssl rand -hex 32)。保存されたプロバイダートークンを暗号化します |
EB_APP_ID | (任意) Enable BankingのアプリケーションID。これとキーが設定されるまで、銀行接続は無効です |
EB_PRIVATE_KEY_B64 | (任意) Enable Bankingアプリケーションの秘密鍵PEMをBase64でエンコードしたもの |
EB_API_ORIGIN | (任意) Enable Banking APIのオリジン。デフォルトはhttps://api.enablebanking.com |
REFRESH_REUSE_GRACE_MS | (任意) ローテーション後のリフレッシュトークンが引き続き有効な期間。デフォルトは30000(並行リフレッシュ用) |
AUTO_SYNC_INTERVAL_MS | (任意) 銀行の自動同期間隔。デフォルトは毎時(20時間以上同期されていない接続を同期)。0で無効になります |
パスワードハッシュを生成します:
bun -e "console.log(await Bun.password.hash(process.argv[1]))" 'your-password'
3. 実行
cp .env.example app.env # docker compose reads app.env, not .env
docker compose up -d # uses the included Dockerfile, port 8788
nginx(またはTLS終端プロキシ)を前段に配置し、BASE_URLをドメインに設定します。site/の静的ランディングページは任意です。使用する場合は、同じオリジンから配信してください。
開発
bun install
cp .env.example .env # fill in your values
bun run dev # hot reload on :8788
bun run e2e # end-to-end suite (spawns its own server; WRITES to the DATABASE_URL database)
bun run lint
E2Eテストスイート(359件のチェック)では、OAuthフロー全体(ディスカバリー、動的登録、クライアントIDメタデータドキュメント、PKCE、リフレッシュトークンのローテーション、失効。パブリッククライアントと機密クライアント)、すべてのツール、明細インポートの重複排除の仕様、スタブ化されたDiff APIを使ったZenMoney同期、GDPRに基づく削除を網羅しています。
API エンドポイント
| エンドポイント | 説明 |
|---|---|
POST /mcp | MCP エンドポイント(Bearer 認証) |
GET /health | ヘルスチェック |
GET /.well-known/oauth-authorization-server | OAuth メタデータの検出 |
GET /.well-known/oauth-protected-resource/mcp | 保護されたリソースのメタデータ |
POST /register | 動的クライアント登録(クライアントは代わりに https client_id(クライアント ID メタデータドキュメント)を使用できます) |
GET /authorize | OAuth 認証(サインインページ) |
POST /token | トークン交換 |
GET /auth/google | Google サインインの開始(設定済みの場合) |
POST /login/email, POST /login/email/verify | メールのサインインコード:送信、検証(設定済みの場合) |
GET /connect/enablebanking/callback, POST /connect/enablebanking/confirm | 銀行の同意後のリダイレクトと確認ステップ |
GET /api/stats | 公開される集計カウンター(件数のみで、金額は含みません) |
ライセンス
MIT - Rteam FZE LLC
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。