accueil / serveurs / Recherche & Web / it.expatliving/data
it.expatliving/data
serveur MCP (Model Context Protocol) · expatliving-data 1.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 it.expatliving/data est sûr ?
Au dernier audit MCP Hub, le serveur MCP « it.expatliving/data » 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 11 outils
- check_tax_eligibility≈ 1258 tokens
For one regime slug (from list_tax_regimes) and one 6-digit ISTAT code (from search_comuni): qualifies, does_not_qualify or not_assessable, with a one-sentence reason to quote. not_assessable is never a no. This is about the place only; say so, and never present it as whether a person qualifies or as tax advice.
Paramètres, retour & exemple (2)
Paramètresslug· string · requis
A regime slug from /tax/regimes, e.g. "regime-7-percent-pensioners".comune· string · requis
6-digit ISTAT comune code. Find it with /comuni?q=.
Exemple d'appel{"name": "check_tax_eligibility", "arguments": {"slug": "texte", "comune": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"place": {}, "reason": "texte", "regime": {}, "headroom": 1, "disclaimer": "texte", "population": {}, "attribution": {}, "maxPopulation": 1, "placesNotPeople": true, "ruleIsIncomplete": true, "geographicEligibility": "qualifies"}} - find_comuni≈ 5899 tokens
Which Italian comuni match: region, province, population range, purchase-price and rent ranges (OMI), population change 2019–2025, the six shortlist filters (January low, days above 30 C, regional hospital-care score, all three care scores at 60, tourist beds per resident, outside seismic zone 1) and/or the verified comuni of a tax regime. Paged (max 100) and sortable. Healthcare scores are region grain (autonomous-province grain for Bolzano and Trento): every town in the region shares the score. A comune with no price, rent, population-change, climate, healthcare, tourism or seismic figure is left out of the filter on it and COUNTED in `missingData` — never treated as cheap, free or stable; say how many were left out. The taxRegime filter lists only comuni on the regime's verified routes: a comune missing from it is NOT a 'no' (the response says so in `taxRegime.note`). Rows carry plain numbers; their source and vintage are in `figures`. Use search_comuni to turn a town name into a code, get_comune for one town's full profile.
Paramètres, retour & exemple (22)
Paramètresq· string · optionnel
Only comuni whose name contains this (case- and accent-insensitive).sort· string · optionnel · population | name | purchasePrice | rent | populationChange | januaryLow | daysAbove30C | hospitalCareScore
Sort key. A comune without a figure for the sort key always sorts last.limit· integer · optionnel
Rows per page, 1–100. Default 25.order· string · optionnel · asc | desc
Default: desc for population, populationChange, januaryLow and hospitalCareScore; asc for name, purchasePrice, rent, daysAbove30C, bedsPerResident and seismicClass.offset· integer · optionnel
Rows to skip, for the next page.region· string · optionnel
A region name or slug, e.g. "Abruzzo" or "valle-d-aosta".province· string · optionnel
A province's two-letter code ("AQ") or slug ("l-aquila").taxRegime· string · optionnel
A verified geographic regime slug from /tax/regimes. Lists only comuni on the regime's verified routes; a comune missing from the list is NOT a "no" (the rule may admit comuni by routes not yet encoded).maxPopulation· integer · optionnel
Residents, inclusive.minPopulation· integer · optionnel
Residents, inclusive.minJanuaryLowC· integer · optionnel
[UI key jan] Average January daily minimum (ERA5-Land, 2015 to 2024) at least this many degrees C, whole numbers -10 to 12. Town grain. A comune with no figure is left out and counted in missingData.maxDaysAbove30C· integer · optionnel
[UI key heat] Average days a year above 30 C (ERA5-Land, 2015 to 2024) at most this many, 0 to 120. Town grain. No figure: left out and counted.maxRentEurM2Month· number · optionnel
Rent in EUR/m2 per month, inclusive. A comune with no rent figure is left out.minRentEurM2Month· number · optionnel
Rent in EUR/m2 per month, inclusive. A comune with no rent figure is left out.maxBedsPerResident· number · optionnel
[UI key beds] Registered tourist beds per resident (ISTAT, 2024) at most this; one of 0.1, 0.5, 1. Town grain. A comune with no figure is left out and counted; a real zero is a figure.excludeSeismicZone1· ? · optionnel
[UI key seis] true: leave out comuni in official seismic zone 1, the highest hazard class (hazard class 4 in the map layer). A legal classification from the Dipartimento della Protezione Civile (31 May 2025), not a forecast. A comune with no single classification is left out and counted.minHospitalCareScore· integer · optionnel
[UI key hosp] Ministero della Salute NSG 2024 hospital-care score at least this, 50 to 100; 60 is the official sufficiency line. REGION grain: every comune in a region shares its region's score, except Bolzano-province and Trento-province comuni, which carry their own autonomous province's score. No figure: left out and counted.maxPurchasePriceEurM2· number · optionnel
Purchase price in EUR/m2, inclusive. A comune with no price is left out, never treated as cheap.minPurchasePriceEurM2· number · optionnel
Purchase price in EUR/m2, inclusive. A comune with no price is left out, never treated as cheap.allCareScoresAtLeast60· ? · optionnel
[UI key nsg60] true: the NSG prevention, community-care and hospital-care scores must all be at least 60. Region grain (autonomous-province grain for Bolzano and Trento). A comune missing any of the three is left out and counted.maxPopulationChangePct· number · optionnel
Population change 2019 to 2025, in percent, inclusive.minPopulationChangePct· number · optionnel
Population change 2019 to 2025, in percent, inclusive. A negative value means decline.
Exemple d'appel{"name": "find_comuni", "arguments": {"q": "texte", "sort": "population", "limit": 1, "order": "asc", "offset": 1, "region": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"limit": 1, "total": 1, "offset": 1, "applied": {}, "figures": {}, "hasMore": true, "results": [], "returned": 1, "taxRegime": {}, "nextOffset": "texte", "attribution": {}, "missingData": []}} - get_article≈ 751 tokens
One article's full text as Markdown, with its places, datasets and a ready-made citation. Quote figures from the dataset pages it cites, which carry their vintage. Content is free to use provided you credit Expat Living Italy and link to the article.
Paramètres, retour & exemple (1)
Paramètresslug· string · requis
Exemple d'appel{"name": "get_article", "arguments": {"slug": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"url": "texte", "body": "texte", "deck": "texte", "slug": "texte", "title": "texte", "author": "texte", "places": [], "status": "published", "topics": [], "updated": "texte", "datasets": [], "published": "texte"}} - get_comune≈ 5774 tokens
One Italian comune's population, foreign residents by citizenship, property purchase/rent price, price-to-rent, verified tax-regime eligibility, its province's rollup, `seismicZone` (the official zona sismica 1-4: a legal classification, not a forecast and not a verdict on any building; quote it with its label and say so — a comune that straddles zones has no single zone, never round it; the zone has nothing to do with tax eligibility, and is not the 7% regime’s “seismic” routes, which depend on the 2009 and 2016-17 earthquake areas), `layers` (climate, air quality, crime, healthcare quality, age, population change and every other Italy-map layer) and `provinceWellbeing` (ISTAT BES indicators, polarity-aware percentiles) — looked up by 6-digit ISTAT code. Each layer's `grain` and `measuredFor` say whose number it is: a province or region value is not a measurement of this comune — say so when you quote it. Every field is wrapped in a provenance envelope (source, vintage, extractedOn, license); repeat the vintage when you state the number, and if a value is null, say why rather than treating it as zero.
Paramètres, retour & exemple (1)
ParamètresistatCode· string · requis
6-digit ISTAT comune code, e.g. 075029.
Exemple d'appel{"name": "get_comune", "arguments": {"istatCode": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"place": {}, "layers": [], "articles": [], "population": {}, "attribution": {}, "seismicZone": {}, "provinceRollup": {}, "priceToRentYears": {}, "provinceWellbeing": {}, "purchasePriceEurM2": {}, "rentPriceEurM2Month": {}, "taxRegimeEligibility": []}} - get_coverage≈ 1564 tokens
For every dataset: how many places it covers, out of how many at its grain, plus the source's own coverage caveat. Pass `dataset` (a slug from list_datasets) to list the places that dataset lacks, with the gaps by region. Use it before telling anyone data does not exist for a place, and to explain a null. Missing means no figure, never a zero. Keys a source publishes that match no current place (a superseded province code) are reported and never mapped onto a current place. Drafts are listed as not served, without counts.
Paramètres, retour & exemple (3)
Paramètreslimit· integer · optionnel
Missing places per page when dataset is given, 1–100. Default 50.offset· integer · optionnel
Missing places to skip, for the next page.dataset· string · optionnel
A dataset slug from /datasets. Omit it for the summary of every dataset; pass it to list the places that dataset lacks.
Exemple d'appel{"name": "get_coverage", "arguments": {"limit": 1, "offset": 1, "dataset": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"datasets": [], "attribution": {}, "missingPlaces": {}}} - get_nationality≈ 2696 tokens
For one tracked citizenship (ISO-2 code such as US, GB, DE): the comuni, provinces and regions where its holders concentrate, with counts and shares. It is CITIZENSHIP, not birthplace — foreign-born Italian citizens are not counted — and it carries small-number caveats: the comune ranking skips places under 1,000 residents by default and flags rows under 30 residents (`smallNumber`). A comune with no ISTAT row is left out, not counted as zero, so totals are floors. State those caveats when you quote a ranking; they are in the result's `caveats`. Province and comune lists are different levels of detail — say which.
Paramètres, retour & exemple (4)
Paramètrescc· string · requis
ISO-2 citizenship code of one of the citizenships this site tracks, e.g. "US".limit· integer · optionnel
How many comuni and provinces to list, 1–50. Default 10.rankBy· string · optionnel · share | count
share: residents with this citizenship as a fraction of the comune's population. count: absolute numbers.minPopulation· integer · optionnel
Smallest comune, in residents, that may appear in the comune ranking. Default 1,000: in a village of sixty, four foreign residents is not a finding. Lowering it lets tiny places top the ranking.
Exemple d'appel{"name": "get_nationality", "arguments": {"cc": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"caveats": [], "byRegion": {}, "topComuni": {}, "attribution": {}, "nationality": {}, "topProvinces": {}, "nationalTotal": {}, "citizenshipNotBirthplace": true}} - get_province≈ 4941 tokens
One Italian province (two-letter code such as AQ, or its slug — a comune's `provinceCode`): population, OMI prices, foreign residents by citizenship (citizenship, not birthplace), ALL ISTAT BES well-being indicators with polarity-aware percentiles among provinces (no composite score), every province- and region-grain map layer, `seismicZones` (how many of its comuni sit in each official seismic zone — a count of comuni, never an average, since a province has no zone of its own), and how much of the province meets each verified tax regime (places, not people). Sources use different province lists — Sardinia was reorganized in 2026 — so a section a source lacks is null with a reason and listed in `missingSections`: report it as missing, never substitute another province's figure.
Paramètres, retour & exemple (1)
Paramètrescode· string · requis
A province's two-letter code, e.g. "AQ", or its slug, e.g. "l-aquila". Find it in a comune's `provinceCode`.
Exemple d'appel{"name": "get_province", "arguments": {"code": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"layers": [], "prices": {}, "province": {}, "wellbeing": {}, "population": {}, "taxRegimes": [], "attribution": {}, "seismicZones": {}, "missingSections": [], "placesNotPeople": true, "foreignResidentsByCitizenship": {}, "foreignResidentsAllCitizenships": {}}} - list_articles≈ 884 tokens
Dated, sourced reporting on moving to and retiring in Italy, newest first. Filter by topic, by place (a comune's ISTAT code) or by dataset slug. Each entry has its URL, a Markdown URL for the full text, and the places and datasets it cites. Content is free to use provided you credit Expat Living Italy and link to the article.
Paramètres, retour & exemple (4)
Paramètresplace· string · optionnel
A comune's 6-digit ISTAT code (or a province sigla / region slug).topic· string · optionnel
One of: tax, residency-visas, costs-housing, healthcare, places, daily-life, data-method.dataset· string · optionnel
A dataset slug from GET /datasets.include· string · optionnel · archived
Pass `archived` to include archived articles, flagged by `status`.
Exemple d'appel{"name": "list_articles", "arguments": {"place": "texte", "topic": "texte", "dataset": "texte", "include": "archived"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"articles": [], "attribution": {}}} - list_datasets≈ 702 tokens
The catalog: each dataset's source institution, vintage (the period it describes), geographic grain, license, the expatliving.it page that presents it, and whether it is servable (false = still an unverified draft; never quote its values). Use it to say what data exists and where a reader can see it.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "list_datasets", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"datasets": [], "attribution": {}}} - list_tax_regimes≈ 753 tokens
Each regime's status (verified or draft), whether it depends on place (geographic) or on the person, its legislation, population ceiling and how many comuni meet its verified criteria. Places, not people: not tax advice.
Paramètres, retour & exemple (0)
Exemple d'appel{"name": "list_tax_regimes", "arguments": {}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"regimes": [], "disclaimer": "texte", "attribution": {}, "placesNotPeople": true}} - search_comuni≈ 595 tokens
Look up Italian comuni by name (case- and accent-insensitive, partial names work) and get each one's 6-digit ISTAT code, province and region — the code get_comune needs. Returns identifiers only, no figures. Several comuni share a name; check the province before choosing.
Paramètres, retour & exemple (2)
Paramètresq· string · requis
A comune name or part of one, accents optional — e.g. "Introdacqua" or "reggio".limit· integer · optionnel
How many matches to return, 1–25. Default 10.
Exemple d'appel{"name": "search_comuni", "arguments": {"q": "texte"}}Exemple de retour{"content": [{"type": "text", "text": "…"}], "structuredContent": {"query": "texte", "results": [], "truncated": true, "attribution": {}}}
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é ».