Skip to main content
Glama

Expat Living Italy

List the Italian tax regimes this site encodes

list_tax_regimes
Read-onlyIdempotent

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.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "list_tax_regimes"
  }
}

Input Schema

NameRequiredDescriptionDefault

No arguments

Output Schema

NameRequiredDescriptionDefault
regimesYes
disclaimerYes
attributionYes
placesNotPeopleYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / attribution / properties / license
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "License of Expat Living Italy's own work only; upstream data keeps its own license, per dataset.",
      +  "properties": {
      +    "name": {
      +      "type": "string"
      +    },
      +    "url": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "name",
      +    "url"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / attribution / required
      Previous value: -[
      -  "publisher",
      -  "url",
      -  "citeAs",
      -  "request"
      -]New value: +[
      +  "publisher",
      +  "url",
      +  "citeAs",
      +  "request",
      +  "license"
      +]
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$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"
      +}
  3. Added

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and closed-world scope, so the safety profile is covered. The description adds useful data-quality context (regimes can be 'verified or draft', and counts reflect 'verified criteria') plus a non-advice disclaimer. It does not add much beyond the structured fields, so a middle score fits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence enumerating returned attributes, with no filler. It is not front-loaded with a purpose statement, which costs it a point, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists and the annotations cover safety, so the description only needs to orient the agent — which it does by listing the notable fields and the place-vs-person distinction. The main residual gap is routing guidance against the eligibility sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing to disambiguate and the baseline of 4 applies. The description correctly introduces no argument concepts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description implies an enumeration of tax regimes by describing 'Each regime's status... population ceiling and how many comuni meet its verified criteria', and the title supplies the explicit verb+resource. It distinguishes itself from check_tax_eligibility with the 'Places, not people' framing. It never states plainly 'returns the list of regimes', so the purpose is inferred rather than declared.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Places, not people: not tax advice' implicitly steers the agent away from person-level eligibility questions (the check_tax_eligibility sibling), but it never names that alternative or states a positive when-to-use condition. Usage is implied, not specified.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources