此 MCP 可以做什么
Discovers and queries Eurostat datasets covering EU economic, demographic, trade, transport, and regional statistics.
工具
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'theme_code': {'type': 'string', 'description': 'Folder code to expand (e.g., "economy", "reg"). Omit to list the top-level theme folders.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['items', 'parentPath', 'itemCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['not_found', 'not_a_folder'], 'description': 'Machine-readable failure mode. Declared by this tool: `not_found`: The provided theme_code does not exist in the TOC. `not_a_folder`: The provided theme_code identifies a dataset or table entry instead of a folder. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'label', 'type', 'hasChildren'], 'properties': {'code': {'type': 'string', 'description': 'Theme or dataset code. Pass to theme_code to drill into a folder, or use as dataset_code for data tools.'}, 'type': {'enum': ['folder', 'dataset', 'table'], 'type': 'string', 'description': 'Item type: "folder" has sub-items; "dataset"/"table" can be queried for data.'}, 'label': {'type': 'string', 'description': 'Human-readable name.'}, 'dataEnd': {'type': 'string', 'description': 'Most recent data period. Omitted for folders and when not reported.'}, 'obsCount': {'type': 'number', 'description': 'Approximate observation count. Omitted for folders and when not reported.'}, 'dataStart': {'type': 'string', 'description': 'Earliest data period (e.g., "1995"). Omitted for folders and when not reported.'}, 'hasChildren': {'type': 'boolean', 'description': 'True when this folder contains sub-items. Only meaningful for type "folder".'}}, 'description': 'A theme folder, dataset, or table entry.', 'additionalProperties': False}, 'description': 'Immediate children of the requested theme, or the root themes if theme_code was omitted.'}, 'nextStep': {'type': 'string', 'description': 'Suggested next action based on these results. Populated when there is a clear follow-up call.'}, 'itemCount': {'type': 'number', 'description': 'Number of items returned in this level.'}, 'themeCode': {'type': 'string', 'description': 'Folder code that was browsed, or omitted for root.'}, 'parentPath': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Breadcrumb from root to the requested theme (e.g., ["Database by themes", "Economy and finance"]). Empty when browsing root.'}, 'otherPlacements': {'type': 'array', 'items': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Breadcrumb from root to one other folder carrying the requested code.'}, 'description': 'Breadcrumbs of the other branches that file this same theme_code. Eurostat lists a few folder codes in more than one branch; the items above come from the first one the catalogue lists, which never has fewer children than the branches named here but can list different ones. theme_code takes a bare code, so those branches cannot be addressed directly â\x80\x94 browse down to them from the root instead. Omitted when the code has a single placement â\x80\x94 the normal case.'}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['canvas_id'], 'properties': {'canvas_id': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{10}$', 'description': 'Canvas identifier returned as canvasId by eurostat_query_dataset, eurostat_download_dataset, or eurostat_get_dimension_values. Identifies the workspace holding the staged tables.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['canvasId', 'expiresAt', 'tables']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['canvas_disabled', 'canvas_not_found'], 'description': 'Machine-readable failure mode. Declared by this tool: `canvas_disabled`: This deployment runs without a dataframe canvas, so there is nothing to describe. `canvas_not_found`: The canvas_id is unknown or its lifetime has elapsed. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Guidance when the canvas holds no tables. Omitted when it holds at least one.'}, 'tables': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'kind', 'rowCount', 'columns'], 'properties': {'kind': {'enum': ['table', 'view'], 'type': 'string', 'description': 'Whether the entry is a base table or a view.'}, 'name': {'type': 'string', 'description': 'Table name to reference in SQL.'}, 'columns': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'type', 'nullable'], 'properties': {'name': {'type': 'string', 'description': 'Column name.'}, 'type': {'type': 'string', 'description': 'SQL column type (e.g. "VARCHAR", "DOUBLE").'}, 'nullable': {'type': 'boolean', 'description': 'Whether the column admits NULL.'}}, 'description': 'One column of the table.', 'additionalProperties': False}, 'description': 'Columns in declaration order.'}, 'rowCount': {'type': 'number', 'description': 'Rows the table holds.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 expiry of this table specifically. Omitted when the table ages with the canvas rather than on its own clock.'}}, 'description': 'One table or view staged on the canvas.', 'additionalProperties': False}, 'description': 'Tables staged on this canvas. Empty when nothing has been staged yet, or when every staged table has expired.'}, 'canvasId': {'type': 'string', 'description': 'Canvas identifier the tables were read from.'}, 'expiresAt': {'type': 'string', 'description': 'ISO 8601 timestamp when the canvas expires. Every call on it slides this forward.'}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['canvas_id', 'sql'], 'properties': {'sql': {'type': 'string', 'minLength': 1, 'description': "A single read-only SELECT statement. Reference tables by the names eurostat_dataframe_describe reports. Example: SELECT geo, geo_label, AVG(obs_value) AS mean FROM df_a1b2c3d4 WHERE time >= '2020' GROUP BY geo, geo_label ORDER BY mean DESC."}, 'canvas_id': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{10}$', 'description': 'Canvas identifier returned as canvasId by eurostat_query_dataset, eurostat_download_dataset, or eurostat_get_dimension_values. Identifies the workspace holding the staged tables.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['canvasId', 'columns', 'rows', 'rowCount', 'truncated']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'description': 'Result rows, each keyed by column name. Bounded by the canvas row limit. 64-bit integer results â\x80\x94 COUNT(*) among them â\x80\x94 arrive as strings so values outside the JSON number range survive intact; cast to DOUBLE in the SQL if a number is wanted.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['canvas_disabled', 'canvas_not_found', 'missing_table'], 'description': 'Machine-readable failure mode. Declared by this tool: `canvas_disabled`: This deployment runs without a dataframe canvas, so there is nothing to query. `canvas_not_found`: The canvas_id is unknown or its lifetime has elapsed. `missing_table`: The SQL names a table that is not staged on this canvas, or that has expired. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'columns': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Column names in projection order.'}, 'canvasId': {'type': 'string', 'description': 'Canvas identifier the query ran against.'}, 'rowCount': {'type': 'number', 'description': 'Rows materialized into this response. Equals the full result size unless truncated is true.'}, 'truncated': {'type': 'boolean', 'description': 'True when the result exceeded the canvas row limit and was cut short. Add a LIMIT, an aggregate, or a narrower WHERE clause to see the rest.'}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['dataset_code'], 'properties': {'filters': {'type': 'object', 'default': {}, 'description': 'Dimension filters as a map of dimension code â\x86\x92 array of accepted values, applied by Eurostat before the body is sent. Example: {"unit": ["CP_MEUR"], "na_item": ["B1G"], "geo": ["DE", "FR"]}. Omit a dimension or pass an empty array to accept every value for it. Dimension codes match in any case ("GEO" is geo). Do not put "time" here â\x80\x94 use since_period/until_period. Naming a dimension the dataset does not have is rejected with the dataset\'s dimension list rather than silently ignored.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'array', 'items': {'type': 'string'}}}, 'canvas_id': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{10}$', 'description': 'Reuse an existing dataframe canvas so this download lands beside earlier results and can be joined against them. Pass the canvasId a previous eurostat_download_dataset or eurostat_query_dataset response returned; omit to start a fresh canvas. Ignored on deployments without a dataframe canvas. A download that carries no observations fails as no_results and leaves the canvas untouched.'}, 'dataset_code': {'type': 'string', 'minLength': 1, 'description': 'Dataset code (e.g., "nama_10_gdp"). Required. A DS-* code â\x80\x94 Comext detailed trade or PRODCOM, in any case â\x80\x94 is served by the Comext host, which refuses an unfiltered download of its large collections as extraction_too_big: filter it, including freq on the trade flows, which mix annual and monthly series.'}, 'since_period': {'type': 'string', 'description': 'Start of the period range, inclusive, sent as startPeriod. Accepted forms: YYYY, YYYY-MM, YYYY-MM-DD, YYYY-Qn (1â\x80\x934), YYYY-Sn (1â\x80\x932), YYYY-Tn (1â\x80\x933), YYYY-Mnn (01â\x80\x9312), YYYY-Wnn (a week the year has, up to 53) or YYYY-Dnnn (a day the year has, up to 366) (e.g., "2020", "2023-Q1", "2024-01"). Extra leading zeros after the letter are dropped ("2020-W001" is sent as "2020-W01"), a day of the year is sent as three digits ("2026-D1" as "2026-D001"), YYYY-A1 is sent as YYYY, and a period of another frequency is mapped onto the dataset\'s own. A malformed or non-existent period (e.g., "2020-13") is rejected as invalid_period. The most effective way to shrink a bulk response: it removes period columns from the TSV rather than blanking their cells.'}, 'until_period': {'type': 'string', 'description': 'End of the period range, inclusive (e.g., "2024"), sent as endPeriod, in the same forms as since_period. Omit for data through the latest available period. The range must hold at least one day: a since_period that starts after until_period ends is rejected as invalid_period, while pairs of different frequencies are fine ("2020-06" to "2020").'}, 'preview_limit': {'type': 'integer', 'default': 50, 'maximum': 500, 'minimum': 1, 'description': 'How many observations to echo inline, from the start of the download. Caps at 500. The full download is on the canvas table when one was staged; this is orientation, not the result set.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['datasetCode', 'dimensionsUsed', 'rowCount', 'missingCount', 'periodRange', 'bytesRead', 'compressed', 'budgetExceeded', 'observations', 'totalCount', 'appliedQuery']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['not_found', 'invalid_dimension', 'filter_arity', 'invalid_period', 'async_queued', 'no_results', 'extraction_too_big', 'upstream_fault', 'canvas_not_found'], 'description': 'Machine-readable failure mode. Declared by this tool: `not_found`: The dataset code is not available for dissemination (HTTP 404, SDMX faultcode 100). `invalid_dimension`: A filter names a dimension the dataset does not have, or a value or period range Eurostat rejects (SDMX faultcode 150). `filter_arity`: Eurostat rejected the positional dimension key because it carried the wrong number of positions (SDMX faultcode 140, INVALID_QUERY_NB_FILTERS), meaning the dataset structure has changed since the metadata call. `invalid_period`: since_period or until_period is not a period literal, or names a month, quarter, semester, trimester, week or day that does not exist, or since_period starts after until_period ends. Checked before any request â\x80\x94 the bulk endpoint would otherwise roll an out-of-range period into a neighbouring one, and answer an inverted range with the whole series â\x80\x94 and SDMX faultcode 140 TIME_PERIOD_FILTER_SPEC_INVALID maps here too. `async_queued`: Eurostat answered HTTP 200 with a SOAP syncResponse queue ticket (status SUBMITTED) instead of data, because the extraction was too costly to serve synchronously. `no_results`: The download completed but carried no populated observation cells. Nothing is staged, and no canvas is created or touched. `extraction_too_big`: Eurostat refused the extraction as too large (SDMX faultcode 413, HTTP 413): past its 5,000,000-row extraction limit, or an unfiltered download of a large DS-* Comext collection, which Eurostat serves only filtered. Covers every dataset, on either host. `upstream_fault`: The SDMX endpoint returned a fault this server does not model, or a body that is not a TSV table. `canvas_not_found`: A canvas_id was supplied for staging but is unknown or its lifetime has elapsed. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Guidance on every download: the staged table with the required eurostat_dataframe_describe then eurostat_dataframe_query sequence (or, without a canvas, what was returned inline and what was discarded), preceded by byte-budget disclosure when the budget stopped the transfer and by the inline-preview length when preview_limit returns fewer rows than were downloaded.'}, 'canvasId': {'type': 'string', 'description': 'Dataframe canvas holding the staged download. Pass to eurostat_dataframe_describe, eurostat_dataframe_query, or a later staging call. Omitted when nothing was staged.'}, 'rowCount': {'type': 'number', 'description': 'Observations expanded from the download â\x80\x94 one per populated cell, counting those Eurostat reports as unavailable.'}, 'bytesRead': {'type': 'number', 'description': 'Decoded TSV bytes read from Eurostat â\x80\x94 after gzip decompression when the body arrived compressed, so it measures the payload rather than the wire.'}, 'tableName': {'type': 'string', 'description': 'Canvas table holding every downloaded observation. Call eurostat_dataframe_describe with canvasId first to confirm the table and columns, then eurostat_dataframe_query. Omitted when this deployment runs without a dataframe canvas, in which case only the inline preview survives the call.'}, 'compressed': {'type': 'boolean', 'description': 'True when Eurostat sent the body gzip-compressed. It does so without a Content-Encoding header on large responses, so this reports what the stream actually carried.'}, 'totalCount': {'type': 'number', 'description': 'Observations the download produced â\x80\x94 equal to rowCount. The inline observations array holds only the first preview_limit of them; budgetExceeded, not this count, says whether the download is the whole dataset.'}, 'datasetCode': {'type': 'string', 'description': 'Dataset code as provided.'}, 'periodRange': {'type': 'object', 'properties': {'end': {'type': 'string', 'description': 'Latest period carrying an observation. Omitted when nothing was downloaded.'}, 'start': {'type': 'string', 'description': 'Earliest period carrying an observation. Omitted when nothing was downloaded.'}}, 'description': 'Period coverage of the rows actually downloaded. Narrower than the dataset when budgetExceeded is true or a period range was applied.', 'additionalProperties': False}, 'appliedQuery': {'type': 'object', 'required': ['filters', 'url'], 'properties': {'url': {'type': 'string', 'description': 'The SDMX request URL, so the download can be reproduced.'}, 'filters': {'type': 'object', 'description': 'Dimension filters sent to Eurostat. Empty arrays are dropped.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'array', 'items': {'type': 'string'}}}, 'sincePeriod': {'type': 'string', 'description': 'startPeriod applied, if any.'}, 'untilPeriod': {'type': 'string', 'description': 'endPeriod applied, if any.'}}, 'description': 'The bulk request as the server built it.', 'additionalProperties': False}, 'missingCount': {'type': 'number', 'description': 'Downloaded observations carrying no numeric value (obs_value is null).'}, 'observations': {'type': 'array', 'items': {'type': 'object', 'description': 'One observation as a flat row: one column per dimension holding its code, "time" for the period, then obs_value, obs_flag, obs_flag_label, conf_status, conf_status_label. A label column is null when Eurostat publishes no label for that code. Rows of a DS-* dataset also carry obs_value_text after obs_value: a value Eurostat published as text, such as a PRODCOM quantity unit ("KG"), kept verbatim with obs_value null; a PRODCOM ":C" arrives as conf_status "C" instead.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': ['string', 'number', 'null']}}, 'description': 'The first preview_limit observations of the download, in the order Eurostat streamed them. A prefix of the staged table, not a sample.'}, 'budgetExceeded': {'type': 'boolean', 'description': 'True when the byte budget stopped the transfer before the dataset ended, making the rows a prefix rather than the whole thing. Narrow with filters or a period range, or raise EUROSTAT_BULK_MAX_BYTES.'}, 'dimensionsUsed': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Dimension codes carried by the downloaded rows, in the order Eurostat keys them (e.g., ["freq", "unit", "na_item", "geo"]). Read from the TSV header, so it reflects the response rather than metadata. The period lives in the separate "time" column.'}, 'stagedRowCount': {'type': 'number', 'description': 'Rows written to the canvas table. Matches rowCount. Omitted alongside tableName.'}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['dataset_code'], 'properties': {'dataset_code': {'type': 'string', 'minLength': 1, 'description': 'Dataset code (e.g., "nama_10_gdp", or "DS-045409" for a Comext collection). Use eurostat_search_datasets or eurostat_browse_themes to find codes.'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['code', 'label', 'dimensions', 'timeRange']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'code': {'type': 'string', 'description': 'Dataset code as provided.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['not_found', 'upstream_fault'], 'description': "Machine-readable failure mode. Declared by this tool: `not_found`: The dataset code does not exist or is not available for dissemination. `upstream_fault`: Eurostat returned a dataset structure or content constraint this server cannot read: malformed, truncated, not XML, or missing the requested dataset's dataflow. Other values are possible when a failure originates below the handler."}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'label': {'type': 'string', 'description': 'Human-readable dataset title.'}, 'obsCount': {'type': 'number', 'description': 'Total number of observations in the full dataset (all periods). Omitted when Eurostat does not report it â\x80\x94 an omitted count is unknown, not zero.'}, 'timeRange': {'type': 'object', 'properties': {'end': {'type': 'string', 'description': 'Most recent available period (e.g., "2024"). Omitted when Eurostat does not report it.'}, 'start': {'type': 'string', 'description': 'Earliest available period (e.g., "1975"). Omitted when Eurostat does not report it.'}}, 'description': 'Overall data coverage period for this dataset. Each bound is omitted when Eurostat does not report it â\x80\x94 an omitted bound is unknown, not empty.', 'additionalProperties': False}, 'dimensions': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'label'], 'properties': {'code': {'type': 'string', 'description': 'Dimension code (e.g., "unit", "geo", "na_item"). Use these as filter keys in eurostat_query_dataset and eurostat_download_dataset.'}, 'label': {'type': 'string', 'description': 'Human-readable dimension name (e.g., "Unit of measure").'}, 'valuesCount': {'type': 'number', 'description': 'Number of dataset-available values in this dimension, taken from the dataset content constraint. For "time" this is the full period count. Omitted only when Eurostat does not supply a measurable value set.'}, 'sampleValues': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'label'], 'properties': {'code': {'type': 'string', 'description': 'Dimension value code.'}, 'label': {'type': 'string', 'description': 'Human-readable label for this value.'}}, 'description': 'A dimension value code and label pair.', 'additionalProperties': False}, 'description': 'First 10 dataset-available values for orientation. Use eurostat_get_dimension_values for the full constrained list. Omitted alongside valuesCount when Eurostat does not supply a measurable value set.'}}, 'description': 'A dataset dimension with its valid values.', 'additionalProperties': False}, 'description': 'All dimensions of the dataset with their valid codes and labels.'}, 'lastUpdated': {'type': 'string', 'description': 'ISO 8601 timestamp of the most recent data update. Omitted when Eurostat does not report it.'}, 'metadataUrl': {'type': 'string', 'description': 'URL to the ESMS HTML metadata page for this dataset. Omitted when not provided by Eurostat.'}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['dataset_code', 'dimension'], 'properties': {'canvas_id': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{10}$', 'description': 'Also stage the values on this dataframe canvas as a table with two columns, code and label, holding every value the dimension lists â\x80\x94 past the inline cap too â\x80\x94 at the geo_level requested, country when it is omitted. Pass the canvasId a eurostat_download_dataset or eurostat_query_dataset response returned, then search the staged table with SQL or join it to a download on the dimension column (e.g., d.geo = g.code). Omit to return the values inline only: this tool never starts a canvas. Ignored on deployments without a dataframe canvas.'}, 'dimension': {'type': 'string', 'minLength': 1, 'description': 'Dimension code to retrieve values for (e.g., "unit", "na_item", "geo"). Use eurostat_get_dataset_info to see available dimensions.'}, 'geo_level': {'enum': ['aggregate', 'country', 'nuts1', 'nuts2', 'nuts3'], 'type': 'string', 'description': 'NUTS hierarchy level filter â\x80\x94 applies only when dimension is "geo"; passing it with any other dimension is rejected. Options: "aggregate" (EU/EA codes), "country" (2-letter codes, default), "nuts1" (3-char), "nuts2" (4-char), "nuts3" (5-char).'}, 'dataset_code': {'type': 'string', 'minLength': 1, 'description': 'Dataset code (e.g., "nama_10_gdp", or "DS-045409" for a Comext collection).'}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['dimensionCode', 'dimensionLabel', 'values', 'totalCount']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'cap': {'type': 'number', 'description': 'The inline cap applied. Present alongside truncated.'}, 'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['not_found', 'no_results', 'conflicting_params', 'upstream_fault', 'canvas_not_found'], 'description': 'Machine-readable failure mode. Declared by this tool: `not_found`: The dataset code or dimension code does not exist. `no_results`: The dataset has no geo values at the effective geo_level. `conflicting_params`: geo_level was combined with a dimension other than "geo", where it has no effect. `upstream_fault`: Eurostat returned a dataset structure or content constraint this server cannot read: malformed, truncated, not XML, or missing the requested dataset\'s dataflow. `canvas_not_found`: A canvas_id was supplied for staging but is unknown or its lifetime has elapsed. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'shown': {'type': 'number', 'description': 'Values returned inline. Present alongside truncated.'}, 'notice': {'type': 'string', 'description': 'Where the values past the inline cap are: the staged table when canvas_id was passed, or how to stage them. Present alongside truncated.'}, 'values': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'label'], 'properties': {'code': {'type': 'string', 'description': 'Dimension value code. Use these as filter values in eurostat_query_dataset and eurostat_download_dataset.'}, 'label': {'type': 'string', 'description': 'Human-readable label for this value.'}}, 'description': 'A dimension value code and label pair.', 'additionalProperties': False}, 'description': "Dataset-available values for this dimension, in Eurostat's order â\x80\x94 for geo, the subset at geoLevel. Holds every value up to 2,000; past that, the first 2,000, with truncated set and the whole list on the canvas table when canvas_id was passed."}, 'canvasId': {'type': 'string', 'description': 'Dataframe canvas the values were staged on â\x80\x94 the canvas_id supplied. Omitted when nothing was staged: canvas_id was omitted, this deployment runs without a dataframe canvas, or the dimension lists no values.'}, 'geoLevel': {'enum': ['aggregate', 'country', 'nuts1', 'nuts2', 'nuts3'], 'type': 'string', 'description': 'Effective NUTS hierarchy level for the geo value set. Present only for the geo dimension; country is reported when geo_level was omitted.'}, 'tableName': {'type': 'string', 'description': 'Canvas table holding every value as two VARCHAR columns, code and label. Call eurostat_dataframe_describe with canvasId first to confirm it, then join it in eurostat_dataframe_query. Omitted alongside canvasId.'}, 'truncated': {'type': 'boolean', 'description': 'True when the dimension lists more values than the inline cap and values holds only the first of them. Omitted when values holds every one.'}, 'totalCount': {'type': 'number', 'description': 'Number of distinct values the dimension lists, after geoLevel filtering for geo â\x80\x94 all of them, including any past the inline cap.'}, 'dimensionCode': {'type': 'string', 'description': 'The dimension code that was queried.'}, 'dimensionLabel': {'type': 'string', 'description': 'Human-readable dimension name.'}, 'stagedRowCount': {'type': 'number', 'description': 'Rows written to the canvas table. Equals totalCount. Omitted alongside tableName.'}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['dataset_code'], 'properties': {'lang': {'enum': ['EN', 'FR', 'DE'], 'type': 'string', 'default': 'EN', 'description': 'Language for labels in the response. Default is "EN". Options: "EN", "FR", "DE".'}, 'filters': {'type': 'object', 'default': {}, 'description': 'Dimension filters as a map of dimension code â\x86\x92 array of valid values. Example: {"unit": ["CP_MEUR"], "na_item": ["B1GQ"], "geo": ["DE", "FR"]}. An empty array is treated as no filter for that dimension and is dropped from the request. Dimension codes match in any case ("GEO" is geo). Do not include "geo" here if using geo_level. A value that matches nothing contributes no rows rather than an error; the response names it in unmatchedValues, or in the no_results error when nothing matched at all. eurostat_get_dimension_values lists the valid values.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'array', 'items': {'type': 'string'}}}, 'canvas_id': {'type': 'string', 'pattern': '^[A-Za-z0-9_-]{10}$', 'description': 'Reuse an existing dataframe canvas, so a result staged by this call lands beside earlier ones and can be joined against them. Pass the canvasId a previous eurostat_query_dataset or eurostat_download_dataset response returned; omit to start a fresh canvas. Ignored on deployments without a dataframe canvas and when the match is at or below 5,000 observations.'}, 'geo_level': {'enum': ['aggregate', 'country', 'nuts1', 'nuts2', 'nuts3'], 'type': 'string', 'description': 'Filter by NUTS hierarchy level. Mutually exclusive with a "geo" key in filters. Options: "aggregate" (EU/EA totals), "country" (41 member/candidate states), "nuts1" (127 major regions), "nuts2" (309 basic regions), "nuts3" (1,343 small regions).'}, 'dataset_code': {'type': 'string', 'minLength': 1, 'description': 'Dataset code (e.g., "nama_10_gdp"). Required. A DS-* code â\x80\x94 Comext detailed trade or PRODCOM, in any case â\x80\x94 is served by the Comext host: filter freq on its trade flows, which mix annual and monthly series, and note that product, reporter and partner carry aggregates (TOTAL, EU27_2020) that double-count when summed with their members.'}, 'since_period': {'type': 'string', 'description': 'Start of the time range, inclusive. Accepted forms: YYYY, YYYY-MM, YYYY-MM-DD, YYYY-Qn (1â\x80\x934), YYYY-Sn (1â\x80\x932), YYYY-Tn (1â\x80\x933), YYYY-Mnn (01â\x80\x9312), YYYY-Wnn (a week the year has, up to 53) or YYYY-Dnnn (a day the year has, up to 366) (e.g., "2020", "2023-Q1", "2024-01"). Extra leading zeros after the letter are dropped ("2020-Q01" is sent as "2020-Q1"), a day of the year is sent as three digits ("2026-D1" as "2026-D001"), and YYYY-A1 is sent as YYYY. A period of another frequency is mapped onto the dataset\'s own, so "2020-01" works on annual data. A malformed or non-existent period (e.g., "2020-13") is rejected as invalid_period. Mutually exclusive with last_n_periods.'}, 'until_period': {'type': 'string', 'description': 'End of the time range, inclusive (e.g., "2024"), in the same forms as since_period. Omit for data through the latest available period. The range must hold at least one day: a since_period that starts after until_period ends is rejected as invalid_period, while pairs of different frequencies are fine ("2020-06" to "2020"). Mutually exclusive with last_n_periods.'}, 'preview_limit': {'type': 'integer', 'default': 50, 'maximum': 500, 'minimum': 1, 'description': 'How many matched observations to return inline, from the deterministic start of the JSON-stat cell order. Default 50; maximum 500. This changes only the inline prefix: it does not reduce obsCount, missingObsCount, timeRange, the upstream response, or the rows staged when the match exceeds 5,000. Use filters or period controls to reduce the match itself.'}, 'last_n_periods': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 1, 'description': "Return only the N most recent periods. N counts back from the dataset's latest period, not from the latest period published for this slice, so a slice that lags the rest of the dataset can come back empty â\x80\x94 raise N, or use until_period ending at a period the slice has published. Mutually exclusive with since_period and until_period."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['datasetCode', 'datasetLabel', 'dimensionsUsed', 'observations', 'obsCount', 'truncated', 'timeRange', 'missingObsCount', 'appliedFilters']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['not_found', 'no_results', 'invalid_period', 'async_response', 'invalid_dimension', 'conflicting_params', 'canvas_not_found'], 'description': 'Machine-readable failure mode. Declared by this tool: `not_found`: The dataset code does not exist (HTTP 404 carrying Eurostat error id 100). `no_results`: The query matched no observation cells â\x80\x94 including Eurostat HTTP-200 error id 100. The dataset is valid, but no cell carries a value or a status flag for that filter combination and period range. When Eurostat returns the empty table, the error names the filter values that matched nothing (data.unmatchedValues) and the selected periods that carry no value (data.matchedPeriods, the newest 24, with data.matchedPeriodCount counting all of them). `invalid_period`: since_period or until_period is not a period literal, or names a month, quarter, semester, trimester, week or day that does not exist, or since_period starts after until_period ends. Checked before any request; a period Eurostat itself rejects maps here too. `async_response`: Eurostat returned an async warning or an HTTP-413 error array â\x80\x94 the query matched too many observations, including an EXTRACTION_TOO_BIG refusal past Eurostat\'s 5,000,000-row limit. `invalid_dimension`: A dimension code in filters does not exist in this dataset (HTTP 400, Eurostat error id 150). `conflicting_params`: Mutually exclusive parameters were combined: "geo" filter + geo_level, or since_period/until_period + last_n_periods. `canvas_not_found`: A canvas_id was supplied for staging but is unknown or its lifetime has elapsed. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'notice': {'type': 'string', 'description': 'Guidance when a filter value matched nothing, when preview_limit omits matched rows, or when the match was staged â\x80\x94 names the unmatched values, distinguishes the inline prefix from filters that reduce the match and, when staged, gives the describe-then-query sequence. Omitted when every filter value matched and the preview contains the whole match.'}, 'canvasId': {'type': 'string', 'description': 'Dataframe canvas holding the staged result. Pass to eurostat_dataframe_describe, eurostat_dataframe_query, or a later eurostat_query_dataset call. Omitted when nothing was staged.'}, 'obsCount': {'type': 'number', 'description': 'Total number of observations matched (before any cap).'}, 'tableName': {'type': 'string', 'description': 'Canvas table holding every matched observation in flat form â\x80\x94 one code column per dimension plus a "_label" companion, then obs_value, obs_flag, obs_flag_label, conf_status, conf_status_label. A DS-* table also carries obs_value_text, the valueText of each row. Call eurostat_dataframe_describe with canvasId first to confirm the table and columns, then eurostat_dataframe_query. Omitted when nothing was staged: either the match was at or below 5,000 observations, or this deployment runs without a dataframe canvas.'}, 'timeRange': {'type': 'object', 'properties': {'end': {'type': 'string', 'description': 'Most recent period matched. Omitted when the match carries no time dimension and Eurostat reports no overall period.'}, 'start': {'type': 'string', 'description': 'Earliest period matched. Omitted when the match carries no time dimension and Eurostat reports no overall period.'}}, 'description': 'Time coverage of everything matched â\x80\x94 the same set obsCount counts, so it can reach periods absent from observations when truncated is true. Each bound is omitted when neither the match nor Eurostat report it â\x80\x94 an omitted bound is unknown, not empty.', 'additionalProperties': False}, 'truncated': {'type': 'boolean', 'description': 'True only when the match exceeded the 5,000-observation staging threshold. Independent of preview_limit: observations can be a shorter prefix while truncated is false. When tableName is set, call eurostat_dataframe_describe first and then eurostat_dataframe_query; when it is absent, use filters or period controls to reduce the match.'}, 'datasetCode': {'type': 'string', 'description': 'Dataset code as provided.'}, 'datasetLabel': {'type': 'string', 'description': 'Human-readable dataset title.'}, 'observations': {'type': 'array', 'items': {'type': 'object', 'required': ['dimensions', 'value'], 'properties': {'value': {'type': ['number', 'null'], 'description': 'Numeric observation value, or null when Eurostat reports none â\x80\x94 unavailable in the source data, withheld (confStatus says so), or published as text (valueText holds it).'}, 'status': {'type': 'object', 'required': ['code', 'label'], 'properties': {'code': {'type': 'string', 'description': 'OBS_FLAG code (e.g., "p", "e", "d").'}, 'label': {'type': 'string', 'description': 'Status description (e.g., "provisional", "estimated", "definition differs").'}}, 'description': 'Eurostat OBS_FLAG for this observation. Omitted for unflagged observations, and never carries a confidentiality code â\x80\x94 that arrives in confStatus.', 'additionalProperties': False}, 'valueText': {'type': 'string', 'description': 'A value Eurostat published as text rather than a number, verbatim â\x80\x94 PRODCOM (DS-*) flag and unit indicators such as QNTUNIT publish a unit like "KG" â\x80\x94 with value null. PRODCOM\'s ":C" is decoded to confStatus "C" instead. Omitted for numeric and missing values.'}, 'confStatus': {'type': 'object', 'required': ['code', 'label'], 'properties': {'code': {'type': 'string', 'description': 'CONF_STATUS code: "C", "N", or "P".'}, 'label': {'type': 'string', 'description': 'Confidentiality description (e.g., "confidential", "not for publication").'}}, 'description': 'Eurostat CONF_STATUS for this observation â\x80\x94 a different codelist from status. Present when Eurostat restricts the cell, which is usually why value is null. Omitted otherwise.', 'additionalProperties': False}, 'dimensions': {'type': 'object', 'properties': {}, 'description': 'Map of dimension code â\x86\x92 {code, label}. One entry per dimension in dimensionsUsed, keyed by dimension code (e.g., {"geo": {"code": "DE", "label": "Germany"}, "time": {"code": "2023", "label": "2023"}}).', 'additionalProperties': {}}}, 'description': 'A single decoded observation with dimension values, numeric value, and the optional OBS_FLAG and CONF_STATUS markers.', 'additionalProperties': False}, 'description': 'The first preview_limit decoded observations in deterministic JSON-stat cell order â\x80\x94 the leading combinations of the dataset dimensions, neither a sample nor necessarily the most recent periods. This prefix is independent of the 5,000-observation staging threshold. When tableName is set, the table holds every matched row; otherwise use filters or a period range to reduce the match itself.'}, 'appliedFilters': {'type': 'object', 'required': ['filters'], 'properties': {'filters': {'type': 'object', 'description': 'Dimension filters actually sent to Eurostat. Empty arrays from the request are dropped and do not appear here.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'array', 'items': {'type': 'string'}}}, 'geoLevel': {'type': 'string', 'description': 'NUTS geo level filter applied, if any.'}, 'sincePeriod': {'type': 'string', 'description': 'Start of time range applied, if any.'}, 'untilPeriod': {'type': 'string', 'description': 'End of time range applied, if any.'}, 'lastNPeriods': {'type': 'number', 'description': 'Last N periods filter applied, if any.'}}, 'description': 'Effective query parameters applied to the Eurostat API.', 'additionalProperties': False}, 'dimensionsUsed': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Ordered list of dimension codes present in the response (e.g., ["freq", "unit", "na_item", "geo", "time"]).'}, 'stagedRowCount': {'type': 'number', 'description': 'Rows written to the canvas table. Matches obsCount. Omitted alongside tableName when nothing was staged.'}, 'missingObsCount': {'type': 'number', 'description': 'Number of matched observations carrying no numeric value, counted across everything matched rather than only the returned rows. Covers both unavailable and withheld cells â\x80\x94 a slice can be wholly confidential, so this equalling obsCount does not mean the data is absent.'}, 'unmatchedValues': {'type': 'object', 'description': 'Filter values that matched nothing in the dataset, keyed by dimension code and spelled as sent (matching ignores case). The observations cover only the values that did match. Omitted when every filter value matched.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'array', 'items': {'type': 'string'}}}}, 'additionalProperties': False}
输入模式
{'type': 'object', '$schema': 'https://json-schema.org/draft/2020-12/schema', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'default': 20, 'maximum': 100, 'minimum': 1, 'description': 'Page size â\x80\x94 maximum datasets returned per page (1â\x80\x93100). Default is 20. To retrieve matches beyond one page, pass the returned nextCursor back as cursor; the page size is fixed by this first call.'}, 'query': {'type': 'string', 'pattern': '\\S', 'minLength': 1, 'description': 'Search terms â\x80\x94 at least one non-whitespace token is required. Split on whitespace into tokens; every token must match (AND), case-insensitively, somewhere across the dataset label, theme breadcrumb, or code. Word order does not matter, so "business demography NUTS 3" or "regional economic accounts" resolve without naming a label verbatim.'}, 'cursor': {'type': 'string', 'description': "Opaque pagination cursor from a previous call's nextCursor. Omit for the first page; pass it back â\x80\x94 with the same query â\x80\x94 to fetch the next page of matches over a stable order. A cursor is bound to the query that produced it and to the catalogue snapshot in effect at that time, so reusing one with a different query, or after the catalogue refreshes, is rejected rather than silently paging a different result set."}}, 'additionalProperties': False}
输出模式
{'type': 'object', 'anyOf': [{'not': {'required': ['error']}, 'required': ['datasets', 'query', 'totalMatches', 'truncated']}, {'required': ['error']}], '$schema': 'https://json-schema.org/draft/2020-12/schema', 'properties': {'error': {'type': 'object', 'required': ['code', 'message'], 'properties': {'code': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'JSON-RPC error code for this failure.'}, 'data': {'type': 'object', 'properties': {'reason': {'type': 'string', 'examples': ['no_match', 'invalid_cursor'], 'description': 'Machine-readable failure mode. Declared by this tool: `no_match`: No datasets matched the query string â\x80\x94 including a query naming a DS-* code that neither the dissemination table of contents nor the Comext dataflow list carries, which is a collection Eurostat does not disseminate. `invalid_cursor`: The cursor is malformed, came from a different query, or came from a catalogue snapshot that has since refreshed. Other values are possible when a failure originates below the handler.'}, 'recovery': {'type': 'object', 'required': ['hint'], 'properties': {'hint': {'type': 'string'}}, 'description': 'Actionable next step for the caller.', 'additionalProperties': {}}, 'retryable': {'type': 'boolean', 'description': 'Whether retrying may succeed.'}}, 'additionalProperties': {}}, 'message': {'type': 'string', 'description': 'Human-readable description of what went wrong.'}}, 'description': 'Present when the call failed. Absent on success.', 'additionalProperties': {}}, 'query': {'type': 'string', 'description': 'Search terms as submitted.'}, 'datasets': {'type': 'array', 'items': {'type': 'object', 'required': ['code', 'label', 'type', 'themePath'], 'properties': {'code': {'type': 'string', 'description': 'Dataset code (e.g., "nama_10_gdp"). Use this in eurostat_get_dataset_info, eurostat_query_dataset, and eurostat_download_dataset.'}, 'type': {'enum': ['dataset', 'table'], 'type': 'string', 'description': 'Entry type: "dataset" for standard datasets, "table" for predefined tables.'}, 'label': {'type': 'string', 'description': 'Human-readable dataset title.'}, 'dataEnd': {'type': 'string', 'description': 'Most recent data period available (e.g., "2025"). Omitted when not reported by Eurostat.'}, 'obsCount': {'type': 'number', 'description': 'Approximate number of observations. Omitted when not reported by Eurostat.'}, 'dataStart': {'type': 'string', 'description': 'Earliest data period available (e.g., "1975"). Omitted when not reported by Eurostat.'}, 'themePath': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Breadcrumb path from root theme to this dataset (e.g., ["Database by themes", "Economy and finance"]). Eurostat files some datasets under several branches; this is the first branch that matched the query. Empty for top-level entries.'}, 'lastUpdated': {'type': 'string', 'description': 'Date of last data update (e.g., "22.05.2026"). Omitted when not reported.'}}, 'description': 'A matched dataset entry.', 'additionalProperties': False}, 'description': 'Matching datasets for the current page, up to the requested limit.'}, 'nextStep': {'type': 'string', 'description': 'Suggested next action based on these results. Populated when there is a clear follow-up call.'}, 'truncated': {'type': 'boolean', 'description': 'True when more matches remain beyond this page â\x80\x94 pass nextCursor as cursor to fetch them.'}, 'nextCursor': {'type': 'string', 'description': 'Opaque cursor for the next page of matches. Pass it back as cursor with the same query; it stops working once the catalogue refreshes. Omitted on the last page.'}, 'totalMatches': {'type': 'number', 'description': 'Total distinct dataset codes matching the query across all pages, before the page limit.'}}, 'additionalProperties': False}
近期工具变更
类似的 MCP 服务器
LiveDataLink
Exposes public-data tools covering economics, labor, banking, transport, books, legal opinions, carriers, environmental data, and…
AlpineDataWorks Intelligence Server
Provides economic, market, supply-chain, real-estate, energy, consumer, labor, and other scored intelligence indices with histori…
SharksAPI.AI
Provides marketing analytics and actions across GA4, Search Console, Google Ads, social channels, SEO, WordPress, and marketing p…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
synter-ads
Manages cross-platform advertising campaigns, audiences, tracking, creative, landing pages, campaign audits, technology intellige…
Stratalize Finance
Provides financial, macroeconomic, banking, credit, commodities, M&A, ESG, labor, and regulatory benchmarks for analysis and plan…
Stratalize Healthcare
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…
Stratalize Governance
Retired Stratalize server exposing benchmark, market intelligence, compliance, financial, healthcare, legal, real estate, and eco…