Eurostat TAM MCP server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Eurostat TAM MCP server get enterprise counts for NACE code C27"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Eurostat TAM MCP server
An MCP server that pulls enterprise counts by NACE Rev.2 activity and size
class from Eurostat (dataset sbs_sc_ovw)
and buckets them to match the DTM TAM model's columns:
Sheet column | What this server returns |
SMEs |
|
Corp: Mid-cap (250–4,999) |
|
* Eurostat's top size band is 250+ with no 5,000 split, so use ORBIS/ONS to separate Mid-cap from Large downstream.
What this does NOT cover (by design — the model sources these elsewhere)
Startups / Scaleups → Dealroom / Harmonic (venture-backed, € raised)
Corp Large (5,000+) → ORBIS / UK ONS
United Kingdom → ORBIS / ONS (UK left Eurostat after Brexit)
Default geography is EU27 + Norway + Switzerland, summed (EU27 via Eurostat's
pre-aggregated EU27_2020 geo, so one call covers all 27).
Tools
get_enterprise_counts(nace_code, geo?, year?, exclude_micro?)
One NACE code → SME and 250+ counts. Example: get_enterprise_counts("C27").
get_segment_counts(nace_codes, geo?, year?, exclude_micro?)
A list of codes for one value-chain segment → per-code results plus a summed
segment total. Example for "Equipment Suppliers & OEMs":
get_segment_counts(["C27", "C28"]).
fill_tam_sheet(input_path, output_path?, dry_run=True, geo?, year?, exclude_micro?)
Reads NACE codes straight from the Company Counts by Segment sheet, pulls
counts for every segment, and writes the SMEs (col F) and Corp Mid-cap
250+ (col G) cells. Run with dry_run=True first to audit the per-row parse,
then dry_run=False to save (defaults to <input>_FILLED.xlsx — never
overwrites the original unless you pass the same path).
Only yellow input cells are written; blue subtotals, the grey public-sector row, and demand-side rows are left untouched. Subtotal/Low/High formulas and cell formatting are preserved.
Related MCP server: eurostat-mcp
A critical data caveat: Eurostat has no 4-digit NACE detail
sbs_sc_ovw only goes down to division (C27) and group (C279) — there is
no class-level data (C26.30, D35.11, …). The CMO's sheet is mostly class
codes, so every code is resolved down to the nearest level that exists:
class → group → division → section
Each row reports which codes it used and a coarsened list flagging where it
fell back to a whole division (e.g. J63 = all information services). Those
numbers are upper bounds for the intended class — refine with ORBIS if needed.
NACE sub-classes use the dotted form in the sheet, e.g. "C26.30", "D35.11".
Setup
cd /Users/lini/Documents/Claude/eurostat-mcp
uv venv --python 3.12
uv pip install "mcp[cli]"Test the live logic without the MCP layer:
uv run python -c "import server, json; print(json.dumps(server.get_enterprise_counts('C27'), indent=2))"Register it with Claude Code
Copy the block in .mcp.json into your Claude Code MCP config, or
from any project run:
claude mcp add eurostat-tam -- uv run --directory /Users/lini/Documents/Claude/eurostat-mcp server.pyThen in a Claude Code session you can just ask:
"Use eurostat-tam to pull C27+C28 for the Equipment Suppliers segment, exclude micro."
Notes & caveats
Summing NACE codes can double-count a firm that reports under multiple activities. De-dup per the sheet's classification waterfall before trusting totals.
Subtract venture-backed firms (counted as startups/scaleups) from the SME/Corp pulls so each company lands in exactly one bucket.
Latest year auto-resolves (currently 2024) unless you pass
year.
Available Tools
5 toolsfill_tam_sheetA
Read NACE codes out of the TAM workbook's "Company Counts by Segment" sheet, pull Eurostat counts for every segment, and write the SMEs (col F) and Corp Mid-cap 250+ (col G) cells.
Only yellow input cells on segment rows are written; blue subtotals, the grey public-sector row, and demand-side rows are left untouched. Class-level NACE codes (which Eurostat lacks) are resolved down to the nearest available group/division and flagged per row under "coarsened".
Args: input_path: path to the .xlsx (e.g. the TAM_Model_with_NAICS.xlsx). output_path: where to save. Defaults to "_FILLED.xlsx". Pass the same path as input ONLY if you intend to overwrite the original. dry_run: if True (default), nothing is written — returns the full plan (per-row resolved codes, levels, and the SME/250+ it WOULD write) so you can audit before committing. Set False to actually save. geo: Eurostat geos, default EU27 + Norway + Switzerland. year: single year, or omit for latest per code. exclude_micro: exclude micro firms (0-9) from the SME bucket.
Returns the plan (dry_run) or a write summary plus the plan.
Inputs: input_path (required), geo, year, dry_run, +2 more. Returns: object
get_company_countA
Count companies in Cognism matching NAICS codes x countries x employee range. Fills the cells Eurostat/Nomis can't:
Corp Large 5,000+ -> employee_min=5000
Corp Mid-cap 250-4,999 -> employee_min=250, employee_max=4999
UK corporates -> countries=["United Kingdom"]
Args: naics: NAICS codes, e.g. ["3344"] (semiconductors). Cognism uses NAICS, not NACE — map your NACE codes first. countries: country names, e.g. ["Germany", "France"] or ["United Kingdom"]. employee_min / employee_max: employee-count band bounds (inclusive).
Requires the Cognism API entitlement to be enabled by your CSM; until then this returns error "no_entitlement". Reads the token from the COGNISM_API_TOKEN env var (Render) or the local .env.cognism file (desktop).
Inputs: naics (required), countries (required), employee_max, employee_min. Returns: object
get_enterprise_countsA
Enterprise counts for one NACE Rev.2 code, bucketed into SME (1-249) and Corp (250+), summed across the given geographies.
Args: nace_code: NACE Rev.2 code, e.g. "C27", "C28", "D35", "C26.30" (use the Eurostat dotted form for sub-classes, e.g. "C2630" is NOT valid; use "C26.30"). geo: list of Eurostat geo codes. Defaults to EU27 + Norway + Switzerland (["EU27_2020", "NO", "CH"]). Pass individual countries (e.g. ["DE","FR"]) to break it down. NOTE: UK ("UK"/"GB") is not available post-Brexit. year: a single year as a string, e.g. "2022". If omitted, the latest available year is used automatically. exclude_micro: if True, the SME bucket excludes micro firms (0-9 employees), i.e. SME = 10-249. The TAM sheet notes this as an option.
Returns a dict with sme_count, corp_250plus_count, the per-band breakdown, the resolved year, and caveats.
Inputs: nace_code (required), geo, year, exclude_micro. Returns: object
get_segment_countsA
Enterprise counts for a list of NACE codes that make up one value-chain segment, returned per code AND summed for the whole segment. This maps directly onto a row of the "Company Counts by Segment" sheet.
Args: nace_codes: the NACE Rev.2 codes for the segment, e.g. ["C27", "C28"] for "Equipment Suppliers & OEMs". geo: see get_enterprise_counts. Defaults to EU27 + NO + CH. year: single year string, or omit for latest. exclude_micro: exclude micro firms (0-9) from the SME bucket.
Returns per-code results plus a segment_total with combined SME and 250+ counts.
CAUTION: summing NACE codes can double-count a company that reports under more than one activity, and the same firm may also be counted as a startup/scaleup elsewhere. De-dup per the sheet's waterfall before trusting totals.
Inputs: nace_codes (required), geo, year, exclude_micro. Returns: object
get_startup_scaleup_countsA
Count Startups and Scaleups for one value-chain segment via Harmonic, split on funding raised (TAM sheet columns D and E).
Startup = raised <= split_at; Scaleup = raised > split_at and < 5,000 staff.
Args: industry_tags: Harmonic industry tags for the segment, e.g. ["Aerospace Technology"], ["Defense Technology & Services"], ["Advanced Manufacturing & Robotics"], ["Hardware & Semiconductors"]. technology_tags: optional Harmonic technology tags, e.g. ["Hardware", "Robotics", "Sensors", "Manufacturing"]. region: Harmonic region, default "EUROPE". split_at: Startup/Scaleup funding boundary. Default 30,000,000. NOTE: Harmonic funding is ~USD; EUR 30M ~= USD 32-33M — set accordingly. exclude_business_tags: e.g. ["Consumer (B2C)"] to drop B2C.
Requires HARMONIC_API_KEY (env on Render, .env.harmonic on desktop). Returns exact counts; Harmonic's tags are coarser than the sheet's segments, so use clean-tag segments precisely and allocate the rest from market totals.
Inputs: region, split_at, industry_tags, technology_tags, +1 more. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
The first two tools, get_enterprise_counts and get_segment_counts, both fetch Eurostat counts by NACE codes, differing mainly in single-code vs. multi-code input, which could cause misselection. The other tools are clearly distinct by data source (Cognism, Harmonic) or role (orchestration), but the overlap between the Eurostat pair is notable.
Four tools follow a 'get_' + noun pattern, but fill_tam_sheet breaks the pattern with a different verb. There is also inconsistency between singular 'count' (get_company_count) and plural 'counts' (get_enterprise_counts, get_segment_counts, get_startup_scaleup_counts), which is minor but detracts from a uniform style.
With just 5 tools, the server is tightly scoped to the task of populating a TAM sheet from multiple data sources. Each tool has a clear role, and the count feels neither bloated nor inadequate for the stated purpose.
The tool set covers the full workflow: fetching Eurostat counts, segment-level aggregation, filling gaps with Cognism data, startup/scaleup counts from Harmonic, and writing the final workbook with a dry-run option. A minor gap is the lack of a dedicated NACE-to-NAICS mapping helper, but this is acknowledged in the get_company_count description as a prerequisite rather than a server responsibility.
Maintenance
Related MCP Connectors
Search and query the Eurostat catalogue — EU economy, demography, trade, and NUTS regional data.
Access European statistics: GDP, unemployment, inflation, population data.
EU customs-trade & industrial-production statistics (Eurostat Comext/PRODCOM)
Eurostat MCP — wraps Eurostat Statistical Data API (no auth required)
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server for EU company and business data. 9 tools: company search (GLEIF, 2M+ entities), LEI lookup, corporate structures (parent/subsidiaries), trade register search, EU VAT validation (VIES), GDP, unemployment, inflation, and business demography (Eurostat). All APIs free, no keys required.96MIT
- FlicenseNot gradedqualityDmaintenanceExposes the Eurostat Statistics API, enabling LLMs to discover, explore, and retrieve official EU statistical data through search, dimension inspection, and data retrieval tools.3-
- AlicenseNot gradedqualityBmaintenanceEnables querying Eurostat statistical data through natural language or direct MCP tools, wrapping the Eurostat API without authentication.146 npmMIT
- AlicenseNot gradedqualityBmaintenanceSearch and query the Eurostat catalogue — EU economy, demography, trade, health, and NUTS regional data via MCP with 5 tools and 1 resource.625 npm10Apache 2.0