Skip to main content
Glama

Leggi il testo verificato di un articolo

normattiva_leggi_articolo
Read-onlyIdempotent

Retrieve an Italian law article by source alias and article number from Normattiva. Use the result status to distinguish current, abrogated, or historical text for accurate legal citation.

Instructions

Legge un articolo dato nome o alias della fonte (es. codice civile, l.fall.) e numero, anche con estensione ("21novies"). Per i codici storici è la via affidabile: usa prima normattiva_trova_fonte se l'alias non è certo. Controlla sempre esito: preambolo non è l'articolo; abrogato è informazione; vigenza_storica indica testo non vigente. vigenza (YYYY-MM-DD) chiede una data storica.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
fonteYes
vigenzaNo
articoloYes

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
urnYes
esitoYes
testoNo
avvisiNo
headingNo
incipitNo
caratteriNo
messaggioNo
permalinkYes
attribuzioneYes
aggiornamentiNo
protezione_reteYes
vigenza_storicaNo
data_abrogazioneNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.2.0
    • addedOutput schema / $defs
      Added value: +{
      +  "ProtezioneReteOutput": {
      +    "description": "Stato corrente e operazioni distinte, incluso un recupero storico.",
      +    "properties": {
      +      "acquisita_il": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Acquisita Il"
      +      },
      +      "attivita": {
      +        "title": "Attivita",
      +        "type": "string"
      +      },
      +      "avviso": {
      +        "title": "Avviso",
      +        "type": "string"
      +      },
      +      "consumo_attivita": {
      +        "title": "Consumo Attivita",
      +        "type": "string"
      +      },
      +      "consumo_globale": {
      +        "title": "Consumo Globale",
      +        "type": "string"
      +      },
      +      "cooldown_fino": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Cooldown Fino"
      +      },
      +      "livello": {
      +        "title": "Livello",
      +        "type": "string"
      +      },
      +      "origine": {
      +        "title": "Origine",
      +        "type": "string"
      +      },
      +      "rapporti": {
      +        "items": {
      +          "$ref": "#/$defs/RapportoReteOutput"
      +        },
      +        "title": "Rapporti",
      +        "type": "array"
      +      },
      +      "richieste_residue": {
      +        "title": "Richieste Residue",
      +        "type": "integer"
      +      },
      +      "ultimo_incidente": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Ultimo Incidente"
      +      }
      +    },
      +    "required": [
      +      "origine",
      +      "attivita",
      +      "consumo_attivita",
      +      "consumo_globale",
      +      "richieste_residue",
      +      "livello",
      +      "avviso"
      +    ],
      +    "title": "ProtezioneReteOutput",
      +    "type": "object"
      +  },
      +  "RapportoReteOutput": {
      +    "description": "Parte serializzabile del rapporto SQLite, senza dati di ricerca.",
      +    "properties": {
      +      "acquisita_il": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Acquisita Il"
      +      },
      +      "attivita": {
      +        "title": "Attivita",
      +        "type": "string"
      +      },
      +      "avviso": {
      +        "title": "Avviso",
      +        "type": "string"
      +      },
      +      "consumo_attivita": {
      +        "title": "Consumo Attivita",
      +        "type": "string"
      +      },
      +      "consumo_globale": {
      +        "title": "Consumo Globale",
      +        "type": "string"
      +      },
      +      "cooldown_fino": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Cooldown Fino"
      +      },
      +      "livello": {
      +        "title": "Livello",
      +        "type": "string"
      +      },
      +      "origine": {
      +        "title": "Origine",
      +        "type": "string"
      +      },
      +      "richieste_residue": {
      +        "title": "Richieste Residue",
      +        "type": "integer"
      +      },
      +      "ultimo_incidente": {
      +        "anyOf": [
      +          {
      +            "type": "string"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ],
      +        "default": null,
      +        "title": "Ultimo Incidente"
      +      }
      +    },
      +    "required": [
      +      "origine",
      +      "attivita",
      +      "consumo_attivita",
      +      "consumo_globale",
      +      "richieste_residue",
      +      "livello",
      +      "avviso"
      +    ],
      +    "title": "RapportoReteOutput",
      +    "type": "object"
      +  }
      +}
    • changedOutput schema / description
      Previous value: -"Un solo schema per i tre esiti possibili (`esito` discrimina), così i\ndue strumenti che leggono un articolo condividono un'unica forma di\nuscita — nessuna copia divergente fra loro."New value: +"Schema comune per articolo, abrogato e preambolo."
    • addedOutput schema / properties / protezione_rete
      Added value: +{
      +  "$ref": "#/$defs/ProtezioneReteOutput"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "esito",
      -  "urn",
      -  "permalink",
      -  "attribuzione"
      -]New value: +[
      +  "esito",
      +  "urn",
      +  "permalink",
      +  "attribuzione",
      +  "protezione_rete"
      +]
  2. First observedv0.1.1

TDQS

A5/5.0
Behavior5/5

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

The description adds meaningful behavioral detail beyond the readOnly/idempotent annotations: it documents the `esito` field, warns that `preambolo` is not the article, clarifies that `abrogato` is informational, and explains `vigenza_storica` as non-current text. This is exactly the kind of output-behavior context an agent needs.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: first the core function, then the routing guidance, then the critical output caveats, then the historical-date parameter. The use of semicolon-separated `esito` values keeps it compact without losing clarity.

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

Completeness5/5

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

For a read-only lookup tool with an output schema already present, the description provides enough context to select and invoke it correctly. It covers input semantics, uncertainty handling, special output states, and historical-date behavior, so no critical operational gap remains.

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

Parameters5/5

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

Schema description coverage is 0%, but the description compensates well: `fonte` is explained as name/alias with examples, `articolo` is explained as number with extension, and `vigenza` is explained as a YYYY-MM-DD historical date. All three parameters receive meaningful semantics.

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

Purpose5/5

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

The description states a specific action: reading an article by source name/alias and article number, including extension forms like "21novies". It also positions the tool against siblings by naming normattiva_trova_fonte as the pre-step for uncertain aliases and implying article lookup by name rather than by URN.

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

Usage Guidelines5/5

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

It explicitly tells the agent to use normattiva_trova_fonte first when the alias is uncertain, and labels this tool as the reliable path for historical codes. It also gives clear operational guidance around checking `esito` and providing a `vigenza` date for historical text.

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