StatsMapped Public Data

com.statsmapped由 statsmapped.com 发布官方发布者v0.3.2更新于 Nov 7, 2026

Public statistics for Ireland and the UK: housing, crime, health, economy, welfare, with caveats.

已验证Streamable HTTP可网页运行网页搜索与抓取数据与分析

概览

AI 生成的概览

查询 StatsMapped 的爱尔兰与英国公开统计数据(住房、犯罪、健康、经济、福利),并附带注意事项与引用信息。

可以做什么
  • 查找数据集与数值:列出所追踪的统计项,或获取某个地区的可用数据集、最新数值、同比变化,以及含历史的完整详情
  • 列出地区:按所选边界层级返回某国的郡、地方政府辖区、区等地区的 id 与名称
  • 排名与比较:按某项统计对地区排名,查询已登记的跨数据集比较对及其相关性统计,或判断两项统计是否可比
  • 解释指标:给出单项统计的定义、方法与既有注意事项
  • 获取场景数据:为可引用的图表或短片提供数据行、表格副本、替代文本与许可信息
  • 列出显著变化:按时间倒序返回被标记为显著的统计变动,可限定到某项统计或某个地区
适用场景
适合需要按郡或地方政府辖区获取可引用的爱尔兰、英国官方统计数据,或需要说明某项指标含义与测量方式,而不想自行抓取和解析发布方网页的场景。
运行要求
可通过 PyPI 包 statsmapped-mcp 在本地以 stdio 运行(用 pip 安装或用 uvx 运行),也可连接托管的 Streamable HTTP 端点。无需 API 密钥或账号,但会调用 StatsMapped 的公开 HTTPS API,因此需要网络访问。所有工具都带 country 参数,默认爱尔兰。
安装前请注意
仅执行只读 GET 调用,不写入数据。每次工具调用后,客户端会向 StatsMapped 发送一条小型使用事件,包含工具名、结果状态、延迟、stat_key 或 area_id 等标识型参数,以及保存在 ~/.statsmapped-mcp/install_id 的随机安装 id;设置 STATSMAPPED_NO_LOG=1 或 DO_NOT_TRACK=1 可关闭。公开 API 按来源 IP 限流(每小时 600 次请求),托管端点所有用户共用一个出口 IP。比较结果仅限已登记的手工审核配对,多数配对正常返回“unknown”。

安装

在 SourceWeft 中

  1. 打开 控制台中的 StatsMapped Public Data,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/com.statsmapped%2Fpublic-data/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "mcpServers": {
    "statsmapped-public-data": {
      "type": "http",
      "url": "https://mcp.statsmapped.com/mcp"
    }
  }
}

README

statsmapped-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/):

bash
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):

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_id nor dataset: every stat StatsMapped tracks for one country, with its key, label, and which geography levels it's published at. Start here.
    • area_id given, dataset omitted: 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_id and dataset given: full detail on one dataset in one area — a written summary, full caveat text, and (optionally, via history_months) recent history.
  • list_areas(level="county", country="ireland") — every geography at one boundary level. level defaults 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's local_authority/garda_division among 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_key alone: every area at one level, ranked by its latest figure for that stat, highest first.
    • pair_key alone: 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_key comes from the no-argument mode below.
    • both stat_key_a and stat_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. comparable is a string, not a bool: "yes" (a registered, hand-vetted pair; pair_key names 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; pass county="county:cork" and terms="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 (limit 1 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_key or area_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=1
  • DO_NOT_TRACK=1 (the cross-tool convention)

With either set, no event is sent and no install id is written.

Development

bash
cd mcp-serverpip 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).

来源:README.md,提交 54bf67e

工具

5

query_data

Use when you need to find which datasets exist, which exist for one area, or the figures and history for one area and dataset (or a council planning view). For what a metric means use `explain_metric`; for how areas rank use `compare`. Three modes, depending on which of `area_id`/`dataset` are given (plus a planning mode, `council`, described last) -- consolidates what were three separate tools (list_datasets, list_area_datasets, get_dataset_for_area) behind one, since they are all really "how do I get data" at different levels of specificity: 1. Neither `area_id` nor `dataset`: lists every dataset (stat) StatsMapped tracks for one country ('ireland' or 'united-kingdom'), with its key, human label, and which geography levels it can be shown at. Ireland and the UK track genuinely different datasets -- call this first for the right country before assuming a stat_key exists there, to find the right `stat_key` for `compare`'s ranking mode. 2. `area_id` given, `dataset` omitted: lists every dataset available for that one area (e.g. "county:kerry" for Ireland, "uk:lad:e09000033" for the UK), with its latest figure, year-on-year change, and caveat labels only (not full caveat text -- use mode 3 for the full detail on any one dataset that matters). Pass `stat_key` (from mode 1) to list only that stat's series for the area: a full listing is tens of KB, one stat is a few hundred bytes. `area_id` comes from `list_areas`; `country` must match whichever country that call used, or this simply 404s ("unknown geography"). 3. Both `area_id` and `dataset` given: full detail for one dataset in one area -- the latest figure, a written summary, full caveat text, and (if `history_months` is set) recent history. `dataset` is a `series_key` from mode 2's own response. `history_months` means actual months of history (0 = everything) --

输入参数area_idcouncilcountrydatasetstat_keyhistory_months

list_areas

Use when you need the ids and names of the areas (counties, local authorities, districts) to pass to `query_data`. List every geography at one boundary level, for one country ('ireland' or 'united-kingdom'). `level` defaults to "county" (Ireland's 26 counties); the UK's own primary level is "lad" (local authority districts), not "county". Other levels exist per country (e.g. Ireland's "local_authority", "garda_division") -- see a dataset's own `compatible_levels` from `query_data` for which levels a given stat is actually published at. Returns each area's `id` (used by `query_data`'s area-scoped modes, always paired with the SAME `country`), `name` and `level`. Slim by default; `include_parents=True` adds each area's `parents` (the regions it sits in) and Irish-language name.

输入参数levelcountryinclude_parents

compare

Use when the question is how areas rank or compare on a stat, or whether two stats can be compared fairly. For one area's own figures use `query_data`. Four modes, depending on which arguments are given -- consolidates what were four separate tools (rank_areas, list_comparisons, get_comparison, check_comparability) behind one, since they are all really "how does this stat compare" at different scopes. Exactly one mode's arguments should be given; mixing arguments from different modes (e.g. both `stat_key` and `pair_key`, or only one of `stat_key_a`/`stat_key_b`) raises an error rather than silently guessing which mode was meant. 1. `stat_key` alone (no `pair_key`, no `stat_key_a`/`stat_key_b`): ranks every area at one geography level by its latest figure for that stat, for one country -- e.g. "which counties have the highest median sale price" (country="ireland"). `stat_key` comes from `query_data`'s dataset-listing mode, for the SAME country. `level` omitted uses this ranking's own default level; pass one of that dataset's own `compatible_levels` for a different one -- a level this ranking doesn't have registered returns an empty list rather than an error. Where the underlying stat has no honest per-area denominator (crime, homelessness, live_register and similar -- StatsMapped's own RANKING_NO_DENOMINATOR_STATS), each row's `rate_per_1000` is the real figure to rank/compare by, not `latest_value`, which is a raw count dominated by area population size. Always carry forward every entry in `caveats` when using a row in an answer. 2. `pair_key` alone: full detail for one registered comparison pair -- each axis's label, unit and publisher, the correlation stats (r, rho, and a leave-one-out sensitivity range naming the single most influential area), and caveats. `pair_key` comes from mode 4's own response, for

输入参数levelcountrypair_keystat_keystat_key_astat_key_b

explain_metric

Use when the question is what a metric means or how it is measured; for a figure use `query_data`. Definition, methodology and standing caveats for ONE stat ('ireland' or 'united-kingdom') -- never a current figure. Call this when the question is about what a metric MEANS or how it's measured ("how is the claimant count defined", "is this a mean or a median"), not about a specific area's value -- `query_data`/`compare` already answer that. `stat_key` comes from `query_data(country=...)` for the SAME country.

输入参数countrystat_key必填

get_scene

The data to DRAW one scene, nothing rendered: use it when asked for a chart, still or short clip of a figure you can cite. Today one scene exists, "ireland-builds" (Ireland's homes granted permission, with a commencement notice and completed, by quarter from 2018Q1). The licence DIFFERS BY STAGE (see `licence.stages`): a stage whose licence is unconfirmed or ShareAlike is withheld (its cells are absences, not zeros) and the licence line names its holder. You get rows, a table twin, alt text, notes, `absences` (a missing figure is a typed absence, never a zero), the licence block, `scene_hash`, a `receipt` and the canonical URL. YOU draw it, and the last frame must match the table. Print the `scene_hash` and the licence `line` in the first, middle and last frame, quote only numbers that are in `rows`, do not loop, and keep the "stages are not a cohort" note. `purpose` is "analytical" (default) or "promotional": a promotional use of a source whose licence forbids advertising is refused (licence_refused). `vintage` (ISO date) omitted = the current data; an earlier vintage is not stored and returns unknown_vintage. Example: get_scene(scene_id="ireland-builds").

输入参数countrypurposevintagescene_id

版本历史

2
  1. v0.3.2最新Oct 10, 2026
  2. v0.3.1Oct 9, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分