{
  "markdown": "# open-banking.io MCP server\n\nA thin, **read-only** [Model Context Protocol](https://modelcontextprotocol.io) server for the\n[open-banking.io](https://open-banking.io) PSD2 API. It lets AI agents (Claude Desktop, Cursor,\nany MCP client) answer questions like *“What's my balance?”* and *“Summarise last month's\ntransactions”* over your own bank accounts.\n\nIt wraps the official [`open-banking-io`](https://github.com/open-banking-io/clients) Python SDK\nand inherits its **zero-knowledge** property: the service only ever returns ciphertext, and every\nsensitive field (IBAN, owner name, amounts, counterparties) is decrypted **in-process** with your\nexported private key. No plaintext ever touches a third party — including the LLM only sees what\nyour MCP client sends it.\n\n## Tools\n\n| Tool | Arguments | Description |\n|---|---|---|\n| `list_accounts` | — | Bank accounts: bank, country, IBAN, owner, display name, currency, balances, `needs_reconnect` flag |\n| `get_balances` | `account_id` | ISO 20022 balances for one account (`ITBD` = booked, `ITAV` = available) |\n| `get_transactions` | `account_id`, `date_from?`, `date_to?`, `limit?` (default 50, max 500), `offset?` | Statement lines, newest first, with counterparty and remittance details |\n| `list_connections` | — | Bank connections/consents: status, `valid_until`, `last_synced_at`, account count |\n\nAll tools are **read-only**. There are intentionally no sync, payment-initiation or consent-management\ntools — see [Limitations](#limitations).\n\n## Configuration\n\n| Env var | Required | Meaning |\n|---|---|---|\n| `OBI_CREDENTIALS` | preferred | Path to (or inline JSON of) the credentials bundle exported from the open-banking.io app — contains `apiBaseUrl`, `apiKey` and the encryption private key |\n| `OBI_API_KEY` | alternative | API key, if you don't use the bundle |\n| `OBI_PRIVATE_KEY` | alternative | Base64 PKCS#8 EC (SECP256R1) private key matching `OBI_API_KEY` |\n| `OBI_BASE_URL` | with alternative | API base URL (the bundle's `apiBaseUrl`), required when using the split env vars |\n\nExport credentials in the app → *Settings → Credentials* to get the bundle file.\n\n### Claude Desktop\n\n`claude_desktop_config.json` (Claude → Settings → Developer → Edit Config):\n\n```json\n{\n  \"mcpServers\": {\n    \"open-banking-io\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"--from\", \"git+https://github.com/open-banking-io/mcp-server.git\",\n        \"obi-mcp\"\n      ],\n      \"env\": {\n        \"OBI_CREDENTIALS\": \"/absolute/path/to/credentials.json\"\n      }\n    }\n  }\n}\n```\n\n### Cursor\n\n`.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"open-banking-io\": {\n      \"command\": \"uvx\",\n      \"args\": [\n        \"--from\", \"git+https://github.com/open-banking-io/mcp-server.git\",\n        \"obi-mcp\"\n      ],\n      \"env\": {\n        \"OBI_CREDENTIALS\": \"/absolute/path/to/credentials.json\"\n      }\n    }\n  }\n}\n```\n\nRequires [`uv`](https://docs.astral.sh/uv/) (`curl -LsSf https://astral.sh/uv/install.sh | sh`).\nOnce published to PyPI the `--from git+…` argument can be dropped.\n\n### Run locally / from source\n\n```bash\ngit clone https://github.com/open-banking-io/mcp-server.git\ncd mcp-server\nuv venv && uv pip install -e '.[dev]' --python .venv/bin/python\nOBI_CREDENTIALS=/path/to/credentials.json .venv/bin/obi-mcp   # speaks MCP over stdio\n.venv/bin/python tests/smoke.py                               # network-free smoke test\nuv run --python .venv/bin/python pytest -q                    # full test suite\n```\n\n## Example questions for your agent\n\n- “Show the booked balance of every account.”\n- “How much did I spend on groceries in July?” (`get_transactions` + grouping)\n- “Which of my bank connections expire soon?” (`list_connections`)\n\n## Design notes\n\n- **Read-only by construction.** Only the SDK's `get_*` methods are exposed. `sync`/`sync_all`\n  exist in the SDK but are deliberately not offered; agents cannot move money or alter consents\n  through this server.\n- **Exact money.** Amounts are returned as exact decimal strings (`\"1234.56\"`), never floats.\n- **Clean errors.** Missing credentials, bad dates, unknown account ids and upstream HTTP errors\n  are surfaced as actionable tool errors (e.g. listing valid account ids on a miss).\n- **Context-friendly.** `get_transactions` defaults to 50 items and clamps at 500 to protect\n  agent context windows; use `offset` to paginate.\n\n## Limitations (honest list)\n\n- No write tools: no sync, no payment initiation, no consent creation/renewal. Consent renewal\n  always happens in the open-banking.io app (PSD2 SCA).\n- No bank/institution directory tool: the upstream API (SDK v1.0.0) does not expose a public\n  ASPSP-search endpoint — TODO if/when the API adds one.\n- Not yet on PyPI — install via `uvx --from git+…` (above) or from source. Publishing to PyPI as\n  `open-banking-io-mcp` is planned.\n- Data minimisation is your responsibility: transactions include counterparties and remittance\n  text; only point this server at MCP clients you trust, and prefer local MCP clients\n  (Claude Desktop / Cursor) over hosted ones for privacy.\n\n## API surface wrapped\n\n| SDK call | HTTP (behind the SDK) |\n|---|---|\n| `get_accounts()` | `GET {apiBaseUrl}/api/accounts` |\n| `get_transactions(id, from, to, limit, offset)` | `GET {apiBaseUrl}/api/accounts/{id}/transactions` |\n| `get_connections()` | `GET {apiBaseUrl}/api/connections` |\n\nAuth: `X-Api-Key` header. Responses carry zero-knowledge envelopes\n(ECDH P-256 → HKDF-SHA256 → AES-256-GCM) decrypted locally by the SDK.\nFull wire format: [`clients` repo](https://github.com/open-banking-io/clients) ·\n[`THREAT_MODEL.md`](https://github.com/open-banking-io/clients/blob/main/THREAT_MODEL.md).\n\n## License\n\nMIT — same as the [`clients`](https://github.com/open-banking-io/clients) SDK repos.\n",
  "bytes": 5752,
  "sha": "91c4736664e98772e1e615555c234ad96896c85acbb02d30c40ae5ca909b6a57",
  "repo_slug": "open-banking-io/mcp-server",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_open_banking_io_mcp_server_946595c9/readme"
}