accueil / serveurs / Données & BDD / io.github.cyanheads/ilostat-mcp-server
io.github.cyanheads/ilostat-mcp-server
serveur MCP (Model Context Protocol) · ilostat-mcp-server 0.2.0
Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur.
Est-ce que io.github.cyanheads/ilostat-mcp-server est sûr ?
Au dernier audit MCP Hub, le serveur MCP « io.github.cyanheads/ilostat-mcp-server » est classé « Non encore testé ». Référencé dans l'annuaire. Seul le pentest comportemental fait foi, et il n'a pas encore été exécuté sur ce serveur. Le verdict est réévalué en continu ; consultez la fiche pour l'état à jour.
Méthode : MCP Hub analyse la description de chaque outil (couche 1) et, pour le verdict fort, exécute le serveur dans une micro-VM isolée avec leurres et réseau bloqué (couche 2). On publie des noms et des compteurs, jamais le contenu brut renvoyé par un outil.
Les 8 outils
- ilostat_compare_geographies≈ 4725 tokens
Compare reference areas on one ILOSTAT dataset and one slice — a sex code plus breakdown codes, defaulting to the dataset's totals — giving each area's value at a common period or at its latest non-projected period, optional change over N years, and a rank, with each value's period, source, status, and basis (reported, modelled_estimate, or projection). A change carries the earlier value's source, basis, status, and notes, and flags whether the source or basis differs or the series breaks between the two values. Areas without a value are listed separately with the reason, and the response flags mixed periods and mixed bases rather than hiding them. Select areas by code list, by group (X01 for every country, an ILO region or subregion, or a World Bank income group), or both; X-coded aggregates require a dataset with aggregates.
Paramètres, retour & exemple (11)
Paramètressex· string · optionnel · SEX_T | SEX_M | SEX_F | SEX_O
Sex code SEX_T, SEX_M, SEX_F, or SEX_O; T/M/F/O and total/both/male/female/other are accepted. Defaults to SEX_T on a dataset with a sex breakdown; refused on one without.sort· string · optionnel · value_desc | value_asc | ref_area
Row order: value_desc (default), value_asc, or ref_area. rank is always by value, highest first.period· string · optionnel
A common period, YYYY, YYYYQn, or YYYYMmm matching the dataset frequency (2024-Q2 and 2025-03 are normalized). Omit to compare each area at its latest period.classif1· string · optionnel
First breakdown code, case-insensitive. Defaults to the dataset's total code; required when the breakdown has no total (deciles); refused on a dataset without the breakdown. ilostat_describe_indicator lists the dataset's codes and marks its totals.classif2· string · optionnel
Second breakdown code; same defaults and rules as classif1.ref_areas· array · optionnel
Reference areas (up to 300): ISO3 codes (USA) or X-coded aggregates (X01 World); case-insensitive, ILO_GEO_ forms accepted. At least one of ref_areas or area_group is required.area_group· string · optionnel
X01 for every country, an ILO region or subregion, or a World Bank income group (X06, X56, X02, …); expands to its member countries. The group's own aggregate is compared only when listed in ref_areas. ilostat_list_reference topic area_groups lists the codes.dataset_id· string · requis
One dataset ID (UNE_DEAP_SEX_AGE_RT_A), as ilostat_search_indicators returns it; case-insensitive, a DF_ prefix (the SDMX dataflow form) stripped, a bare indicator code resolved when it has one frequency.change_years· integer · optionnel
Adds each value's change from the same sub-period this many years earlier, in the dataset unit.lookback_years· integer · optionnel
Latest mode: an area's latest value must fall within this many years of the current year.include_projections· boolean · optionnel
Latest mode: let projections (ILO modelled values after the cutoff) be an area's latest value.
Exemple d'appel{"name": "ilostat_compare_geographies", "arguments": {"dataset_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"cap": 1, "mode": "latest", "rows": [], "error": {}, "shown": 1, "slice": {}, "legend": {}, "notice": "texte", "period": "texte", "dataset": {}, "missing": [], "dataframe": {}}} - ilostat_dataframe_describe≈ 1634 tokens
Describe the df_<id> dataframes staged by ilostat_query_indicator and ilostat_compare_geographies or stored by ilostat_dataframe_query register_as: the tool and parameters that produced each, the datasets it holds (label, last update, and the unit with its measure, type, and multiplier — values stay in the published scale the multiplier names), coverage, basis counts, attribution, creation and expiry times, row count, and column schema. Pass name for one dataframe. Without it, every staged dataframe is listed, except on a deployment whose callers share one canvas, where listing is off and only the exact name works. Read the schema here before writing SQL for ilostat_dataframe_query.
Paramètres, retour & exemple (1)
Paramètresname· string · optionnel
One dataframe name as the producing tool returned it (df_XXXXX_XXXXX: letters and digits, five in each part; case-insensitive, as in SQL). Omit to list every staged dataframe; a deployment whose callers share one canvas refuses the listing and needs the name.
Exemple d'appel{"name": "ilostat_dataframe_describe", "arguments": {"name": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"error": {}, "notice": "texte", "dataframes": []}} - ilostat_dataframe_query≈ 1891 tokens
Run a single-statement SELECT against the df_<id> dataframes staged by ilostat_query_indicator and ilostat_compare_geographies or stored by an earlier register_as. Inspect a dataframe with ilostat_dataframe_describe first; its column schema is what the SQL has to match. Read-only: writes, DDL, DROP, COPY, PRAGMA, ATTACH, file references, file-reading table functions, and functions that read engine settings or name a table from a string are rejected, and system catalogs (information_schema, pg_catalog, sqlite_master, duckdb_*) are denied. Breakdown versions overlap (AGE_YTHADULT_*, AGE_AGGREGATE_*, AGE_10YRBANDS_*), so filter to one version before summing. Optional register_as stores the result as a new dataframe with a fresh TTL.
Paramètres, retour & exemple (4)
Paramètressql· string · requis
One SELECT over df_<id> tables (DuckDB SQL: joins, aggregates, window functions, CTEs), at most 20,000 characters. BIGINT results such as COUNT or SUM of integers serialize as strings; CAST to DOUBLE for inline arithmetic.preview· integer · optionnel
Rows returned inline; defaults to row_limit, and a larger value is applied as row_limit. Inline rows also stop at a size budget (applied_limits.preview_chars). Set lower when register_as keeps the full result.row_limit· integer · optionnel
Cap on rows materialized; defaults to 1,000, or the per-call cap when that is lower. The per-call cap is 10,000, or the lower cap the deployment sets; a larger value, up to 1,000,000, is applied as that cap. A query matching more stops at the cap and row_count_capped is true; register_as keeps the full result.register_as· string · optionnel
Store the result as a new dataframe under this name (df_XXXXX_XXXXX: letters and digits, five in each part; stored uppercased after df_) with a fresh TTL, to chain analyses. A result over 1,000,000 rows is refused, and storing one can evict the oldest dataframes, which evicted names.
Exemple d'appel{"name": "ilostat_dataframe_query", "arguments": {"sql": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"cap": 1, "rows": [], "error": {}, "shown": 1, "notice": "texte", "columns": [], "evicted": [], "row_count": 1, "truncated": true, "expires_at": "texte", "registered_as": "texte", "applied_limits": {}}} - ilostat_describe_indicator≈ 3158 tokens
Explain one ILOSTAT dataset before comparing numbers: its definition, unit and multiplier, frequency variants and coverage, the sex and breakdown codes in use across its frequencies (the total code of each breakdown marked), the reference areas it covers, whether it carries World/regional/income-group aggregates, and how its observations are classed as reported, modelled, or projected. Accepts a dataset ID (UNE_DEAP_SEX_AGE_RT_A) or a bare indicator code (UNE_DEAP_SEX_AGE_RT), which describes every frequency. An unknown code returns found: false with guidance.
Paramètres, retour & exemple (1)
Paramètresdataset_id· string · requis
One dataset ID (indicator code plus _A, _Q, or _M, e.g. UNE_DEAP_SEX_AGE_RT_A) or a bare indicator code (UNE_DEAP_SEX_AGE_RT), as ilostat_search_indicators returns them. Case-insensitive; a DF_ prefix (the SDMX dataflow form) is stripped.
Exemple d'appel{"name": "ilostat_describe_indicator", "arguments": {"dataset_id": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"cap": 1, "unit": {}, "error": {}, "found": true, "label": "texte", "shown": 1, "notice": "texte", "measure": {}, "subject": {}, "database": {}, "datasets": [], "guidance": "texte"}} - ilostat_get_country_profile≈ 1929 tokens
Build a headline labour-market profile for one reference area: labour force participation, employment-to-population ratio, unemployment and youth unemployment rates, youth NEET rate, informal employment rate, employment level, labour income share, and working poverty rate. Each indicator shows its latest reported value (from a national or institutional source, with its source and notes) and, separately, its latest ILO modelled estimate that is not a projection, each with its dataset, period, and status — a missing reported value stays missing and is never filled from the model. Accepts a country (ISO3, e.g. KEN) or an X-coded aggregate (X01 World, regions, income groups), for which only modelled values exist.
Paramètres, retour & exemple (2)
Paramètressex· string · optionnel · SEX_T | SEX_M | SEX_F
SEX_T (default), SEX_M, or SEX_F; T/M/F and total/both/male/female are accepted. Indicators without a sex breakdown (labour income share) are unaffected.ref_area· string · requis
One reference area with annual data: an ISO3 country code (KEN) or an X-coded aggregate (X01 World, X06, X02); ILO_GEO_ forms accepted, case-insensitive. ilostat_list_reference topic ref_areas lists them.
Exemple d'appel{"name": "ilostat_get_country_profile", "arguments": {"ref_area": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"sex": "texte", "error": {}, "notice": "texte", "ref_area": {}, "indicators": [], "attribution": "texte", "catalog_as_of": "texte", "reported_missing": [], "modelled_cutoff_year": 1}} - ilostat_list_reference≈ 2302 tokens
Decode ILOSTAT's code vocabulary: reference areas (ISO3 countries and X-coded aggregates, with World Bank income group and ILO region), the groups that area_group accepts (X01 for every country, ILO regions and subregions, World Bank income groups; exact-code lookups list their member countries), databases, subjects, sex codes, breakdown codes for classif1/classif2 with their classification types, per-country data sources, observation status flags, note codes, and frequencies. Filter by text or look up exact codes; long topics page with a cursor. These are ILOSTAT-wide vocabularies; ilostat_describe_indicator lists the sex and breakdown codes one dataset actually uses.
Paramètres, retour & exemple (7)
Paramètrescodes· array · optionnel
Exact codes to look up (up to 100; case-insensitive, and ILO_GEO_ forms accepted for ref_areas and area_groups). Codes the topic lacks are listed in not_found. With topic area_groups, each group found also lists its member countries.limit· integer · optionnel
Entries per page, at most 500; a larger value, up to 10,000, is applied as 500 and the notice says so.topic· string · requis · ref_areas | area_groups | databases | subjects | sexes | classifications | classification_types | sources
Vocabulary to list: ref_areas, area_groups (the X codes area_group accepts), databases, subjects, sexes, classifications (classif1/classif2 codes), classification_types, sources, obs_status, notes, or frequencies.cursor· string · optionnel
Opaque continuation token: the previous page's next_cursor, passed unchanged.filter· string · optionnel
Text filter: every word must match a word or word prefix of the code or label (case, accents, and punctuation ignored; labor matches labour). Omit to list the whole topic.ref_area· string · optionnel
Topic sources only: list the sources of this reference area (ISO3 or X code; case-insensitive, ILO_GEO_ forms accepted).classification_type· string · optionnel
Topic classifications only: keep codes of this classification type, the code prefix (AGE, ECO, EDU, …).
Exemple d'appel{"name": "ilostat_list_reference", "arguments": {"topic": "ref_areas"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"cap": 1, "error": {}, "shown": 1, "topic": "ref_areas", "total": 1, "notice": "texte", "entries": [], "not_found": [], "truncated": true, "next_cursor": "texte", "catalog_as_of": "texte"}} - ilostat_query_indicator≈ 4613 tokens
Fetch observations for up to 3 ILOSTAT datasets per call, filtered by reference area or area group, sex, breakdown codes (classif1, classif2), source, and period; datasets past the first 3 come back as remaining_dataset_ids for another call. Rows keep their source, observation status, decoded notes, and a basis — reported, modelled_estimate, or projection — and the response echoes every filter applied, including the best-source default. Codes are checked against ILOSTAT's dictionaries before the request is sent: ilostat_list_reference lists valid codes and ilostat_describe_indicator lists the codes a dataset actually uses. A result larger than the inline preview is staged in full as a df_<id> dataframe for SQL through ilostat_dataframe_describe and ilostat_dataframe_query when this deployment enables dataframes. A request with no filters at all is refused when the dataset exceeds the row ceiling, and a filtered request that still exceeds it is refused with guidance to narrow it.
Paramètres, retour & exemple (12)
Paramètressex· array · optionnel
Sex codes SEX_T, SEX_M, SEX_F, SEX_O; T/M/F/O and total/both/male/female/other are accepted.time· string · optionnel
One exact period: YYYY (on a quarterly or monthly dataset, every period of that year), YYYYQn, or YYYYMmm; 2024-Q2, 2024 Q2, and 2025-03 are normalized. Not combinable with time_from, time_to, or latest_only.sources· array · optionnel
Source codes (e.g. BA:453); ilostat_list_reference topic sources with ref_area lists an area's sources. Without source_selection, setting sources switches it to all, since a secondary source matches nothing under best.time_to· string · optionnel
Last year (YYYY), not before time_from.classif1· array · optionnel
Codes of the first breakdown (e.g. AGE_YTHADULT_YGE15); case-insensitive. ilostat_describe_indicator lists the codes a dataset uses.classif2· array · optionnel
Codes of the second breakdown, for datasets that have one; case-insensitive. ilostat_describe_indicator lists them.ref_areas· array · optionnel
Reference areas (up to 300): ISO3 country codes (USA) or X-coded aggregates (X01 World); case-insensitive, ILO_GEO_ forms accepted. Aggregates need a dataset with has_aggregates true. Omit for every area.time_from· string · optionnel
First year (YYYY); upstream filters by year only.area_group· string · optionnel
X01 for every country, an ILO region or subregion, or a World Bank income group (X06, X56, X02, …); expands to its member countries, unioned with ref_areas. ilostat_list_reference topic area_groups lists the codes.dataset_ids· array · requis
Dataset IDs, up to 100 — an indicator code plus _A, _Q, or _M (UNE_DEAP_SEX_AGE_RT_A), as ilostat_search_indicators returns them. Case-insensitive; a DF_ prefix (the SDMX dataflow form) is stripped, a bare indicator code resolves when it has one frequency, an element holding + or , joined IDs is split, and duplicates are dropped. Every ID is checked; the first 3 distinct datasets are queried and the rest come back as remaining_dataset_ids for another call.latest_only· boolean · optionnel
Only each series' latest period — a series is one dataset, reference area, sex, classif1, and classif2 code — with every row at that period (one per source under source_selection all or secondary; the latest quarter or month on sub-annual datasets); combines with time_from/time_to. When the request's full history is too large or too slow to read in one call, it falls back to the latest period per area and dataset, which can miss a series that ends earlier; applied_filters.latest_mode says which ran, and the notice says so. time_from or classif1 narrow it back under; sex or fewer ref_areas alone may still read too much and fall back.source_selection· string · optionnel · best | all | secondary
best (default): the preferred source per area and period; all: secondary sources too, each row flagged best_source; secondary: secondary sources only. Defaults to all when sources is set.
Exemple d'appel{"name": "ilostat_query_indicator", "arguments": {"dataset_ids": []}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"cap": 1, "rows": [], "error": {}, "shown": 1, "legend": {}, "notice": "texte", "summary": {}, "datasets": [], "dataframe": {}, "row_count": 1, "truncated": true, "attribution": "texte"}} - ilostat_search_indicators≈ 2631 tokens
Search ILOSTAT's catalog of labour-statistics indicators by plain-language terms and filters. Each hit is one indicator with its datasets — one per available frequency (annual, quarterly, monthly) — plus breakdowns, coverage years, number of reference areas, source database, and last update; pass a dataset ID to ilostat_describe_indicator for its units and breakdown codes, then to ilostat_query_indicator or ilostat_compare_geographies for values. Every search term must match a word or word prefix in the indicator's label, subject, database, breakdown names, code, or definition; a term that matches no word or word prefix anywhere in the catalog matches the words sharing its stem instead (informality finds informal, unionization finds union), and the notice names it. British and American spellings (labour/labor) match alike. The measure filter lists every indicator of one measured quantity, as ilostat_describe_indicator's related indicators count them. Facet counts reflect all applied filters.
Paramètres, retour & exemple (9)
Paramètreslimit· integer · optionnel
Hits per page, at most 50; a larger value, up to 1,000, is applied as 50 and the notice says so.query· string · optionnel
Plain-language terms, e.g. "youth unemployment" or "informal employment rate". Case, accents, and punctuation are ignored, labor matches labour, and a trailing plural s is tolerated; a term no catalog word starts with is matched by its stem (-ity, -ization, -ive, -ment, -ing, -ed, -ly, and a plural s dropped, -ies read as y). Omit to browse by filters (results then order by indicator code).cursor· string · optionnel
Opaque continuation token: the previous page's next_cursor, passed unchanged.measure· string · optionnel
Measure code, exactly as ilostat_describe_indicator's measure.code gives it (e.g. EMP_TEMP_NB); case-insensitive. Keeps every indicator measuring that quantity, under any breakdown.subject· string · optionnel
Subject code, e.g. LUU (unemployment and labour underutilization); case-insensitive. ilostat_list_reference topic subjects lists them.database· string · optionnel
Source database code, e.g. LFS or ILOEST (the ILO modelled estimates); case-insensitive. ilostat_list_reference topic databases lists them.breakdown· string · optionnel
Classification type the indicator is broken down by, e.g. AGE, ECO, GEO, SEX; case-insensitive. ilostat_list_reference topic classification_types lists them.frequency· string · optionnel · A | Q | M
Keep only datasets of this frequency: A annual, Q quarterly, M monthly. Narrows each hit's datasets; an indicator with none left drops out.aggregates_only· boolean · optionnel
Keep only datasets carrying World, regional, or income-group rows, dropping indicators with none.
Exemple d'appel{"name": "ilostat_search_indicators", "arguments": {"limit": 1, "query": "texte", "cursor": "texte", "measure": "texte", "subject": "texte", "database": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"cap": 1, "hits": [], "error": {}, "shown": 1, "total": 1, "facets": {}, "notice": "texte", "truncated": true, "next_cursor": "texte", "catalog_as_of": "texte"}}
C'est votre serveur ?
Revendiquez-le sur l'espace créateur (preuve GitHub, domaine ou npm) pour afficher le badge « propriétaire vérifié » et lancer un pentest comportemental à la demande afin d'obtenir le badge « Vérifié ».