Skip to main content
Glama
heulegal

heu-legal-mcp

by heulegal

HEU Legal MCP Server

PyPI Python License: MIT MCP Registry

MCP server (Model Context Protocol) che collega l'API HEU Legal a Claude e a qualsiasi client MCP. Gestisce l'intero ciclo di vita dei documenti con firma elettronica (valida in 180+ paesi) direttamente in conversazione: dalla creazione all'invio in firma, dal sollecito al download del fascicolo legale completo.


Cosa puoi fare

Voglio...

Il server lo fa con...

📄 Vedere i miei documenti e templates

list_heu_documents, list_pdf_documents

✍️ Mandare un contratto in firma da un template

create_heu_document, create_pdf_document

🚀 Mandare in firma un PDF che ho sul computer, senza passare dalla piattaforma

create_pdf_document_from_upload

🤖 Far mappare i campi firma all'AI (analizza il PDF, posiziona i campi, invia)

locate_pdf_text + create_pdf_document_from_upload

🔔 Sollecitare chi non ha ancora firmato

prompt_heu_document_signature, prompt_pdf_document_signature

👀 Far leggere un contratto all'AI (riassunti, clausole, confronti) senza scaricarlo

read_heu_document, read_pdf_document

🪪 Estrarre i dati delle parti (P.IVA, codice fiscale, SDI, PEC, indirizzi)

extract_heu_document_parties, extract_pdf_document_parties

💾 Scaricare il PDF firmato

download_heu_document_pdf, download_pdf_document

⚖️ Scaricare il fascicolo legale completo (documento + audit trail + artefatti FES)

download_pdf_bundle, download_pdf_audit_trail

🧩 Creare/modificare templates PDF riutilizzabili via API

create_pdf_template, update_pdf_template, preview_pdf_template, delete_pdf_template

❌ Annullare una richiesta di firma inviata per errore

cancel_pdf_document

🩺 Controllare che l'API sia raggiungibile

get_heu_health

Due famiglie di oggetti:

  • Documenti nativi HEU — creati con l'editor in-app della piattaforma (ID a forma di UUID, es. 5135e7b2-196b-...).

  • PDF caricati — file PDF con firmatari e campi firma posizionati sopra (ID numerici, es. 68).


Related MCP server: Google Docs MCP Server

Requisiti

  • Python ≥ 3.10

  • API key HEU Legal — nella UI: Profile → API Keys → Generate API Key (richiede subscription Enterprise; massimo 2 chiavi attive)

  • Per i flussi da template: almeno un template creato sulla piattaforma (oppure crealo via API con create_pdf_template)

Installazione

Da PyPI:

pip install heu-mcp

Da sorgenti:

git clone https://github.com/heulegal/heu-mcp.git
cd heu-mcp
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Configurazione

Claude Desktop

Modifica ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) o %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "heu": {
      "command": "heu-mcp",
      "args": [],
      "env": {
        "HEU_API_KEY": "la_tua_api_key_qui"
      }
    }
  }
}

Se installato da sorgenti con venv:

{
  "mcpServers": {
    "heu": {
      "command": "/path/assoluto/heu-mcp/venv/bin/python",
      "args": ["/path/assoluto/heu-mcp/server.py"],
      "env": {
        "HEU_API_KEY": "la_tua_api_key_qui"
      }
    }
  }
}

Riavvia Claude Desktop dopo la modifica.

Claude Code (CLI)

claude mcp add heu heu-mcp -e HEU_API_KEY=la_tua_api_key_qui

Server remoto (multi-utente)

Oltre alla modalità locale (stdio) descritta sopra, il progetto include un server remoto che espone gli stessi 28 tool via HTTPS, così gli utenti si collegano senza installare nulla: inseriscono la propria API key HEU una volta, in un flusso OAuth.

Caratteristiche:

  • Transport Streamable HTTP, autenticazione OAuth 2.1 con PKCE S256, Dynamic Client Registration e Client ID Metadata Document

  • Multi-utente: ogni connessione usa la API key del proprio utente, conservata cifrata (Fernet) e mai in chiaro nel database

  • Refresh token con rotazione e revoca automatica della sessione in caso di riuso sospetto

  • I/O di rete asincrono e parsing PDF su threadpool: una richiesta lenta non blocca gli altri utenti

Avvio locale

pip install -e ".[remote]"
export HEU_MCP_SECRET_KEY="$(python -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())')"
export PUBLIC_URL="http://localhost:8080"
export HEU_MCP_DB="./heu-mcp.db"
heu-mcp-remote

Deploy su Fly.io

fly launch --no-deploy
fly volumes create heu_data --size 1
fly secrets set HEU_MCP_SECRET_KEY="$(python -c 'from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())')"
fly secrets set PUBLIC_URL="https://<nome-app>.fly.dev"
fly deploy

Variabili d'ambiente del server remoto

Variabile

Descrizione

Default

HEU_MCP_SECRET_KEY

Chiave Fernet per cifrare le API key degli utenti (richiesta)

PUBLIC_URL

URL pubblico del servizio, senza slash finale (richiesta in produzione)

http://localhost:8080

MCP_PATH

Path dell'endpoint MCP

/mcp

HEU_MCP_DB

Percorso del database SQLite

/data/heu-mcp.db

ACCESS_TOKEN_TTL / REFRESH_TOKEN_TTL

Durata token in secondi

1 ora / 60 giorni

Endpoint esposti

Endpoint

Scopo

/mcp

Endpoint MCP (richiede bearer token)

/.well-known/oauth-protected-resource

Metadati risorsa protetta (RFC 9728)

/.well-known/oauth-authorization-server

Metadati authorization server (RFC 8414)

/register · /authorize · /token

Flusso OAuth 2.1

/healthz

Liveness probe

Variabili d'ambiente

Variabile

Descrizione

Default

HEU_API_KEY

API key HEU Legal (richiesta)

HEU_BASE_URL

URL base dell'API

https://api.heulegal.com/v1

HEU_DOWNLOAD_DIR

Cartella dove salvare i file scaricati

/tmp


Riferimento completo dei tool (28)

🩺 Health

Tool

Parametri

Cosa ritorna

get_heu_health

{ message: "ok", status: 200 } se l'API è operativa

📄 Documenti nativi HEU

Tool

Parametri

Cosa fa

list_heu_documents

type (document/template), sort (asc/desc), created_from + created_to (ISO 8601), have_editors_signed — tutti opzionali

Lista documenti/template con stato, membri, firme. ⚠️ Le due date vanno passate sempre insieme, altrimenti l'API può restituire risultati incompleti

get_heu_document

document_id

Dettaglio completo: nome, stato (to_sign/in_progress/in_review/completed/signed), owner, editors, members con has_signed e signed_at, tags

list_heu_document_placeholders

document_id

Elenco delle chiavi placeholder sostituibili nel testo del template

create_heu_document

source_document_id, email_subject, email_text, email_to (lista), document_name, document_type, placeholders (mappa chiave→valore)

Crea un documento da un template, sostituisce i placeholder e lo condivide via email ai destinatari

prompt_heu_document_signature

document_id

Invia il sollecito di firma. Limite: 1 ogni 24h per documento (429 con Retry-After se superato)

read_heu_document

document_id, pages (es. "1-3", "5", "1,3,5-7"), layout, has_index, has_footer

Estrae il testo del documento e lo restituisce in conversazione, senza salvare nulla su disco. Max 100 pagine se pages è omesso

extract_heu_document_parties

document_id, pages, include_text

Dati delle parti: combina i firmatari registrati con l'estrazione dal testo di codici fiscali, P.IVA, codice univoco SDI, email, PEC, luogo+data di nascita, indirizzi, CAP. Pattern ottimizzati per contratti italiani

download_heu_document_pdf

document_id, layout (codici UI: 100, 200-204, 210-214, 220-224, 230-234), has_index, has_footer, output_path

Genera e salva il PDF su disco; ritorna il path

📎 PDF caricati

Tool

Parametri

Cosa fa

list_pdf_documents

type (richiesto: document/template), sort

Lista PDF con stato (to_sign/in_progress/signed), tipo firma (FES/FEA), firmatari

get_pdf_document

document_id

Dettaglio: nome, stato, signature_type, date, firmatari con has_read/has_signed

list_pdf_document_signers

document_id

Firmatari del PDF: id, nome, email, ha letto, ha firmato

list_pdf_document_signer_placeholders

document_id, signer_id

Campi (firma/testo/checkbox) assegnati a un firmatario specifico, con posizione e stato di compilazione

list_pdf_document_placeholders

document_id

Tutti i campi del PDF

create_pdf_document

source_document_id, email_subject, email_body, signers (con source_id, full_name, email), document_name, signature_type (fes/fea), placeholders precompilabili

Crea un PDF firmabile da un template esistente e invia gli inviti. Con fea servono crediti sufficienti (422 altrimenti)

prompt_pdf_document_signature

document_id

Sollecito di firma per il PDF

read_pdf_document

document_id, pages

Estrae il testo del PDF (incluso quello firmato) e lo restituisce in conversazione

extract_pdf_document_parties

document_id, pages, include_text

Dati delle parti (come sopra) per i PDF caricati

download_pdf_document

document_id, output_path

Scarica il PDF — versione firmata se disponibile — e ritorna il path

download_pdf_audit_trail

document_id, output_path

Scarica l'audit trail: il registro PDF di chi ha letto/firmato e quando

download_pdf_bundle

document_id, output_path

Scarica lo ZIP del fascicolo legale: PDF firmato + audit trail + artefatti FES. Ideale per archiviazione a valore probatorio

cancel_pdf_document

document_id

Annulla una richiesta di firma inviata: il documento sparisce dagli elenchi e i link di firma vengono invalidati. Rifiutato con 409 se qualcuno ha già firmato

🧩 Template PDF (gestione via API)

Tool

Parametri

Cosa fa

create_pdf_template

file_path (PDF locale ≤ 5 MB), document_name, signers (source_id, full_name), placeholders (tipo, posizione %, pagina)

Crea un template riutilizzabile caricando un PDF dal computer. L'ID restituito si usa come source_document_id in create_pdf_document

create_pdf_document_from_upload

file_path, document_name, email_subject, email_body, signers (con email), placeholders, signature_type

Scorciatoia completa: carica un PDF e lo manda subito in firma, senza creare prima il template. Il documento nasce to_sign e i firmatari ricevono l'email immediatamente

locate_pdf_text

file_path oppure document_id, search_terms (default: parole chiave firma), pages, include_all_lines

Trova le coordinate di testi nel PDF (in %, origine in basso a sinistra — lo stesso sistema dei placeholder). È il tool che permette all'AI di posizionare i campi da sola: cerca "Firma", i nomi delle parti o qualsiasi ancora, e ottiene pagina + posizione di ognuna

preview_pdf_template

document_id, output_path

Scarica un'anteprima annotata: ogni campo è disegnato come riquadro etichettato con tipo e firmatario. Per verificare le posizioni prima dell'invio

update_pdf_template

document_id, signers (set completo sostitutivo), placeholders (idem; [] li cancella tutti), document_name

Sostituzione integrale di firmatari e campi di un template (l'ID resta invariato). Solo il proprietario

delete_pdf_template

document_id

Elimina (nasconde) il template da tutti gli elenchi

✋ = il tool ha effetti verso l'esterno (crea, invia email, elimina): Claude chiede sempre conferma prima di eseguirlo.

Come si posizionano i placeholder

  • position_x / position_y: percentuale della pagina (0–100 esclusi), origine in basso a sinistra (come nell'editor dell'app).

  • page_number: parte da 1.

  • Tipi: signature, initials, text (richiede text_label), checkbox_optional, checkbox_required.

  • I firmatari si collegano ai campi tramite source_idsigner_source_id.

  • I PDF ruotati (/Rotate 90/180/270) vengono rifiutati dall'API.


Flussi di lavoro tipici

0. Invio in firma "intelligente": l'AI mappa i campi da sola

"Prendi /Users/me/Desktop/Contratto.pdf, trova dove devono firmare le parti e mandalo a cliente@example.com e fornitore@example.com."

Cosa succede dietro le quinte:

  1. locate_pdf_text analizza il PDF e trova le ancore: le righe "Firma del Cliente" / "Firma del Fornitore" (o i nomi delle parti) con le loro coordinate esatte in percentuale.

  2. Claude propone la mappatura: "Metto il campo firma del cliente a pagina 4, sopra l'etichetta 'Firma del Cliente' (x 17%, y 14%), e quello del fornitore accanto (x 50%, y 14%). Confermi?"

  3. Alla conferma, create_pdf_document_from_upload carica il PDF con i placeholder posizionati e invia le email di firma.

  4. (Opzionale) preview_pdf_template per un controllo visivo se si è passati da un template.

Le coordinate restituite da locate_pdf_text sono già nel sistema dei placeholder HEU (percentuale, origine in basso a sinistra): nessuna conversione necessaria. Per layout complessi si può chiedere l'intera mappa della pagina con include_all_lines=true, o cercare termini specifici (search_terms=["Il Committente", "Il Prestatore"]).

⚠️ Limite: funziona sui PDF con testo. Le scansioni senza OCR non hanno testo estraibile — in quel caso indicare le posizioni manualmente.

1. Mandare in firma un PDF dal computer (tutto via chat)

"Prendi /Users/me/Desktop/NDA.pdf e mandalo in firma a Mario Rossi (mario@example.com). Campo firma in basso a destra dell'ultima pagina, oggetto email 'NDA da firmare'."

Claude usa create_pdf_document_from_upload → il documento è creato e Mario riceve subito l'email. Poi:

"Mario ha firmato?"get_pdf_document "Sollecitalo"prompt_pdf_document_signature "È firmato, scaricami il fascicolo completo"download_pdf_bundle

2. Contratti ricorrenti con template

"Crea un template dal file Contratto-tipo.pdf con due firmatari: cliente e fornitore. Firma del cliente a pagina 3 in basso."create_pdf_template "Fammi vedere l'anteprima per controllare le posizioni"preview_pdf_template "Ora usalo per mandare il contratto ad ACME srl"create_pdf_document

3. Analisi documentale (l'AI legge i contratti)

"Riassumi il contratto abc-123 e dimmi durata e condizioni di recesso"read_heu_document "Confronta le clausole di responsabilità dei contratti X e Y" → due read_heu_document "Estrai i dati delle parti: ragione sociale, P.IVA, SDI, PEC"extract_heu_document_parties

L'estrazione parti è pensata per l'integrazione con flussi di fatturazione elettronica italiana: il codice univoco SDI e la P.IVA estratti dal contratto possono alimentare direttamente l'anagrafica del gestionale.

4. Monitoraggio e amministrazione

"Quali documenti di luglio non sono ancora stati firmati da tutti?"list_heu_documents con date + have_editors_signed=false "Annulla la richiesta di firma del PDF 42, l'abbiamo mandata alla persona sbagliata"cancel_pdf_document


Comportamenti e limiti da conoscere

Cosa

Limite / comportamento

Rate limit API

300 richieste / 5 minuti (header X-RateLimit-* nelle risposte; 429 con Retry-After oltre soglia)

Solleciti firma

1 ogni 24 ore per documento

Upload PDF

Max 5 MB, application/pdf, non ruotati

Lettura testo

Max 100 pagine se pages non è specificato (il payload segnala truncated: true); PDF scansionati senza OCR non hanno testo estraibile

Firma FEA

Richiede crediti FEA disponibili per ogni firmatario (422 se insufficienti)

list_heu_documents con date

Passare sempre entrambe created_from e created_to

Annullamento PDF

Possibile solo senza attività di firma (409 altrimenti)

Download

I binari vengono salvati su disco (HEU_DOWNLOAD_DIR), mai trasmessi nel canale MCP

Stati dei documenti

Stato

Significato

to_sign

In attesa di firme

in_progress

In preparazione/modifica

in_review

In revisione

completed

Flusso completato (non firmato)

signed

Completamente firmato

Sicurezza

  • L'API key è letta solo da variabile d'ambiente: mai nel codice, mai nelle risposte, mai nei log.

  • I tool con effetti esterni (✋) sono istruiti per richiedere sempre conferma esplicita all'utente.

  • I file scaricati restano sul filesystem locale.

Sviluppo

git clone https://github.com/heulegal/heu-mcp.git
cd heu-mcp
python3 -m venv venv
source venv/bin/activate
pip install -e .

# Avvio manuale per debug
HEU_API_KEY=... python server.py

La spec OpenAPI di riferimento è pubblicata su https://api.heulegal.com/v1/specs/v1.yaml (docs interattive: https://api.heulegal.com/v1/docs).

Licenza

MIT — vedi LICENSE.

Available Tools

18 tools
create_heu_documentB

Crea e condivide un nuovo documento HEU partendo da un template esistente. Invia email ai destinatari. IMPORTANTE: chiedere conferma all'utente prima di eseguire.

ParametersJSON Schema
NameRequiredDescriptionDefault
source_document_idYesID del template sorgente
document_nameNoNome del nuovo documento
document_typeNoDefault: document
email_subjectYesOggetto email di condivisione
email_textYesCorpo email di condivisione
email_toYesLista email destinatari (oppure stringa singola)
placeholdersNoMappa key->value dei placeholder da sostituire nel template (chiave = nome placeholder)

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden. It discloses creation, sharing, and email sending, and asks for confirmation. However, it lacks details on side effects (e.g., whether the template is modified), authentication requirements, rate limits, or idempotency. The side effects are stated but insufficiently deep.

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 three sentences, each earning its place: first defines core action, second adds email detail, third provides critical usage instruction. It is front-loaded with the main action and contains no fluff.

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

Completeness2/5

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

Given 7 parameters, a nested object, and no output schema, the description is incomplete. It does not explain what HEU documents are, what the return value is, or error conditions. The confirmation instruction is good, but overall context is insufficient for a tool of this complexity.

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?

The input schema has 100% coverage, so parameters are already described. The description adds no new semantic information beyond what is in the schema; it merely mentions 'existing template' and 'email' which align with existing parameter descriptions. Baseline 3 is appropriate.

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 clearly states the tool creates and shares a new HEU document from an existing template and sends email. It distinguishes itself from siblings like create_pdf_document by specifying the HEU document type and the template-based creation process.

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

Usage Guidelines3/5

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

The description includes an instruction to ask for user confirmation before executing, which is a usage guideline. However, it does not explicitly state when to use this tool versus alternatives like create_pdf_document or when not to use it.

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

create_pdf_documentA

Crea e condivide un nuovo PDF firmabile partendo da un template PDF esistente. Richiede signers e (opzionalmente) i valori dei placeholder. Con signature_type='fea' serve avere credito FEA sufficiente. IMPORTANTE: chiedere conferma all'utente prima di eseguire.

ParametersJSON Schema
NameRequiredDescriptionDefault
source_document_idYesID del template PDF sorgente
document_nameNoNome del nuovo documento
signature_typeNoTipo firma. Default: fes
email_subjectYesOggetto email di condivisione
email_bodyYesCorpo email di condivisione
signersYesLista firmatari (richiesto)
placeholdersNoValori dei placeholder (opzionale)

TDQS

A4/5.0
Behavior4/5

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

Without annotations, the description adequately discloses creation and sharing behavior, the need for FEA credit, and the requirement for user confirmation. However, it does not describe error handling, response format, or what happens on the server side.

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 concise (three sentences) and front-loads the core purpose. However, the safety note is placed at the end, which could be more prominent. Overall efficient but not maximally structured.

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

Completeness3/5

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

Given the tool has 7 parameters, no output schema, and no annotations, the description covers the main inputs, a conditional requirement, and a safety guideline. It lacks details about the sharing process, default values, and error conditions, making it somewhat incomplete for an agent to fully anticipate outcomes.

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 coverage is 100%, so the description adds only marginal value beyond the schema. It reiterates the need for signers and placeholder values and notes the special case for signature_type, but does not provide new syntactic or structural details.

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 clearly states the tool creates and shares a new signable PDF from an existing template, distinguishing it from sibling tools like create_heu_document (for other document types) and read-only 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?

The description specifies required inputs (signers, optional placeholders) and a conditional requirement (FEA credit for signature_type='fea'), and includes an explicit instruction to ask user confirmation before execution. However, it does not discuss when to use this tool versus alternatives such as create_heu_document.

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

download_heu_document_pdfA

Scarica il PDF di un documento HEU e lo salva localmente. Ritorna il path del file. Layout opzionale (codici a 3 cifre della UI HEU).

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del documento HEU
layoutNoCodice layout (opzionale)
has_indexNoIncludi indice (opzionale)
has_footerNoIncludi footer (opzionale)
output_pathNoPath output personalizzato (opzionale, default: HEU_DOWNLOAD_DIR/heu_<id>.pdf)

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries full behavioral burden. It states the tool saves locally and returns path but does not disclose important traits such as overwrite behavior, error handling, authentication needs, or network requirements. The minimal disclosure is insufficient for a mutation-like operation.

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 two sentences, efficiently conveying the core function and one key optional parameter. It is front-loaded with the main action and result. However, it could be more structured (e.g., listing optional parameters) but remains concise without waste.

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

Completeness3/5

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

Given 5 parameters, no output schema, and no annotations, the description covers the main function and layout parameter but omits detailed behavior for optional parameters like has_index, has_footer, and output_path. It is adequate for the core purpose but leaves gaps for comprehensive use.

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

Parameters4/5

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

The schema covers all 5 parameters with descriptions. The description adds value by explaining the layout parameter as codes from the HEU UI ('codici a 3 cifre della UI HEU'), which is not evident from the enum list alone. Other parameters are not elaborated, but schema coverage is high, so baseline is 3, and the layout insight raises it.

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 clearly states the tool downloads a PDF of an HEU document, saves it locally, and returns the file path. It specifies the object (HEU document) and action (download and save PDF), distinguishing it from siblings like get_heu_document or read_heu_document which likely return content directly.

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

Usage Guidelines3/5

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

The description implies usage for downloading PDFs but provides no explicit guidance on when to use this tool versus alternatives. It mentions the optional layout parameter from the HEU UI but does not give prerequisites or scenarios where other tools are preferred.

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

extract_heu_document_partiesB

Estrae i dati anagrafici delle parti da un documento HEU. Combina i metadati registrati (firmatari, ruoli, stato firma) con dati estratti dal testo del contratto: codice fiscale, P.IVA, codice univoco SDI, email/PEC, luogo e data di nascita, indirizzi, CAP. Pattern ottimizzati per contratti italiani.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del documento HEU
pagesNoRange pagine: '1-3', '5', '1,3,5-7'. Default: tutte (max 100). Le 'parti' sono spesso in pagina 1-2.
include_textNoSe true include nel risultato anche il testo grezzo (utile per ulteriore analisi). Default: false.

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden. While it explains the combination of metadata and text extraction, it does not disclose whether the operation is read-only, potential side effects, auth requirements, or limitations (e.g., error handling).

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 a single concise paragraph that effectively communicates purpose and method. It could be slightly more structured (e.g., bullet points) but is not overly verbose.

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

Completeness3/5

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

The description explains what data is extracted but lacks information about the output structure or format. Since no output schema is provided, this omission affects completeness. It also does not specify whether results are singular or plural (likely multiple parties).

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?

The input schema has 100% description coverage, so baseline is 3. The description adds overall context about extracted fields but does not enhance parameter-level understanding beyond schema descriptions.

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 clearly states the tool extracts party data from HEU documents, listing specific data fields and mentioning optimization for Italian contracts. This distinguishes it from siblings like extract_pdf_document_parties.

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

Usage Guidelines3/5

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

The description implies usage for extracting party data from HEU documents but provides no explicit guidance on when to use this tool versus alternatives (e.g., extract_pdf_document_parties) or any exclusion criteria.

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

extract_pdf_document_partiesA

Estrae i dati anagrafici delle parti da un PDF caricato. Combina i metadati dei firmatari registrati con dati estratti dal testo: codice fiscale, P.IVA, codice univoco SDI, email/PEC, luogo e data di nascita, indirizzi, CAP. Pattern ottimizzati per contratti italiani.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del PDF caricato
pagesNoRange pagine: '1-3', '5', '1,3,5-7'. Default: tutte (max 100).
include_textNoSe true include nel risultato anche il testo grezzo. Default: false.

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full burden of behavioral disclosure. It mentions combining metadata from registered signers with text extraction, which suggests read-only analysis, but does not explicitly state whether the tool modifies state, requires permissions, or has rate limits. The absence of destructive/read-only hints is a gap.

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 a single sentence but packs substantial information (data fields, source, context). It is efficient and well-structured, though the sentence is somewhat long. No extraneous content.

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?

Given the tool's moderate complexity, no output schema, and no annotations, the description provides enough context by enumerating extracted data fields and noting optimization for Italian contracts. It covers the essential behavioral aspects, though it could benefit from mentioning whether results include confidence scores or are only from text.

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 100%, so the baseline is 3. The description does not add parameter-specific details beyond the schema; it only summarizes overall output. Since schema already documents each parameter, the description adds limited extra semantic value.

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 clearly states the tool extracts anagraphic data of parties from a PDF, listing specific data fields (codice fiscale, P.IVA, etc.) and noting optimization for Italian contracts. This is a specific verb+resource and distinguishes it from siblings like 'extract_heu_document_parties' by targeting PDF documents.

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

Usage Guidelines3/5

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

The description explains what the tool does but does not provide any guidance on when to use it versus alternatives (e.g., 'extract_heu_document_parties') or when not to use it. Usage context is implied from the purpose, but no explicit exclusions or prerequisites are given.

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

get_heu_documentC

Dettaglio di un documento o template HEU per ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del documento (UUID per document/template HEU)

TDQS

C2.9/5.0
Behavior2/5

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

Annotations are not provided, so the description carries the full burden for behavioral transparency. It only says 'Dettaglio' (detail), implying a read operation, but does not explicitly state it is read-only, mention required permissions, or disclose any side effects. For a retrieval tool, this is insufficient.

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 a single, short phrase with no extraneous words. It is concise and front-loaded.

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

Completeness2/5

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

With only one parameter and no output schema, the description should clarify what 'dettaglio' entails (e.g., fields returned, structure). It leaves the agent guessing about the output, making it incomplete for effective use.

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?

The input schema has 100% coverage, documenting the single parameter 'document_id' as a UUID. The description redundantly says 'per ID', adding no new meaning beyond the schema. Baseline score of 3 is appropriate.

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

Purpose4/5

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

The description states that the tool retrieves details of a HEU document or template by ID, which is clear. However, it does not differentiate from sibling tools like 'get_pdf_document' or 'read_heu_document', so the purpose is clear but not distinctly scoped.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as 'read_heu_document' or 'get_pdf_document'. The context signals list many sibling tools, and the description offers no usage context.

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

get_heu_healthA

Health check API HEU. Ritorna { message: 'ok', status: 200 } se operativa.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

The description specifies the success response but does not indicate what happens if the service is not operational (e.g., error response or timeout). No side effects are mentioned, though it is likely safe.

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 extremely concise, one sentence, with no wasted words. It includes both purpose and response format efficiently.

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?

For a health check with no parameters and no output schema, the description covers the essentials: what it does and what it returns. It could mention that it is safe and has no side effects, but is otherwise complete.

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?

There are no parameters, so schema coverage is 100%. The description adds value by stating the response format, which is not in the schema. Baseline for zero params is 4.

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 clearly states it is a health check API that returns a specific success response. This distinguishes it from all sibling tools, which are document-related operations, 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.

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives, but the context of sibling tools implies it is for health monitoring. No exclusions or when-not-to-use guidance is provided.

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

get_pdf_documentC

Dettaglio di un PDF documento/template HEU per ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del PDF

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so description must disclose behaviors. It does not mention side effects, authentication, or output characteristics beyond 'detail'.

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?

Single sentence with no filler, clearly identifies the operation. Could be improved by adding context without increasing length.

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

Completeness2/5

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

Lacks information about what 'detail' includes. No output schema, so description should clarify return fields. Incomplete for agent decision-making.

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 covers parameter with 'ID del PDF' description. The description adds 'per ID', which is redundant. No additional semantic value beyond schema.

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

Purpose4/5

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

Description clearly states action ('get detail') and resource ('PDF document/template HEU') by ID. It distinguishes from siblings like 'get_heu_document' by mentioning 'HEU' but could be more precise about the difference between document and template.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. Does not mention context, prerequisites, or exclusions.

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

list_heu_document_placeholdersB

Lista i placeholder di un documento/template HEU (chiavi sostituibili nel testo).

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del documento HEU

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description fails to disclose behavioral traits such as read-only nature, required permissions, or error handling. It only states the function without context.

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 a single sentence that directly conveys the purpose with no extraneous words. It is highly concise and front-loaded.

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

Completeness3/5

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

For a simple list operation with one parameter and no output schema, the description covers the core function but lacks details on return format or output shape. Adequate but not exhaustive.

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 coverage is 100% as the only parameter (document_id) is described. The description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.

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 clearly states the tool lists placeholders for an HEU document/template, specifying they are replaceable keys. The verb 'list' and resource 'placeholders' are specific, and the name includes 'heu' to differentiate from PDF siblings.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternative siblings like list_pdf_document_placeholders. No context for prerequisites or exclusions.

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

list_heu_documentsA

Lista documenti/template nativi HEU con filtri opzionali. IMPORTANTE: quando filtri per intervallo di date passa SEMPRE entrambi i parametri 'created_from' e 'created_to' insieme, altrimenti l'API potrebbe non restituire tutti i documenti del periodo. Se vuoi tutti i documenti senza limiti di data, ometti entrambi.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoFiltra per tipo
sortNoOrdinamento per data
created_fromNoData inizio del filtro (ISO 8601, es. 2025-01-01T00:00:00Z). USA SEMPRE INSIEME a 'created_to': passare solo una delle due date può far escludere documenti dal risultato.
created_toNoData fine del filtro (ISO 8601, es. 2025-01-31T23:59:59Z). USA SEMPRE INSIEME a 'created_from'.
have_editors_signedNoFiltra per: tutti gli editor hanno firmato

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description must convey behavioral traits. It does not explicitly state safety (e.g., read-only) or side effects, but the action 'list' implies no destructive behavior. Basic transparency is adequate for a listing tool.

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?

Two sentences with no redundant words. Purpose is stated first, followed by important usage warning. Every sentence adds value.

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?

Given 5 optional parameters and no output schema, the description covers the key behavior (listing with filters) and the critical constraint on date parameters. It does not explain return format, which is acceptable as the tool likely returns document/template objects consistent with other tools.

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 coverage is 100%, but description adds critical usage context for 'created_from' and 'created_to' (must be paired). Other parameters ('type', 'sort', 'have_editors_signed') are sufficiently described in both schema and description.

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 clearly states the tool lists HEU native documents/templates with optional filters. It distinguishes from sibling tools like 'create_heu_document' or 'get_heu_document' by specifying 'list' and 'nativi HEU'.

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?

Explicit guidance on using date range parameters: always pass both 'created_from' and 'created_to' together, and omit both to get all documents. This is clear usage advice, though it does not mention when to prefer this over other list tools.

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

list_pdf_document_placeholdersC

Lista tutti i placeholder/campi di firma di un PDF.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del PDF

TDQS

C2.9/5.0
Behavior2/5

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

No annotations provided, so the description carries full behavioral disclosure burden. It only states the action without mentioning read-only nature, authorization needs, rate limits, or output format. For a simple list operation, this is insufficient.

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?

A single sentence that is front-loaded and contains no extraneous words. Every word earns its place, achieving maximum conciseness.

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

Completeness2/5

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

The tool has a simple single-parameter input and no output schema, but the description does not specify what is returned (e.g., list of placeholder IDs or objects). With no annotations, it lacks completeness for an agent to fully understand behavior.

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 coverage is 100% with one parameter (document_id) described as 'ID del PDF'. The description adds no extra meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool lists placeholders/signature fields of a PDF, using a specific verb and resource. However, it does not differentiate from sibling tools like list_pdf_document_signer_placeholders, which might list placeholders per signer, so it's clear but not fully distinctive.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. Sibling tools exist for similar purposes (e.g., list_pdf_document_signer_placeholders, list_pdf_document_signers), but the description provides no exclusions or context for selection.

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

list_pdf_documentsC

Lista PDF documenti/template caricati su HEU.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesTipo (richiesto)
sortNoOrdinamento

TDQS

C2.9/5.0
Behavior1/5

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

No annotations are provided, and the description only states 'list'. It does not disclose any behavioral traits such as whether the listing is paginated, what fields are returned, ordering defaults, error handling, or if it supports filtering beyond the 'type' parameter. This is a significant gap for a list tool.

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 a single concise sentence that front-loads the main action. It is efficient, but it may be too brief considering the lack of behavioral details. Nonetheless, no extra words are wasted.

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

Completeness2/5

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

Given the simple nature of a list tool with 2 parameters and no output schema, the description is too minimal. It does not explain what the output contains (e.g., just names, full objects), or whether it returns all items or supports pagination. The presence of sibling list tools with similar names makes this lack of detail more impactful.

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?

The input schema has 100% coverage with descriptions for both parameters ('type' and 'sort'). However, the description adds no additional meaning beyond the schema's minimal labels. The baseline score of 3 is appropriate as the schema already does the work.

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 clearly states the verb 'Lista' (list) and the resource 'PDF documenti/template caricati su HEU' (PDF documents/templates uploaded to HEU). This distinguishes it from sibling tools like list_heu_documents (which lists all HEU documents) and list_pdf_document_placeholders (which lists placeholders within a PDF document).

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool vs alternatives. Sibling tools exist (e.g., list_heu_documents for non-PDF documents), but no exclusions or context are given. The agent must infer usage solely from the tool name and description.

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

list_pdf_document_signer_placeholdersA

Lista i placeholder/campi di firma di un signer specifico su un PDF.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del PDF
signer_idYesID del firmatario

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries full burden. It conveys a read-only operation ('Lista') but does not mention side effects, auth requirements, rate limits, or return format. The behavior is minimally transparent beyond the name.

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 a single, front-loaded sentence with a clear verb and resource. Every word is purposeful. Slightly more structure could be added, but it is efficient.

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?

Given the simple nature of the tool (list, two required parameters, no output schema), the description is complete enough for an agent to understand its purpose and differentiate from siblings. It could mention return format but is adequate.

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 coverage is 100% with both parameters described by name only. The description adds 'specific signer' but no extra semantics beyond the schema. Baseline score is appropriate.

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 clearly states the verb 'List' and the resource 'placeholder/campi di firma di un signer specifico su un PDF'. It distinguishes from sibling tools like list_pdf_document_placeholders (all placeholders) and list_pdf_document_signers (just signers), making the specific scope evident.

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

Usage Guidelines3/5

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

The description implies use when needing placeholders for a specific signer, but does not explicitly state when to use this tool over alternatives, nor does it provide any exclusion criteria. It lacks explicit guidance on context.

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

list_pdf_document_signersB

Lista i firmatari di un PDF.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del PDF

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description should disclose behavioral traits like read-only nature or dependencies. It only states the action without any transparency on side effects or requirements.

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 extremely concise at one sentence, with no wasted words. However, it could be structured to front-load key information, but given simplicity, this is acceptable.

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

Completeness2/5

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

Despite low complexity (one parameter, no output schema), the description does not hint at return format or any additional context. It is incomplete for an agent to fully understand what to expect.

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 coverage is 100% for the single parameter document_id. The description adds no additional meaning beyond the schema, which already defines the parameter. Baseline 3 is appropriate.

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 'Lista i firmatari di un PDF' clearly states the verb (list) and resource (signatories of a PDF), distinguishing it from sibling tools like list_pdf_documents and list_pdf_document_placeholders.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as extract_pdf_document_parties or list_pdf_document_placeholders. There is no mention of prerequisites or context.

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

prompt_heu_document_signatureA

Invia un sollecito di firma per un documento HEU. Limite: 1 prompt ogni 24h per documento (altrimenti 429). IMPORTANTE: chiedere conferma all'utente prima di eseguire.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del documento HEU

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description bears full responsibility. It discloses the rate limit and confirmation requirement, which adds context beyond a simple action description. However, it lacks details on response format or whether the operation is idempotent.

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 concise: three sentences covering purpose, a behavioral constraint, and a user confirmation requirement. No unnecessary words, and the critical information is front-loaded.

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?

Given the tool's simplicity (one parameter, no output schema), the description covers the core purpose, a key behavioral note, and a mandatory precondition. It does not specify potential side effects or failure cases, but these are minor gaps for a straightforward action.

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 coverage is 100% (the single parameter 'document_id' is fully described in the schema). The description does not add any additional meaning or usage hints beyond what the schema already provides.

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 clearly states the action: 'Invia un sollecito di firma per un documento HEU' (Send a signature reminder for an HEU document). It uses a specific verb and resource, and distinguishes from sibling tools that target PDF documents.

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?

Includes important usage constraints: a rate limit of 1 prompt per 24 hours per document (leading to 429 error) and an instruction to ask user confirmation before executing. These guide the agent on when and how to call the tool, though it does not explicitly contrast with sibling tools.

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

prompt_pdf_document_signatureA

Invia un sollecito di firma per un PDF. IMPORTANTE: chiedere conferma all'utente prima di eseguire.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del PDF

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It notes the action and a user-consent step but does not detail side effects, permissions, or return behavior.

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?

Two concise sentences with no wasted words. The important note is highlighted. Could incorporate a bit more context about the recipient or process.

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

Completeness3/5

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

Adequate for a simple tool with one parameter, but lacks details on prerequisites (e.g., document must have signers) and success/failure outcomes.

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 100%, so baseline is 3. The description adds no extra meaning beyond 'ID del PDF' already in the schema.

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 clearly states the action ('invia un sollecito di firma') and the resource ('per un PDF'), distinguishing it from siblings like prompt_heu_document_signature.

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?

Includes an explicit instruction to ask user confirmation before executing, providing strong usage guidance. Missing explicit alternatives but context implies when to use.

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

read_heu_documentA

Legge il contenuto testuale di un documento HEU senza salvarlo su disco. Scarica il PDF dall'API HEU, ne estrae il testo e lo restituisce direttamente nella risposta — utile per riassumere, cercare clausole, confrontare contratti. Default: tutte le pagine fino a un limite di 100. Per documenti più lunghi usa il parametro 'pages'.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del documento HEU
pagesNoRange pagine: '1-3', '5', '1,3,5-7'. Default: tutte (max 100).
layoutNoCodice layout (opzionale)
has_indexNoIncludi indice (opzionale)
has_footerNoIncludi footer (opzionale)

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description must carry full burden. It discloses that the tool downloads a PDF, extracts text, does not save to disk, and defaults to all pages up to 100. However, it does not mention idempotency, side effects, authentication, or rate limits. The behavioral disclosure is decent but incomplete.

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 two sentences, front-loaded with the main action and use cases. Every sentence adds information without redundancy. It is highly concise and well-structured.

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

Completeness3/5

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

No output schema exists, so the description should explain return format. It states text is returned in the response but does not specify format (plain text, structured, etc.). It also omits error handling (e.g., document not found). For a read tool with 5 parameters, the description covers primary use but lacks completeness in edge cases and output details.

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?

Input schema has 100% description coverage, so each parameter is already explained. The description adds value by clarifying the default page range and suggesting the 'pages' parameter for longer documents. This is a minor addition; baseline 3 is appropriate.

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 clearly states the tool reads textual content of a HEU document without saving to disk, and lists specific use cases (summarizing, searching clauses, comparing contracts). This distinguishes it from siblings like read_pdf_document (generic PDF) and download_heu_document_pdf (downloads file).

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

Usage Guidelines3/5

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

The description provides context ('utile per riassumere, cercare clausole, confrontare contratti') but does not explicitly state when not to use this tool or mention alternatives. It lacks exclusions or comparisons to siblings, which would help an agent decide between similar tools.

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

read_pdf_documentA

Legge il contenuto testuale di un PDF caricato senza salvarlo su disco. Estrae il testo dal PDF e lo restituisce direttamente nella risposta. Default: tutte le pagine fino a un limite di 100. Nota: usa lo stesso endpoint di download dei documenti HEU; se l'API non lo supporta per i PDF caricati, restituirà un errore esplicito.

ParametersJSON Schema
NameRequiredDescriptionDefault
document_idYesID del PDF caricato
pagesNoRange pagine: '1-3', '5', '1,3,5-7'. Default: tutte (max 100).

TDQS

A4.2/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses that the tool reads without disk storage, defaults to all pages up to 100, and notes potential API error. However, it does not explicitly state read-only or destructive nature, though implied.

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 wasted words. Front-loaded with purpose, then key defaults and a critical note. Efficient and scannable.

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?

Given two parameters and no output schema, the description covers the main functionality, default behavior, and a potential error condition. It is adequate for a simple read tool, though return format and other errors are not detailed.

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 coverage is 100%. Description adds default behavior for 'pages' parameter (all pages up to 100) and notes endpoint dependency, which aids parameter understanding beyond schema descriptions.

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 clearly states it reads the textual content of an uploaded PDF without saving to disk, using specific verb 'Legge' and resource 'PDF caricato'. It distinguishes from siblings like download_heu_document_pdf and read_heu_document by focusing on uploaded PDFs and text extraction.

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

Usage Guidelines3/5

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

The description does not explicitly guide when to use this tool over alternatives. It mentions a note about endpoint dependency but lacks comparison to siblings like extraction or download tools. Usage is implied but not clarified.

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

TDQS

A3.7/5.0
Disambiguation5/5

Tools are clearly split into HEU and PDF categories with distinct operations. Each tool has a unique purpose and the descriptions clearly differentiate them, leaving no ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, with the resource type (heu/pdf) included in the noun. The naming is predictable and uniform.

Tool Count5/5

With 18 tools, the server covers the necessary operations for document management (create, read, list, extract, signature) without being excessive. The count is well-scoped for the domain.

Completeness4/5

The tool surface covers core workflows: creation, retrieval, reading, extraction, and signature prompting. Missing operations like delete/update are understandable, but lack of PDF upload and download for PDF documents is a minor gap.

Maintenance

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

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/heulegal/heu-mcp'

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