{
  "markdown": "# Bancadia MCP\n\nA [Model Context Protocol](https://modelcontextprotocol.io) server that lets MCP clients (Claude, other LLM agents, etc.) query Bancadia's registry of business deposit account products (US only) — with structured filters.\n\nRuns as a [Cloudflare Worker](https://workers.cloudflare.com/) on [Hono](https://hono.dev/), exposing MCP over JSON-RPC 2.0 (Streamable HTTP transport), backed by [Supabase](https://supabase.com/) (Postgres) with an [Upstash Redis](https://upstash.com/) caching/rate-limiting layer.\n\n## Endpoints\n\n| Method | Path              | Purpose                                                       | Auth                        |\n| ------ | ----------------- | -------------------------------------------------------------- | ---------------------------- |\n| GET    | `/health`         | Liveness check                                                 | none                          |\n| GET    | `/.well-known/mcp`| Public discovery/manifest (server info + tool list)            | none                          |\n| POST   | `/`               | JSON-RPC 2.0 endpoint — `initialize`, `tools/list`, `tools/call`| session; `tools/call` also needs a bearer token |\n| GET    | `/`               | Standalone SSE stream (server-initiated messages, keep-alive)  | session                       |\n| DELETE | `/`               | Terminate a session                                             | session                       |\n\n### MCP session lifecycle\n\n1. `POST /` with `method: \"initialize\"` — no auth required. Returns an `Mcp-Session-Id` response header; every subsequent request must send that value back as the `Mcp-Session-Id` request header.\n2. `POST /` with `method: \"tools/list\"` — session required, no bearer token needed. Returns the tool manifest.\n3. `POST /` with `method: \"tools/call\"` — session **and** `Authorization: Bearer <token>` required. Per-token sliding-window rate limiting applies (`X-RateLimit-*` response headers on both success and 429).\n\nResponses are plain JSON by default, or Server-Sent Events if the request's `Accept` header includes `text/event-stream`.\n\nFor production use, obtain a bearer token from the [Bancadia developer portal](https://bancadia.com/developer/signup) — see [bancadia.com/docs](https://bancadia.com/docs) for full API documentation.\n\n## Available tools\n\n| Tool                          | Purpose                                                                 |\n| ------------------------------ | ------------------------------------------------------------------------ |\n| `query_business_checking`      | Filter business checking listings (fees, entity types, states, RTP rails, integrations, APY, etc.) |\n| `get_business_checking_listing`| Full detail on one listing by `listing_slug` — fees and features, including per-plan-tier breakdowns |\n\nSee `src/lib/tools.ts` for the full JSON Schema of each tool's arguments, or query `GET /.well-known/mcp` / `tools/list` directly.\n\n## Getting started\n\n```bash\nnpm install\ncp .dev.vars.example .dev.vars   # fill in Supabase + Upstash credentials\nnpm run dev                      # wrangler dev — local server\n```\n\n`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).\n\n## Commands\n\n```bash\nnpm run dev               # wrangler dev — local server\nnpm test                  # vitest run (runs inside workerd via @cloudflare/vitest-pool-workers)\nnpm run lint              # tsc --noEmit\nnpm run deploy:staging    # wrangler deploy --env staging\nnpm run deploy:production # wrangler deploy --env production\n```\n\nRun a single test file:\n\n```bash\nnpx vitest run src/__tests__/query-business-checking.test.ts\n```\n\n## Environments\n\n- **staging** — `bancadia-mcp-staging`, `workers.dev` enabled. Deployed automatically by CI on every push/PR to `main`.\n- **production** — `bancadia-mcp-production`, routed at `mcp.bancadia.com/*`. Deployed manually via `npm run deploy:production`.\n\nSecrets for each environment are set with `wrangler secret put <KEY> --env <environment>` and are never committed.\n\n## Architecture\n\nSee [CLAUDE.md](./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.\n",
  "bytes": 4421,
  "sha": "8204d2f3319fd78f7d384d17868e70aad3421afa8333ca2c098f011797084e7c",
  "repo_slug": "bancadia/bancadia-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_macphe22_bancadia_mcp_795f44d5/readme"
}