Lets an AI agent query public statistics for Ireland and the UK regarding housing, crime, health, economy, and social welfare.
Also known as ActiveGuy/statsmapped-mcp, statsmapped-mcp
- Stars
- 0
- Tools
- 6
- Downloads, 30 days
- 2,888
- Latest version
- 0.3.2
- Last commit
- Nov 6, 2026
- License
- MIT
What is StatsMapped Public Data MCP?
StatsMapped Public Data lets an AI agent query public statistics for Ireland and the UK regarding housing, crime, health, economy, and social welfare. It exposes 6 tools, such as query_data, list_areas, compare.
Summary generated from the project's README
About StatsMapped Public Data MCP server
StatsMapped Public Data provides AI agents with direct access to official statistics for Ireland and the United Kingdom. It covers diverse sectors including housing, crime, health, the economy, and social welfare. The server acts as a thin client for the StatsMapped public API, allowing users to retrieve data from official publishers like the CSO, ONS, and the Central Bank of Ireland without needing an API key.
Developers can run this server locally via stdio, which is the recommended setup to avoid shared rate limits, or use the hosted streamable-http mode. It is designed for use with MCP clients such as Claude Desktop and Cursor. The server includes tools to query specific datasets, list geographic areas like Irish counties or UK local authority districts, compare registered statistical pairs, and explain metric methodologies. It also offers functionality to identify notable statistical movements and retrieve data formatted for creating charts.
What you can do with it
- 1Retrieve regional housing statisticsAsk the agent to find the latest housing dataset and year-on-year changes for a specific Irish county.
- 2Understand metric definitionsAsk the agent to explain the methodology and caveats behind a specific economic or social metric.
- 3Identify significant data shiftsHave the agent list recent statistical movements that have been flagged as notable changes.
Written from the project's README. Every use case is checked against a quote from it.
How to install StatsMapped Public Data MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall StatsMapped Public Data MCP in Claude Code
$ claude mcp add statsmapped-mcp -- uvx statsmapped-mcpInstall StatsMapped Public Data MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"statsmapped-mcp": {
"command": "uvx",
"args": [
"statsmapped-mcp"
]
}
}
}Install StatsMapped Public Data MCP in VS Code
.vscode/mcp.json
{
"servers": {
"statsmapped-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"statsmapped-mcp"
]
}
}
}Install StatsMapped Public Data MCP in VS Code CLI
$ code --add-mcp '{"name":"statsmapped-mcp","type":"stdio","command":"uvx","args":["statsmapped-mcp"]}'Install StatsMapped Public Data MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"statsmapped-mcp": {
"command": "uvx",
"args": [
"statsmapped-mcp"
]
}
}
}Install StatsMapped Public Data MCP in Codex
$ codex mcp add statsmapped-mcp -- uvx statsmapped-mcpInstall StatsMapped Public Data MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.statsmapped-mcp] command = "uvx" args = ["statsmapped-mcp"]
Install StatsMapped Public Data MCP in Gemini CLI
$ gemini mcp add -s user statsmapped-mcp uvx -- statsmapped-mcpInstall StatsMapped Public Data MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"statsmapped-mcp": {
"command": "uvx",
"args": [
"statsmapped-mcp"
]
}
}
}StatsMapped Public Data MCP tools 6
Detected from the READMEquery_datalist_areascompareexplain_metricget_scenenotable_changes
| query_data | — | |
| list_areas | — | |
| compare | — | |
| explain_metric | — | |
| get_scene | — | |
| notable_changes | — |
Automated checks
Ran Nov 13, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachableactiveguy/statsmapped-mcp is public and reachablegithub.com/activeguy/statsmapped-mcp ↗Pass
- Package names this repository as its sourcestatsmapped-mcp names activeguy/statsmapped-mcp as sourcepypi.org/project/statsmapped-mcp/ ↗Pass
- Build provenance (Sigstore attestation)Sigstore attestation for statsmapped-mcppypi.org/project/statsmapped-mcp/ ↗Pass
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit or release 2026-11-06github.com/activeguy/statsmapped-mcp ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNo popular package one edit away from statsmapped-mcpPass
- No critical advisory in the package or its dependencies32 resolved dependencies checked; no critical advisoryosv.dev ↗Pass
- No hidden instructions to the model6 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNo tool named like delete, drop or execPass
- Remote endpoint answers the MCP handshakeinitialize answered with protocol 2025-06-18 in 88 msPass
README
View on GitHubstatsmapped-mcp
An MCP server exposing StatsMapped's public API as tools for AI agents (Claude Desktop, Cursor, and any other MCP client).
StatsMapped tracks public data for Ireland (by county) and the UK (by local authority) — housing,
crime, health, the economy and social welfare — from official publishers (CSO, PSRA, Central Bank
of Ireland, DHLGH, NTPF, the Office of Government Procurement, EU Publications Office for Ireland;
ONS/HM Land Registry/Nomis/DfE/DfT for the UK), each figure carrying its own caveats. This
package lets an agent query that data directly as tool calls instead of crawling and parsing
web pages. Every tool below takes a country argument ("ireland" or "united-kingdom",
default "ireland") — the two countries track genuinely different datasets and geography levels,
so call query_data/list_areas for the country you actually want rather than assume
Ireland's defaults apply.
This is a thin client. It calls StatsMapped's already-public, unauthenticated HTTPS API
(documented at statsmapped.com/openapi.json); no API key
is needed for anything below. Runs on your own machine over stdio by default (the recommended way
to use it today) -- see Why stdio for a hosted
streamable-http mode this package also supports, and the real tradeoff that comes with it.
Install
Published on PyPI as statsmapped-mcp (confirmed live: https://pypi.org/project/statsmapped-mcp/):
pip install statsmapped-mcp
Configure
Add to your MCP client's config (for Claude Desktop, claude_desktop_config.json; Cursor uses an
equivalent mcp.json):
{
"mcpServers": {
"statsmapped": {
"command": "statsmapped-mcp"
}
}
}
Tools
6 tools (consolidated from an original 9 -- query_data and compare are each one tool with a
few modes, chosen by which arguments you give, rather than several near-identical single-purpose
ones). Every tool takes a country argument ("ireland" or "united-kingdom", default
"ireland") — Ireland and the UK track different datasets and geography levels, so call
query_data/list_areas for the country you want rather than assume Ireland's defaults apply.
query_data(area_id=None, dataset=None, history_months=0, country="ireland")— three modes:- neither
area_idnordataset: every stat StatsMapped tracks for one country, with its key, label, and which geography levels it's published at. Start here. area_idgiven,datasetomitted: every dataset available for one area (e.g."county:kerry"for Ireland,"uk:lad:e09000033"for the UK), with its latest figure and year-on-year change. Caveats are projected to label + severity only, not full text — the point is deciding which datasets matter before paying for the full detail on any one of them.- both
area_idanddatasetgiven: full detail on one dataset in one area — a written summary, full caveat text, and (optionally, viahistory_months) recent history.
- neither
list_areas(level="county", country="ireland")— every geography at one boundary level.leveldefaults to Ireland's 26 counties; the UK's own primary level is"lad"(local authority districts), not"county"— other levels exist per country too (Ireland'slocal_authority/garda_divisionamong them).compare(stat_key=None, level=None, pair_key=None, stat_key_a=None, stat_key_b=None, country="ireland")— four modes, exactly one set of arguments at a time (mixing them raises an error):stat_keyalone: every area at one level, ranked by its latest figure for that stat, highest first.pair_keyalone: full detail for one registered comparison pair — each axis's label/unit/publisher, the correlation stats (r, rho, a leave-one-out sensitivity range), and caveats.pair_keycomes from the no-argument mode below.- both
stat_key_aandstat_key_b: does StatsMapped have a registered, hand-vetted comparison between these two stats? Registry-backed only — never computes a fresh correlation for an arbitrary pair.comparableis a string, not a bool:"yes"(a registered, hand-vetted pair;pair_keynames it),"no"(the two stats share no geography level at all), or"unknown"(not registered, but not ruled out: treat as "ask a human", not "probably yes")."unknown"is the normal result for most pairs. Compare the value explicitly (result["comparable"] == "yes"); a truthiness test is true for all three.reasons(a list) always explains the answer. - none of the above: every registered cross-dataset comparison pair for one country (e.g. "median sale price vs new dwelling completions per 1,000 residents"). A small, hand-curated set, not an arbitrary-pair engine.
explain_metric(stat_key, country="ireland")— definition, methodology and standing caveats for one stat, never a current figure. Use this when the question is about what a metric means or how it's measured, not about one area's value.get_scene(scene_id="ireland-builds", purpose="analytical", vintage=None, country="ireland")— the data to draw one chart or short clip of a citable figure (rows, a table twin, alt text, the licence block,scene_hash), nothing rendered. Two scenes exist:"ireland-builds"and"county-in-motion"(one county against the county median, one row per year; passcounty="county:cork"andterms="real"or"nominal"). A promotional use of a source whose licence forbids advertising is refused.notable_changes(limit=8, stat_key=None, geography_id=None, country="ireland")— the statistical movements StatsMapped flagged as notable, newest first (limit1 to 50), optionally narrowed to one stat or one area. They are movements, not verdicts on what they mean.
Citing an answer. A single-figure answer (query_data with both arguments, compare with
pair_key, explain_metric) carries attribution: the publisher's own required wording when the
publisher states one (for example "Source: Office for National Statistics. Contains public sector
information licensed under the Open Government Licence v3.0."), otherwise
StatsMapped's note. StatsMapped's note is always in attribution_note. Quote attribution
where you show the figure; publisher, license and licence_class sit beside it (on each axis,
for a comparison). A list of many datasets (query_data with area_id alone) has more than one
publisher, so its top-level attribution is StatsMapped's note, and each entry carries its own
publisher's attribution when that publisher states one. notable_changes carries only
attribution_note.
Why stdio, not a hosted server, by default
StatsMapped runs on a single free-tier instance. A remote MCP endpoint hosted there would let an agent's own multi-area query pattern (calling the same tool once per area, in a loop) reproduce exactly the load pattern that has already caused timeouts on that instance under a large geography fan-out. Running over stdio means every call goes through your own network connection to the same public HTTPS API this package's tools call directly, with no shared bottleneck -- each user's own machine makes the HTTP calls, so N users' traffic is naturally spread across N source IPs, not funnelled through one.
server.py also supports a real hosted streamable-http mode (MCP_TRANSPORT=streamable-http)
for a deployment that accepts that tradeoff -- StatsMapped's public API is itself rate-limited
per source IP (600 requests/hour), but a hosted MCP endpoint proxies every remote user's calls
through ONE shared egress IP, so all remote users of a hosted endpoint would share that one
bucket rather than each getting their own. A StatsMapped-hosted endpoint is live at
https://mcp.statsmapped.com/mcp (Streamable HTTP) -- confirmed responding correctly, no
separate install needed for a client that speaks Streamable HTTP directly. The bare host
(https://mcp.statsmapped.com, no path) redirects to the same endpoint as a courtesy.
What the client reports, and how to turn it off
After each tool call the client sends one small usage event to StatsMapped. It contains:
- the tool name, whether the call succeeded, how it ended (answered, empty, error or unsupported) and its latency;
- identifier-shaped arguments from a closed list, such as
stat_keyorarea_id, and never free text; - a random install id kept in
~/.statsmapped-mcp/install_id.
To send nothing, set either of these in the server's environment (for example in the env block of your MCP client config):
STATSMAPPED_NO_LOG=1DO_NOT_TRACK=1(the cross-tool convention)
With either set, no event is sent and no install id is written.
Development
cd mcp-server
pip install -e .
python tests/test_client.py
The test suite runs against the real live API (https://statsmapped.com by default, or
STATSMAPPED_MCP_BASE_URL if set) — read-only GETs only, nothing here writes any data or needs
a key.
Licence
MIT for this package. The underlying data keeps each publisher's own licence — see
statsmapped.com/ireland/sources for Ireland's own
publisher/licence detail before reusing any figure outside of querying it through an agent (a UK
equivalent page doesn't exist yet — check each UK tool response's own caveats/sources fields
in the meantime).
StatsMapped Public Data MCP questions
How do I add StatsMapped Public Data MCP to Claude Code?
Run claude mcp add statsmapped-mcp -- uvx statsmapped-mcp in your terminal. Add --scope user to make it available in every project.
How do I add StatsMapped Public Data MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What tools does StatsMapped Public Data MCP provide?
It exposes 6 tools, including query_data, list_areas, compare, explain_metric, get_scene.
Do I need an API key to use StatsMapped?
No, the server calls an unauthenticated HTTPS API and no API key is required.
How can I install the StatsMapped MCP server?
You can install it via PyPI using the command pip install statsmapped-mcp.
Can I use this server without sending usage data?
Yes, you can disable usage reporting by setting the environment variables STATSMAPPED_NO_LOG=1 or DO_NOT_TRACK=1.
Does the server support both Ireland and the UK?
Yes, it provides data for Ireland by county and the UK by local authority.