mcp-uk-tools
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., "@mcp-uk-toolsWhat council is SW1A 1AA in?"
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.
mcp-uk-tools
A small Model Context Protocol (MCP) server that exposes UK public-data tools to any MCP-compatible AI client — Claude Code, Claude Desktop, or your own agent.
It's a clean, dependency-light reference for how I build MCP tool servers: a typed tool schema, a thin request handler, and each tool wrapping a real data source. Every source here is a free, keyless public API, so there are no API keys or secrets anywhere in this repo.
I use this same pattern in production to give an LLM grounded, source-cited access to official registers — this is the open, keyless version of it.
Tools
Tool | What it does | Source |
| Town/area, region, council, country & coordinates for a postcode | postcodes.io |
| Nearest postcodes to a latitude/longitude | postcodes.io |
| Upcoming UK bank holidays by division | gov.uk |
Related MCP server: Property Price Search MCP Server
Run it
npm install
node server.js # speaks MCP over stdioUse it from Claude Code / Claude Desktop
Add it to your MCP client config:
{
"mcpServers": {
"uk-tools": {
"command": "node",
"args": ["/absolute/path/to/mcp-uk-tools/server.js"]
}
}
}Then just ask: "What council is SW1A 1AA in?" or "When is the next UK bank holiday?" — the model calls the tools itself.
How it works
ListToolsRequestSchema→ advertises the typed tool schemasCallToolRequestSchema→ routes a call to the matching handlereach handler does one
fetchto a keyless public API and returns JSON
That's the whole contract. Swap the data sources for your own APIs and you have a grounded tool layer for any agent.
Tests
npm test # node --test — schema + input-validation unit testsEvery push and PR runs the suite on Node 18, 20 and 22 via GitHub Actions.
License
MIT © Azeem Javed
Available Tools
3 toolsuk_bank_holidaysA
List upcoming UK bank holidays for a division. Source: gov.uk (keyless).
| Name | Required | Description | Default |
|---|---|---|---|
| division | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description carries the burden. 'Source: gov.uk (keyless)' usefully discloses no auth needed, which is real behavioral value. However it does not state whether results are cached, refreshed, rate-limited, or whether 'upcoming' spans all future holidays or a limited window.
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 short sentences, front-loaded purpose, plus a source/auth note. No waste.
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 single-param read tool this is nearly adequate, but 'upcoming' is underspecified and the omission default is unaddressed. With no annotations or output schema, a bit more disclosure would help.
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?
Schema coverage is 0% and the single param is an enum whose allowed values (england-and-wales, scotland, northern-ireland) are visible in the schema itself. Description does not explain the default when omitted (0 required params). Baseline for a single enum param is met but no added semantics.
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?
States a specific verb (List) and resource (upcoming UK bank holidays) with scope (for a division). Clearly distinct from postcode-lookup siblings.
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?
Implied that it's for retrieving bank holidays, but no when-to-use/when-not guidance or alternatives named. No context on recency scope ('upcoming' is vague about lookahead window).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uk_postcode_lookupB
Look up a UK postcode — town/area, region, council, country and coordinates. Source: postcodes.io (keyless).
| Name | Required | Description | Default |
|---|---|---|---|
| postcode | Yes |
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 usefully discloses the data source and that it is keyless (no API key required), but it does not mention rate limits, error behavior for invalid postcodes, or confirm read-only semantics beyond the implied 'look up'.
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?
One tightly written sentence front-loads the action and resource, then lists returned fields and the source. Every clause earns its place with no redundancy.
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?
With no output schema, the description helpfully enumerates the returned data fields, which is exactly what the agent needs to know. The main gap is the lack of postcode input format, but for a simple one-parameter lookup the description is largely complete.
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?
Schema coverage is 0%, so the single required 'postcode' parameter has no formal description. The description implies a UK postcode is passed but gives no format, spacing, or case guidance, leaving the schema description gap uncompensated.
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 gives a specific verb ('Look up') and resource ('UK postcode'), and enumerates the returned fields (town/area, region, council, country, coordinates). It does not explicitly distinguish itself from the sibling uk_postcode_nearest, so it stops short of a 5.
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?
There is no explicit when-to-use guidance or comparison to alternatives such as uk_postcode_nearest. The agent must infer that this tool is for looking up a known postcode rather than finding the nearest one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
uk_postcode_nearestB
Find UK postcodes nearest to a latitude/longitude. Source: postcodes.io (keyless).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| latitude | Yes | ||
| longitude | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses the data source and that it is keyless (no auth needed), but says nothing about return format, how ties/distance are computed, rate limits, or what happens for coordinates outside the UK.
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 compact sentences, front-loaded with the operation and followed by the source detail. Nothing extraneous.
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 tool with no annotations, no output schema, and 0% parameter coverage, the description is too thin: it omits the meaning of 'limit', the shape of the result, and coverage limits. It is adequate to guess the call but not to invoke it confidently.
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?
Schema description coverage is 0%, so the description must compensate. It conveys the meaning of latitude/longitude, but the 'limit' parameter (its default and max) is entirely undocumented in both the schema and description, leaving a real gap for a 3-param tool.
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?
States a specific verb and resource ('Find UK postcodes nearest to a latitude/longitude') with the input domain made explicit. This clearly distinguishes it from the sibling uk_postcode_lookup, which implies lookup by known postcode rather than reverse geocoding.
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?
Gives no guidance on when to use this versus uk_postcode_lookup, nor any exclusions (e.g. UK-only coverage, non-UK coordinates). The 'nearest' wording implies a use case but nothing is stated about alternatives.
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.
3 tool updates
v1.0.0- First observed
uk_bank_holidays - First observed
uk_postcode_lookup - First observed
uk_postcode_nearest
TDQS
Scored across 3 tools
Each tool serves a clearly distinct purpose: postcode lookup by code, nearest postcodes by coordinates, and bank holidays. There is no overlap between them.
All tools follow a consistent snake_case pattern with the 'uk_' prefix and descriptive names. The naming is predictable and readable.
With only 3 tools, the server feels thin for a general UK utilities toolkit. While each tool is useful, more tools (e.g., reverse geocoding, bank holiday by year) would make the set more complete.
The tools cover two UK data domains (postcodes and bank holidays) but lack obvious operations like looking up a postcode by place name, validating postcodes, or listing holidays for a specific year. Notable gaps exist for a 'UK tools' server.
Maintenance
Related MCP Connectors
Postcodes MCP — wraps postcodes.io UK postcode API (free, no auth)
Address validation & geocoding for AI agents: 240+ countries, UK PAF, free US/CA enrichment
Access comprehensive UK postcode information effortlessly with our geocoding services. Whether you
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides Japanese postal code to address lookup functionality that can be integrated with AI assistants and other MCP clients.3MIT
- AlicenseAqualityDmaintenanceEnables users to search UK property prices by postcode, street, or city using the HM Land Registry's SPARQL endpoint. It also provides tools for resolving postcodes and finding nearby locations through Ordnance Survey data.22MIT

Zyfy MCP Serverofficial
AlicenseAqualityCmaintenanceEnables natural language queries about UK postcodes and vehicles, including flood risk, crime rate, broadband coverage, property prices, MOT history, and ULEZ compliance.417MIT- AlicenseCqualityBmaintenanceA no-key-first MCP server providing access to UK public data including postcodes, bank holidays, carbon intensity, flood warnings, and government datasets.261MIT