Ledgr について
Ledgrは、財務データを自分のサーバーで管理したい個人向けのセルフホスト型家計管理アプリです。銀行同期、予算、投資追跡、レポートに加え、AIアシスタント向けのMCPサーバーを備えています。
主な機能
- 01PlaidまたはSimpleFINの銀行同期
- 02取引の自動カテゴリ分類
- 03カテゴリ別の月間予算
- 04投資ポートフォリオの追跡
- 05定期請求の検出とレポート
- 06AIチャットとMCPサーバー
活用シーン
- 01月ごとのカテゴリ別支出を確認
- 02予算と投資保有資産を追跡
- 03収入・支出・純資産レポートを作成
MCP 対応
Ledgrは、口座、取引、予算、レポート、投資、請求の照会や更新に使えるツールをMCPサーバー経由で公開します。読み取り、書き込み、同期のアクセスはOAuthスコープで制御されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e DATABASE_URL -e MCP_ENABLED -e LEDGR_DATA_DIR -e LEDGR_URL -e BETTER_AUTH_URL ghcr.io/kentaniguchi-r/ledgr:0.3.4DATABASE_URLシークレットPostgreSQL connection string (Ledgr needs its own Postgres; docker-compose.yml in the repo provides one)MCP_ENABLEDTurns on the /api/mcp endpoint (off by default)LEDGR_DATA_DIRDirectory where generated secrets are persistedLEDGR_URLPublic base URL of this instance; used as the OAuth issuer and MCP resource identifierBETTER_AUTH_URLシークレットBase URL for sign-in; must match LEDGR_URLローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/kentaniguchi-r/ledgr:0.3.4Streamable HTTPツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Ledgr は、Plaid または SimpleFIN を通じて銀行口座に接続し、取引を自動で同期・分類します。予算管理、投資の追跡、請求の検出、財務レポートを利用でき、すべてご自身のデータを使って、ご自身のサーバー上で動作します。
また、MCP サーバーを公開するため、Claude のようなAIアシスタントが自然な会話を通じて財務情報を照会できます。
You: "How much did I spend on dining out last month?"
Claude: Based on your transactions, you spent $342.18 on dining out in April...
MCP を介して Claude Code から財務情報を照会
主な機能
- 銀行口座との自動同期 — Plaid を通じて 12,000 以上の銀行に接続できます(リアルタイムの webhook 同期または定期ポーリング)。Plaid の開発者アカウントを使いたくない場合は、SimpleFIN 経由でも接続できます
- スマートな分類 — 4 層の処理パイプライン:独自のルール > 加盟店の既定値 > Plaid のカテゴリ > AI によるフォールバック
- 予算管理 — カテゴリごとに月次予算を設定し、進捗をリアルタイムで追跡できます
- 投資の追跡 — ポートフォリオの保有資産、運用実績の履歴、配分の内訳を確認でき、Plaid または SimpleFIN から自動で同期されます
- 定期的な請求の検出 — サブスクリプションや定期的な請求を自動で識別します
- 財務レポート — 支出、収入、純資産、カテゴリ別の推移を時系列で確認できます
- AI エージェント用インターフェース(MCP) — Claude Code、Claude Desktop、Cursor、または任意の MCP クライアントから財務情報を照会できます
- アプリ内 AI チャット — ダッシュボードから直接、財務に関する質問をできます
- BYOK AI — チャットや分類用に、ご自身の API キー(OpenAI、Anthropic、Google、またはローカルモデル)を利用できます
- CSV/OFX/QFX のインポートと CSV エクスポート — Plaid に対応していない口座のデータを取り込んだり、ご自身のデータを取り出したりできます
- セルフホスト — PostgreSQL を含む Docker Compose を使用し、データがサーバーの外に出ることはありません
月次予算と実際の支出をカテゴリ別に追跡
支出、収入、キャッシュフロー、推移、純資産のレポート
Docker と Docker Compose が必要です。
curl -fsSL https://raw.githubusercontent.com/KenTaniguchi-R/ledgr/main/scripts/install.sh | sh
これにより、ledgr/ ディレクトリが作成され、docker-compose.yml がダウンロードされて、アプリが起動します。
先に手順を確認しますか?
mkdir ledgr && cd ledgr
curl -O https://raw.githubusercontent.com/KenTaniguchi-R/ledgr/main/docker-compose.yml
docker compose up -d
http://localhost:4200 にアクセスしてアカウントを作成し、利用を開始してください。
初回起動時に、Ledgr は暗号化キーとセッションシークレットを生成し、アプリのデータボリュームに保存します。データベースと一緒に、そのボリューム(または /data/encryption-key ファイル)をバックアップしてください。キーを失うと、Plaid や SimpleFIN のトークンなどの暗号化データにアクセスできなくなります。キーを自分で管理する場合は、.env ファイルで ENCRYPTION_KEY を設定してください(設定を参照)。設定したキーが優先されます。
銀行との同期を有効にするには、Plaid のキーを
.envに追加してください。下記の銀行を接続するを参照してください(またはキーは設定せず、SimpleFIN 経由で接続する方法もあります)。CSV インポートを使えば、どちらも設定せずにアプリを利用できます。
銀行を接続する
- dashboard.plaid.com で登録し、Developers > Keys から
client_idとシークレットを取得します docker-compose.ymlと同じ場所にある.envファイルに追加します(まだない場合は、.env.exampleを元に作成してください):PLAID_CLIENT_ID=your_client_id PLAID_SECRET=your_secret PLAID_ENV=production # or sandbox for fake data- 再起動します:
docker compose restart - アプリで Accounts > Link Bank に移動し、Plaid 経由で接続します
Plaid の無料トライアルプランには、本番環境での接続が10件と、サンドボックスへの無制限のアクセスが含まれています。その後は、契約不要の従量課金制である Launch プランを利用できます。Plaid のキーがまだなくても問題ありません。CSV 経由で取引をインポートし、後から Plaid を追加できます。
Plaid 経由で12,000以上の銀行に接続できます
または SimpleFIN 経由で接続する
SimpleFIN はそのまま利用できます。開発者アカウントや .env の変更は不要です。
- SimpleFIN Bridge アカウントを取得し、Bridge プロバイダーから Setup Token を生成します
- アプリで Accounts > Link Bank に移動し、SimpleFIN オプションを選択します
- Setup Token を貼り付けて接続します
SimpleFIN には Webhook がないため、アカウントはリアルタイムではなく、毎日のスケジュール(SCHEDULER_SIMPLEFIN_SYNC_CRON。詳しくは設定を参照)で同期されます。投資保有資産も Plaid と同じ方法で同期されます。
AI エージェントを接続する
Ledgr には、組み込みの MCP サーバーとプラグインのサポートが備わっています。
まず、.env で MCP エンドポイントを有効にして、再起動します。
MCP_ENABLED=true
次に、ツールを選択します。
Claude Code
/plugin marketplace add KenTaniguchi-R/ledgr
/plugin install ledgr@ledgr
Codex CLI
codex plugin marketplace add KenTaniguchi-R/ledgr
OpenCode — opencode.json に追加します:
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["ledgr"]
}
OpenClaw
openclaw plugins install ledgr --marketplace KenTaniguchi-R/ledgr
Hermes
hermes plugins install KenTaniguchi-R/ledgr
その他の MCP クライアント(Cursor、Windsurf、Cline など)
MCP 対応クライアントから Ledgr インスタンスに接続します。
http://localhost:4200/api/mcp
初回接続時に、Ledgr は OAuth フローにリダイレクトし、アクセスを許可するよう求めます。
| ツール | 説明 |
|---|---|
list_accounts | リンク済みの銀行口座と残高 |
get_account_summary | 口座種別ごとの残高合計 |
get_transactions | 取引の検索と絞り込み |
update_transaction_category | 取引のカテゴリを変更 |
mark_transaction_transfer | 取引を振替としてマーク、またはマークを解除 |
get_budget | 月ごとの予算の進捗 |
set_budget_category | カテゴリの予算額を設定 |
list_categories | 支出カテゴリ |
get_spending_report | 指定した期間の支出内訳 |
get_income_vs_expense | 収入と支出の推移 |
get_net_worth_history | 純資産の推移 |
get_holdings | 投資ポートフォリオの保有資産 |
get_portfolio_summary | ポートフォリオの評価額と配分 |
get_upcoming_bills | 定期的な取引と請求 |
get_dashboard_summary | 財務状況の概要 |
show_financial_dashboard | インタラクティブなダッシュボードウィジェット |
sync_accounts | 銀行口座の同期を実行 |
読み取り、書き込み、同期のツールは、認証時に許可する OAuth スコープ(ledgr:read、ledgr:write、ledgr:sync)によって制限されています。
プロンプトの例:
- 「今月、食料品にいくら使いましたか?」
- 「予算の状況を見せて」
- 「定期的な請求には何がありますか?」
- 「第1四半期の支出レポートを作成して」
- 「口座を同期して、残高を見せて」
比較
| Ledgr | Actual Budget | Firefly III | |
|---|---|---|---|
| 銀行口座の自動同期 | Plaid(12,000+ の銀行)または SimpleFIN | SimpleFIN(US/CA)、GoCardless(EU/UK) | SimpleFIN、GoCardless、Spectre(Data Importer 経由) |
| MCP サーバーを内蔵 | はい | -- | -- |
| AI によるカテゴリ分類 | はい(BYOK) | -- | -- |
| 投資の追跡 | はい | -- | -- |
| セルフホスト可能 | はい | はい | はい |
| データベース | PostgreSQL | SQLite | MySQL/Postgres |
| ライセンス | AGPL-3.0 | MIT | AGPL-3.0 |
更新
docker compose pull
docker compose up -d
コンテナの起動時にマイグレーションが自動的に実行されます。
設定
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
ENCRYPTION_KEY | いいえ | 自動生成 | Plaid トークンと API キーを暗号化します。初回起動時に生成され、アプリのデータボリュームに保存されます。独自の値は openssl rand -hex 32 で設定できます |
BETTER_AUTH_SECRET | いいえ | 自動生成 | セッションシークレットです。アプリのデータボリュームに保存されます。独自の値は openssl rand -base64 32 で設定できます |
PORT | いいえ | 4200 | アプリのホストポート |
POSTGRES_PASSWORD | いいえ | ledgr | データベースのパスワード(本番環境では変更してください) |
PLAID_CLIENT_ID | いいえ | -- | Plaid のクライアント ID |
PLAID_SECRET | いいえ | -- | Plaid のシークレットキー |
PLAID_ENV | いいえ | production | production または sandbox |
PLAID_SYNC_MODE | いいえ | poll | poll(スケジュール実行)または webhook(リアルタイム) |
PLAID_WEBHOOK_URL | いいえ | -- | Plaid webhook の公開 URL(webhook モード) |
SCHEDULER_SIMPLEFIN_SYNC_CRON | いいえ | 45 4 * * * | SimpleFIN 口座の毎日の同期(webhook がないため、これが唯一の同期トリガーです) |
AI_PROVIDER | いいえ | -- | openai、anthropic、google、openrouter、または custom |
AI_API_KEY | いいえ | -- | AI チャットとカテゴリ分類に使用するプロバイダーの API キー |
MCP_ENABLED | いいえ | false | AI エージェント向けの MCP エンドポイントを有効にします |
すべてのオプションについては .env.example をご覧ください。
開発
Ledgr をセルフホストする場合は、上記のクイックスタートを使用してください。 以下の手順はコントリビューター向けです。
前提条件
セットアップ
git clone https://github.com/KenTaniguchi-R/ledgr.git
cd ledgr
pnpm install
cp .env.example .env # Fill in ENCRYPTION_KEY
pnpm dev:setup # Start DB + migrate + dev server
ビルド済みイメージを取得するのではなく、ソースからアプリ全体を Docker で実行するには、次の手順を実行します。
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d
コマンド
pnpm dev # Dev server (Turbopack)
pnpm test # Unit + integration tests
pnpm test:e2e # Playwright E2E tests
pnpm lint # ESLint
pnpm typecheck # Type checking
pnpm db:studio # Drizzle Studio (DB browser)
技術スタック
| レイヤー | 選択技術 |
|---|---|
| フレームワーク | Next.js 16 (App Router) |
| 言語 | TypeScript |
| UI | shadcn/ui + Tailwind CSS 4 |
| チャート | Recharts 3 |
| データベース | Drizzle ORM 経由の PostgreSQL 18 |
| 認証 | Better Auth |
| 銀行口座の同期 | Plaid Node SDK、SimpleFIN |
| AI | Vercel AI SDK (BYOK) |
| MCP | Model Context Protocol SDK |
| テスト | Vitest + Playwright + Stryker |
ロードマップ
- Plaid の Webhook サポート(リアルタイム同期)
- AI チャットアシスタント(アプリ内)
- OFX/QFX のインポート
- SimpleFIN による銀行口座の同期(Plaid の代替)
- 口座間の自動振替検出
- モバイル対応 UI
- 複数通貨のサポート
- カスタムレポートビルダー
- 目標管理(貯蓄目標、債務返済)
- 定期的な予算テンプレート
現在取り組んでいる内容については、Issuesをご覧ください。
セキュリティ
金融アプリにとってセキュリティは非常に重要です。脆弱性を発見した場合、公開の Issue は作成しないでください。 責任ある情報開示の手順については、SECURITY.mdをご覧ください。
Ledgr によるデータの取り扱いについて詳しくは、PRIVACY.mdをご覧ください。
コントリビューション
コントリビューションを歓迎します!変更したい内容について話し合うため、まず Issue を作成してください。セットアップとワークフローの詳細については、CONTRIBUTING.mdをご覧ください。
- リポジトリをフォークします
- ブランチを作成します(
git checkout -b feat/my-feature) - 変更をコミットします
- プッシュしてプルリクエストを作成します
ライセンス
AGPL-3.0 — 自由にセルフホストできます。サーバーを変更して配布する場合は、変更内容をオープンソースにする必要があります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。