Heu Mcp

io.github.lucavisconti211-debug由 GitHub 账号 lucavisconti211-debug 发布v0.1.2更新于 Oct 24, 2026

HEU Legal e-signature MCP: manage HEU documents and PDFs, prompt signers, download PDFs.

概览

AI 生成的概览

面向 HEU Legal 电子签名的本地 MCP 服务器:在对话中列出、创建、读取、发起签署、催签并下载 HEU 文档与 PDF。

可以做什么
列出并查看 HEU 原生文档与上传的 PDF,包括签署人、占位字段和状态,并用健康检查工具确认 API 可用。从模板创建文档,或上传本地 PDF 直接发起签署,随后催签或取消尚未被签署的请求。在对话中读取文档文本,并提取当事方数据,如增值税号、税号、SDI、PEC 和地址。将已签署 PDF、审计轨迹和完整法律卷宗 ZIP 下载到本地目录。管理可复用的 PDF 模板:创建、更新、预览带标注的字段位置、定位文本坐标以及删除。
适用场景
当你使用 HEU Legal 电子签名流程并希望从 MCP 客户端操作时适用:发送合同或保密协议待签、催促进签署人、总结或比较合同、为意大利电子发票提取当事方数据,或归档已签署卷宗。
运行要求
需要 Python 3.10 或更高版本以及 PyPI 上的 heu-mcp 包,以本地 stdio 进程运行。需要 HEU Legal API 密钥,放在 HEU_API_KEY 中,且需 Enterprise 订阅(最多 2 个有效密钥)。可选 HEU_BASE_URL(默认指向 HEU API)和 HEU_DOWNLOAD_DIR(默认 /tmp)。模板流程需平台上至少有一个模板。需要访问 HEU API 的网络连接。
安装前请注意
HEU_API_KEY 中的 API 密钥可访问你的 HEU 账户和文档,请勿放入共享配置。多个工具会产生外部影响:创建文档、发送签署邮件、更新或删除模板、取消签署请求以及发送催签提醒。FEA 签署会按签署人消耗 FEA 额度。下载的 PDF、审计轨迹和卷宗会写入本地下载目录。文档文本和当事方数据会发送至 HEU API 并返回到对话中。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Heu Mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

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 templateslist_heu_documents, list_pdf_documents
✍️ Mandare un contratto in firma da un templatecreate_heu_document, create_pdf_document
🚀 Mandare in firma un PDF che ho sul computer, senza passare dalla piattaformacreate_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 firmatoprompt_heu_document_signature, prompt_pdf_document_signature
👀 Far leggere un contratto all'AI (riassunti, clausole, confronti) senza scaricarloread_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 firmatodownload_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 APIcreate_pdf_template, update_pdf_template, preview_pdf_template, delete_pdf_template
❌ Annullare una richiesta di firma inviata per errorecancel_pdf_document
🩺 Controllare che l'API sia raggiungibileget_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).

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:

bash
pip install heu-mcp

Da sorgenti:

bash
git clone https://github.com/heulegal/heu-mcp.gitcd heu-mcppython3 -m venv venvsource venv/bin/activatepip 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):

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

Se installato da sorgenti con venv:

json
{  "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)

bash
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

bash
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

bash
fly launch --no-deployfly volumes create heu_data --size 1fly 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

VariabileDescrizioneDefault
HEU_MCP_SECRET_KEYChiave Fernet per cifrare le API key degli utenti (richiesta)—
PUBLIC_URLURL pubblico del servizio, senza slash finale (richiesta in produzione)http://localhost:8080
MCP_PATHPath dell'endpoint MCP/mcp
HEU_MCP_DBPercorso del database SQLite/data/heu-mcp.db
ACCESS_TOKEN_TTL / REFRESH_TOKEN_TTLDurata token in secondi1 ora / 60 giorni

Endpoint esposti

EndpointScopo
/mcpEndpoint MCP (richiede bearer token)
/.well-known/oauth-protected-resourceMetadati risorsa protetta (RFC 9728)
/.well-known/oauth-authorization-serverMetadati authorization server (RFC 8414)
/register · /authorize · /tokenFlusso OAuth 2.1
/healthzLiveness probe

Variabili d'ambiente

VariabileDescrizioneDefault
HEU_API_KEYAPI key HEU Legal (richiesta)—
HEU_BASE_URLURL base dell'APIhttps://api.heulegal.com/v1
HEU_DOWNLOAD_DIRCartella dove salvare i file scaricati/tmp

Riferimento completo dei tool (28)

🩺 Health

ToolParametriCosa ritorna
get_heu_health—{ message: "ok", status: 200 } se l'API è operativa

📄 Documenti nativi HEU

ToolParametriCosa fa
list_heu_documentstype (document/template), sort (asc/desc), created_from + created_to (ISO 8601), have_editors_signed — tutti opzionaliLista documenti/template con stato, membri, firme. ⚠️ Le due date vanno passate sempre insieme, altrimenti l'API può restituire risultati incompleti
get_heu_documentdocument_idDettaglio completo: nome, stato (to_sign/in_progress/in_review/completed/signed), owner, editors, members con has_signed e signed_at, tags
list_heu_document_placeholdersdocument_idElenco 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_idInvia il sollecito di firma. Limite: 1 ogni 24h per documento (429 con Retry-After se superato)
read_heu_documentdocument_id, pages (es. "1-3", "5", "1,3,5-7"), layout, has_index, has_footerEstrae il testo del documento e lo restituisce in conversazione, senza salvare nulla su disco. Max 100 pagine se pages è omesso
extract_heu_document_partiesdocument_id, pages, include_textDati 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_pdfdocument_id, layout (codici UI: 100, 200-204, 210-214, 220-224, 230-234), has_index, has_footer, output_pathGenera e salva il PDF su disco; ritorna il path

📎 PDF caricati

ToolParametriCosa fa
list_pdf_documentstype (richiesto: document/template), sortLista PDF con stato (to_sign/in_progress/signed), tipo firma (FES/FEA), firmatari
get_pdf_documentdocument_idDettaglio: nome, stato, signature_type, date, firmatari con has_read/has_signed
list_pdf_document_signersdocument_idFirmatari del PDF: id, nome, email, ha letto, ha firmato
list_pdf_document_signer_placeholdersdocument_id, signer_idCampi (firma/testo/checkbox) assegnati a un firmatario specifico, con posizione e stato di compilazione
list_pdf_document_placeholdersdocument_idTutti 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 precompilabiliCrea un PDF firmabile da un template esistente e invia gli inviti. Con fea servono crediti sufficienti (422 altrimenti)
prompt_pdf_document_signature ✋document_idSollecito di firma per il PDF
read_pdf_documentdocument_id, pagesEstrae il testo del PDF (incluso quello firmato) e lo restituisce in conversazione
extract_pdf_document_partiesdocument_id, pages, include_textDati delle parti (come sopra) per i PDF caricati
download_pdf_documentdocument_id, output_pathScarica il PDF — versione firmata se disponibile — e ritorna il path
download_pdf_audit_traildocument_id, output_pathScarica l'audit trail: il registro PDF di chi ha letto/firmato e quando
download_pdf_bundledocument_id, output_pathScarica lo ZIP del fascicolo legale: PDF firmato + audit trail + artefatti FES. Ideale per archiviazione a valore probatorio
cancel_pdf_document ✋document_idAnnulla 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)

ToolParametriCosa 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_typeScorciatoia 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_textfile_path oppure document_id, search_terms (default: parole chiave firma), pages, include_all_linesTrova 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_templatedocument_id, output_pathScarica 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_nameSostituzione integrale di firmatari e campi di un template (l'ID resta invariato). Solo il proprietario
delete_pdf_template ✋document_idElimina (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_id → signer_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 [email protected] e [email protected]."

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 ([email protected]). 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

CosaLimite / comportamento
Rate limit API300 richieste / 5 minuti (header X-RateLimit-* nelle risposte; 429 con Retry-After oltre soglia)
Solleciti firma1 ogni 24 ore per documento
Upload PDFMax 5 MB, application/pdf, non ruotati
Lettura testoMax 100 pagine se pages non è specificato (il payload segnala truncated: true); PDF scansionati senza OCR non hanno testo estraibile
Firma FEARichiede crediti FEA disponibili per ogni firmatario (422 se insufficienti)
list_heu_documents con datePassare sempre entrambe created_from e created_to
Annullamento PDFPossibile solo senza attività di firma (409 altrimenti)
DownloadI binari vengono salvati su disco (HEU_DOWNLOAD_DIR), mai trasmessi nel canale MCP

Stati dei documenti

StatoSignificato
to_signIn attesa di firme
in_progressIn preparazione/modifica
in_reviewIn revisione
completedFlusso completato (non firmato)
signedCompletamente 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

bash
git clone https://github.com/heulegal/heu-mcp.gitcd heu-mcppython3 -m venv venvsource venv/bin/activatepip install -e .
# Avvio manuale per debugHEU_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.

Link

来源:README.md,提交 d4a94a7

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.2最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分