{
  "markdown": "# boe-mcp\n\n[![npm](https://img.shields.io/npm/v/boe-mcp?logo=npm)](https://www.npmjs.com/package/boe-mcp)\n[![CI](https://github.com/moureauf/boe-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/moureauf/boe-mcp/actions/workflows/ci.yml)\n[![node](https://img.shields.io/node/v/boe-mcp)](https://www.npmjs.com/package/boe-mcp)\n[![license](https://img.shields.io/npm/l/boe-mcp)](./LICENSE)\n[![MCP Registry](https://img.shields.io/badge/MCP_Registry-io.github.moureauf%2Fboe--mcp-blue)](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.moureauf/boe-mcp)\n\nAn MCP (Model Context Protocol) server that gives Claude Code — or any MCP client — live Bank of England data: the base rate (current level, change history, statistics over any period, and the rate in force on any past date), **any series from the BoE's IADB statistical database** (SONIA, exchange rates, quoted mortgage rates, and thousands more, with a curated catalog to start from), and the Monetary Policy Committee meeting schedule. It runs over stdio by default (with an opt-in Streamable HTTP mode for remote hosting), needs no API key or configuration, and caches responses in memory so repeated questions don't re-hit the BoE.\n\n![boe-mcp demo: calling get_current_rate and get_next_mpc_meeting, returning live Bank of England data](docs/demo/demo.gif)\n\nPublished on npm as [`boe-mcp`](https://www.npmjs.com/package/boe-mcp) with build [provenance](https://docs.npmjs.com/generating-provenance-statements/) — install and run it with `npx -y boe-mcp`.\n\n## Tools\n\n| Tool | Description | Example output |\n|------|-------------|----------------|\n| `get_current_rate` | Current base rate, effective date, months held at this level | `{ \"rate\": 3.75, \"effectiveDate\": \"2025-12-18\", \"monthsHeld\": 6, \"source\": \"https://www.bankofengland.co.uk/boeapps/iadb/...\", \"cachedAt\": \"2026-07-07T04:11:28Z\" }` |\n| `get_rate_history` | Last N rate changes (default 10) — date, rate, move in basis points vs previous (`null` for the earliest known entry) | `{ \"entries\": [{ \"date\": \"2025-12-18\", \"rate\": 3.75, \"changeBps\": -25 }, ...], \"source\": \"...\", \"cachedAt\": \"...\" }` |\n| `get_rate_at` | The base rate in force on a specific historical date | `{ \"date\": \"2020-03-15\", \"rate\": 0.25, \"effectiveDate\": \"2020-03-11\", \"source\": \"...\", \"cachedAt\": \"...\" }` |\n| `get_rate_stats` | Summary statistics of the base rate over a date range (optional `from`/`to`, default full history): min/max with the date each level first applied, time-weighted average, start/end rates and net move in basis points | `{ \"from\": \"2025-01-01\", \"to\": \"2025-12-31\", \"min\": { \"rate\": 3.75, \"date\": \"2025-12-18\" }, \"max\": { \"rate\": 4.75, \"date\": \"2025-01-01\" }, \"average\": 4.2514, \"startRate\": 4.75, \"endRate\": 3.75, \"changeBps\": -100, \"source\": \"...\", \"cachedAt\": \"...\" }` |\n| `get_next_mpc_meeting` | Date of the next scheduled MPC announcement and days until it | `{ \"date\": \"2026-07-30\", \"daysUntil\": 23, \"source\": \"https://www.bankofengland.co.uk/monetary-policy/upcoming-mpc-dates\", \"cachedAt\": \"...\" }` |\n| `get_mpc_dates` | All upcoming MPC announcement dates on the published schedule, each with days until it | `{ \"dates\": [{ \"date\": \"2026-07-30\", \"daysUntil\": 23 }, { \"date\": \"2026-09-17\", \"daysUntil\": 72 }, ...], \"source\": \"https://www.bankofengland.co.uk/monetary-policy/upcoming-mpc-dates\", \"cachedAt\": \"...\" }` |\n| `list_series` | Curated catalog of well-known IADB series (policy rates, market rates, FX, household rates) with code, name, description, unit and frequency — a starting point for `get_series` | `{ \"series\": [{ \"code\": \"IUDSOIA\", \"name\": \"SONIA (Sterling Overnight Index Average)\", \"description\": \"...\", \"unit\": \"percent per annum\", \"frequency\": \"daily (business days)\" }, ...], \"note\": \"get_series also accepts any other IADB code...\" }` |\n| `get_series` | Fetch observations for **any** BoE IADB series by code, with optional `from`/`to` ISO dates and a `limit` (1–500, default 50) on the most recent points | `{ \"seriesCode\": \"IUDSOIA\", \"name\": \"SONIA (Sterling Overnight Index Average)\", \"unit\": \"percent per annum\", \"frequency\": \"daily (business days)\", \"points\": [{ \"date\": \"2025-12-19\", \"value\": 3.69 }, ...], \"source\": \"...\", \"cachedAt\": \"...\" }` |\n\n`get_series` accepts any valid IADB code (not only the catalogued ones); an unknown or empty code returns a clean `Unknown or empty IADB series \"XXXX\" — use list_series for known codes` message. Use `list_series` to discover codes.\n\nIf the BoE is unreachable and a previously cached value exists, tools serve the cached data with `\"stale\": true` so the caller can flag the caveat. With no cache at all they return a clean error message.\n\n## Installation\n\nAdd to your Claude Code `settings.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"boe\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"boe-mcp\"]\n    }\n  }\n}\n```\n\nOr use the CLI:\n\n```bash\nclaude mcp add boe -- npx -y boe-mcp\n```\n\n<details>\n<summary>Claude Desktop</summary>\n\nAdd to `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"boe\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"boe-mcp\"]\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary>Cursor</summary>\n\nAdd to `~/.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"boe\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"boe-mcp\"]\n    }\n  }\n}\n```\n\n</details>\n\n<details>\n<summary>VS Code</summary>\n\nAdd to `.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"boe\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"boe-mcp\"]\n    }\n  }\n}\n```\n\n</details>\n\n## HTTP mode (remote hosting)\n\nBy default the server speaks MCP over stdio as a child process of the client. To host it remotely instead, start it in Streamable HTTP mode:\n\n```bash\nnpx -y boe-mcp --http                  # listen on http://127.0.0.1:3000/mcp\nnpx -y boe-mcp --http 8080             # explicit port\nBOE_MCP_HTTP_PORT=8080 npx -y boe-mcp  # env var instead of the flag\n```\n\n| Setting | How | Default |\n|---------|-----|---------|\n| Enable HTTP mode | `--http` flag or `BOE_MCP_HTTP_PORT` env var | off (stdio) |\n| Port | `--http <port>`, else `BOE_MCP_HTTP_PORT`, else `3000` | `3000` |\n| Bind host | `BOE_MCP_HTTP_HOST` | `127.0.0.1` |\n\nEndpoints: `POST /mcp` (JSON-RPC), `GET /healthz` (returns `ok`, for hosting platform health checks). The transport is **stateless** — every POST is served by a fresh server instance, so there are no sessions to resume and no SSE stream; `GET`/`DELETE /mcp` return 405. That makes instances safe to scale horizontally behind a load balancer.\n\nTry it with curl:\n\n```bash\ncurl -X POST http://127.0.0.1:3000/mcp \\\n  -H 'content-type: application/json' \\\n  -H 'accept: application/json, text/event-stream' \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2025-03-26\",\"capabilities\":{},\"clientInfo\":{\"name\":\"curl\",\"version\":\"0\"}}}'\n```\n\n**Security**: the default bind of `127.0.0.1` only accepts connections from the local machine, and DNS-rebinding protection (Host-header validation) is enabled automatically for loopback binds. Setting `BOE_MCP_HTTP_HOST=0.0.0.0` exposes the server, with no authentication, to every network the machine is attached to — only do that behind a reverse proxy or firewall that controls who can reach it (DNS-rebinding protection is disabled for non-loopback binds, since the server can't know the legitimate public hostname).\n\n## Configuration\n\n| Env var | Default | Description |\n|---------|---------|-------------|\n| `BOE_CACHE_TTL_MINUTES` | `60` | How long to cache BoE responses in memory (`0` disables caching) |\n| `BOE_MCP_HTTP_PORT` | unset | Enable HTTP mode on this port (see [HTTP mode](#http-mode-remote-hosting)) |\n| `BOE_MCP_HTTP_HOST` | `127.0.0.1` | Bind host for HTTP mode — `0.0.0.0` exposes the server to the network; see the security note above |\n\n## Data sources\n\n- **Base rate**: the Bank of England Statistical Interactive Database (IADB), series `IUDBEDR`, via its public CSV endpoint. No auth, no key. Honest caveat: the IADB is not officially documented as a public API — it has been stable for many years and is widely used, but the Bank makes no compatibility promises, so a breaking change is possible in principle.\n- **MPC dates**: parsed from the BoE's public [upcoming MPC dates page](https://www.bankofengland.co.uk/monetary-policy/upcoming-mpc-dates). The parser deliberately avoids depending on the page's markup (it scans the visible text for dates), so cosmetic redesigns won't break it.\n\n## Running from source\n\n```bash\ngit clone https://github.com/moureauf/boe-mcp.git\ncd boe-mcp\nnpm install\nnpm run build\nnpm start            # runs the stdio server\n```\n\n## Contributing & releasing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the development workflow (making changes, testing, adding tools, versioning) and how the release pipeline connects GitHub, npm, and the MCP registry. Publishing is automated: pushing a `v*` tag runs `.github/workflows/publish.yml`, which builds, tests, and publishes to npm via [trusted publishing](https://docs.npmjs.com/trusted-publishers/) (OIDC — no token secret, with a provenance attestation) and to the official MCP registry. Exact commands and one-time setup are in [RELEASING.md](RELEASING.md).\n\n## License\n\nMIT\n",
  "bytes": 9207,
  "sha": "87773714d635665fe9c3018b02abdf3b34458204c8b3eec72a9256c38ce84793",
  "repo_slug": "moureauf/boe-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_moureauf_boe_mcp_b9a4fbac/readme"
}