Starwell: World Data & Statistics

Statistics from 28 agencies: FRED, Eurostat, ECB, World Bank, OECD. Cited values, computed answers.

Should I use this

Quality & Safety

A
Description quality
93%
Schema completeness
86%
Naming quality
96%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • LOWTool 'delete_monitor' has short descriptionin delete_monitor
  • LOWTool 'delete_monitor' description lacks action verbin delete_monitor

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,045Tokens (tool definitions)
~1.1 KBTypical response size
Moderate attention impact (1.60% of 128k context)

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

npmstarwell-mcp0.2.2stdio

Remote endpoints

https://starwell.dev/api/starwell/mcpstreamable-http

What it can do

Tool inventory

Tools (11)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢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

Rate this Server

Evidence

Recent observations

verifiedversion not recorded11 tools
verifiedversion not recorded11 tools