mcpField
H
heu-mcp

heu-mcp

ローカル
github.com/heulegal法務・行政19 週間前に更新

heu-mcp について

heu-mcp は MCP クライアントを HEU Legal に接続し、電子署名文書や PDF を管理します。文書作成、署名依頼、契約書の読取、当事者情報の抽出、ダウンロードに対応し、ローカル stdio とリモートサーバーの両方で利用できます。

主な機能

  1. 01文書とテンプレートの一覧・確認
  2. 02文書の作成と署名依頼の送信
  3. 03契約書の読取と当事者情報の抽出
  4. 04署名者への催促と依頼の取消
  5. 05署名済み PDF と監査資料のダウンロード
  6. 06PDF テンプレートの作成と管理

活用シーン

  1. 01テンプレートから契約書を作成して署名依頼
  2. 02PDF をアップロードして署名を依頼
  3. 03契約書本文と当事者情報を確認
  4. 04署名済み記録と監査履歴をダウンロード

MCP 対応

HEU Legal の文書・PDF 操作を MCP ツールとして公開します。ローカル stdio 接続と、OAuth 2.1 認証を使うリモート Streamable HTTP サーバーに対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"lucav21-heu": {
"command": "uvx",
"args": [
"heu-mcp"
],
"env": {
"HEU_API_KEY": "<HEU_API_KEY>",
"HEU_BASE_URL": "<HEU_BASE_URL>",
"HEU_DOWNLOAD_DIR": "<HEU_DOWNLOAD_DIR>"
}
}
}
}
起動コマンドuvx heu-mcp
設定が必要な環境変数
HEU_API_KEYシークレットHEU Legal API key (Profile > API Keys, Enterprise plan required)
HEU_BASE_URLAPI base URL. Default: https://api.heulegal.com/v1
HEU_DOWNLOAD_DIRDirectory where downloaded PDFs are saved. Default: /tmp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypiheu-mcp0.5.2

ツール

28

掲載時のツール一覧 · 2 週間前に更新

このツールにパラメーターはありません。

詳細

HEU Legal MCP Server

PyPI Python License: MIT MCP Registry

HEU Legal API を Claude およびあらゆる MCP クライアントに接続する MCP サーバー(Model Context Protocol)です。電子署名(180 以上の国で有効)を使ったドキュメントのライフサイクル全体を、会話の中から直接管理できます。ドキュメントの作成から署名依頼の送信、リマインダーの送信、法的書類一式のダウンロードまで対応します。


できること

したいことサーバーで使用するツール
📄 ドキュメントとテンプレートを確認するlist_heu_documents, list_pdf_documents
✍️ テンプレートから契約書を作成して署名に送るcreate_heu_document, create_pdf_document
🚀 プラットフォームを使わず、パソコン上の PDF を署名に送るcreate_pdf_document_from_upload
🤖 AI に署名フィールドをマッピングさせる(PDF を分析し、フィールドを配置して送信)locate_pdf_text + create_pdf_document_from_upload
🔔 まだ署名していない相手にリマインダーを送るprompt_heu_document_signature, prompt_pdf_document_signature
👀 ダウンロードせずに、AI に契約書を 読ませる(要約、条項、比較)read_heu_document, read_pdf_document
🪪 当事者のデータ(VAT 番号、納税者番号、SDI、PEC、住所)を抽出するextract_heu_document_parties, extract_pdf_document_parties
💾 署名済み PDF をダウンロードするdownload_heu_document_pdf, download_pdf_document
⚖️ 法的書類一式(ドキュメント + 監査証跡 + FES 成果物)をダウンロードするdownload_pdf_bundle, download_pdf_audit_trail
🧩 API 経由で再利用可能な PDF テンプレートを作成・変更するcreate_pdf_template, update_pdf_template, preview_pdf_template, delete_pdf_template
❌ 誤って送信した署名依頼を取り消すcancel_pdf_document
🩺 API に接続できることを確認するget_heu_health

オブジェクトは 2 種類あります。

  • HEU ネイティブドキュメント — プラットフォームのアプリ内エディターで作成したもの(UUID 形式の ID、例:5135e7b2-196b-...)。
  • アップロード済み PDF — 署名者と署名フィールドを配置した PDF ファイル(数値 ID、例:68)。

必要条件

  • Python ≥ 3.10
  • HEU Legal API キー — UI で Profile → API Keys → Generate API Key(Enterprise サブスクリプションが必要。アクティブなキーは最大 2 個)
  • テンプレートを使う場合:プラットフォーム上でテンプレートを少なくとも 1 つ作成済みであること(または create_pdf_template で API 経由で作成)

インストール

PyPI から:

pip install heu-mcp

ソースから:

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

設定

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json(macOS)または %APPDATA%\Claude\claude_desktop_config.json(Windows)を編集します。

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

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"
      }
    }
  }
}

変更後、Claude Desktop を再起動します。

Claude Code(CLI)
claude mcp add heu heu-mcp -e HEU_API_KEY=la_tua_api_key_qui

リモートサーバー(マルチユーザー)

上記で説明したローカルモード(stdio)に加えて、プロジェクトには同じ 28 個のツールを HTTPS 経由で公開するリモートサーバーが含まれており、ユーザーは何もインストールせずに接続できます。OAuth フローで自分の HEU API キーを一度入力するだけです。

特徴:

  • Streamable HTTP トランスポート、PKCE S256 による OAuth 2.1 認証、Dynamic Client Registration、Client ID Metadata Document
  • マルチユーザー:各接続でユーザー自身の API キーを使用します。API キーは暗号化(Fernet)して保存され、データベース内に平文で保存されることはありません
  • リフレッシュトークンのローテーションと、不審な再利用が発生した場合のセッションの自動失効
  • ネットワーク I/O は非同期、PDF の解析はスレッドプールで実行するため、時間のかかるリクエストがほかのユーザーをブロックしません
ローカルでの起動
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
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
リモートサーバーの環境変数
変数説明デフォルト
HEU_MCP_SECRET_KEYユーザーの API キーを暗号化する Fernet キー(必須)—
PUBLIC_URLサービスの公開 URL。末尾にスラッシュを付けないでください(本番環境では必須)http://localhost:8080
MCP_PATHMCP エンドポイントのパス/mcp
HEU_MCP_DBSQLite データベースのパス/data/heu-mcp.db
ACCESS_TOKEN_TTL / REFRESH_TOKEN_TTLトークンの有効期間(秒)1 時間 / 60 日
公開エンドポイント
エンドポイント用途
/mcpMCP エンドポイント(ベアラートークンが必要)
/.well-known/oauth-protected-resource保護されたリソースのメタデータ(RFC 9728)
/.well-known/oauth-authorization-server認可サーバーのメタデータ(RFC 8414)
/register · /authorize · /tokenOAuth 2.1 フロー
/healthzライブネスプローブ
環境変数
変数説明デフォルト
HEU_API_KEYHEU Legal API キー(必須)—
HEU_BASE_URLAPI のベース URLhttps://api.heulegal.com/v1
HEU_DOWNLOAD_DIRダウンロードしたファイルの保存先フォルダー/tmp

ツールの完全なリファレンス(28)

🩺 ヘルス
ツールパラメーター戻り値
get_heu_health—API が稼働中の場合、{ message: "ok", status: 200 }
📄 HEU ネイティブ文書
ツールパラメーター機能
list_heu_documentstype(document/template)、sort(asc/desc)、created_from + created_to(ISO 8601)、have_editors_signed — すべて任意ステータス、メンバー、署名を含む文書/テンプレートの一覧を取得します。⚠️ 2 つの日付は必ずセットで指定してください。そうしないと API が不完全な結果を返す場合があります
get_heu_documentdocument_id名前、ステータス(to_sign/in_progress/in_review/completed/signed)、オーナー、編集者、has_signed と signed_at を含むメンバー、タグなどの詳細情報を取得します
list_heu_document_placeholdersdocument_idテンプレートのテキスト内で置換可能なプレースホルダーキーの一覧を取得します
create_heu_document ✋source_document_id、email_subject、email_text、email_to(リスト)、document_name、document_type、placeholders(キー→値のマップ)テンプレートから文書を作成し、プレースホルダーを置換して、メールで宛先に共有します
prompt_heu_document_signature ✋document_id署名リマインダーを送信します。制限:文書ごとに 24 時間に 1 回まで(上限を超えると Retry-After を含む 429 を返します)
read_heu_documentdocument_id、pages(例:"1-3"、"5"、"1,3,5-7")、layout、has_index、has_footer文書のテキストを抽出して会話に返します。ディスクには何も保存しません。pages を省略した場合の最大ページ数は 100 です
extract_heu_document_partiesdocument_id、pages、include_text当事者のデータ:登録済みの署名者情報と、テキストから抽出した納税者番号、VAT 番号、SDI 一意コード、メールアドレス、PEC、出生地・生年月日、住所、郵便番号を組み合わせます。イタリアの契約書に最適化されたパターンを使用します
download_heu_document_pdfdocument_id、layout(UI コード:100、200-204、210-214、220-224、230-234)、has_index、has_footer、output_pathPDF を生成してディスクに保存し、パスを返します
📎 アップロード済み PDF
ツールパラメーター機能
list_pdf_documentstype(必須:document/template)、sortステータス(to_sign/in_progress/signed)、署名方式(FES/FEA)、署名者を含む PDF の一覧を表示します
get_pdf_documentdocument_id詳細:名前、ステータス、signature_type、日付、has_read/has_signed を含む署名者
list_pdf_document_signersdocument_idPDF の署名者:ID、名前、メールアドレス、閲覧済みか、署名済みか
list_pdf_document_signer_placeholdersdocument_id、signer_id特定の署名者に割り当てられたフィールド(署名/テキスト/チェックボックス)。位置と入力状況も表示します
list_pdf_document_placeholdersdocument_idPDF のすべてのフィールド
create_pdf_document ✋source_document_id、email_subject、email_body、signers(source_id、full_name、email を含む)、document_name、signature_type(fes/fea)、事前入力可能な placeholders既存のテンプレートから署名可能な PDF を作成し、招待を送信します。fea の場合、十分なクレジットが必要です(不足している場合は 422)
prompt_pdf_document_signature ✋document_idPDF の署名をリマインドします
read_pdf_documentdocument_id、pagesPDF のテキストを抽出し(署名済みのテキストを含む)、会話に返します
extract_pdf_document_partiesdocument_id、pages、include_textアップロード済み PDF の当事者情報(上記と同様)
download_pdf_documentdocument_id、output_pathPDF をダウンロードします — 署名済みバージョンがあればそれをダウンロード — パスを返します
download_pdf_audit_traildocument_id、output_path監査証跡をダウンロードします。誰がいつ閲覧/署名したかを記録した PDF です
download_pdf_bundledocument_id、output_path法的書類一式の ZIPをダウンロードします。署名済み PDF、監査証跡、FES 成果物が含まれます。証拠価値のあるアーカイブに最適です
cancel_pdf_document ✋document_id送信済みの署名依頼を取り消します。書類は一覧から消え、署名リンクは無効になります。すでに誰かが署名している場合は 409 で拒否されます
🧩 PDF テンプレート(API による管理)
ツールパラメーター機能
create_pdf_template ✋file_path(ローカルの PDF ≤ 5 MB)、document_name、signers(source_id、full_name)、placeholders(種類、位置 %、ページ)コンピューターから PDF をアップロードして、再利用可能なテンプレートを作成します。返された ID は create_pdf_document の source_document_id として使用します
create_pdf_document_from_upload ✋file_path、document_name、email_subject、email_body、signers(メールアドレスを含む)、placeholders、signature_type一括で行うショートカット:テンプレートを先に作成せずに PDF をアップロードし、そのまま署名依頼を送信します。書類のステータスは to_sign になり、署名者にはすぐにメールが届きます
locate_pdf_textfile_path または document_id、search_terms(デフォルト:署名のキーワード)、pages、include_all_linesPDF 内のテキストの座標を検索します(% 表記、原点は左下 — プレースホルダーと同じ方式)。AI がフィールドを自動で配置できるツールです。「署名」、当事者の名前、その他の目印を検索し、それぞれのページと位置を取得します
preview_pdf_templatedocument_id、output_path注釈付きプレビューをダウンロードします。各フィールドは種類と署名者のラベル付きの枠で表示されます。送信前に位置を確認できます
update_pdf_template ✋document_id、signers(置き換え用の完全なセット)、placeholders(同様。[] ですべて削除)、document_nameテンプレートの署名者とフィールドを一括置換します(ID は変わりません)。所有者のみ実行できます
delete_pdf_template ✋document_idすべての一覧からテンプレートを削除(非表示に)します

✋ = 外部への影響(作成、メール送信、削除)があるツールです。Claude は実行前に必ず確認を求めます。

プレースホルダーの配置方法
  • position_x / position_y:ページに対するパーセンテージ(0~100、両端を除く)、原点は左下(アプリのエディターと同じです)。
  • page_number:1から始まります。
  • 種類:signature、initials、text(text_labelが必要です)、checkbox_optional、checkbox_required。
  • 署名者とフィールドは、source_id → signer_source_idを使って関連付けます。
  • 回転したPDF(/Rotate 90/180/270)はAPIで拒否されます。

典型的なワークフロー

0. 「スマート」な署名依頼:AIがフィールドを自動でマッピング

「/Users/me/Desktop/Contratto.pdfを開いて、各当事者が署名する場所を見つけて、[email protected]と[email protected]に送ってください。」

内部では次の処理が行われます。

  1. **locate_pdf_text**がPDFを分析し、アンカーを見つけます。「Firma del Cliente」/「Firma del Fornitore」の行(または当事者の名前)と、その正確なパーセンテージ座標です。
  2. Claudeがマッピングを提案します。「4ページ目の『Firma del Cliente』ラベルの上(x 17%、y 14%)に顧客の署名フィールドを配置し、供給元のフィールドをその隣(x 50%、y 14%)に配置します。よろしいですか?」
  3. 確認後、**create_pdf_document_from_upload**が、プレースホルダーを配置したPDFをアップロードし、署名依頼メールを送信します。
  4. (任意)テンプレートを使った場合は、**preview_pdf_template**で視覚的に確認できます。

locate_pdf_textが返す座標は、すでにHEUのプレースホルダー座標系(パーセンテージ、原点は左下)になっています。変換は不要です。複雑なレイアウトの場合は、include_all_lines=trueを指定してページ全体のマップを取得するか、特定の語句(search_terms=["Il Committente", "Il Prestatore"])を検索できます。

⚠️ 制限事項:テキストを含むPDFで動作します。OCR処理されていないスキャンには抽出可能なテキストがないため、その場合は位置を手動で指定してください。

1. コンピューター上のPDFを署名依頼に送信する(すべてチャット経由)

「/Users/me/Desktop/NDA.pdfを開いて、Mario Rossi([email protected])に署名依頼を送ってください。最後のページの右下に署名フィールドを配置し、メールの件名は『NDA da firmare』にしてください。」

Claudeがcreate_pdf_document_from_uploadを使い、文書を作成すると、Marioにすぐメールが届きます。その後は次のように操作できます。

「Marioは署名しましたか?」 → get_pdf_document 「リマインダーを送って」 → prompt_pdf_document_signature 「署名済みです。書類一式をダウンロードしてください」 → download_pdf_bundle

2. テンプレートを使った定期的な契約

「Contratto-tipo.pdfから、署名者を顧客と供給元の2名にしたテンプレートを作成してください。顧客の署名欄は3ページ目の下部です。」 → create_pdf_template 「位置を確認するため、プレビューを表示してください」 → preview_pdf_template 「では、これを使ってACME srlに契約書を送ってください」 → create_pdf_document

3. 文書分析(AIが契約書を読み取る)

「契約書abc-123を要約して、期間と解約条件を教えてください」 → read_heu_document 「XとYの契約書の責任条項を比較してください」 → read_heu_documentを2回 「当事者の情報を抽出してください。会社名、P.IVA、SDI、PECです」 → extract_heu_document_parties

当事者情報の抽出は、イタリアの電子請求書ワークフローとの連携を想定しています。契約書から抽出した一意のSDIコードとP.IVAを、管理システムの取引先情報に直接反映できます。

4. モニタリングと管理

「7月の文書のうち、まだ全員が署名していないものはどれですか?」 → 日付とhave_editors_signed=falseを指定してlist_heu_documents 「PDF 42の署名依頼を取り消してください。誤った相手に送ってしまいました」 → cancel_pdf_document


把握しておくべき動作と制限事項

内容制限/動作
API レート制限300 リクエスト/5 分(レスポンスのヘッダー X-RateLimit-*。上限を超えると、Retry-After を含む 429 が返されます)
署名リマインダー文書ごとに 24 時間に 1 回
PDF のアップロード最大 5 MB、application/pdf、回転なし
テキストの読み取りpages が指定されていない場合、最大 100 ページ(ペイロードには truncated: true と示されます)。OCR がないスキャン済み PDF からは、抽出可能なテキストを取得できません
FEA 署名署名者ごとに利用可能な FEA クレジットが必要です(不足時は 422)
日付を指定した list_heu_documentscreated_from と created_to の両方を必ず渡してください
PDF の取り消し署名アクティビティがない場合のみ可能です(それ以外は 409)
ダウンロードバイナリはディスク(HEU_DOWNLOAD_DIR)に保存され、MCP チャネルを通じて送信されることはありません

文書の状態

状態意味
to_sign署名待ち
in_progress準備中/編集中
in_reviewレビュー中
completedフロー完了(未署名)
signed署名完了

セキュリティ

  • API キーは環境変数からのみ読み取られます。コード内、レスポンス、ログに含まれることはありません。
  • 外部に影響を及ぼすツール(✋)は、ユーザーに必ず明示的な確認を求めるよう設定されています。
  • ダウンロードしたファイルはローカルのファイルシステムに保存されます。

開発

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

参照用の OpenAPI 仕様は https://api.heulegal.com/v1/specs/v1.yaml で公開されています(インタラクティブなドキュメント:https://api.heulegal.com/v1/docs)。

ライセンス

MIT — LICENSE を参照してください。

リンク

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。