Starwell: World Data & Statistics
Statistics from 28 agencies: FRED, Eurostat, ECB, World Bank, OECD. Cited values, computed answers.
Should I use this
Quality & Safety
Findings (2)
- LOWin delete_monitor
- LOWin delete_monitor
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"world-data-statistics": {
"command": "npx",
"args": [
"starwell-mcp"
]
}
}
}Runnable packages
0.2.2stdioRemote endpoints
https://starwell.dev/api/starwell/mcpstreamable-httpWhat it can do
Tool inventory
Tools (11)
🟢list_sources
List the official statistical sources served by this data layer (e.g. Statistics Canada, FRED), with dataset/series counts, cadence notes, and terms links. Start here to see what exists.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢search_catalog(query, source, limit, offset)
Find series across ALL sources in one call: case-insensitive search over series ids, indicator names, geographies, and dataset titles (e.g. "unemployment canada", "10-year treasury", "CPI"). Returns candidate series with units, coverage, verification status, and license, plus datasetMatches from the wider dataset index — datasets whose series can be requested by source-native id and are fetched from the official source on first call. The fastest path from a question to the exact series id to fetch or pin in the answer tool.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Search terms, e.g. \"unemployment rate canada\""
},
"source": {
"type": "string",
"description": "Optional source slug to restrict to, e.g. 'fred'"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Max results (default 20)"
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Skip the first N ranked hits (default 0). When hasMore is true, call again with offset = offset + limit."
}
},
"required": [
"query"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_datasets(source)
List the datasets (official releases/tables) available in one source, with coverage dates and links to the official table pages.
Input Schema
{
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "Source slug, e.g. 'fred' or 'statcan'"
}
},
"required": [
"source"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_series(source, seriesId)
Full metadata for one series: indicator, unit, frequency, geography, coverage, its VERIFICATION STATUS (passing/stale/failing/unverified from golden-value + freshness checks against the live source), recent check records, and the citation to the official table.
Input Schema
{
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "Source slug, e.g. 'fred'"
},
"seriesId": {
"type": "string",
"description": "Source-native series id, e.g. 'UNRATE' or 'v41690973'"
}
},
"required": [
"source",
"seriesId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_observations(source, seriesId, start, end, latest)
Observation values for one series. Every value carries provenance (the exact source URL it came from, retrieval time, connector version) and the envelope carries the series verification status + citation. Defaults to the latest 60 points; use start/end (YYYY-MM-DD) or latest to control the window.
Input Schema
{
"type": "object",
"properties": {
"source": {
"type": "string"
},
"seriesId": {
"type": "string"
},
"start": {
"type": "string",
"description": "YYYY-MM-DD inclusive lower bound"
},
"end": {
"type": "string",
"description": "YYYY-MM-DD inclusive upper bound"
},
"latest": {
"type": "integer",
"minimum": 1,
"maximum": 2000,
"description": "Return only the latest N points (default 60 when no start/end given)"
}
},
"required": [
"source",
"seriesId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢get_series_stats(source, seriesId)
Latest value, previous, all-time min/max, mean, and change vs the previous period and vs a year ago — computed over the verified store, with the citation attached. The cheap way to answer "what is it now and how has it moved" without a full analysis run.
Input Schema
{
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "Source slug, e.g. 'fred'"
},
"seriesId": {
"type": "string",
"description": "Series id, e.g. 'DGS10'"
}
},
"required": [
"source",
"seriesId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴create_monitor(source, seriesId, webhookUrl)
Create a monitor: when the store's refresh lands a new period or a revised value for the series, a series.updated webhook fires to your URL with the new value, verification status, and citation. Requires an API key (free with an account at /account); webhook must be https. Manage with list_monitors / delete_monitor.
Input Schema
{
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "Source slug, e.g. 'fred'"
},
"seriesId": {
"type": "string",
"description": "Series id, e.g. 'DGS10'"
},
"webhookUrl": {
"type": "string",
"description": "https URL to receive series.updated events"
}
},
"required": [
"source",
"seriesId",
"webhookUrl"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢list_monitors
Monitors on your API key, with delivery health (last fired, failures, active).
Input Schema
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/schema#"
}🔴delete_monitor(id)
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Monitor id from list_monitors"
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡answer(question, series, start, end, share)
The flagship: ask a natural-language question about the served official statistics. Returns a COMPUTED answer (real Python runs in a sandbox over the verified store, nothing is estimated by a model), the Plotly chart, the Python code, citations to the official tables, and a verification badge per series. CROSS-SOURCE: one question may join series from DIFFERENT agencies, e.g. unemployment from the US BLS, Statistics Canada and the UK ONS in a single call, for correlations, ratios, and like-for-like comparison. How many series one question may join is set by the caller's plan; asking for more returns a series_limit error naming that cap. Returns a refusal when no served series can answer. Takes 10-40 seconds. Requires a free API key (create at /account on the Starwell host; pass Authorization: Bearer dlk_... or set STARWELL_API_KEY on the starwell-mcp bridge). Keyless calls return key_required.
Input Schema
{
"type": "object",
"properties": {
"question": {
"type": "string",
"minLength": 3,
"maxLength": 500
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"source": {
"type": "string"
},
"seriesId": {
"type": "string"
}
},
"required": [
"source",
"seriesId"
],
"additionalProperties": false
},
"maxItems": 6,
"description": "Optional: pin exact series, across sources, and skip AI resolution"
},
"start": {
"type": "string",
"description": "YYYY-MM-DD"
},
"end": {
"type": "string",
"description": "YYYY-MM-DD"
},
"share": {
"type": "boolean",
"description": "When true, the answer becomes a permanent public page and meta.permalink carries its URL — hand it to the user as a citable link"
}
},
"required": [
"question"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟡deep_analysis(question, series, start, end)
The moat: a PLANNED multi-section report on a question. The engine designs 3-4 orthogonal analyses (trend, statistics, outliers, cross-series relationships), runs real Python for each in the sandbox over the verified store, and synthesizes one decision-ready report. Every number computed, every series cited and verification-badged. Sections can join series from DIFFERENT agencies in one report, up to the caller's plan width; over it, the call returns a series_limit error naming that cap. Slower than answer (60-180 seconds), so use it for "analyze", "break down", "give me a full picture" asks; use the answer tool for a single direct question. Requires a free API key (create at /account on the Starwell host; pass Authorization: Bearer dlk_... or set STARWELL_API_KEY on the starwell-mcp bridge). Keyless calls return key_required.
Input Schema
{
"type": "object",
"properties": {
"question": {
"type": "string",
"minLength": 3,
"maxLength": 500
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"source": {
"type": "string"
},
"seriesId": {
"type": "string"
}
},
"required": [
"source",
"seriesId"
],
"additionalProperties": false
},
"maxItems": 6,
"description": "Optional: pin exact series, across sources, and skip AI resolution"
},
"start": {
"type": "string",
"description": "YYYY-MM-DD"
},
"end": {
"type": "string",
"description": "YYYY-MM-DD"
}
},
"required": [
"question"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence