A community-driven registry for the Claude Code ecosystem. Not affiliated with Anthropic.
Are you the author? Sign in to claim
Self-hosted, read-only MCP server for personal finance. Connect your banks via Plaid and query them from Claude Code.
Unofficial. This project is not affiliated with, endorsed by, or sponsored by Plaid Inc. "Plaid" is a trademark of Plaid Inc. This is a self-hosted client that talks to Plaid's API using credentials you supply.
A self-hosted, read-only MCP server that connects your banks, credit cards, loans, and brokerage accounts (via Plaid) to an MCP client like Claude Code. Ask questions about your own finances in plain English — no third-party aggregator (Monarch, Mint, etc.) involved.
Example session (illustrative):
you : What did I spend on groceries last month?
claude : [calls get_transactions]
$487.23 across 14 transactions. Top merchants:
Whole Foods ($198), Trader Joe's ($156), Safeway ($89).
you : Any subscriptions I'm still paying for?
claude : [calls get_recurring_transactions]
7 active recurring outflows totaling $142/mo:
Netflix ($15.99), Spotify ($11.99), NYT ($4), ...
All 9 tools are read-only. Each returns {<data>: [...], "warnings": [...]} so one broken bank doesn't break the whole query.
| Tool | What it does |
|---|---|
list_accounts | Every account across every linked bank, with balances |
get_balances | Live current + available balances (optionally filtered by account) |
get_transactions | Transactions in a date range (up to 2 years back) |
search_transactions | Keyword search across merchant / name / counterparty |
get_recurring_transactions | Detected recurring inflow + outflow streams |
get_liabilities | Credit cards, student loans, mortgages with APRs and payment details |
get_investment_holdings | Current holdings with symbol + security metadata |
get_investment_transactions | Buy / sell / dividend history in a date range |
get_institutions_status | Health of each linked bank (surfaces re-auth needs) |
Requires Python 3.11+, a Plaid account (free Trial plan), and an MCP client.
client_id and production secret.git clone https://github.com/JosueM1109/personal-finance-mcp.git
cd personal-finance-mcp
python3.11 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env # then fill in PLAID_CLIENT_ID and PLAID_SECRET
pytest -v # sanity check
Run once per bank you want to connect:
uvicorn link_helper:app --port 8765
Open http://localhost:8765, click Link a bank, complete Plaid Link. The terminal prints a line like PLAID_TOKEN_CHASE=access-prod-xxx... — paste it into .env and repeat for each bank.
python server.py # serves on http://localhost:8000/mcp
claude mcp add --transport http personal-finance http://localhost:8000/mcp
Try "list my accounts" to confirm.
For a deployment you can use from anywhere:
docker build -t personal-finance-mcp . && docker run --rm -p 8000:8000 --env-file .env personal-finance-mcp.env.example, expose /mcp over HTTPS, gate it with auth.Gate the endpoint. An exposed MCP endpoint with your tokens leaks every linked account. Use OAuth 2.1, Cloudflare Access, or bind to a private network only.
.env is gitignored.Before each deploy:
.env never committed: git log --all -- .env returns nothinggit log -S'access-prod-' --all returns only placeholdersHORIZON=1 (or similar) set in deployment env, blocking link_helper.py thereget_institutions_status() every few weeks for re-auth needsTool returns empty despite real data. Plaid products weren't enabled when you linked the bank. Re-link with Transactions + Liabilities + Investments active. The tool surfaces PRODUCTS_NOT_SUPPORTED in warnings when this is the cause.
get_institutions_status() shows re_auth_required. The bank's Plaid session expired. Run link_helper.py in update mode — your existing access token stays the same. See docs/DEPLOYMENT.md.
Plaid Link shows a bank as "unsupported" (common with Amex). Usually an INSTITUTION_REGISTRATION_REQUIRED issue — OAuth banks need per-institution registration in the Plaid dashboard first. See docs/TROUBLESHOOTING.md.
More issues: docs/TROUBLESHOOTING.md.
SecretStr token redaction, 5-minute per-Item health cache, response shaping, structured error mapping.HORIZON=1 is set.Deeper dive (including why /transactions/get over /transactions/sync): docs/ARCHITECTURE.md.
See CONTRIBUTING.md. Scope is deliberately narrow: read-only, single-tenant, Plaid-backed.
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
MCP server integration for DaVinci Resolve Studio
Secure MCP server for MySQL database interaction, queries, and schema management