it-eli-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@it-eli-mcpGet the full text of the Italian Civil Code article 2043"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
it-eli-mcp
An MCP server for Italian law, in two layers:
Legislation via Normattiva, the official portal of the Ministero della Giustizia. It fetches acts as Akoma Ntoso with verifiable URN:NIR and ELI identifiers, and returns the text as it stood on any past date (multivigenza). Live and keyless.
Constitutional case law (Corte Costituzionale): a local, keyless full-text index of every decision since 1956, each with its native ECLI, built from the Court's official open data.
Supreme Court case law (Corte di Cassazione): live, keyless full-text search over SentenzeWeb, the Court's own free public search engine - civil and criminal decisions, full OCR text, no local index to build.
Administrative case law (Consiglio di Stato, C.G.A.R.S., TAR): live, keyless search over the Giustizia Amministrativa portal's own public decision search - one backend for the whole administrative jurisdiction, 3.4M+ provvedimenti with native ECLI and structured full text.
Italy has the EU's largest legal profession by headcount - roughly 240,000 lawyers per CCBE figures, ahead of Germany and Spain. No live, keyless MCP connector covered its statute book. This one does, and it also covers the constitutional case law.
Part of the MateMatic eu-legal-mcp production line: the Italian sibling of de-eli-mcp (Germany)
and sejm-eli-mcp (Poland), built on the same architecture and citation contract against the
Italian source.
No JSON API. Normattiva does not publish a REST API. This connector drives the same session-based flow a browser uses - resolve a URN, read the act page, fetch its Akoma Ntoso export - so every act comes back as structured XML with its ELI intact. See
DISCOVERY.md.Licence. Italian official legal texts are outside copyright (art. 5, l. 633/1941), and Normattiva declares CC-BY-4.0 for its data from 2026-01-01. This connector relays individual acts on request, with attribution and a
source_url; it does not bulk-harvest the database (Normattiva's terms restrict that). Every response carries adataset_note. (A practitioner's read, not formal legal advice.)Cassazione is NOT Italgiure/ItalgiureWeb. The Court's full-database search (ItalgiureWeb, 35M+ documents) is free only for the judiciary; practitioners pay a subscription. This connector does not use that service. It queries SentenzeWeb (
italgiure.giustizia.it/sncass), a separate, free, public search engine the Court itself publishes, under the Italian Open Data License (IODL 2.0), with no authentication
verified live during development (see
DISCOVERY.md). Coverage is narrower than the full Italgiure database but real: 420K+ civil and criminal decisions with full OCR text.
Legislation tools (Normattiva, live)
Tool | What it does |
| The major Italian codes and consolidated acts (Codice civile, penale, di procedura, privacy/GDPR, CAD, D.Lgs. 231/2001, Costituzione, L. 241/1990) with their canonical URN. |
| Turns act coordinates ( |
| Fetches act metadata (title, date, ELI, article count) for a code name, URN, ELI path, or normattiva.it URL. |
| Fetches the text of a whole act or a single |
Related MCP server: mcp-courtwatch
Constitutional case-law tools (Corte Costituzionale, local index)
Tool | What it does |
| Full-text search over the decisions (heading, reasoning, operative part). Filters by year and type (sentenza/ordinanza). Accent-insensitive. |
| The full text of one decision, by ECLI ( |
| The most recent decisions (newest first). |
| Index coverage: total decisions, year range, counts by type, last build time. |
The case-law tools read a local SQLite index that is provisioned automatically on the first
call - no setup step. On first use the server downloads a small, sha256-verified pre-built
cost.sqlite.gz from the GitHub release (built and attached by CI on each release) and
decompresses it, or, if none is published, builds the index from the Court's open data (all
decisions since 1956); the index is then cached under ~/.matematic and every later call
queries it offline. it_case_stats reports provenance and ingested_at so you can see how
fresh it is.
To refresh, or to pre-build it ahead of time (e.g. in an offline deployment), run:
italy-eli-mcp-caselaw-ingestTuning env vars: IT_ELI_CASELAW_INDEX_URL (override/disable the pre-built download),
IT_ELI_CASELAW_INDEX_SHA256 (pin the checksum), IT_ELI_CASELAW_AUTOBUILD=0 (skip the
automatic local build). The legislation tools need no index; they fetch live.
Supreme Court case-law tools (Corte di Cassazione, SentenzeWeb, live)
Tool | What it does |
| Full-text search over decision bodies. Filters: |
| The full text of one decision by its SentenzeWeb |
No ingest step - every call queries SentenzeWeb live. Coverage: civil (snciv, ~190K) and
criminal (snpen, ~238K) decisions, including the Labour (szdec:L, ~30K) and Tax (szdec:5,
~59K) sub-chambers, full OCR text.
Administrative case-law tools (Consiglio di Stato, C.G.A.R.S., TAR, live)
Tool | What it does |
| Full-text search and/or decision-number lookup over the Giustizia Amministrativa portal - one backend for the whole administrative jurisdiction (3.4M+ provvedimenti). Filters: |
| The full text of one decision by its |
No ingest step - every call queries the portal's own public decision search live.
Citation verification (anti-hallucination)
Tool | What it does |
| Extracts Italian legal citations from any text (a drafted answer, a memo, a contract clause) and verifies each one against its source. Statute citations ( |
| Declare what this connector covers, when each family was captured, and - explicitly - what it does NOT cover. Every gap carries a fallback. |
What it reports, per citation and overall:
Existence with a range hint. A cited article that does not exist comes back as
not_foundwith a hint of what does exist:art. 9999 does not exist in this act; the act has 372 articles, numbered art. 1-372.Optional content check. A parenthetical description right after a citation (
art. 2043 c.c. (risarcimento per fatto illecito)) is compared with the real provision using a character-trigram match. A mismatch is a review signal (content_mismatch), never a hard block - paraphrase is legitimate.Hard semantics. When any cited article does not exist, the result status is
HALLUCINATION_DETECTEDand the tool response carriesisError=true, so a calling model cannot mistake it for a passed check. When the text contains no citations at all, the status isNO_CITATIONS_FOUND- explicitly NOT a verification success.Structured
gaps. Everything the tool could not verify is listed as a typed gap (out_of_corpus,unparseable_citation,act_unresolvable,upstream_unavailable,comma_not_checkable) instead of being hidden in prose. An act Normattiva cannot resolve is a gap, not a hallucination: existence is unknown, not disproven. Cassazione and administrative-court ECLIs are out of the local corpus; verify those withit_cassazione_search/it_ga_search.
it_verify_citations(text="L'art. 2043 c.c. e l'art. 9999 della legge 241/1990 si applicano.")
→ status: "HALLUCINATION_DETECTED" (isError=true)
citations: [
{raw: "art. 2043 c.c.", status: "verified", ...},
{raw: "art. 9999 della legge 241/1990", status: "not_found",
range_hint: "art. 9999 does not exist in this act; the act has <N> articles, ..."}
]
gaps: []The parse-verify-report loop is adapted from chrisryugj/korean-law-mcp (MIT) - see
THIRD_PARTY.md. The content matcher uses character trigrams (the Korean original uses bigrams,
which fit an agglutinative script; trigrams discriminate better for Italian).
Every legislation response carries the citation contract: eli_uri (e.g.
eli/id/1990/08/18/090G0294/CONSOLIDATED), urn (e.g. urn:nir:stato:legge:1990-08-07;241),
human_readable_citation (e.g. Legge 7 agosto 1990, n. 241), and source_url.
How it identifies an act
URN:NIR -
urn:nir:{authority}:{type}:{date};{number}. A partial URN with the year alone (urn:nir:stato:legge:1990;241) also resolves, so you can cite an act you only know as "L. 241/1990".ELI -
eli/id/{year}/{month}/{day}/{code}/CONSOLIDATED, read from the act itself. Never invented.
Examples
it_list_codes()
→ [{key: "codice civile", urn: "urn:nir:stato:regio.decreto:1942-03-16;262", ...}, ...]
it_resolve(act_type="d.lgs", year=2001, number=231)
→ {urn: "urn:nir:stato:decreto.legislativo:2001;231",
human_readable_citation: "Decreto legislativo n. 231/2001", source_url: "..."}
it_get_text(reference="codice civile", article="2043")
→ art. 2043 c.c. (Risarcimento per fatto illecito), with eli_uri + source_url
it_get_text(reference="codice privacy", article="1", at_date="2010-01-01")
→ the privacy code's art. 1 as it stood on 1 January 2010
it_cassazione_search(query="responsabilita medica", chamber="civile", limit=5)
→ {total_found: 81177, hits: [{sic_id: "snciv2025224393O",
citation: "Cass. civ., ord. n. 24393/2025", snippet: "...", source_url: "..."}, ...]}
it_cassazione_get(sic_id="snciv2025224393O")
→ {citation: "Cass. civ., ord. n. 24393/2025", testo: "...", massima: "...", source_url: "..."}Install
cd it-eli-mcp
pip install -e .Configure (Claude Code / any MCP client)
Copy .mcp.json.example:
{
"mcpServers": {
"it-eli-mcp": { "command": "italy-eli-mcp" }
}
}Windows 11 with Smart App Control
Smart App Control blocks unsigned executables, which covers uvx.exe, pip.exe
and the italy-eli-mcp.exe launcher that pip writes at install time. The python.exe and
py.exe from the python.org installer are signed by the Python Software
Foundation, so running the module through the interpreter works:
python -m pip install italy-eli-mcp
python -m it_eli_mcppip.exe is blocked for the same reason, so install with python -m pip, not
pip install. If python is not on PATH, use the Windows launcher: py -3 -m it_eli_mcp.
{ "mcpServers": { "italy-eli-mcp": { "command": "python", "args": ["-m", "it_eli_mcp"] } } }Do not turn Smart App Control off to work around this - it cannot be re-enabled without reinstalling Windows.
Environment:
IT_ELI_BASE_URL- defaulthttps://www.normattiva.itIT_ELI_CACHE_DIR- default~/.matematic/cache/it-eliIT_ELI_AUDIT_DIR- default~/.matematic/auditIT_ELI_CASELAW_DB- constitutional case-law index path (default~/.matematic/data/it-eli-caselaw/cost.sqlite)IT_ELI_CASELAW_INDEX_URL- pre-built index download URL (default: the GitHub release asset;''disables)IT_ELI_CASELAW_INDEX_SHA256- pin the expected index checksum instead of fetching the.sha256sidecarIT_ELI_CASELAW_AUTOBUILD-0to skip the automatic local build (prefer theindex_missingerror)
Tests
pip install -e ".[dev]"
pytest -m "not smoke" # offline (URN, Akoma Ntoso parser, case-law index, drift)
pytest -m smoke # live: Normattiva + Corte Costituzionale open data + SentenzeWebAudit trail
Every tool call appends one JSON line to ~/.matematic/audit/it-eli-mcp.jsonl (timestamp, tool,
input hash, output size, duration, status) for AI Act art. 12 record-keeping. No raw query text is
stored.
Licence
Apache-2.0. See LICENSE.
Available Tools
14 toolsit_case_get_decisionARead-onlyIdempotent
Fetch the full text of one Constitutional Court decision, by ECLI or year + number.
| Name | Required | Description | Default |
|---|---|---|---|
| anno | No | year (used with ``numero`` when ``ecli`` is not given). | |
| ecli | No | an ECLI, e.g. "ECLI:IT:COST:2024:1". | |
| numero | No | decision number (used with ``anno``). |
Output Schema
| Name | Required | Description |
|---|---|---|
| anno | No | |
| ecli | Yes | |
| testo | No | |
| numero | No | |
| citation | No | |
| collegio | No | |
| epigrafe | No | |
| relatore | No | |
| presidente | No | |
| source_url | No | |
| dispositivo | No | |
| dataset_note | No | |
| data_deposito | No | |
| data_decisione | No | |
| tipologia_label | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate read-only, idempotent, non-destructive operations, so the safety profile is covered. The description adds that it returns the full text, but provides no additional context about edge cases like missing identifiers, result size, or precedence between ecli and anno+numero, offering minimal value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the action and object, with zero redundant content. It earns a top score for efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only retrieval tool with a well-described schema, an output schema, and comprehensive annotations, this description is complete. It specifies the decision type, the court, and the allowed identifiers, which is all that is needed for a competent agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes all parameters with 100% coverage, including the relationship between anno, numero, and ecli. The description only restates 'by ECLI or year + number' without adding any new parameter-level details, so it meets the baseline but does not exceed it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Fetch' and identifies the resource as 'the full text of one Constitutional Court decision', which clearly distinguishes it from search and listing tools. It also specifies the two identification methods (ECLI or year+number), making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ECLI or year + number' establishes a clear condition for use—when a specific decision identifier is available—but it does not explicitly contrast with sibling tools like it_case_search for finding decisions by query, nor does it mention when not to use this tool. No exclusions are stated, only the positive context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_case_recentBRead-onlyIdempotent
The most recent Constitutional Court decisions in the index (newest first).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | max items (1..100). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds ordering behavior ('newest first') and scope ('in the index'), but does not discuss pagination or limit handling, though the limit parameter is straightforward.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that front-loads the core purpose and ordering. Every word is meaningful and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a single optional parameter, strong annotations, and an output schema present, the description is sufficiently complete for an agent to select and invoke the tool. It could mention a use case or alternative but is not lacking any essential context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters, and the limit parameter already has a clear description ('max items (1..100)'). The tool description does not add parameter-level meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the most recent Constitutional Court decisions in the index, ordered newest first. Though it lacks an explicit verb like 'list' or 'get', the resource and scope are specific enough to distinguish it from search and retrieval siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives such as it_case_search or it_case_get_decision. With many sibling tools present, explicit usage direction is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_case_searchARead-onlyIdempotent
Full-text search of Corte Costituzionale (Constitutional Court) decisions.
| Name | Required | Description | Default |
|---|---|---|---|
| anno | No | optional year filter (e.g. "2024"). | |
| limit | No | max hits (1..100). | |
| query | Yes | search terms (Italian; accents are ignored by the index). | |
| tipologia | No | optional type filter, "S" (sentenza) or "O" (ordinanza). |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | |
| query | Yes | |
| dataset_note | No | |
| total_returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds that the search is full-text, which is useful, but it does not elaborate on open-world behavior, pagination, or other runtime characteristics beyond what annotations and output schema provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-formed sentence that immediately communicates the tool's purpose without any filler or redundant wording. It earns its place entirely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward read-only search tool, the description, along with the fully described schema and existing output schema, provides sufficient context. All required and optional inputs are documented, and annotations confirm the non-destructive, idempotent nature of the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage with clear descriptions for all four parameters, including defaults and allowed values. The description itself adds no parameter-level meaning beyond the schema, so it meets the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the tool as a full-text search over Corte Costituzionale (Constitutional Court) decisions, using a specific verb and resource. This clearly distinguishes it from sibling search tools targeting other courts, such as it_cassazione_search and it_ga_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for full-text searching Italian Constitutional Court decisions, but it does not explicitly state when to use it over alternative tools like it_case_get_decision, it_case_recent, or it_cassazione_search. No exclusions or conditional guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_case_statsARead-onlyIdempotent
Constitutional case-law index coverage and freshness (totals, years, last build).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| year_max | No | |
| year_min | No | |
| provenance | No | |
| ingested_at | No | |
| by_tipologia | No | |
| dataset_note | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, covering safety. The description adds the specific items covered (totals, years, last build), which is useful but does not explain how the stats are compiled or any limitations—still, it adds some value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, information-dense phrase; no filler or redundant text. It conveys the essential scope efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with no parameters, and an output schema exists to describe return values. The description sufficiently orients the agent for a stats/overview call, though it could be slightly more explicit about the output format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the input schema is complete and the description needs no parameter details. Baseline of 4 applies because no parameter information is missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as providing coverage and freshness metrics for constitutional case-law, including totals, years, and last build. While it lacks an explicit verb like 'get' or 'report', the noun phrase conveys the tool's purpose and distinguishes it from sibling search/retrieval tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over the many sibling tools. The description only lists content areas but does not mention alternatives or exclusions, so it fails to provide usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_cassazione_getARead-onlyIdempotent
Fetch the full text of one Corte di Cassazione decision, live, by its SentenzeWeb id.
| Name | Required | Description | Default |
|---|---|---|---|
| sic_id | Yes | the SentenzeWeb ``id`` (e.g. "snciv2024D01234O"), as returned by ``it_cassazione_search`` hits. |
Output Schema
| Name | Required | Description |
|---|---|---|
| anno | No | |
| kind | No | |
| testo | No | |
| numdec | No | |
| sic_id | No | |
| massima | No | |
| materia | No | |
| citation | No | |
| relatore | No | |
| tipoprov | No | |
| presidente | No | |
| source_url | No | |
| dataset_note | No | |
| data_deposito | No | |
| data_decisione | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true. The description adds useful context: it retrieves 'full text' and does so 'live', which is not captured by annotations. This is meaningful beyond the structured data, though it doesn't detail failure modes or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is front-loaded with the action, resource, and key identifier. No wasted words; every element earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (1 param, rich annotations, output schema present). The description covers the purpose and the 'live' behavior. It does not mention alternatives among the many siblings, but the schema already states the ID comes from search. Slight gap in distinguishing from similar get-decision tools, but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (sic_id is described with an example and its origin). The tool description merely repeats the identifier concept ('by its SentenzeWeb id') without adding new parameter semantics beyond the schema. Baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('full text of one Corte di Cassazione decision') with a precise identifier ('SentenzeWeb id'). It clearly distinguishes from sibling search tools like it_cassazione_search by stating it retrieves a single decision, not a list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: you need a SentenzeWeb id, likely from a prior search. However, it does not explicitly state when to use this tool over alternatives like it_get_text or it_case_get_decision, nor does it mention any exclusions. Only implied through the identifier requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_cassazione_searchARead-onlyIdempotent
Full-text search of Corte di Cassazione (Supreme Court) decisions, live.
Queries SentenzeWeb (the Court's own free public search engine) in real time -
no local index. Free-text search matches the decision body (ocr).
| Name | Required | Description | Default |
|---|---|---|---|
| anno | No | optional 4-digit year filter (decision year, e.g. "2021"). | |
| limit | No | max hits (1..100). | |
| query | Yes | search terms, matched as a phrase against the decision text. | |
| chamber | No | optional, "civile" (civil) or "penale" (criminal). | |
| sub_chamber | No | optional, "lavoro" (Labour) or "tributaria" (Tax) - both are sub-chambers of the civil section. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | |
| query | Yes | |
| total_found | Yes | |
| dataset_note | No | |
| total_returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations: it performs live queries to an external public engine, does not use a local index, and matches decision body text (OCR), implying potential OCR errors. These details are not captured by the readOnly/openWorld/idempotent hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded: the first sentence states the core purpose, and the second elaborates with essential behavioral details. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the strong annotations and full parameter schema coverage, the description sufficiently covers purpose, live external query behavior, and OCR search scope. An output schema exists, so return-value documentation is not needed. The description is complete for a search tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by clarifying that free-text search matches the OCR'd decision body, complementing the schema's 'decision text' phrase and giving context about what is searched.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: full-text search of Corte di Cassazione decisions. It specifies the resource (Supreme Court decisions), the action (search), and distinguishes it from siblings by noting it queries the live external SentenzeWeb engine rather than a local index.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context—'live' and 'no local index' suggest this is for real-time queries—but it does not explicitly state when to prefer this tool over alternatives like it_case_search or it_cassazione_get. No exclusions or alternative naming are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_coverageARead-onlyIdempotent
Declare what this connector covers, how it is sourced, and what it does NOT cover.
Call this before telling a user that the law "does not contain" something, and whenever a search comes back empty: the absence may be a gap in this connector rather than in the law. Every gap carries a fallback saying where to look instead.
Returns:
Coverage with families, an as-of note, and a non-empty list of known gaps.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | |
| families | No | |
| as_of_note | Yes | States what the dates mean, and what they do not promise. |
| known_gaps | No | Never empty. An empty list would mean 'not checked', not 'no gaps'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly, openWorld, idempotent, and non-destructive. The description goes beyond this by explaining that empty results may indicate coverage gaps rather than absence in the law, and that each gap includes a fallback. It also discloses the output shape (Families, as-of note, known gaps), which adds practical behavior context not present in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each adding distinct value: purpose, usage trigger, interpretation guidance, and output summary. It is front-loaded with the core purpose and contains no redundant or filler text. This is appropriately sized for a zero-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters) and that the output schema exists, the description is remarkably complete. It covers what the tool does, when to use it, how to interpret results, and what it returns. Nothing essential is missing for an agent to call it correctly and understand its output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema covers all (100% coverage vacuously). The description correctly avoids inventing parameter details. Baseline 4 is appropriate since no parameter explanation is needed, and the description performs well otherwise by explaining the tool's role and output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb-resource pair ('Declare what this connector covers') and explicitly differentiates from sibling tools by framing itself as the coverage oracle for the connector. It also gives concrete use cases (before claiming a law lacks content, on empty search results), making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to call the tool ('Call this before telling a user that the law does not contain something, and whenever a search comes back empty') and explains why (absence may be a gap in the connector). It also notes the fallback mechanism, providing clear situational guidance without naming alternatives, which is sufficient given the tool's unique role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_ga_get_decisionARead-onlyIdempotent
Fetch the full text of one administrative decision, live, by its document URL.
| Name | Required | Description | Default |
|---|---|---|---|
| document_url | Yes | the ``document_url`` of an ``it_ga_search`` hit, verbatim (an ``https://mdp.giustizia-amministrativa.it/visualizza/?...`` URL). |
Output Schema
| Name | Required | Description |
|---|---|---|
| urn | No | |
| anno | No | |
| ecli | No | |
| testo | No | |
| numero | No | |
| citation | No | |
| nrg_anno | No | |
| tipologia | No | |
| nrg_numero | No | |
| source_url | No | |
| dataset_note | No | |
| document_url | No | |
| data_pubblicazione | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds the meaningful trait 'live' (no caching) and 'full text' (complete document content), which goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that communicates the essential purpose without any filler. Every word adds meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, a detailed schema description, an output schema present, and comprehensive annotations, the description sufficiently covers what is needed to select and invoke the tool. The 'live' and 'one decision' details round out the behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description already provides excellent detail, including the exact format and provenance from it_ga_search. The description reinforces this by specifying 'by its document URL', adding a small but useful link to the workflow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action (fetch), the resource (full text of one administrative decision), and the key qualifier (live, by document URL). It distinguishes this from sibling search and get tools by referencing the URL from it_ga_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The parameter description explains that the input is a verbatim document_url from an it_ga_search hit, making the intended workflow clear. It doesn't explicitly name alternatives or exclusions, but the context of a search-then-fetch flow is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_ga_searchARead-onlyIdempotent
Search Italian administrative case law (Consiglio di Stato, C.G.A.R.S., TAR), live.
Queries the Giustizia Amministrativa portal's own public decision search in
real time - one backend for the whole administrative jurisdiction (3.4M+
provvedimenti). Provide a full-text query, a decision numero, or both.
| Name | Required | Description | Default |
|---|---|---|---|
| anno | No | optional 4-digit publication year. Applied CLIENT-SIDE over the returned page (the portal's year field is a no-op upstream); ``total_found`` stays the upstream, year-unfiltered total. | |
| sede | No | optional court seat - "Consiglio di Stato", "C.G.A.R.S", or a TAR seat city ("Roma", "Milano", "Napoli", ...). Filters server-side. | |
| tipo | No | optional - "sentenza", "ordinanza", "decreto", "parere", "plenaria" (Adunanza Plenaria). Filters server-side. | |
| limit | No | max hits (1..60; the portal serves pages of 20/40/60, newest first). | |
| query | No | full-text search terms, matched against the decision text. | |
| numero | No | optional decision number (1-5 digits) for an exact lookup. Filters server-side; combine with ``anno`` + ``sede`` to pin one decision. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | No | |
| query | No | |
| total_found | Yes | |
| dataset_note | No | |
| total_returned | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that the search is 'live' and 'real time', indicating results may change and the data comes from the public portal. This adds behavioral context beyond the annotations (readOnly, openWorld, idempotent) by specifying the dynamic nature and scale (3.4M+ provvedimenti). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: it opens with the purpose and scope in the first sentence, follows with useful backend context, and ends with a terse input hint. No filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema and annotations, the description is sufficient. It explains what the tool does, the data source, and the input pattern. For a search tool with an output schema, this is a complete picture; the only minor gap is unlike sibling tools, but the purpose is clear enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema already provides thorough descriptions for all 6 parameters (100% coverage), the description adds a meaningful usage constraint: 'Provide a full-text query, a decision numero, or both.' This is not explicitly stated in the schema and helps the agent know a minimum input is expected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches Italian administrative case law, listing the specific courts (Consiglio di Stato, C.G.A.R.S., TAR). It uses a specific verb ('Search') and resource, and distinguishes itself by its exclusive focus on the administrative jurisdiction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context for when to use the tool: it's the live search over the Giustizia Amministrativa portal. It also instructs the agent to provide a query, decision number, or both, which helps in choosing inputs. However, it does not explicitly mention alternatives like it_ga_get_decision for known citations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_get_actARead-onlyIdempotent
Fetch act metadata from Normattiva.
| Name | Required | Description | Default |
|---|---|---|---|
| reference | Yes | a code name ("codice civile"), a URN ("urn:nir:stato:legge:1990-08-07;241"), an ELI path ("eli/id/1990/08/18/090G0294"), or a normattiva.it URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| urn | No | |
| title | No | |
| eli_uri | No | |
| doc_date | No | |
| source_url | Yes | |
| dataset_note | No | |
| article_count | No | |
| human_readable_citation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds no additional behavioral context (e.g., rate limits, authentication, or specifics about what 'metadata' includes). It doesn't contradict annotations, but it also doesn't enrich them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short, front-loaded sentence that states exactly what the tool does. Every word is necessary and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one well-documented parameter, strong annotations, and an output schema present, the description is sufficient for a simple metadata-fetching tool. It might benefit from mentioning that 'act metadata' excludes full legal text, but the tool name and sibling context help fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'reference' has a schema description that covers 100% of the parameter, listing four accepted formats. The tool description adds nothing beyond that, so the schema carries the weight. Baseline of 3 is appropriate given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Fetch act metadata from Normattiva.' This distinguishes it from sibling tools like it_get_text (which likely fetches full text) and it_list_codes (which lists codes). The scope is precisely defined.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: use this tool when you need act metadata from Normattiva, as opposed to full text or other related services. It doesn't explicitly state when not to use it or name alternatives, but the clear 'act metadata' framing gives sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_get_textARead-onlyIdempotent
Fetch the text of a whole act or a single article.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | ``"text"`` (extracted, whitespace-normalized) or ``"akn_xml"`` (raw Akoma Ntoso; only valid for the whole act). | text |
| article | No | an article number ("2043", "art. 2043", "2043-bis"). Omit for the whole act. | |
| at_date | No | ISO date ("2020-01-01") for the point-in-time (multivigenza) version; omit for the version in force today (consolidated). | |
| reference | Yes | a code name, URN, ELI path, or normattiva.it URL. |
Output Schema
| Name | Required | Description |
|---|---|---|
| urn | No | |
| format | No | |
| article | No | |
| at_date | No | |
| content | No | |
| eli_uri | No | |
| byte_size | No | |
| source_url | Yes | |
| article_num | No | |
| dataset_note | No | |
| article_count | No | |
| article_heading | No | |
| human_readable_citation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context beyond what the schema already provides (e.g., format options, article scoping, at_date behavior). It does not mention return format specifics, limitations, or any runtime considerations. No contradiction with annotations, but no extra disclosure either.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and object ('Fetch the text'). It has no filler, redundant wording, or repetition of schema details. Every word serves to communicate the primary purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and detailed input schema descriptions, the minimal description is sufficient. It covers the core purpose without needing to explain return values or parameter details, as those are already in structured fields. The only minor gap is that it doesn't contextualize when to prefer this over it_get_act, but that's more a usage guideline issue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (reference, format, article, at_date) having its own description. The tool description itself adds no parameter information, so the baseline of 3 applies. It neither enhances nor detracts from the schema, so the meaning is fully available from structured data.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch') and the resource ('text of a whole act or a single article'). It distinguishes the tool from siblings like it_get_act (which likely retrieves act metadata) by explicitly scoping to text content. The verb is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear idea of when to use the tool (when you need act/article text), but it does not mention alternatives, exclusions, or when not to use it. Usage is implied from the purpose rather than explicitly contrasted with sibling tools. Lacks guidance like 'use this instead of it_get_act for full text'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_list_codesARead-onlyIdempotent
List the major Italian codes and consolidated acts with their canonical URN.
A curated, verified dictionary (Codice civile/penale/procedura, Codice privacy,
CAD, D.Lgs. 231/2001, Costituzione, L. 241/1990). Feed any urn to
it_get_act / it_get_text.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the description adds meaningful context: the tool is a 'curated, verified dictionary' with specific legal codes and provides canonical URNs for further use. It omits details like sorting or full output structure, but the output schema covers those.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences with no fluff. The first states the core function, the second enriches with examples and usage direction. Every sentence earns its place, and it is easily parsable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter list tool with a provided output schema and read-only annotations, this description is complete. It covers what is listed, the curated nature, and how the output should be used. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description cannot add parameter semantics beyond the schema. The mention of feeding URNs is about output behavior, not inputs. Per the rubric, zero-parameter tools receive a baseline of 4, and the description appropriately frames the tool's role in the workflow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' with the resource 'major Italian codes and consolidated acts' and the distinguishing output 'canonical URN'. Concrete examples (Codice civile/penale, Costituzione, etc.) further clarify the scope and differentiate it from sibling tools like it_case_search or it_cassazione_search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly directs the agent to feed the output URNs to it_get_act/it_get_text, providing an actionable downstream workflow. It does not explicitly contrast with alternatives like it_resolve, but the intended usage is clear for a zero-parameter list tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_resolveARead-onlyIdempotent
Build a canonical, resolvable URN:NIR from act coordinates.
Offline (no network). act_type accepts friendly forms ('legge', 'd.lgs',
'dpr', 'regio.decreto'). With only year + number the partial URN still
resolves on Normattiva; add month/day for the exact promulgation date.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ``ResolveQuery`` (act_type, year, number, month?, day?, authority). |
Output Schema
| Name | Required | Description |
|---|---|---|
| urn | Yes | |
| note | No | |
| source_url | Yes | |
| human_readable_citation | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds valuable behavioral info: it works offline, accepts friendly act_type forms, and produces partial URNs that still resolve on Normattiva. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each earning its place: purpose, offline capability, and parameter semantics. Front-loaded with the main verb and object. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and rich annotations (read-only, idempotent), the description is sufficiently complete. It covers offline behavior, friendly input forms, and partial resolution semantics. The tool is simple, and no critical missing context is apparent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already has 100% coverage (object description lists all fields). The description enriches parameter meaning by explaining that 'act_type' accepts friendly aliases like 'd.lgs' and 'dpr', and clarifies the significance of year+number vs. month/day for resolution. This adds semantic value beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Build a canonical, resolvable URN:NIR from act coordinates.' This uses a specific verb ('build') and resource ('URN:NIR'), and it is distinct from sibling tools like it_get_act (fetch act) or it_list_codes (list codes).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context, noting it is 'Offline (no network)' and explaining when to add month/day for exact dates vs. using only year+number for partial resolution. However, it doesn't explicitly contrast with alternatives (e.g., when to use it_get_act instead), so it doesn't reach a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
it_verify_citationsARead-onlyIdempotent
Verify Italian legal citations found in a text against their real sources.
Extracts statute citations ("art. 2043 c.c.", "art. 5 della legge 241/1990", "artt. 1341 e 1342 c.c.", commi) and ECLIs, then checks each: statutes against the live Normattiva act (does the act resolve? does the article exist?), ECLI:IT:COST against the local Constitutional Court index. A parenthetical description right after a citation is content-checked with a trigram match (mismatch = review signal). Non-existent articles come back with a range hint of what DOES exist.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | the text to verify (an LLM answer, a memo, a contract clause). | |
| max_citations | No | cap on citations to verify (1..30, default 15). |
Output Schema
| Name | Required | Description |
|---|---|---|
| gaps | No | |
| total | Yes | |
| status | Yes | |
| summary | Yes | |
| citations | No | |
| dataset_note | No | |
| failed_count | Yes | |
| warning_count | Yes | |
| verified_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive hints, and the description adds substantial detail about actual behavior: extraction of specific citation types, checking against Normattiva and Constitutional Court indexes, trigram matching for parenthetical descriptions, and returning range hints for non-existent articles. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense with useful information in three sentences, covering extraction, verification sources, content-checking, and edge-case behavior. While not wasteful, it exceeds a bare minimum and is organized effectively, though a slightly more compact style could earn a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool's complexity (checking multiple citation types, multiple sources, and content matching), the description covers the key behaviors and edge cases. An output schema exists, so return values need not be described, and the description is sufficiently complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both 'text' and 'max_citations' clearly described in the schema. The tool description itself adds no additional parameter meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool verifies Italian legal citations found in a text against their real sources, specifying the exact types of citations (statutes, ECLIs) and the verification process. This specific verb+resource combination distinguishes it from sibling tools like it_resolve or it_case_search, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (whenever you need to verify citations in a text) but offers no explicit comparison to alternatives or exclusions. There is no 'use instead of X' or 'not for Y' guidance, so it falls short of a 4 or 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
1 tool update
v0.7.3- Added
it_coverage
13 tool updates
v0.6.1- First observed
it_case_get_decision - First observed
it_case_recent - First observed
it_case_search - First observed
it_case_stats - First observed
it_cassazione_get - First observed
it_cassazione_search - First observed
it_ga_get_decision - First observed
it_ga_search - First observed
it_get_act - First observed
it_get_text - First observed
it_list_codes - First observed
it_resolve - First observed
it_verify_citations
TDQS
Each tool targets a distinct resource and action: codes list, URN resolution, act metadata/text, Constitutional Court search/get/recent/stats, Cassazione search/get, administrative search/get, and citation verification. No two tools overlap in purpose.
All tools share the 'it_' prefix and snake_case, but the pattern varies: some are verb-first (it_list_codes, it_get_act, it_verify_citations) while others are domain-first (it_case_search, it_cassazione_get, it_ga_search). This inconsistency is a minor deviation from a uniform convention.
13 tools is within the ideal range and each tool covers a distinct aspect of Italian legal research. The count reflects the broad scope (statutes, three court systems, citation verification) without unnecessary proliferation.
The toolset covers the core research lifecycle: discovering codes, resolving any act identifier, retrieving act content, searching and fetching decisions from the three major Italian jurisdictions, monitoring index freshness, and verifying citations. No critical gaps are apparent for its stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- LegalizeOAuthdev.legalize
Official MCP connector for Legalize: read and search its whole open corpus, at any point in time.
Resolve, search and verify legal citations against the official sources, with provenance.
Connect AI to millions of laws and court cases with the Lawstronaut MCP.
Related MCP Servers
- FlicenseAqualityBmaintenanceLocal MCP server that provides Italian legal assistance by querying a local corpus of Italian legislation, integrated with Claude Desktop.3-
- AlicenseAqualityAmaintenanceMCP server for free U.S. case-law and court-docket search via CourtListener, providing tools for opinion search, docket lookup, citation verification, and more.101011MIT
- AlicenseNot gradedqualityFmaintenanceMCP server for Italian law – indexes statutes from Normattiva such as Codice Civile, Codice Penale, and more, with EU implementation mapping.951Apache 2.0
- AlicenseAqualityBmaintenanceMCP server for U.S. federal law that enables searching the U.S. Code, CFR, Federal Register, case law, and bills, with citation verification against primary sources to prevent hallucinations.11MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/matematicsolutions/it-eli-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server