Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "check_tax_eligibility", "get_article", "get_comune" and 5 more
before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"attribution":{"additionalProperties":false,"properties":{"citeAs":{"description":"A ready-made citation line.","type":"string"},"page":{"description":"The expatliving.it page these figures come from — link it when you quote them.","type":"string"},"publisher":{"type":"string"},"request":{"type":"string"},"url":{"type":"string"}},"required":["publisher","url","citeAs","request"],"type":"object"},"disclaimer":{"type":"string"},"geographicEligibility":{"description":"qualifies: the comune meets the regime's verified geographic criteria. does_not_qualify: it doesn't, and the rule has no unverified route that could admit it. not_assessable: no geographic answer can be given (see reason).","enum":["qualifies","does_not_qualify","not_assessable"],"type":"string"},"headroom":{"description":"Residents between this comune and the ceiling, when it qualifies.","type":"number"},"maxPopulation":{"type":"number"},"place":{"additionalProperties":false,"properties":{"istatCode":{"description":"6-digit ISTAT comune code, e.g. 075029.","type":"string"},"lat":{"type":"number"},"lng":{"type":"number"},"name":{"type":"string"},"page":{"description":"This comune's profile page on expatliving.it — link it when you quote any figure below.","type":"string"},"province":{"type":"string"},"provinceCode":{"type":"string"},"provinceSlug":{"type":"string"},"region":{"type":"string"},"regionSlug":{"type":"string"},"slug":{"description":"Stable URL slug for /data/comune/{slug} — never changes, even if a comune merges.","type":"string"}},"required":["istatCode","slug","name","province","provinceCode","provinceSlug","region","regionSlug","lat","lng","page"],"type":"object"},"placesNotPeople":{"const":true,"type":"boolean"},"population":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"description":"How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.","properties":{"in":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"of":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["in","of"],"type":"object"},"extractedOn":{"description":"ISO date this value was extracted from the source.","type":"string"},"license":{"type":"string"},"method":{"description":"URL to the methodology page for this dataset.","type":"string"},"reason":{"description":"Present only when value is null: why this place has no figure.","type":"string"},"source":{"type":"string"},"unit":{"type":"string"},"value":{"type":["number","null"]},"vintage":{"description":"The period the value describes, e.g. \"2025H2\" or \"2025\" — not when it was fetched.","type":"string"}},"required":["value","unit","source","vintage","extractedOn","method","license"],"type":"object"},"reason":{"description":"One sentence on why, safe to quote.","type":"string"},"regime":{"additionalProperties":false,"properties":{"criteria":{"description":"geographic: some comuni qualify and others don't. person: turns on who you are, not where you live; no per-comune answer exists.","enum":["geographic","person"],"type":"string"},"label":{"type":"string"},"page":{"description":"The regime's page on expatliving.it.","type":"string"},"slug":{"description":"The regime's id, e.g. \"regime-7-percent-pensioners\".","type":"string"},"status":{"description":"draft: encoded but not yet checked against the legislation. A draft regime's eligibility is never served.","enum":["verified","draft"],"type":"string"}},"required":["slug","label","status","criteria","page"],"type":"object"},"ruleIsIncomplete":{"type":"boolean"}},"required":["regime","place","geographicEligibility","reason","population","ruleIsIncomplete","placesNotPeople","disclaimer","attribution"],"type":"object"}{"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}
before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"attribution":{"additionalProperties":false,"properties":{"citeAs":{"description":"A ready-made citation line, with the article's canonical URL.","type":"string"},"creditText":{"type":"string"},"license":{"additionalProperties":false,"properties":{"name":{"type":"string"},"url":{"type":"string"}},"required":["name","url"],"type":"object"},"required":{"const":true,"description":"Credit with a link is the condition of free use (CC BY 4.0).","type":"boolean"},"requirement":{"type":"string"}},"required":["required","license","creditText","citeAs","requirement"],"type":"object"},"author":{"type":"string"},"body":{"description":"The article as Markdown, blocks flattened.","type":"string"},"datasets":{"items":{"additionalProperties":false,"properties":{"coverage":{"description":"How much of the place set the data covers, as the article states it.","type":"string"},"slug":{"description":"The dataset's slug in GET /datasets, when the page is one of them.","type":"string"},"title":{"type":"string"},"url":{"type":"string"},"vintage":{"type":"string"}},"required":["title","url"],"type":"object"},"type":"array"},"deck":{"type":"string"},"markdownUrl":{"description":"The whole article as Markdown, with its citation at both ends.","type":"string"},"places":{"items":{"additionalProperties":false,"properties":{"code":{"description":"ISTAT code for a comune, sigla for a province, slug for a region.","type":"string"},"grain":{"enum":["comune","province","region"],"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["grain","code","name","url"],"type":"object"},"type":"array"},"published":{"type":"string"},"slug":{"type":"string"},"status":{"enum":["published","archived"],"type":"string"},"supersededBy":{"description":"Slug of the newer article that replaces this one.","type":"string"},"title":{"type":"string"},"topics":{"items":{"type":"string"},"type":"array"},"updated":{"type":"string"},"url":{"type":"string"}},"required":["slug","title","deck","author","published","updated","status","topics","url","markdownUrl","places","datasets","body","attribution"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"articles":{"description":"Published articles about this comune — the reporting behind the numbers. Credit required to reuse.","items":{"additionalProperties":false,"properties":{"markdownUrl":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"}},"required":["slug","title","url","markdownUrl"],"type":"object"},"type":"array"},"attribution":{"additionalProperties":false,"properties":{"citeAs":{"description":"A ready-made citation line.","type":"string"},"page":{"description":"The expatliving.it page these figures come from — link it when you quote them.","type":"string"},"publisher":{"type":"string"},"request":{"type":"string"},"url":{"type":"string"}},"required":["publisher","url","citeAs","request"],"type":"object"},"foreignResidentsByCitizenship":{"additionalProperties":false,"description":"Counts by ISO-2 citizenship code. Citizenship, not birthplace — excludes foreign-born Italian citizens. value is null, never a zero-filled object, when ISTAT's citizenship dataset has no row at all for this comune.","properties":{"coverage":{"additionalProperties":false,"description":"How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.","properties":{"in":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"of":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["in","of"],"type":"object"},"extractedOn":{"description":"ISO date this value was extracted from the source.","type":"string"},"license":{"type":"string"},"method":{"description":"URL to the methodology page for this dataset.","type":"string"},"reason":{"description":"Present only when value is null: why this place has no figure.","type":"string"},"source":{"type":"string"},"unit":{"type":"string"},"value":{"anyOf":[{"additionalProperties":{"type":"number"},"propertyNames":{"type":"string"},"type":"object"},{"type":"null"}]},"vintage":{"description":"The period the value describes, e.g. \"2025H2\" or \"2025\" — not when it was fetched.","type":"string"}},"required":["value","unit","source","vintage","extractedOn","method","license"],"type":"object"},"layers":{"description":"Every other map layer's value for this place, at the grain its source publishes. A null value means the source has no figure for this place (see `reason`).","items":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"description":"How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.","properties":{"in":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"of":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["in","of"],"type":"object"},"download":{"description":"The whole dataset, as published JSON (every place, with its meta block).","type":"string"},"extractedOn":{"description":"ISO date this value was extracted from the source.","type":"string"},"grain":{"description":"The level this value is measured at. Only \"comune\" is a measurement of this comune itself.","enum":["comune","province","region"],"type":"string"},"label":{"type":"string"},"license":{"type":"string"},"measuredFor":{"description":"The place the value describes, e.g. \"L'Aquila (province)\".","type":"string"},"method":{"description":"URL to the methodology page for this dataset.","type":"string"},"note":{"description":"The source's own coverage caveat, where it has one.","type":"string"},"page":{"description":"The map page for this layer on expatliving.it — link readers here.","type":"string"},"reason":{"description":"Present only when value is null: why this place has no figure.","type":"string"},"slug":{"description":"The dataset slug, as in GET /datasets.","type":"string"},"source":{"type":"string"},"unit":{"type":"string"},"value":{"type":["number","null"]},"vintage":{"description":"The period the value describes, e.g. \"2025H2\" or \"2025\" — not when it was fetched.","type":"string"}},"required":["value","unit","source","vintage","extractedOn","method","license","slug","label","grain","measuredFor","page","download"],"type":"object"},"maxItems":100,"type":"array"},"place":{"additionalProperties":false,"properties":{"istatCode":{"description":"6-digit ISTAT comune code, e.g. 075029.","type":"string"},"lat":{"type":"number"},"lng":{"type":"number"},"name":{"type":"string"},"page":{"description":"This comune's profile page on expatliving.it — link it when you quote any figure below.","type":"string"},"province":{"type":"string"},"provinceCode":{"type":"string"},"provinceSlug":{"type":"string"},"region":{"type":"string"},"regionSlug":{"type":"string"},"slug":{"description":"Stable URL slug for /data/comune/{slug} — never changes, even if a comune merges.","type":"string"}},"required":["istatCode","slug","name","province","provinceCode","provinceSlug","region","regionSlug","lat","lng","page"],"type":"object"},"population":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"description":"How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.","properties":{"in":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"of":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["in","of"],"type":"object"},"extractedOn":{"description":"ISO date this value was extracted from the source.","type":"string"},"license":{"type":"string"},"method":{"description":"URL to the methodology page for this dataset.","type":"string"},"reason":{"description":"Present only when value is null: why this place has no figure.","type":"string"},"source":{"type":"string"},"unit":{"type":"string"},"value":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"vintage":{"description":"The period the value describes, e.g. \"2025H2\" or \"2025\" — not when it was fetched.","type":"string"}},"required":["value","unit","source","vintage","extractedOn","method","license"],"type":"object"},"priceToRentYears":{"additionalProperties":false,"description":"Years of rent that equal the purchase price. Not a yield, an ROI, or a payback period.","properties":{"coverage":{"additionalProperties":false,"description":"How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.","properties":{"in":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"of":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["in","of"],"type":"object"},"extractedOn":{"description":"ISO date this value was extracted from the source.","type":"string"},"license":{"type":"string"},"method":{"description":"URL to the methodology page for this dataset.","type":"string"},"reason":{"description":"Present only when value is null: why this place has no figure.","type":"string"},"source":{"type":"string"},"unit":{"type":"string"},"value":{"type":["number","null"]},"vintage":{"description":"The period the value describes, e.g. \"2025H2\" or \"2025\" — not when it was fetched.","type":"string"}},"required":["value","unit","source","vintage","extractedOn","method","license"],"type":"object"},"provinceRollup":{"additionalProperties":false,"properties":{"code":{"type":"string"},"name":{"type":"string"},"purchasePriceEurM2":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"description":"How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.","properties":{"in":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"of":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["in","of"],"type":"object"},"extractedOn":{"description":"ISO date this value was extracted from the source.","type":"string"},"license":{"type":"string"},"method":{"description":"URL to the methodology page for this dataset.","type":"string"},"reason":{"description":"Present only when value is null: why this place has no figure.","type":"string"},"source":{"type":"string"},"unit":{"type":"string"},"value":{"type":["number","null"]},"vintage":{"description":"The period the value describes, e.g. \"2025H2\" or \"2025\" — not when it was fetched.","type":"string"}},"required":["value","unit","source","vintage","extractedOn","method","license"],"type":"object"},"rentPriceEurM2Month":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"description":"How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.","properties":{"in":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"of":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["in","of"],"type":"object"},"extractedOn":{"description":"ISO date this value was extracted from the source.","type":"string"},"license":{"type":"string"},"method":{"description":"URL to the methodology page for this dataset.","type":"string"},"reason":{"description":"Present only when value is null: why this place has no figure.","type":"string"},"source":{"type":"string"},"unit":{"type":"string"},"value":{"type":["number","null"]},"vintage":{"description":"The period the value describes, e.g. \"2025H2\" or \"2025\" — not when it was fetched.","type":"string"}},"required":["value","unit","source","vintage","extractedOn","method","license"],"type":"object"},"slug":{"type":"string"}},"required":["name","code","slug","purchasePriceEurM2","rentPriceEurM2Month"],"type":"object"},"provinceWellbeing":{"additionalProperties":false,"description":"ISTAT BES well-being indicators for this comune's province — province-level, not a comune measurement.","properties":{"coverage":{"additionalProperties":false,"description":"How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.","properties":{"in":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"of":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["in","of"],"type":"object"},"extractedOn":{"description":"ISO date this value was extracted from the source.","type":"string"},"grain":{"const":"province","type":"string"},"license":{"type":"string"},"measuredFor":{"type":"string"},"method":{"description":"URL to the methodology page for this dataset.","type":"string"},"page":{"type":"string"},"reason":{"description":"Present only when value is null: why this place has no figure.","type":"string"},"source":{"type":"string"},"unit":{"type":"string"},"value":{"anyOf":[{"items":{"additionalProperties":false,"properties":{"code":{"type":"string"},"domain":{"type":"string"},"label":{"type":"string"},"percentile":{"description":"0–100 rank among Italy's provinces, polarity-aware: higher is always better, whichever way the raw value runs.","type":"number"},"polarity":{"description":"\"high\": a higher raw value is better; \"low\": a lower one is.","enum":["high","low"],"type":"string"},"unit":{"type":"string"},"value":{"description":"The raw indicator value.","type":"number"},"year":{"description":"The year this observation describes — indicators update on different cycles.","maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["code","domain","label","unit","polarity","value","year","percentile"],"type":"object"},"maxItems":80,"type":"array"},{"type":"null"}]},"vintage":{"description":"The period the value describes, e.g. \"2025H2\" or \"2025\" — not when it was fetched.","type":"string"}},"required":["value","unit","source","vintage","extractedOn","method","license","grain","measuredFor","page"],"type":"object"},"purchasePriceEurM2":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"description":"How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.","properties":{"in":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"of":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["in","of"],"type":"object"},"extractedOn":{"description":"ISO date this value was extracted from the source.","type":"string"},"license":{"type":"string"},"method":{"description":"URL to the methodology page for this dataset.","type":"string"},"reason":{"description":"Present only when value is null: why this place has no figure.","type":"string"},"source":{"type":"string"},"unit":{"type":"string"},"value":{"type":["number","null"]},"vintage":{"description":"The period the value describes, e.g. \"2025H2\" or \"2025\" — not when it was fetched.","type":"string"}},"required":["value","unit","source","vintage","extractedOn","method","license"],"type":"object"},"rentPriceEurM2Month":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"description":"How many of Italy's places this dataset covers at all, e.g. 7587 of 7894 comuni.","properties":{"in":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"of":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["in","of"],"type":"object"},"extractedOn":{"description":"ISO date this value was extracted from the source.","type":"string"},"license":{"type":"string"},"method":{"description":"URL to the methodology page for this dataset.","type":"string"},"reason":{"description":"Present only when value is null: why this place has no figure.","type":"string"},"source":{"type":"string"},"unit":{"type":"string"},"value":{"type":["number","null"]},"vintage":{"description":"The period the value describes, e.g. \"2025H2\" or \"2025\" — not when it was fetched.","type":"string"}},"required":["value","unit","source","vintage","extractedOn","method","license"],"type":"object"},"taxRegimeEligibility":{"description":"Verified regimes only — \"placesNotPeople\": geographic eligibility, not personal advice.","items":{"additionalProperties":false,"properties":{"headroom":{"description":"Residents between this comune and the ceiling.","type":"number"},"href":{"description":"Path to this regime's own page on expatliving.it.","type":"string"},"label":{"type":"string"},"maxPopulation":{"description":"The regime's population ceiling, when it has one.","type":"number"},"ruleIsIncomplete":{"description":"True when the rule admits comuni by routes not yet verified — silence about OTHER regimes proves nothing.","type":"boolean"},"slug":{"type":"string"}},"required":["slug","label","href","ruleIsIncomplete"],"type":"object"},"type":"array"},"totalForeignResidents":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}],"description":"Sum of foreignResidentsByCitizenship: only the citizenships this site tracks (25), so a floor, not every foreign resident — Romanian, Albanian and Moroccan residents, among others, are not counted. null when the citizenship dataset has no row for this comune."}},"required":["place","population","foreignResidentsByCitizenship","totalForeignResidents","purchasePriceEurM2","rentPriceEurM2Month","priceToRentYears","taxRegimeEligibility","provinceRollup","layers","provinceWellbeing","attribution"],"type":"object"}Only numbers and dates differ: this server embeds live figures in the definition, so the text moves without the contract changing.
⟨49 unchanged words⟩ 000 residents by default and flags rows under5030 residents (`smallNumber`). A comune with no ⟨39 unchanged words⟩
⟨627 unchanged words⟩ ":{"description":"True when fewer than5030 residents hold this citizenship here: the share ⟨322 unchanged words⟩
before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"articles":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"datasets":{"items":{"additionalProperties":false,"properties":{"coverage":{"description":"How much of the place set the data covers, as the article states it.","type":"string"},"slug":{"description":"The dataset's slug in GET /datasets, when the page is one of them.","type":"string"},"title":{"type":"string"},"url":{"type":"string"},"vintage":{"type":"string"}},"required":["title","url"],"type":"object"},"type":"array"},"deck":{"type":"string"},"markdownUrl":{"description":"The whole article as Markdown, with its citation at both ends.","type":"string"},"places":{"items":{"additionalProperties":false,"properties":{"code":{"description":"ISTAT code for a comune, sigla for a province, slug for a region.","type":"string"},"grain":{"enum":["comune","province","region"],"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["grain","code","name","url"],"type":"object"},"type":"array"},"published":{"type":"string"},"slug":{"type":"string"},"status":{"enum":["published","archived"],"type":"string"},"supersededBy":{"description":"Slug of the newer article that replaces this one.","type":"string"},"title":{"type":"string"},"topics":{"items":{"type":"string"},"type":"array"},"updated":{"type":"string"},"url":{"type":"string"}},"required":["slug","title","deck","author","published","updated","status","topics","url","markdownUrl","places","datasets"],"type":"object"},"type":"array"},"attribution":{"additionalProperties":false,"properties":{"citeAs":{"description":"Per article: \"“<title>” by <author>, Expat Living Italy, <date>. <url>\".","type":"string"},"creditText":{"type":"string"},"license":{"additionalProperties":false,"properties":{"name":{"type":"string"},"url":{"type":"string"}},"required":["name","url"],"type":"object"},"required":{"const":true,"description":"Credit with a link is the condition of free use (CC BY 4.0).","type":"boolean"},"requirement":{"type":"string"}},"required":["required","license","creditText","requirement","citeAs"],"type":"object"}},"required":["articles","attribution"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"attribution":{"additionalProperties":false,"properties":{"citeAs":{"description":"A ready-made citation line.","type":"string"},"page":{"description":"The expatliving.it page these figures come from — link it when you quote them.","type":"string"},"publisher":{"type":"string"},"request":{"type":"string"},"url":{"type":"string"}},"required":["publisher","url","citeAs","request"],"type":"object"},"datasets":{"items":{"additionalProperties":false,"properties":{"download":{"description":"The whole dataset as published JSON: a meta block (provenance, unit, grain) and every place's value.","type":"string"},"extractedOn":{"description":"ISO date this dataset was extracted from the source.","type":"string"},"grain":{"description":"The geographic level the source publishes at. NUTS 2 and NUTS 3 are Eurostat/OECD statistical regions — close to, but not the same as, Italy's regions and provinces. Never present a coarser-grain value as if it were measured for one comune.","enum":["comune","province","region","nuts2","nuts3","national"],"type":"string"},"label":{"type":"string"},"license":{"type":"string"},"page":{"description":"The human-readable page for this dataset on expatliving.it — link readers here.","type":"string"},"servable":{"description":"False while a hand-curated dataset is still \"draft\" (unverified against its legislation). A non-servable dataset returns no values anywhere in this API.","type":"boolean"},"slug":{"type":"string"},"source":{"description":"The institution to cite, e.g. \"ISTAT\" or \"Eurostat\".","type":"string"},"sourceUrl":{"description":"Where this dataset was fetched from upstream.","type":"string"},"vintage":{"description":"The period the data describes, e.g. \"2025H2\", \"2024\" or \"2015–2024\" — not when it was fetched.","type":"string"}},"required":["slug","label","source","sourceUrl","vintage","extractedOn","license","grain","servable"],"type":"object"},"type":"array"}},"required":["datasets","attribution"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"attribution":{"additionalProperties":false,"properties":{"citeAs":{"description":"A ready-made citation line.","type":"string"},"page":{"description":"The expatliving.it page these figures come from — link it when you quote them.","type":"string"},"publisher":{"type":"string"},"request":{"type":"string"},"url":{"type":"string"}},"required":["publisher","url","citeAs","request"],"type":"object"},"disclaimer":{"type":"string"},"placesNotPeople":{"const":true,"type":"boolean"},"regimes":{"items":{"additionalProperties":false,"properties":{"criteria":{"description":"geographic: some comuni qualify and others don't. person: turns on who you are, not where you live; no per-comune answer exists.","enum":["geographic","person"],"type":"string"},"knownIncompleteness":{"description":"Ways the encoded rule is narrower than the law. A comune missing from the set is not proof it doesn't qualify while this is non-empty.","items":{"type":"string"},"type":"array"},"label":{"type":"string"},"maxPopulation":{"description":"The population ceiling, for a geographic regime that has one.","type":"number"},"page":{"description":"The regime's page on expatliving.it.","type":"string"},"qualifyingComuni":{"description":"How many comuni meet the verified geographic criteria. Only for a verified geographic regime.","maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"shortLabel":{"type":"string"},"slug":{"description":"The regime's id, e.g. \"regime-7-percent-pensioners\".","type":"string"},"sourceLegislation":{"items":{"additionalProperties":false,"properties":{"cite":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"}},"required":["cite","title","url"],"type":"object"},"type":"array"},"status":{"description":"draft: encoded but not yet checked against the legislation. A draft regime's eligibility is never served.","enum":["verified","draft"],"type":"string"},"summary":{"type":"string"},"validFrom":{"type":"string"}},"required":["slug","label","shortLabel","status","criteria","page","summary","validFrom","sourceLegislation","knownIncompleteness"],"type":"object"},"maxItems":50,"type":"array"}},"required":["regimes","placesNotPeople","disclaimer","attribution"],"type":"object"}before
—after
{"$schema":"http://json-schema.org/draft-07/schema#","additionalProperties":false,"properties":{"attribution":{"additionalProperties":false,"properties":{"citeAs":{"description":"A ready-made citation line.","type":"string"},"page":{"description":"The expatliving.it page these figures come from — link it when you quote them.","type":"string"},"publisher":{"type":"string"},"request":{"type":"string"},"url":{"type":"string"}},"required":["publisher","url","citeAs","request"],"type":"object"},"query":{"type":"string"},"results":{"description":"Best matches first: exact name, then names starting with the query, then names containing it. Several Italian comuni share a name — check the province before picking one.","items":{"additionalProperties":false,"properties":{"istatCode":{"description":"6-digit ISTAT comune code — pass this to GET /comuni/{istatCode} or get_comune.","type":"string"},"name":{"type":"string"},"page":{"description":"The comune's profile page on expatliving.it.","type":"string"},"province":{"type":"string"},"provinceCode":{"type":"string"},"region":{"type":"string"}},"required":["istatCode","name","province","provinceCode","region","page"],"type":"object"},"maxItems":25,"type":"array"},"truncated":{"description":"True when more comuni matched than `limit` allowed — narrow the query.","type":"boolean"}},"required":["query","results","truncated","attribution"],"type":"object"}{"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}
Added "find_comuni", "get_coverage", "get_nationality" and 1 more (7 tools before, 11 now)
Find comuni by criteria — Which Italian comuni match: region, province, population range, purchase-price and rent ranges (OMI), population change 2019–2025, and/or the verified comuni of a tax regime. Paged (max 100) and sortable. A comune with no price, rent or population-change 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 …
What is missing, by dataset — 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.
Where one nationality lives in Italy — 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 50 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 …
Certificate changed, valid to 2027-01-03
Added "check_tax_eligibility" and "list_tax_regimes" (5 tools before, 7 now)
Does a comune meet a regime's geographic criteria? — 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.
List the Italian tax regimes this site encodes — 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.
Added "get_article" and "list_articles" (3 tools before, 5 now)
Read one article — 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.
List Expat Living Italy's articles — 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.
Certificate recorded, valid to 2026-11-02
Authorization not required
Unknown → Live
First tool surface recorded: 3 tools (server version 1.1.0)
https://www.expatliving.it/api/v1/mcp (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 10 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}
{"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}
{"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}
{"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}
{"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true}
Get one province's profile — 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, 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 su…