MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Data access / search

EU Trade Explorer

EU customs-trade & industrial-production statistics (Eurostat Comext/PRODCOM)

Checks passed
13 / 22

1 failed · 8 not measured

Median response
853 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
38

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Outdated check

Last connection measurement is over 24 hours old. Current availability is unknown.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
004
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
400
Publisher identityCan the publisher be traced to its source?
312

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 853 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name EU Trade Explorer.

  • Pass
    Lists tools

    tools/list returned 38 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 853 ms over 1 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 853 ms over 1 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    1 of 1 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Not measured
    Stable tool list

    Fewer than two successful probes in 30 days, so tool-list stability is not measured.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Pass
    Parameters documented

    488 of 488 parameters have a description (100%). The bar is 80%.

  • Pass
    Safety hints

    Every tool sets readOnlyHint or destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Pass
    Website matches publisher

    The website host matches the reverse-domain namespace.

  • Fail
    Source repo linked

    No repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Pass
    Recently updated

    Updated 2026-11-04T12:43:44.746536Z, within 180 days.

  • Not measured
    Open-source licence

    No GitHub repository to ask about a licence.

Start using EU Trade Explorer

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http eu-trade-explorer https://mcp.tradedashboard.eu/mcp

Capabilities

Tools 38

get_autonomy_summary

Report-section helper ("Autonomy & vulnerability"): net import reliance (`get_net_import_reliance`) is always the headline fact/chart. Trade intensity and export propensity (`get_trade_intensity` / `get_export_propensity`) are both computed, then a deterministic salience score -- distance from an unremarkable ~50% band, plus the magnitude of its own change -- decides which one leads the narrative; this choice is never left to the caller. `trade_intensity_pct` is returned fully unit-consistent (first/last/min/max all expressed as a percentage, matching `export_propensity_pct`). Sub-contracting is deliberately not included in this section at all -- it is an unrelated, tiny-base PRODCOM series that only muddied the narrative. Returns `{"result": {narrative_facts, chart_data, links, available, reason}}`.

Discovered
get_chapters

List all top-level Combined Nomenclature chapters (2-digit codes). Bootstraps browsing the nomenclature top-down; drill into a chapter with `get_subtree`.

Discovered
get_concentration

Herfindahl-Hirschman Index (HHI) of trade concentration across partners or Member States, per period (0 = perfectly spread, 10000 = one entity holds the whole market), plus the top-8-by-value share breakdown (rest bundled as 'Others'). Higher HHI = more dependent on a handful of counterparties.

Discovered
get_concentration_compare

Partner-concentration (HHI) compared across sub-codes: one HHI line per sub-code rather than per flow, to see which sub-codes drive a parent code's overall concentration.

Discovered
get_concentration_map

Cross-sectional HHI per country for one year -- the choropleth counterpart of get_concentration. 'partner' entity_level = for every EU member state, HHI of its trade across partners; 'reporter' = for every partner, HHI of its trade across EU member states (subject to the Rotterdam/Antwerp entry-point distortion).

Discovered
get_countries

Reference data for reporters/partners: selectable EU/Euro-area/Member States, named partner presets, predefined reporter/partner groups, and per-language country-name translations. Use this to find valid values for the `reporter`, `partner_set`, `partners` and `group_reporters` fields used throughout the other tools' `query` argument.

Discovered
get_customs_code_profile

Report-section helper ("Scope & definitions"): the resolved customs code + label (in `query.lang`), a one-sentence caveat when the code bundles several sub-codes (`has_subcodes`), the data-coverage window actually cached for it, and whether it has a usable PRODCOM mapping (gating the autonomy/vulnerability section). Deliberately thin -- no full CN hierarchy breadcrumb or sibling enumeration. Returns `{"result": {narrative_facts, chart_data, links, available, reason}}` -- see `get_market_summary` for the section shape this convention follows across all of this bridge's report-section helpers.

Discovered
get_data_range

Return the period coverage (`data_min`/`data_max`, 'YYYY-MM') actually cached for the given customs code(s) -- use before picking `period_start`/`period_end` so you don't request an empty window.

Discovered
get_documentation

Read one complete MCP guide: `query-model` (access, shared query fields, pieces and baskets), `customs-codes` (segments, residuals and historical selections), `prodcom` (production mappings, suppression and availability), `methodology` (indicator formulas and interpretation), or `reporting` (short/long workflows and dashboard navigation). The same canonical text is available as `eu-trade://docs/<topic>` resources.

Discovered
get_export_propensity

Export Propensity = Exports / Production, annual: the share of EU production that is exported. Not clamped -- values above 100% are legitimate (re-exports, stock drawdown, scope differences). Returns the export-propensity matrix, a sibling/per-code comparison, resolved PRODCOM codes and availability notes.

Discovered
get_full_report

Fetch every report section (scope, overview, market structure, volatility, autonomy) for one shared `query` (labels in `query.lang`) in a single call, instead of calling `get_customs_code_profile` / `get_market_summary` / `get_market_structure_summary` / `get_volatility_summary` / `get_autonomy_summary` separately yourself. Guarantees all five sections describe the exact same customs-code/reporter/partner/period slice -- five separate calls have no such guarantee, since nothing stops `query` from being re-typed slightly differently across them, or one of the five simply being forgotten. `query`'s own field defaults (`reporter='European Union'`, `partner_set='non-EU countries'`, `period_start='2015-01'`, `frequency='quarter'`, `remove_outliers=true`, ...) are exactly the sensible defaults for a first-cut report; override any of them for a different slice -- e.g. a specific Member State, a custom partner group, a narrower period. Returns `{"result": {"query": {...}, "sections": {<name>: {narrative_facts, chart_data, links, available, reason}, ...}}}` for `<name>` in `customs_code_profile`, `market_summary`, `market_structure`, `volatility`, `autonomy`. `links` maps each `narrative_facts` key to a ready-made `https://tradedashboard.eu/...` URL for that same fact -- never construct one of these yourself; use the one already provided.

Discovered
get_map_data

Choropleth-ready aggregates: per-period totals (quantity, value, price) for imports and exports, keyed by GISCO country code on both the reporter and partner sides.

Discovered
get_market_structure_summary

Report-section helper ("Market structure"): combines, in priority order, the intra-EU specialisation snapshot (`get_specialisation`, already map-ready), partner-concentration detail (`get_concentration`, keeping the top-8-by-value share breakdown as `chart_data` alongside the condensed HHI trend) and, when a PRODCOM mapping exists for the customs code, EU production volumes (`get_production_series`). These three are independent data sources bundled only because they all describe "market structure" -- the specialisation RSCA is trade-based and has no relation to the PRODCOM production figures; treat them as separate findings, not a single connected story. `most_specialised_reporters` / `least_specialised_reporters` are pre-sorted by actual RSCA (highest/ lowest first respectively) -- use them as-is rather than re-deriving a ranking. `query.prodcom_code` is passed through untouched -- picking among ambiguous PRODCOM mappings is left to the caller, never guessed here. Returns `{"result": {narrative_facts, chart_data, links, available, reason}}`.

Discovered
get_market_summary

Report-section helper ("General overview"): condensed, report-ready digest of how a market has evolved over the chosen window -- one call instead of separately fetching and cross-referencing get_overview + get_reporter_detail + get_concentration + get_net_import_reliance yourself. Set `query.frequency = "year"` for a multi-year evolution summary (recommended over the model's default of "quarter"). Every figure reflects `query` exactly as given -- the same customs-code/reporter/partner_set/period slice a dashboard user would have selected. Nothing here substitutes a different reporter or partner_set (e.g. to contrast intra-EU against extra-EU trade): call this again with a different `query.partner_set` for that, the same way a dashboard user would switch the sidebar's selector. Returns `{"result": {narrative_facts, chart_data, links, available, reason}}`. `narrative_facts` combines, for the flow selected by `query.partner_set`: - Headline trade: first/last/min/max/pct_change for export & import value, quantity and price, plus the trade-balance trend. - Partner concentration: first/last/pct_change of the value-based HHI for imports and exports. - Top partners *and* top EU reporters by value: each one's first/last/pct_change -- i.e. who is gaining or losing share. - Net import reliance: first/last/pct_change of the annual NIR % for `query`'s own `reporter`/`partner_set` (only `frequency` is normalised to "year", since NIR is structurally annual and the upstream API always returns it that way regardless); omitted if the customs code has no PRODCOM mapping. `chart_data` carries the full-fidelity headline trade and top-partner/ top-reporter series for charting.

Discovered
get_net_import_reliance

Net Import Reliance (NIR) = (Imports - Exports) / Apparent consumption, annual, joining PRODCOM production with Comext trade. E.g. 40% means 40% of EU consumption is met by imports; negative means the EU is a net exporter. Returns the NIR % series, its supply/disposition components, sibling-category/per-code comparisons, the resolved PRODCOM codes and availability notes (CN-to-PRODCOM mapping is not always 1:1; see the `comparison.prodcom.notes` / `comparison.prodcom.unavailability_type` fields in the response). Use `query.prodcom_code` to pin a specific mapping.

Discovered
get_overview

Headline figures: total import/export quantities, values and weighted-average prices per period, the trade balance, and a top-partner breakdown. The best first call for any new customs-code/reporter slice. The figures sit under `total` / `partners` / `balance`, each panel carrying its own `periods` axis; the metadata (units, residual share, selection notes) is in `header`.

Discovered
get_partner_detail

Per-partner import/export breakdown. For each flow, the top-N trading partners ranked both by quantity and by value (so you can compare volume-based vs. value-based rankings), each with its own quantity, value and price time series, plus an optional 'Other' bucket.

Discovered
get_pattern_shift

Before/after trade-pattern shift around a split point (`query.midpoint`): for each entity, compares average quantity and price before vs. after, and returns scatter points (quantity-change % vs. price-change %) with quadrant labels -- top-right = demand-driven growth, top-left = supply constraint/monopoly risk, bottom-right = dumping/oversupply risk, bottom-left = market contraction. Suggested workflow: omit `query.midpoint` to receive the default analysis and every valid split point in `available_midpoints`, then set one of those values as `query.midpoint` here. An explicit midpoint that cannot form a valid split returns a 422 error frame.

Discovered
get_price_shocks

Detect sudden price regime shifts ("rapid price changes"), accounting for each flow's usual volatility so naturally volatile flows aren't over-flagged. Returns ranked shock events per flow with timeline phases (price spike/drop, volatile trade, return to baseline, ...), magnitude and series.

Discovered
get_production_concentration

How concentrated production of a customs code's goods is across all DS-059358 reporting countries (PRODCOM; EU Member States plus EFTA/candidate/other reporters -- not only the EU-27). HHI of PRODVAL across countries over time, plus each country's production share. Suppressed/absent country figures come back as null, not zero. Use `query.prodcom_code` to pin a specific PRODCOM mapping. Accepts exactly one customs code; multi-code selections are rejected.

Discovered
get_production_series

EU27 and per-country PRODCOM production series: EU quantity, EU production unit value, and the same two per reporting country (all DS-059358 reporters, not just EU-27, since production data carries no trade columns). Country-level figures are heavily confidentiality -suppressed; suppressed/absent values come back as null, not zero. Use `query.prodcom_code` to pin a specific PRODCOM mapping when a customs code maps to several. Accepts exactly one customs code; multi-code selections are rejected.

Discovered
get_reporter_benchmark

Every EU reporter ranked by value for one year -- the country-view counterpart of `get_reporter_detail`. Returns a single-year snapshot (every real EU Member State's quantity, value and price per flow, ranked by value) plus a benchmark price time series: the weighted average across whichever reporters `query.reporter` resolves to (the whole EU by default, or narrower when `query.reporter` is itself an aggregate -- euro area, a named group, or an ad hoc custom group), the cross-reporter min/max envelope, and the selected reporter's own line when `query.reporter` is a single real Member State. Use it to answer "how does this country -- or reporter group -- compare to every other reporter?".

Discovered
get_reporter_detail

Per-EU-Member-State import/export breakdown -- the reporter-side counterpart of `get_partner_detail`. Top-N Member States (by quantity and by value) with their quantity, value and price series. Aggregate reporters (EU, Euro area, groups) are excluded from the ranking.

Discovered
get_specialisation

Intra-EU revealed symmetric comparative advantage (RSCA) per Member State -- a Balassa index benchmarked against the EU instead of the world. Runs -1 (under-specialised) to +1 (strongly specialised), value -based and intra-EU only. Treat with caution: intra-EU flows are distorted by the Rotterdam/Antwerp quasi-transit effect.

Discovered
get_subcode_compare

Sub-code comparison: for a single parent customs code, expands into its sub-codes (or, for a multi-code request, compares the entered codes directly) and returns per-subcode quantity/value/price series for both flows -- so each sub-code plots as its own line instead of being aggregated away. The `breakdown` block is discriminated by `state`: 'ok' carries the panels, a leaf code returns 'leaf' and an unexpandable nomenclature 'unavailable', each with a `message`.

Discovered
get_subcontracting

EU27 sub-contracting intensity: the share of sold production that is toll (sub-contracted) manufacturing rather than own-account output. Returns intensity (%) across value/quantity, its component series, per-period data-quality status, resolved PRODCOM codes and availability notes. The own/sub split only exists from 2021 onward. Accepts exactly one customs code; multi-code selections are rejected.

Discovered
get_subcontracting_reporters

Per-country sub-contracting intensity (PRODCOM): for each reporting country, the share of its sold production that is toll manufacturing -- which countries act as processing hubs vs. autonomous producers. Spans all DS-059358 reporters that report the own/sub split; others simply don't appear. Country cells are heavily confidentiality-suppressed (null, not zero, when absent). Accepts exactly one customs code; multi-code selections are rejected.

Discovered
get_subtree

Return the Combined Nomenclature sub-tree rooted at `customs_code` (its sub-codes, and their sub-codes, ...), each with a `customs_code` and a `text` description. Use this to see whether a heading you're about to use (e.g. as `query.customs_code` elsewhere) is actually a clean match, or bundles several distinct sub-codes together.

Discovered
get_supply_shocks

Detect abnormal collapses in trade volumes ("sudden volume changes"). Flags periods where a partner × customs-code pair's volume drops well below its historical average (>2 sigma by default). Returns ranked shock events per flow, each with timeline phases (baseline, decline, disruption, recovery, ...), magnitude, abnormality score and underlying series.

Discovered
get_top_entities

Just the ordered list of top entities for a slice -- no time series. A lightweight helper for populating entity pickers or quickly checking who the top partners/reporters are without pulling full series.

Discovered
get_trade_intensity

Trade Intensity (TI) = (Imports + Exports) / (Imports + Production), annual. Near 1 = highly trade-exposed sector; near 0 = predominantly domestic. Used in the Commission's CEEAG methodology for carbon-leakage / State-aid eligibility. Returns the TI series, its components, sibling-category/per-code comparisons, resolved PRODCOM codes and availability notes.

Discovered
get_volatility

Coefficient-of-variation (CV = stdev / mean) volatility per partner/reporter x customs-code pair, over inactive-period-excluded history. Higher CV = the flow swings more relative to its typical level. Returns per-entity CV bars (with drill-down series) and, unless include_heatmap=false, an entity x sub-code CV heatmap.

Discovered
get_volatility_summary

Report-section helper ("Volatility & shocks"): the entities analysed are picked by `get_volatility` (ranks by trade volume, reports each one's CV) and by `get_price_shocks`/`get_supply_shocks` at default parameters (both already scoped to top-value partners via `cumulative_share=0.8`) -- never re-picked from the shocks themselves. Retries shock detection once with loosened thresholds before concluding "no shocks"; an empty result is itself a reportable finding, not a gap. When shocks are found, the top events by abnormality and their series are the section's findings; when none are found (even after the retry), stability is the finding. `get_pattern_shift` is intentionally not part of this bundle -- its before/after quadrant framing is too easily misread; call it directly if you specifically need it. Returns `{"result": {narrative_facts, chart_data, links, available, reason}}`.

Discovered
guidelines_for_a_long_report

Read this first for an in-depth report. Returns the long-report workflow: which of the 35+ tools to combine per angle (partners, concentration, volatility & shocks, autonomy), the dashboard menu/tab structure for pointing readers at views, and the methodological notes needed to interpret and cite figures correctly. Call this before guessing at tool use.

Discovered
guidelines_for_a_short_report

Read this first for a quick report. Returns the short-report workflow: resolve a product code, then call `get_full_report` for the five most important report sections in one shot -- enough for a quick, simple report. Also covers access, the shared `query` object and the `compact` option.

Discovered
resolve_product_code

Resolve a free-text query or CN code(s) into validated customs code(s) with descriptions -- the recommended first step before using a code as `customs_code` in any other tool's `query`. Saves the search -> validate -> (optional) subtree round-trip: a bare keyword runs a search, a single code (or comma-separated list) is validated and described directly. Tip: Comext/CN nomenclature is frequently coarser than a colloquial product name (e.g. there is no code for "glass jars" alone -- only heading 7010, which bundles jars with bottles, flasks and closures). Check `has_subcodes` and, if useful, set `include_children=true` to see whether a finer sub-code is actually a better match before committing to one code for a whole report. Returns `{mode, query, data}`: `data` is the typed validation or search response. A single-code validation also carries `subtree` when requested.

Discovered
search_customs_codes

Keyword/code search over the Combined Nomenclature (or PRODCOM). Returns ranked `{code, label, path}` candidates. Prefer `resolve_product_code` for a one-call keyword-or-code helper; use this directly if you specifically want the raw ranked candidate list.

Discovered
validate_customs_code

Validate and describe one or more Combined Nomenclature codes. For a single code, returns the full hierarchy of description levels (`levels`), the resolved `customs_code_label`, and `has_subcodes`. For a comma-separated list, returns `{"results": [...]}` with one entry per code (each either a success dict or a `{"customs_code", "error"}` pair).

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected853 ms38