A Model Context Protocol (MCP) server that connects Claude to your bank accounts via the Plaid API. Ask Claude about your balances, recent transactions, or spending by category — directly in conversation.
Most personal finance tools show you data. They give you charts, categories, and summaries — but you still have to interpret it yourself and figure out what questions to ask.
This is different. By connecting your bank data directly to Claude, you get a financial assistant that can reason over your money, not just display it.
Instead of logging into three banking apps, exporting CSVs, or building dashboards, you just ask:
- "Am I spending more on food this month than last month?"
- "Which of my accounts has enough to cover a $2,000 expense right now?"
- "Show me every transaction over $200 in the last 60 days and flag anything unusual"
- "I'm trying to save $500 this month — based on my spending patterns, where should I cut back?"
Claude doesn't just fetch the data — it interprets it, compares it, and gives you answers in plain English. That's the gap this fills: the space between raw bank data and actual financial clarity.
Exposes 4 tools to Claude:
| Tool | Description |
|---|---|
list_linked_accounts |
List all linked bank institutions |
get_balances |
Current balances across all accounts (or a specific one) |
get_transactions |
Recent transactions — filterable by institution, days back, count |
get_spending_summary |
Spending totals by category across all linked accounts |
Example prompts once connected:
- "What's my Chase checking balance?"
- "Show me all transactions over $100 this month"
- "How much did I spend on food last 30 days?"
Claude (Claude Code / Desktop)
└── MCP protocol (stdio)
└── server.py (FastMCP)
└── Plaid API
└── Linked bank accounts
server.py— MCP server built on FastMCP. Runs as a stdio transport, registered in Claude's MCP config.link.py— One-time Flask app (port 8080) that opens Plaid Link in your browser to connect bank accounts. Saves access tokens toconfig.json.config.json— Stores Plaid credentials and linked account access tokens (not committed).
Sign up at plaid.com and get your client_id and secret from the dashboard.
- Sandbox — free, works immediately, uses test credentials
- Development — free tier, real accounts (non-OAuth banks only)
- Production — required for OAuth banks (e.g. Chase)
cp config.example.json config.jsonEdit config.json with your credentials:
{
"client_id": "your_plaid_client_id",
"secret": "your_plaid_secret",
"env": "sandbox",
"access_tokens": {}
}pip install -r requirements.txtpython3 link.pyOpens a browser at http://localhost:8080. Complete the Plaid Link flow to connect an account. Access token is saved automatically to config.json.
For sandbox, use: username user_good, password pass_good.
Add to your Claude MCP config (~/.claude/settings.json):
{
"mcpServers": {
"plaid-bank": {
"command": "python3",
"args": ["/path/to/plaid-mcp/server.py"]
}
}
}Restart Claude Code. The 4 tools will be available in your next conversation.
Update config.json:
{
"env": "development",
"secret": "your_development_secret",
"access_tokens": {}
}Then re-run link.py to connect real accounts.
config.jsonis gitignored — never commit it (contains API keys and access tokens)- Access tokens are persistent — you only need to run
link.pyonce per institution - OAuth institutions (Chase, Bank of America, etc.) require Plaid Production access