Skip to main content
Glama

Server Quality Checklist

67%
Profile completionA complete profile improves this server's visibility in search results.
  • Latest release: v0.1.1

  • Disambiguation5/5

    Each tool has a clearly distinct job: finding a source, reading an article by source/number, reading by URN, and generating a verified link. The overlap between the two reading tools is explicitly resolved by their different input types and usage guidance.

    Naming Consistency4/5

    Most tools follow a normattiva_verb_object pattern and are uniformly snake_case. normattiva_link deviates slightly by using an English noun/verb without an object, but the overall pattern remains predictable and readable.

    Tool Count5/5

    Four tools is a well-scoped set for a focused Normattiva access server. Each tool covers a necessary step in the workflow: discover source, read article, read arbitrary URN, and produce a verified permalink.

    Completeness4/5

    The server covers the core article-level retrieval workflow well: source lookup, text retrieval by two routes, and link generation. Missing full-text search or retrieval of an entire source would be useful, but these are not central to the stated purpose of reading and citing individual articles.

  • Average 4.8/5 across 4 of 4 tools scored.

    See the Tool Scores section below for per-tool breakdowns.

    • No community issues in the last 6 months
    • 21 commits in the last 12 weeks
    • Last stable release on
    • No critical vulnerability alerts
    • No high-severity vulnerability alerts
    • No code scanning findings
    • CI status not available
  • This repository is licensed under MIT License.

  • This repository includes a README.md file.

  • No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.

    Tip: use the "Try in Browser" feature on the server page to seed initial usage.

  • Add a glama.json file to provide metadata about your server.

  • If you are the author, simply .

    If the server belongs to an organization, first add glama.json to the root of your repository:

    {
      "$schema": "https://glama.ai/mcp/schemas/server.json",
      "maintainers": [
        "your-github-username"
      ]
    }

    Then . Browse examples.

  • Add related servers to improve discoverability.

How to sync the server with GitHub?

Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.

To manually sync the server, click the "Sync Server" button in the MCP server admin interface.

How is the quality score calculated?

The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).

Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.

Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).

Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.

Tool Scores

  • Behavior5/5

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

    Beyond the read-only/idempotent annotations, the description discloses a non-obvious behavior: the portal permalink returns HTTP 200 even for wrong URNs, so verification is the only real proof of validity. It also warns that failures, abrogated acts, or preamble results are communicated in `avviso` and should not be ignored.

    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?

    Three dense sentences, each earning its place: output and use case, verification caveat, and warning about `avviso`. The key routing information is front-loaded, and there is no filler.

    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?

    The description covers routing, safety, output shape, and the important behavioral caveats, and an output schema exists. The only material shortfall is that the required parameters are not fully self-described and depend on the sibling reference, which prevents a perfect completeness score.

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

    Parameters3/5

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

    Schema description coverage is 0%, so the description carries most of the burden. It clearly explains `verifica` and its trade-offs, and it references `normattiva_leggi_articolo` for the shared parameters. However, `fonte`, `vigenza`, and `articolo` are never directly defined, leaving the agent to resolve the sibling reference or infer formats.

    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 concrete output (`[testo](permalink)` for an article) and explicitly distinguishes the tool from normattiva_leggi_articolo by noting it does NOT return the full text. This makes the tool's role unambiguous and immediately tells an agent which tool is which.

    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 says to use this tool 'quando serve solo il link da inserire in un parere o in un atto' and names the sibling tool that returns the full text. It also gives conditional guidance on when `verifica=true` vs `verifica=false` is appropriate.

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

  • Behavior5/5

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

    Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses crucial behavioral traps: `preambolo` means the response is a promulgation preamble, not the article; `abrogato` is information to report, not an error; and `vigenza_storica` indicates the text is historical, not current law. These are exactly the nonlinear behaviors an agent must know.

    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?

    The description is long but information-dense; every paragraph adds unique value (scope, historical caveat, three numbered traps, date-force parameter). It is front-loaded with the primary function and uses structured sections for warnings. The length is proportional to the tool's complexity.

    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?

    Given the high-stakes legal context and zero schema coverage, the description thoroughly covers usage, parameter meaning, edge cases, and interpretation of results. It even instructs the agent on how to present historical or abrogated text ('citalo sempre come storico', 'dillo con la data'). With an output schema present, no return-value documentation is needed.

    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 coverage is 0%, so the description carries full responsibility — and it delivers. It explains `fonte` with common aliases, `articolo` with extension examples ('21novies', '2645bis'), and `vigenza` with a format and purpose ('forza una data invece della ricaduta automatica'). All three parameters are semantically covered.

    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 opens with a specific verb and resource: 'Legge il testo di un articolo di legge italiana', given source name and article number. It distinguishes itself from siblings by adding aliases, extension examples, and the explicit claim that for historical codes 'questa è l'unica via affidabile' — a clear differentiation from full-text search tools.

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

    Usage Guidelines4/5

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

    It gives explicit when-to-use guidance: for historical codes (civile, penale, etc.) this is the only reliable path, because the attachment number is not discoverable by full-text search. It also explains when to pass `vigenza` to force a date. It doesn't name sibling tools like normattiva_leggi_urn, but the context makes the intended use clear.

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

  • Behavior5/5

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

    Annotations already signal read-only, non-destructive, and idempotent behavior. The description adds crucial behavioral caveats beyond annotations: an HTTP 200 does not guarantee correct content, the `esito` field must always be checked, and the same traps as normattiva_leggi_articolo apply (preamble, repealed, historical validity). 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.

    Conciseness5/5

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

    Three sentences with no filler. The first states purpose, the second warns about behavioral pitfalls, and the third routes to the correct sibling tool. Every sentence earns its place.

    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?

    Given the output schema, read-only annotations, and sibling tools, the description covers the essential operational context: what to pass, when to use it, when not to use it, and what to verify in the response. Nothing an agent needs for safe invocation is missing.

    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?

    Schema description coverage is 0%, so the description must compensate. It does by clarifying that the single `urn` parameter should be a complete URN already obtained elsewhere and warns against passing a manually assembled URN. It doesn't provide a formal format example, but for a single string parameter the semantic guidance is strong.

    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 opens with a specific verb and resource: 'Legge il testo di un URN completo già ottenuto altrove.' It clearly distinguishes itself from normattiva_leggi_articolo by positioning itself as the tool for URNs already in hand, not for manual URN construction.

    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?

    Explicitly states when to use it (URN obtained elsewhere, e.g., a normative reference inside another article) and when not to use it (do not build an URN by hand from source+article). It names the alternative, normattiva_leggi_articolo, and reinforces the condition to check the `esito` field.

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

  • Behavior5/5

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

    Annotations already mark the tool as read-only and idempotent, and the description adds valuable behavioral context beyond that: it performs no network request, operates on a local verified table, and explicitly handles the case where a source is known but absent from Normattiva, clarifying that absence is from the site, not from the legal order. 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.

    Conciseness5/5

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

    Three sentences, each earning its place: the first states the function and outputs, the second gives a clear usage directive, and the third covers an important edge case. The key directive is front-loaded and the text is free of filler.

    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?

    Given the single parameter, strong annotations, and presence of an output schema, the description covers the essential operational context: what the tool does, when to prefer it, what it returns, and how to interpret a notable edge case. No critical guidance for correct invocation is missing.

    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?

    Schema description coverage is 0%, so the description must carry the parameter semantics. It does so by explaining that 'testo' is a name or alias, and by warning against guessing date or allegato. This gives the agent meaningful guidance, though it stops short of giving concrete formats or examples.

    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 verb ('Cerca') and resource ('fonti nella tabella locale di quelle verificate'), and clearly scopes the behavior: no network request, returns tipo di atto, data, numero, allegato, stato. It also differentiates itself from likely siblings by emphasizing it is for finding/resolving a source before reading history, not for reading articles or generating links.

    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?

    The description gives an explicit when-to-use directive: 'USALO PRIMA di leggere un codice storico se non sei sicuro dell'alias esatto'. It also explains the consequence of the alternative behavior (guessing date or allegato produces a wrong URN), which helps the agent decide correctly.

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

GitHub Badge

Glama performs regular codebase and documentation scans to:

  • Confirm that the MCP server is working as expected.
  • Confirm that there are no obvious security issues.
  • Evaluate tool definition quality.

Our badge communicates server capabilities, safety, and installation instructions.

Card Badge

normattiva-mcp MCP server

Copy to your README.md:

Score Badge

normattiva-mcp MCP server

Copy to your README.md:

Latest Blog Posts

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/avvocati-e-mac/normattiva-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server