protogrid

Search / com.statsmapped/public-data

StatsMapped Public Data

R0· no sign-in

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

v0.3.2 · active · repository · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality80good
Trust96of 100
Uptime, 30 days100%
Latency p50406 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "public-data": {
      "type": "http",
      "url": "https://mcp.statsmapped.com/mcp"
    }
  }
}
claude mcp add --transport http public-data https://mcp.statsmapped.com/mcp
[mcp_servers.public-data]
url = "https://mcp.statsmapped.com/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "public-data": {
      "type": "remote",
      "url": "https://mcp.statsmapped.com/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "public-data": {
      "type": "http",
      "url": "https://mcp.statsmapped.com/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=public-data&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLnN0YXRzbWFwcGVkLmNvbS9tY3AifQ%3D%3D"
}
{
  "servers": {
    "public-data": {
      "type": "http",
      "url": "https://mcp.statsmapped.com/mcp"
    }
  }
}
{
  "mcpServers": {
    "public-data": {
      "httpUrl": "https://mcp.statsmapped.com/mcp"
    }
  }
}
extensions:
  "public-data":
    enabled: true
    name: "public-data"
    type: streamable_http
    uri: "https://mcp.statsmapped.com/mcp"
    timeout: 300

Quality 80 / 100good

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene64 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length2 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • fail
    tools.annotationsno tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: query_data (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); list_areas (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); compare (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
  • pass
    tools.token_costabout 2,206 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changesno tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvabledeps.dev does not know [email protected]

4 tools, about 2,206 tokens to load them all · tool set 87334268894c · checked 2026-10-19 16:53 UTC

Tool changes

No tool definition changes recorded. A server's first observation is its baseline; later probes record what changes.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 96 / 100

provenance85
liveness100
freshness100
hygiene100

+repository +dns-namespace +website +reachable +uptime-100% +updated-9d-ago

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Dependencies

[email protected] PyPIthis version is not known to the dependency resolver

Dependency graphs from deps.dev; advisories from OSV.dev, including the GitHub Advisory Database and the PyPI Advisory Database; all CC BY 4.0. The graph is what a clean install of this version resolves today; nothing was installed or run. How it is checked.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://mcp.statsmapped.com/mcp streamable-httpnoneyes100%406 ms2026-07-282026-10-19
packageregistryversionruntimesecrets
statsmapped-mcppypi0.3.2uvx

Tools (4)

compareFour 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 the SAME country. 3. Both `stat_key_a` and `stat_key_b` given: does StatsMapped have a registered, hand-vetted comparison between these two stats? Registry- backed only -- never computes a fresh correlation for an arbitrary pair. Both stat_keys come from `query_data`'s dataset-listing mode, for the SAME country. `verdict` is one of `"SUPPORT"` (a real, hand-vetted registered pair with no open caveats -- may be treated as a confirmed relationship), `"QUALIFY"` (hand-vetted, but the evidence carries real caveats -- e.g. no robustness check for outliers, or an unverified geography-level join; read `uncertainty` and `reasons` before presenting it as confirmed), `"REJECT"` (a real structural impossibility or a human-vetted "no" -- the two stats share no geography level at all, or a reviewer rejected this exact pairing), or `"INSUFFICIENT"` (not registered, not ruled out either -- StatsMapped genuinely hasn't vetted this pair; never treat this as "probably comparable"). `uncertainty` names 4 separate dimensions (data_quality, comparability, statistical_strength, causal_strength) -- `causal_strength` is always `"not_established"`, since no comparison here implies causation regardless of verdict. `comparable` (DEPRECATED, kept only for callers that haven't migrated) collapses `verdict` to the old 3-way yes/no/unknown -- `"yes"` for both `SUPPORT` and `QUALIFY` (both mean "hand-vetted", the old `comparable` meaning this field has always carried; the caveats a `QUALIFY` pair carries live in `uncertainty`/`reasons`, not in demoting `comparable`), `"no"` for `REJECT`, `"unknown"` for `INSUFFICIENT`. Prefer `verdict` directly when you need to distinguish a fully-confirmed `SUPPORT` from a caveated `QUALIFY`. Read `reasons` before presenting any answer other than `"SUPPORT"` as unqualified. 4. None of the above given: lists 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: pass one of the returned `pair_key` values to mode 2 for the real correlation and axis detail. `level` is only meaningful together with `stat_key` (mode 1); giving it without `stat_key` raises rather than silently dropping it and falling through to mode 4's unrelated pair listing.
explain_metricDefinition, 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.
list_areasList 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`) and `name`.
query_dataThree modes, depending on which of `area_id`/`dataset` are given -- 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). `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) -- e.g. 24 returns 2 years of an annual series, not 24 years. `country` must match `area_id`'s own country. `dataset` and `history_months` are only meaningful together with `area_id` (and, for `history_months`, `dataset` too, since it only applies to mode 3); giving either without its real precondition raises rather than silently dropping the argument and dispatching to the wrong mode.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "com.statsmapped/public-data",
  "title": "StatsMapped Public Data",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://mcp.statsmapped.com/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.3.2",
  "packages": [
    {
      "version": "0.3.2",
      "transport": {
        "type": "stdio"
      },
      "identifier": "statsmapped-mcp",
      "runtimeHint": "uvx",
      "registryType": "pypi",
      "registryBaseUrl": "https://pypi.org"
    }
  ],
  "repository": {
    "url": "https://github.com/ActiveGuy/statsmapped-mcp",
    "source": "github"
  },
  "websiteUrl": "https://statsmapped.com",
  "description": "Public statistics for Ireland and the UK: housing, crime, health, economy, welfare, with caveats."
}