plaid-mcp-server
plaid-mcp
A self-hosted MCP server that lets Claude query your bank accounts, balances, and transactions through Plaid.
Tools
Tool | Description |
| All linked bank accounts |
| Current/available balances and credit limits |
| Full transaction history for a date range |
| Total spending broken down by category |
| Filter transactions by Plaid PFC category |
| All merchants for a date range, sorted by total spend |
| Filter transactions by merchant name |
How it works
OAuth 2.1 + PKCE with Google as the identity provider
Email allowlist is the security boundary
Claude.ai gets a 30-day bearer token; your Plaid access token never leaves your server
Caddy sits in front of FastAPI, terminating TLS on port 443 with auto-provisioned Let's Encrypt certs and reverse-proxying to
localhost:8080
Requirements
A Linux server with a public IP (this guide uses an AWS EC2
t3.micro)A domain name pointing at it (this guide uses a free DuckDNS subdomain)
A Plaid developer account with production access
A Google Cloud account for the OAuth client
Setup
1. Plaid
Create a Plaid account at dashboard.plaid.com
Request Production access in the dashboard (Plaid will review your application — this can take a few days)
Once approved, save your
client_idandProductionsecret from Team Settings → Keys
2. Google OAuth
console.cloud.google.com → create a project
APIs & Services → OAuth consent screen → set up an "External" app, add yourself as a test user
APIs & Services → Credentials → Create credentials → OAuth client ID
Application type: Web application
Authorized redirect URIs:
https://yourdomain.com/auth/google/callback(use your real domain from step 4 below)Save the
Client IDandClient secret
3. Server
This guide assumes AWS EC2:
Launch a
t3.microUbuntu 24.04 instanceSecurity group: inbound TCP 22 (SSH from your IP), 80, 443
Allocate an Elastic IP and associate it with the instance
SSH in:
ssh -i your-key.pem ubuntu@<elastic-ip>
4. Domain
Free option using DuckDNS:
Sign in with Google/GitHub/Reddit
Reserve a subdomain (e.g.
plaid-yourname)Set the IP to your Elastic IP
Your domain is now
plaid-yourname.duckdns.org
Go back to step 2.5 and set the redirect URI to https://plaid-yourname.duckdns.org/auth/google/callback.
5. Install
On the server:
git clone https://github.com/lukew0824/plaid-mcp.git
cd plaid-mcp
cp .env.example .env
nano .env # fill in everything
./install.shThe script:
Installs Python, Caddy, and dependencies
Sets up and starts a systemd service (
plaid-mcp) that auto-restarts on failure and bootConfigures Caddy as a reverse proxy with auto-HTTPS via Let's Encrypt
6. Connect in Claude.ai
Claude.ai → Settings → Connectors → Add custom connector
URL:
https://yourdomain.com/mcpClick Connect
Sign in with the Google account matching
ALLOWED_EMAILFirst time only: a Plaid Link popup will appear — connect your bank
Done. Try: "What did I spend on food last month?"
Configuration
The .env values:
Key | Description |
|
|
| From Plaid dashboard |
| From Plaid dashboard |
| From Google Cloud Console |
| From Google Cloud Console |
| The single Google email allowed to authenticate |
| Public HTTPS URL of this server (no trailing slash) |
|
|
License
MIT