About Bancadia MCP
Bancadia MCP is a server for searching Bancadia’s registry of US business checking account products with structured filters. It serves MCP clients that need to compare listings by details such as fees, entity types, states, payment rails, integrations, and APY.
Key features
- 01Filter business checking listings
- 02Retrieve full listing details
- 03Compare fees and plan tiers
- 04Filter by product features and APY
- 05Attribution-tagged application links
Use cases
- 01Find checking accounts matching business requirements
- 02Review fees and features for a specific listing
- 03Pass attributed application links to downstream clients
MCP support
Exposes listing-search and listing-detail tools to MCP clients over JSON-RPC 2.0 using Streamable HTTP. Tool calls require a session and bearer token, with per-token rate limiting.
Configuration
Remote servers need no local install. Pick your client, then copy the config or install in one click.
https://mcp.bancadia.com/claude mcp add --transport http macphe22-bancadia https://mcp.bancadia.com/{"mcpServers":{"macphe22-bancadia":{"type":"http","url":"https://mcp.bancadia.com/"}}}Open in Cursor{"servers":{"macphe22-bancadia":{"type":"http","url":"https://mcp.bancadia.com/"}}}Open in VS Code{"mcpServers":{"macphe22-bancadia":{"type":"http","url":"https://mcp.bancadia.com/"}}}{"mcpServers":{"macphe22-bancadia":{"serverUrl":"https://mcp.bancadia.com/"}}}Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.
https://mcp.bancadia.com/Auth requiredTools
2| Parameter | Type | Required | Description |
|---|---|---|---|
| apy_min | number | No | Only return accounts whose best available rate (apy_max) is at least this value, as a decimal (e.g. 0.02 = 2%). This is the best rate the account can pay, not what a typical customer gets — many accounts pay less by default. Check apy_default in the results for the standard rate. |
| rtp_network | enum | No | Which real-time payment rail is supportedfednow | rtp_network | both | none |
| rtp_supported | boolean | No | Whether real-time payments (any rail) are supported at all |
| insurance_type | enum | No | Deposit insurance typefdic | ncua | uninsured |
| monthly_fee_max | number | No | Maximum monthly fee |
| available_states | array | No | Returns listings available in all specified states |
| interest_bearing | boolean | No | Whether the account earns interest |
| target_industries | array | No | Soft-ranks results toward listings built for these business types. Does not exclude non-matching but otherwise-eligible listings. |
| entity_types_accepted | array | No | Returns listings accepting all specified entity types (e.g. llc, s_corp) |
| free_transactions_min | number | No | Minimum free transactions per month |
| cash_deposit_available | boolean | No | Whether cash deposits are supported |
| sub_accounts_supported | boolean | No | Whether sub-accounts are supported |
| target_business_profiles | array | No | Soft-ranks results toward listings built for this business stage/shape. Does not exclude non-matching but otherwise-eligible listings. |
| tax_integration_available | boolean | No | Whether the account connects to any tax-prep or tax-filing software/service |
| minimum_opening_deposit_max | number | No | Maximum minimum opening deposit |
| expense_integration_available | boolean | No | Whether the account connects to any expense/spend-management software |
| accounting_integration_available | boolean | No | Whether the account connects to any accounting software (e.g. QuickBooks, Xero) |
Details
From the project READMEBancadia MCP
A Model Context Protocol server that lets MCP clients (Claude, other LLM agents, etc.) query Bancadia's registry of business deposit account products (US only) — with structured filters.
Runs as a Cloudflare Worker on Hono, exposing MCP over JSON-RPC 2.0 (Streamable HTTP transport), backed by Supabase (Postgres) with an Upstash Redis caching/rate-limiting layer.
Endpoints
| Method | Path | Purpose | Auth |
|---|---|---|---|
| GET | /health | Liveness check | none |
| GET | /.well-known/mcp | Public discovery/manifest (server info + tool list) | none |
| POST | / | JSON-RPC 2.0 endpoint — initialize, tools/list, tools/call | session; tools/call also needs a bearer token |
| GET | / | Standalone SSE stream (server-initiated messages, keep-alive) | session |
| DELETE | / | Terminate a session | session |
MCP session lifecycle
POST /withmethod: "initialize"— no auth required. Returns anMcp-Session-Idresponse header; every subsequent request must send that value back as theMcp-Session-Idrequest header.POST /withmethod: "tools/list"— session required, no bearer token needed. Returns the tool manifest.POST /withmethod: "tools/call"— session andAuthorization: Bearer <token>required. Per-token sliding-window rate limiting applies (X-RateLimit-*response headers on both success and 429).
Responses are plain JSON by default, or Server-Sent Events if the request's Accept header includes text/event-stream.
For production use, obtain a bearer token from the Bancadia developer portal — see bancadia.com/docs for full API documentation.
Available tools
| Tool | Purpose |
|---|---|
query_business_checking | Filter business checking listings (fees, entity types, states, RTP rails, integrations, APY, etc.) |
get_business_checking_listing | Full detail on one listing by listing_slug — fees and features, including per-plan-tier breakdowns |
See src/lib/tools.ts for the full JSON Schema of each tool's arguments, or query GET /.well-known/mcp / tools/list directly.
application_url attribution tags
Every application_url returned by tools/call is an absolute https://bancadia.com/go/... link with attribution params appended: src=mcp and qr=<request_id>, where request_id is a UUID generated once per tools/call and also written to every query_match_events row for that call (so a /go click can be joined back to the tool call that surfaced it). Params already present on the stored URL are never overwritten. qr is added for every tool; a tool that records no query_match_events rows (or returns no listings) has nothing for it to join to. Host-prefixing and tagging both happen in one layer, applyApplicationUrlHost in src/lib/urls.ts, applied in src/index.ts.
Clients and agents should pass application_url through unmodified, including its query string. Stripping the params loses attribution for that click.
Getting started
npm install
cp .dev.vars.example .dev.vars # fill in Supabase + Upstash credentials
npm run dev # wrangler dev — local server
wrangler.toml [vars] provides non-secret defaults (test Supabase/Upstash URLs, session TTL, allowed origins) shared by both npm run dev and the test suite; real secrets go in .dev.vars (git-ignored).
Commands
npm run dev # wrangler dev — local server
npm test # vitest run (runs inside workerd via @cloudflare/vitest-pool-workers)
npm run lint # tsc --noEmit
npm run deploy:staging # wrangler deploy --env staging
npm run deploy:production # wrangler deploy --env production
Run a single test file:
npx vitest run src/__tests__/query-business-checking.test.ts
Environments
- staging —
bancadia-mcp-staging,workers.devenabled. Deployed automatically by CI on every push/PR tomain. - production —
bancadia-mcp-production, routed atmcp.bancadia.com/*. Deployed manually vianpm run deploy:production.
Secrets for each environment are set with wrangler secret put <KEY> --env <environment> and are never committed.
Architecture
See CLAUDE.md for a detailed guide to the codebase: request flow, auth/session/rate-limit design, and the Supabase hybrid schema (base tables + per-product-type details tables) that the query handlers are built around.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.