boe-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@boe-mcpwhat is the current Bank of England base rate?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
boe-mcp
An 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.

Published on npm as boe-mcp with build provenance — install and run it with npx -y boe-mcp.
Tools
Tool | Description | Example output |
| Current base rate, effective date, months held at this level |
|
| Last N rate changes (default 10) — date, rate, move in basis points vs previous ( |
|
| The base rate in force on a specific historical date |
|
| Summary statistics of the base rate over a date range (optional |
|
| Date of the next scheduled MPC announcement and days until it |
|
| All upcoming MPC announcement dates on the published schedule, each with days until it |
|
| 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 |
|
| Fetch observations for any BoE IADB series by code, with optional |
|
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.
If 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.
Related MCP server: plinth-fx-mcp
Installation
Add to your Claude Code settings.json:
{
"mcpServers": {
"boe": {
"command": "npx",
"args": ["-y", "boe-mcp"]
}
}
}Or use the CLI:
claude mcp add boe -- npx -y boe-mcpAdd to claude_desktop_config.json:
{
"mcpServers": {
"boe": {
"command": "npx",
"args": ["-y", "boe-mcp"]
}
}
}Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"boe": {
"command": "npx",
"args": ["-y", "boe-mcp"]
}
}
}Add to .vscode/mcp.json:
{
"servers": {
"boe": {
"command": "npx",
"args": ["-y", "boe-mcp"]
}
}
}HTTP mode (remote hosting)
By 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:
npx -y boe-mcp --http # listen on http://127.0.0.1:3000/mcp
npx -y boe-mcp --http 8080 # explicit port
BOE_MCP_HTTP_PORT=8080 npx -y boe-mcp # env var instead of the flagSetting | How | Default |
Enable HTTP mode |
| off (stdio) |
Port |
|
|
Bind host |
|
|
Endpoints: 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.
Try it with curl:
curl -X POST http://127.0.0.1:3000/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}'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).
Configuration
Env var | Default | Description |
|
| How long to cache BoE responses in memory ( |
| unset | Enable HTTP mode on this port (see HTTP mode) |
|
| Bind host for HTTP mode — |
Data sources
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.MPC dates: parsed from the BoE's public upcoming MPC dates page. The parser deliberately avoids depending on the page's markup (it scans the visible text for dates), so cosmetic redesigns won't break it.
Running from source
git clone https://github.com/moureauf/boe-mcp.git
cd boe-mcp
npm install
npm run build
npm start # runs the stdio serverContributing & releasing
See 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 (OIDC — no token secret, with a provenance attestation) and to the official MCP registry. Exact commands and one-time setup are in RELEASING.md.
License
MIT
Available Tools
8 toolsget_current_rateCurrent BoE base rateA
Get the current Bank of England base rate, the date it took effect, and how many whole months it has been held at this level.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| rate | Yes | Current base rate in percent, e.g. 3.75 |
| stale | No | Present and true when the BoE was unreachable and this is stale cached data |
| source | Yes | URL the data was fetched from |
| cachedAt | Yes | When the data was fetched (ISO 8601 timestamp) |
| monthsHeld | Yes | Whole months the rate has been at this level |
| effectiveDate | Yes | Date the current level took effect |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It clearly states what data is returned, which is helpful, but it does not explicitly mention that this is a read-only operation or disclose any other behavioral traits such as rate limits or required permissions. The word 'Get' implies non-mutating behavior, but this is not overtly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the primary purpose and lists the outputs. Every word contributes meaning, with no filler or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (zero parameters), the presence of an output schema, and the description's clear enumeration of the returned fields, the description is complete. It provides sufficient context for an agent to select and invoke the tool correctly without additional details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain parameter semantics. Per the rubric, a baseline of 4 is appropriate when there are no parameters, as the schema and description together fully cover the input requirements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('current Bank of England base rate') and details the exact information returned (rate, effective date, months held). It clearly distinguishes from siblings like get_rate_history and get_rate_at by emphasizing 'current'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when the current base rate is needed. While it does not explicitly list alternatives or exclusions, the 'current' qualifier implicitly differentiates it from historical or date-specific tools, making the usage scope obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mpc_datesUpcoming MPC announcement datesA
Get every upcoming Bank of England Monetary Policy Committee announcement date on the published schedule (typically a year or more ahead), each with the number of calendar days until it. Use get_next_mpc_meeting when only the next date is needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| dates | Yes | All published announcement dates on or after today, ascending |
| stale | No | Present and true when the BoE was unreachable and this is stale cached data |
| source | Yes | URL the data was fetched from |
| cachedAt | Yes | When the data was fetched (ISO 8601 timestamp) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It clearly states that the tool returns the published schedule (typically a year or more ahead) and that each result includes a calendar-day count, which indicates a read-only, list-like behavior. It does not mention edge cases like schedule updates or timezone handling, but for a simple zero-parameter read tool the core behavior is transparently described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, with the primary purpose stated first and the alternative-tool pointer in the second. Every clause adds meaningful information, and there is no repetition of the title or obvious filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no parameters and an output schema is present, the description does not need to enumerate return fields. It explains the scope ('every upcoming'), the scheduling horizon, and the day-count detail, which fully covers contextual needs for a simple listing tool. The reference to the sibling tool also places it well in the surrounding tool ecosystem.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description needs to add no parameter-level detail. The description still enhances understanding by specifying that the returned schedule is the published MPC announcement schedule and that results are upcoming dates with day counts, which is useful context beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and a clearly defined resource ('every upcoming Bank of England Monetary Policy Committee announcement date on the published schedule'), including the extra detail that each date comes with the number of calendar days until it. It explicitly distinguishes itself from get_next_mpc_meeting by contrasting the scope (all upcoming vs. only the next).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance by stating 'Use get_next_mpc_meeting when only the next date is needed,' naming the alternative tool and the specific condition under which it should be preferred. This is exactly the kind of when-to-use versus when-not-to-use direction expected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_next_mpc_meetingNext MPC meetingA
Get the date of the next scheduled Bank of England Monetary Policy Committee announcement and the number of days until it.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | Date of the next MPC announcement |
| stale | No | Present and true when the BoE was unreachable and this is stale cached data |
| source | Yes | URL the data was fetched from |
| cachedAt | Yes | When the data was fetched (ISO 8601 timestamp) |
| daysUntil | Yes | Calendar days from today until the announcement |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden. It fully discloses the output: the date and days until. It implies a read-only operation, though it doesn't explicitly state lack of side effects or permission requirements. However, for a simple lookup tool, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence delivers all essential information without any filler. It states both the primary output (date) and the secondary output (days until) efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the description provides a complete picture. An output schema exists, so return structure is presumably defined. The description covers the key purpose and output, and no further context is needed for likely use cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (vacuously). Per the rubric, a baseline of 4 is appropriate since no parameter documentation is needed. The description adds no parameter details because there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('next scheduled Bank of England Monetary Policy Committee announcement'), plus the additional output of days until. This clearly distinguishes it from sibling tools like get_mpc_dates, which likely lists multiple dates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use this tool (to get the next MPC announcement date) and the context is clear. It does not explicitly mention alternatives, but the sibling name 'get_mpc_dates' suggests a different use case, and the description's specificity is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rate_atBoE base rate on a dateA
Get the Bank of England base rate that was in force on a specific historical date, and when that level took effect.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | The date to look up, ISO 8601 (YYYY-MM-DD) |
Output Schema
| Name | Required | Description |
|---|---|---|
| date | Yes | The queried date |
| rate | Yes | Base rate in percent in force on that date |
| stale | No | Present and true when the BoE was unreachable and this is stale cached data |
| source | Yes | URL the data was fetched from |
| cachedAt | Yes | When the data was fetched (ISO 8601 timestamp) |
| effectiveDate | Yes | Date this rate level took effect |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the burden of explaining behavior. It transparently states that the tool returns the rate in force on the given date and also provides the effective date of that level. This goes beyond a simple 'gets a rate' by disclosing the additional returned value, though it leaves out minor details like error conditions or boundary behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence. It states the action ('Get'), the resource ('Bank of England base rate'), the qualifier ('on a specific historical date'), and the additional output ('when that level took effect') with no filler or redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter lookup tool with an output schema present, the description provides the core purpose and one key behavioral detail. It is sufficient for an agent to understand what this tool does and when to invoke it. However, it could be more complete by noting that it is for point-in-time lookups rather than range queries, but this is a minor gap given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents the single 'date' parameter with type, pattern, and description, so schema coverage is 100%. The description repeats that it is a historical date but adds no syntax or format details beyond the schema. This aligns with the baseline 3 for well-covered schemas where the description need not compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with 'Get the Bank of England base rate' which is a specific verb and resource, and immediately narrows scope to 'a specific historical date' plus 'when that level took effect.' This clearly distinguishes it from sibling tools like get_current_rate (current rate) and get_rate_history (history/range), making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided about when to use this tool versus alternatives. It is evident from the description that it takes a specific date, but there are no exclusions, comparisons to sibling tools, or notes on edge cases. The tool names suggest overlap with get_rate_history and get_current_rate, but the description does not address this.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rate_historyBoE base rate historyA
Get the last N Bank of England base rate changes: date, new rate, and the move in basis points vs the previous level (null for the earliest known entry).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Number of rate changes to return (default 10) |
Output Schema
| Name | Required | Description |
|---|---|---|
| stale | No | Present and true when the BoE was unreachable and this is stale cached data |
| source | Yes | URL the data was fetched from |
| entries | Yes | |
| cachedAt | Yes | When the data was fetched (ISO 8601 timestamp) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the return fields (date, new rate, move in basis points) and specifies that the earliest known entry has a null move. This provides meaningful behavioral insight beyond the schema, though it does not mention ordering (e.g., descending chronological) or edge cases like limit exceeding available data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the core action and then specifies the output fields. Every word contributes value, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and a provided output schema, the description adequately covers what the tool returns. The null-handling note adds useful edge-case context. A minor gap is the lack of explicit statement about ordering, but this is inferable from 'last N changes'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes the 'limit' parameter, including default value and range. The description merely refers to it as 'N' without adding new semantics. Since schema coverage is 100%, the baseline score of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get'), the resource ('Bank of England base rate changes'), and the scope ('last N'), with explicit output fields. It effectively distinguishes itself from sibling tools like get_current_rate and get_rate_at, which target a single point in time.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives or provide exclusionary guidance. However, the phrase 'last N changes' implies it is for historical change data, and siblings like get_current_rate imply current rate. The usage context is present but only implicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rate_statsBoE base rate statistics over a rangeA
Get summary statistics of the Bank of England base rate over a date range: minimum and maximum (with the date each level first applied), the time-weighted average, and the rates in force at the start and end of the window with the net move in basis points. Both dates are optional — omit them for the full available history through today. The rate level in force on the start date counts even if it took effect earlier.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | End of the window (inclusive), ISO 8601 (YYYY-MM-DD). Defaults to today; must not be in the future | |
| from | No | Start of the window, ISO 8601 (YYYY-MM-DD). Defaults to the start of the available series |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | Yes | Effective window end used (today when `to` was omitted) |
| max | Yes | |
| min | Yes | |
| from | Yes | Effective window start used (the first available data point when `from` was omitted or predates the series) |
| stale | No | Present and true when the BoE was unreachable and this is stale cached data |
| source | Yes | URL the data was fetched from |
| average | Yes | Time-weighted average rate in percent: each level weighted by the number of calendar days it was in force within the window (not a plain mean of the sparse change points), rounded to 4 decimal places |
| endRate | Yes | Rate in percent in force on the window end date |
| cachedAt | Yes | When the data was fetched (ISO 8601 timestamp) |
| changeBps | Yes | Net move over the window: endRate minus startRate, in basis points |
| startRate | Yes | Rate in percent in force on the window start date |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and meets it well. It discloses optional date behavior, inclusive end, the nuance that the start-date rate counts even if applied earlier, and what the net move represents. This goes beyond merely restating the tool's function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the purpose, and uses no filler. Every sentence adds distinct information: the computed stats, the default behavior, and a subtle inclusion rule. Efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, the description covers the essential behavioral nuances, return contents, and parameter defaults. The output schema exists, so not detailing every field is acceptable. It also handles edge cases (start date rate applied earlier) and full history defaults, making it complete for agent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents both parameters (100% coverage), providing baseline 3. The description adds semantic value by explaining defaults ('Defaults to today' for to, 'Defaults to the start of the available series' for from) and how the inclusive range works with the start-date nuance. This enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Get summary statistics of the Bank of England base rate over a date range.' It enumerates the exact outputs (min/max with dates, time-weighted average, start/end rates, net move), which clearly distinguishes it from siblings like get_rate_history (raw rates) or get_rate_at (single point).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use it: when summary statistics are needed over a range. It clarifies optional dates and defaults ('omit them for the full available history through today'), but it does not explicitly name alternatives or say when not to use it. This is clear context without exclusions, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_seriesGet a BoE IADB time seriesA
Fetch observations for any Bank of England IADB statistical series by its code (e.g. IUDSOIA for SONIA, XUDLUSS for USD/GBP). Optionally restrict to a date range and cap how many of the most recent points are returned. Use list_series to discover codes; any valid IADB code works, not only catalogued ones.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Only return observations on or before this ISO 8601 date (YYYY-MM-DD) | |
| from | No | Only return observations on or after this ISO 8601 date (YYYY-MM-DD) | |
| limit | No | Maximum number of most-recent observations to return after date filtering (default 50, max 500) | |
| seriesCode | Yes | IADB series code, e.g. IUDSOIA, XUDLUSS, IUMBV34 (case-insensitive) |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | Series name, present when the code is catalogued |
| unit | No | Value unit, present when the code is catalogued |
| stale | No | Present and true when the BoE was unreachable and this is stale cached data |
| points | Yes | |
| source | Yes | URL the data was fetched from |
| cachedAt | Yes | When the data was fetched (ISO 8601 timestamp) |
| frequency | No | Observation cadence, present when the code is catalogued |
| seriesCode | Yes | The resolved (uppercased) IADB series code |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses optional date filtering and a limit on most-recent points, and notes that any valid IADB code is accepted. However, it omits details on error handling, authentication, or rate limits, though these may be less critical for a read-only fetch.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two succinct sentences; the first front-loads the primary purpose with examples, the second adds guidance about discovery and scope. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and the simplicity of a read-only fetch, the description is mostly complete. It covers the main use case, optional parameters, and points to the discovery tool, though it could mention sibling tools for rate-specific data.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all four parameters with 100% coverage, so the baseline is 3. The description reinforces the meaning of limit by specifying 'most recent' and gives example codes, but does not add new semantic details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch observations') and the resource ('any Bank of England IADB statistical series'), with concrete examples and a scope note ('any valid IADB code works'). This distinguishes it from sibling rate-specific tools and from list_series, which is for discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly directs users to list_series for discovering codes, which is an alternative. It also states that any valid IADB code works, not only catalogued ones, which frames when to use this tool broadly. However, it doesn't explicitly contrast with other sibling tools like get_current_rate or get_rate_at.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_seriesList known BoE IADB seriesA
List a curated catalog of well-known Bank of England IADB statistical series (policy rates, market rates, exchange rates, household rates) with their code, name, description, unit and frequency. Use this to discover series codes to pass to get_series. get_series also accepts any other IADB code, not only these.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | Note explaining that get_series accepts any IADB code, not only the listed ones |
| series | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It openly discloses the curated nature (not exhaustive) and that get_series accepts more codes, setting correct expectations about coverage and scope.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the verb and outcome. Every clause adds value—scope, fields returned, usage intent, and alternative. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (list operation, no params) and the output schema exists. The description covers purpose, output fields, scope limitations, and relationship to sibling tools, making it fully complete for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema is empty and no parameter-specific guidance is needed. The description effectively explains the output, which is the sole input-agnostic behavior.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists a curated catalog of BoE IADB series with specific fields (code, name, description, unit, frequency). It also distinguishes itself from siblings like get_series by explicitly noting its role in discovering codes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use this to discover series codes to pass to get_series' and notes that get_series accepts any IADB code, not just these. This gives clear when-to-use guidance and alternative behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.2.0- First observed
get_current_rate - First observed
get_mpc_dates - First observed
get_next_mpc_meeting - First observed
get_rate_at - First observed
get_rate_history - First observed
get_rate_stats - First observed
get_series - First observed
list_series
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose: current rate, historical rate, rate changes, rate statistics, next MPC meeting, all MPC dates, series discovery, and series data. The descriptions explicitly clarify boundaries, such as using get_next_mpc_meeting when only the next date is needed.
All tool names follow a consistent verb_noun pattern in snake_case (get_rate_at, get_next_mpc_meeting). The only non-get tool is list_series, which is a standard verb for collection listing and fits the pattern well.
8 tools is well-scoped for a Bank of England data server, covering base rate queries, MPC meeting schedules, and statistical series. There is no unnecessary overlap or bloat.
The tool set provides comprehensive coverage for its domain: full base rate lifecycle (current, history, at-date, stats), all MPC meeting dates (next and full schedule), and series discovery plus arbitrary data retrieval. No obvious gaps exist.
Maintenance
Related MCP Connectors
Bank of England Interactive Statistical Database (IADB) MCP.
MCP server for live currency exchange rates and conversion, ISO codes and Chinese currency names.
Bank of Israel public API MCP. Keyless.
MCP server with quote and live cryptocurrency price tools, local and cloud-deployed transports.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables querying Bank of England statistical data including Bank Rate, SONIA, and exchange rates via the IADB.8MIT
- -licenseNot gradedqualityNot gradedmaintenanceMCP server that provides real exchange-rate data from the European Central Bank, including latest rates, currency conversion, historical rates, and time series.-
- AlicenseAqualityDmaintenanceAn MCP server that provides AI assistants with access to over 40 Bank of Japan statistical databases (interest rates, money supply, exchange rates, tankan, etc.) via the BOJ time-series data search API.423MIT
- AlicenseNot gradedqualityCmaintenanceBanco Central do Brasil MCP server that enables querying Brazilian central bank economic indicators via SGS codes.6MIT