mcpField
H
Henrri (unofficial)

Henrri (unofficial)

ローカル
github.com金融データ04 日前に更新

Henrri (unofficial) について

Henrri (unofficial)は、Henrri v1 APIをMCPクライアントに公開するRust製MCPサーバーです。顧客、見積書、請求書、支払い、Webhookを扱い、読み取り専用モードと不可逆操作の確認に対応します。

主な機能

  1. 01Henrri v1 APIの操作を網羅
  2. 02顧客、見積書、請求書、支払いの管理
  3. 03変更箇所のみを反映する更新
  4. 04不可逆操作で確認を必須化
  5. 05Webhook署名を検証し再送を拒否

活用シーン

  1. 01支払い期限を過ぎたマイルストーンを確認
  2. 02署名済み見積書を請求書に変換
  3. 03読み取り専用で会計データを確認
  4. 04Webhookイベントを受信して検査

MCP 対応

Henrri APIの読み取り、書き込み、Webhook操作を構造化ツールとしてMCPクライアントに公開します。stdioまたはHTTPで接続でき、読み取り専用ツールに制限できます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"edouard-claude-henrri": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"HENRRI_USERNAME",
"-e",
"HENRRI_PASSWORD",
"-e",
"HENRRI_CLIENT_ID",
"-e",
"HENRRI_CLIENT_SECRET",
"-e",
"HENRRI_ENVIRONMENT",
"-e",
"HENRRI_READ_ONLY",
"-e",
"HENRRI_TOOLSETS",
"ghcr.io/edouard-claude/henrri-mcp:0.1.0"
],
"env": {
"HENRRI_USERNAME": "<HENRRI_USERNAME>",
"HENRRI_PASSWORD": "<HENRRI_PASSWORD>",
"HENRRI_CLIENT_ID": "<HENRRI_CLIENT_ID>",
"HENRRI_CLIENT_SECRET": "<HENRRI_CLIENT_SECRET>",
"HENRRI_ENVIRONMENT": "<HENRRI_ENVIRONMENT>",
"HENRRI_READ_ONLY": "<HENRRI_READ_ONLY>",
"HENRRI_TOOLSETS": "<HENRRI_TOOLSETS>"
}
}
}
}
起動コマンドdocker run -i --rm -e HENRRI_USERNAME -e HENRRI_PASSWORD -e HENRRI_CLIENT_ID -e HENRRI_CLIENT_SECRET -e HENRRI_ENVIRONMENT -e HENRRI_READ_ONLY -e HENRRI_TOOLSETS ghcr.io/edouard-claude/henrri-mcp:0.1.0
設定が必要な環境変数
HENRRI_USERNAMEHenrri API user login (or set HENRRI_CLIENT_ID and HENRRI_CLIENT_SECRET)
HENRRI_PASSWORDシークレットHenrri API user password
HENRRI_CLIENT_IDDeveloper client id, instead of a user
HENRRI_CLIENT_SECRETシークレットDeveloper client secret
HENRRI_ENVIRONMENTproduction or sandbox
HENRRI_READ_ONLY1 to withhold every write tool (finalize, pay, delete…)
HENRRI_TOOLSETSComma-separated toolsets: account, customers, documents, catalog, payments, revenues, webhooks

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

パッケージ
ocighcr.io/edouard-claude/henrri-mcp:0.1.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

mcp-henrri

Henrri の請求業務を、質問するだけで。

単一の Rust バイナリで、Henrri の v1 API(Henrri)の全機能 (顧客、見積書、請求書、クレジットノート、支払いスケジュール、前受金、支払い、Webhook)を、 あらゆる MCP クライアントから利用できます。

Unofficial Rust MCP Henrri API Transports CI Release License

🇫🇷 Henrri 用の非公式 MCP サーバーです。顧客、見積書、請求書、クレジットノート、支払い期日、 前受金、支払いを、Claude、Cursor、その他あらゆる MCP クライアントから自然言語で操作できます。

重要

これは Henrri の公式製品ではありません。 Henrri が開発、推奨、サポートするものではない、 独立したオープンソースプロジェクトです。公開されている Henrri v1 仕様の全操作を、API が許す限り忠実に実装し、 API の動作がドキュメントと異なる箇所も記録しています。免責事項をご覧ください。


アシスタントに 「Atelier Martin に、税抜き 600 € で 3 日分の開発作業を請求して」、 「まだ支払いが済んでいないのは誰?」、*「署名済みの見積書 D-26-11-3 を請求書にして」*と尋ねるだけで、 会計士が参照するのと同じ Henrri 上で処理できます。

> who still owes me money?

  list_payment_milestones   is_overdue = true · 7 milestones
                            ATELIER MARTIN    I-26-10-12   1 440,00 €   23 days late
                            LOVELACE          I-26-10-17     864,00 €    9 days late
                            …
                            overdue total     4 812,40 €

> invoice Atelier Martin for 3 days of development at 600 € excl. tax

  create_document           draft invoice 9632 for ATELIER MARTIN
  add_document_line         3 × Journée de développement · 600,00 € · VAT 20 %
  get_document_with_all     1 800,00 € excl. tax · 360,00 € VAT · 2 160,00 € incl. tax
                            finalize it? It locks the invoice for good and costs 8 credits.

理由

Henrri の API はすっきりした REST インターフェースですが、そのまま LLM に渡すと、予測可能な形で問題が起きます。PUT は送信されなかったフィールドをすべて消去し、元に戻せない呼び出しをするまでドキュメントはドラフトのままで、確定にはクレジットがかかります。月間クォータとレートリミッターはどちらも 429 を返し、モデルはドキュメントの ID と番号を区別できません。

  • API 全体を網羅し、隠し事はありません。 v1 仕様の 87 操作すべてに対応しています。ルートは 85 個で、それぞれに 1 つのツールがあり、2 つの認証ルートはクライアント自体が処理します。テストではツール一覧を spec/operations.tsv と照合し、CI では毎日、このファイルを本番およびサンドボックスの最新仕様と照合します。
  • 変更内容だけで更新できます。 すべての update_* ツールは、変更する項目だけを受け取り、リソースを読み込み、マージして、Henrri が受け入れる内容を書き戻します。ウェブサイトを変更しただけで顧客のコメントが消えることは、もうありません。
  • 元に戻せない操作は、確認なしでは実行しません。 finalize_document、validate_quotation、支払いツール、cancel_deposit、すべての削除操作は、confirm: true がなければ実行を拒否し、ドキュメント、合計金額、顧客、クレジットに何が起きるかを説明します。HENRRI_READ_ONLY=1 を設定すると、すべての書き込みツールが無効になります。
  • モデルが対処できるエラーを返します。 失敗は isError: true のツール結果として、Henrri の RFC 9457 問題ドキュメントとともに返されます。そこには、安定した errorCode(ALREADY_FINALIZED、LINES_MISSING、QUOTA_EXCEEDED など)、detail、無効なフィールド、Henrri のサポートへの問い合わせに使える traceId が含まれ、修正方法が明らかでない場合はヒントも付加されます。
  • API の作法は一度だけ処理します。 10 分で期限切れになるトークンは期限前に更新し、レートリミッター、503、処理中の確定処理は再試行します。クレジットクォータのエラーは再試行せず、実行された可能性がある POST は再送しません。リストのフィルターはキーを繰り返して送信し、last month のような期間は Henrri の包括的な日付に変換します。
  • Webhook を検証します。 HTTP 経由では、サーバーが /webhooks で Henrri からの配信を受信し、HMAC-SHA256 署名を定数時間で検証して、リプレイを拒否します。モデルは何が起きたかを読み取れます。
  • モデルが読み取れるように設計されています。 89 個すべてのツールにスキーマ付きの構造化出力と注釈を用意し、元に戻せない操作の前に停止して確認する 4 つのプロンプトを備えています。また、サーバーの指示では、ID と番号の違い、ユーロ、ドラフトと確定済みの違いを最初に説明します。

インストール

ビルド済みバイナリ(macOS、Linux、Windows)

お使いのプラットフォーム用のアーカイブを 最新リリースからダウンロードし、.sha256 と照合して、mcp-henrri を PATH に配置します。

# macOS on Apple silicon; swap the target for x86_64-apple-darwin,
# x86_64-unknown-linux-gnu or aarch64-unknown-linux-gnu
V=v0.1.0 T=aarch64-apple-darwin
curl -LO https://github.com/edouard-claude/henrri-mcp/releases/download/$V/mcp-henrri-$V-$T.tar.gz
tar xzf mcp-henrri-$V-$T.tar.gz
sudo mv mcp-henrri-$V-$T/mcp-henrri /usr/local/bin/

Windows の場合は、x86_64-pc-windows-msvc.zip アーカイブを使用します。

ソースからインストール(Rust 1.88 以降を利用できるすべてのプラットフォーム)
git clone https://github.com/edouard-claude/henrri-mcp
cd henrri-mcp
cargo build --release
# the binary is at target/release/mcp-henrri
cargo install を使用
cargo install --git https://github.com/edouard-claude/henrri-mcp
Docker を使用
docker run --rm -i \
  -e HENRRI_USERNAME -e HENRRI_PASSWORD \
  ghcr.io/edouard-claude/henrri-mcp:latest

イメージはデフォルトで stdio を使用します。HTTP を提供するには、HENRRI_HTTP_TOKEN とともに --http 0.0.0.0:8080 を追加します。

API アクセスの取得

Henrri は開発者向けプランで API アクセスを提供しています。環境は 2 つあり、それぞれ別のアカウントが必要です。

環境API ルートクレジット
本番https://api.henrri.io発行時に課金、月間クォータあり
サンドボックスhttps://api-sandbox.henrri.io無制限、使い捨てデータ

認証方法は 3 種類あり、次の順で優先されます。

  1. 開発者クライアント — HENRRI_CLIENT_ID と HENRRI_CLIENT_SECRET を POST /v1/users/authenticate に送信して交換し、POST /v1/users/refresh-token で更新します。
  2. API ユーザー — HENRRI_USERNAME と HENRRI_PASSWORD を使用します。POST /v1/users/token で OAuth2 の password グラントを使います(サンドボックスから提供される認証情報はこちらです。例:[email protected])。
  3. 発行済みトークン — HENRRI_ACCESS_TOKEN をそのまま使用し、更新はしません(有効期限は 10 分です)。

続いて、すべてが正しく動作することを確認します。

HENRRI_ENVIRONMENT=sandbox HENRRI_USERNAME=… HENRRI_PASSWORD=… mcp-henrri --check
environment  sandbox
base url     https://api-sandbox.henrri.io
credentials  API user (OAuth2 password grant)
toolsets     account, customers, documents, catalog, payments, revenues, webhooks
tools        89
token        ok
hello world  "Hello World"
user         [email protected] (16079), role admin
company      My company (947), plan discovery
credits      used 100 of unlimited, unlimited left

ready.

設定

すべての値は起動時に一度だけ環境変数から読み込まれます。変数が未設定または不正な場合は、その変数名を示すメッセージとともにプロセスが停止します。

変数デフォルト
HENRRI_USERNAME / HENRRI_PASSWORDAPI ユーザーです。Docker シークレットには HENRRI_PASSWORD_FILE を使用します。
HENRRI_CLIENT_ID / HENRRI_CLIENT_SECRETまたは開発者クライアントです。HENRRI_CLIENT_SECRET_FILE も使用できます。
HENRRI_ACCESS_TOKENまたはベアラートークンです。更新されません。
HENRRI_ENVIRONMENTproductionproduction または sandbox(staging)です。
HENRRI_BASE_URL環境ごとAPI ルートを上書きします。
HENRRI_TOOLSETSすべてaccount,customers,documents,catalog,payments,revenues,webhooks
HENRRI_READ_ONLY01 にすると、readOnlyHint ではないツールをすべて非表示にします。
HENRRI_TIMEOUT_SECS30リクエストごとのタイムアウトです。
HENRRI_PDF_TIMEOUT_SECS120オンデマンドで生成する PDF ルートのタイムアウトです。
HENRRI_MAX_RETRIES3レートリミッター、503、処理中の確定に対する再試行回数です。
HENRRI_DOWNLOAD_DIRユーザーごとのキャッシュPDF の保存先です(~/Library/Caches/mcp-henrri/downloads、~/.cache/…、%LOCALAPPDATA%\…)。0700 で作成され、他のユーザーが書き込める場合は拒否されます。共有一時ディレクトリへのフォールバックはありません。
HENRRI_WEBHOOK_SECRETHenrri の Webhook 設定にある署名シークレットです。
HENRRI_HTTP_BINDstdio の代わりにこのアドレスで HTTP を提供します(--http と同じです)。
HENRRI_HTTP_TOKENHTTP トランスポートで必要なベアラートークンです。ループバック以外では必須です。
HENRRI_LOGinfoログフィルターです。ログは stderr に出力され、stdout には出力されません。

ローカルで作業する場合は .env.example を .env にコピーします。このファイルは git の追跡対象外です。

クライアントを接続する

Claude Desktop

claude_desktop_config.json 内で設定します。

{
  "mcpServers": {
    "henrri": {
      "command": "/usr/local/bin/mcp-henrri",
      "env": {
        "HENRRI_USERNAME": "[email protected]",
        "HENRRI_PASSWORD": "…",
        "HENRRI_ENVIRONMENT": "production"
      }
    }
  }
}
Claude Code
claude mcp add henrri \
  -e [email protected] -e HENRRI_PASSWORD=… \
  -- /usr/local/bin/mcp-henrri
Cursor、VS Code、および任意の stdio クライアント

.cursor/mcp.json または .vscode/mcp.json:

{
  "servers": {
    "henrri": {
      "type": "stdio",
      "command": "/usr/local/bin/mcp-henrri",
      "env": { "HENRRI_USERNAME": "[email protected]", "HENRRI_PASSWORD": "…" }
    }
  }
}

ヒント:読み取りだけを行う簿記担当者は HENRRI_READ_ONLY=1 で実行できます。支払いの督促だけを行うアシスタントは HENRRI_TOOLSETS=customers,payments で実行できます。

ツール

7 つのツールセットに 89 個のツールがあります。mcp-henrri --list-tools を実行すると、設定で公開されるツールが表示されます。R は読み取り、W は書き込み、D は破壊的または取り消し不可の操作を表し、confirm: true が必要です(2 つの支払いツールと validate_quotation も同様です)。

documents — 見積書、請求書、クレジットノート、明細、PDF
ツールルート
list_documentsRGET /v1/documents — 種類、状態、期間、検索、min_id
list_documents_tableRGET /v1/documents/with-selected-fields
create_documentWPOST /v1/documents — 空の下書き
get_documentRGET /v1/documents/{id}
get_document_with_allRGET /v1/documents/{id}/with-all
get_document_all_includedRGET /v1/documents/{id}/all-included
update_documentWPUT /v1/documents/{id} — 部分更新、マージ
delete_documentDDELETE /v1/documents/{id}
finalize_documentDPOST /v1/documents/{id}/finalize — 8 または 2 クレジット
validate_quotationWPOST /v1/documents/{id}/validate — 2 クレジット、confirm が必要
transform_quote_to_invoiceWPOST /v1/documents/{id}/transform-to-invoice
get_document_tax_detailsRGET /v1/documents/{id}/tax-details
get_document_displayRGET /v1/documents/{id}/display
get_payment_terms_displayRGET /v1/documents/{id}/paymenttermsdisplay
set_payment_terms_displayWPUT /v1/documents/{id}/paymenttermsdisplay — 部分更新
list_document_payment_milestonesRGET /v1/documents/{documentId}/paymentmilestones
get_document_pdfRGET /v1/documents/{id}/pdf — ディスクに保存、Factur-X オプション
create_document_pdf_urlWPOST /v1/documents/{id}/pdf/url
download_document_pdf_fileRGET /v1/documents/{id}/pdf/files/{guid}
next_quote_batchWGET /v1/documents/next-quote-batch — サーバー側のカーソルを進めます
list_document_typesRGET /v1/documenttypes
list_document_linesRGET /v1/documents/{documentId}/lines
add_document_lineWPOST /v1/documents/{documentId}/lines — kind を対応する種類 ID に解決
get_document_lineRGET /v1/documents/{documentId}/lines/{id}
update_document_lineWPUT /v1/documents/{documentId}/lines/{id} — 部分更新、マージ
delete_document_lineDDELETE /v1/documents/{documentId}/lines/{id}
move_document_lineWPOST /v1/documents/{documentId}/lines/{id}/move
list_document_line_typesRGET /v1/documentlinetypes
payments — マイルストーン、前受金、支払い
ツールルート
list_payment_milestonesRGET /v1/paymentmilestones — 支払い済み、期限超過、ドキュメント
list_unpaid_milestones_tableRGET /v1/paymentmilestones/with-selected-fields
create_payment_milestoneWPOST /v1/paymentmilestones
get_payment_milestoneRGET /v1/paymentmilestones/{id}
update_payment_milestoneWPUT /v1/paymentmilestones/{id} — 部分更新
delete_payment_milestoneDDELETE /v1/paymentmilestones/{id}
pay_payment_milestoneWPOST /v1/paymentmilestones/{id}/pay — confirm が必要
pay_payment_milestonesWPOST /v1/paymentmilestones/pay — confirm が必要
get_milestone_paymentRGET /v1/paymentmilestones/{id}/payment
create_deposit_requestWPOST /v1/paymentmilestones/{id}/deposit-request
create_deposit_settlementWPOST /v1/paymentmilestones/{id}/deposit-settlement
cancel_depositDDELETE /v1/paymentmilestones/{id}/deposit
list_payment_modesRGET /v1/paymentmodes
list_paymentsRGET /v1/payments
get_paymentRGET /v1/payments/{id}
list_payment_settled_milestonesRGET /v1/payments/{id}/milestones
customers — 顧客と連絡先
ツールルート
list_customersRGET /v1/customers
list_customers_tableRGET /v1/customers/with-selected-fields
list_best_customersRGET /v1/customers/best-sales
list_last_used_customersRGET /v1/customers/last-used
create_customerWPOST /v1/customers — 連絡先ルールと SIRET/BCE を最初に確認
get_customerRGET /v1/customers/{id}
update_customerWPUT /v1/customers/{id} — 部分更新、マージ
delete_customerDDELETE /v1/customers/{id}
get_customer_addressRGET /v1/customers/{id}/address
list_customer_payment_milestonesRGET /v1/customers/{id}/paymentmilestones
list_customer_contactsRGET /v1/customers/{id}/contacts
add_customer_contactWPOST /v1/customers/{id}/contacts
get_customer_contactRGET /v1/customers/{id}/contacts/{contactId}
update_customer_contactWPUT /v1/customers/{id}/contacts/{contactId} — 部分更新
delete_customer_contactDDELETE /v1/customers/{id}/contacts/{contactId}
catalog — 品目、カテゴリ、テキスト品目、単位
ツールルート
list_itemsRGET /v1/items
list_items_tableRGET /v1/items/with-selected-fields
list_most_used_itemsRGET /v1/items/most-used
list_best_selling_itemsRGET /v1/items/best-sales
create_itemWPOST /v1/items
get_itemRGET /v1/items/{id}
update_itemWPUT /v1/items/{id} — 部分更新、マージ
delete_itemDDELETE /v1/items/{id}
list_item_categoriesRGET /v1/itemcategories
list_text_itemsRGET /v1/textitems
create_text_itemWPOST /v1/textitems
get_text_itemRGET /v1/textitems/{id}
update_text_itemWPUT /v1/textitems/{id} — 部分更新
delete_text_itemDDELETE /v1/textitems/{id}
list_unitsRGET /v1/units
create_unitWPOST /v1/units
get_unitRGET /v1/units/{id}
アカウント、売上、Webhook
ツールルート
pingRGET /v1/secures/hello-world
whoamiRGET /v1/users/me
get_userRGET /v1/users/{id}
get_user_addressRGET /v1/users/{id}/address
get_my_companyRGET /v1/users/companies
get_companyRGET /v1/companies/{id}
get_company_addressRGET /v1/companies/{id}/address
get_api_usageRX-Credits-* ヘッダーと X-RateLimit-* ヘッダー
get_yearly_revenueRGET /v1/revenues/{year}
get_monthly_revenueRGET /v1/revenues/{year}/months
list_webhook_event_typesR仕様に記載された12種類のWebhookイベントとテスト用ping
verify_webhook_signatureR{timestamp}.{rawBody} の HMAC-SHA256、定時間比較
list_received_webhook_eventsR/webhooks で受信した配信(HTTP トランスポート)

POST /v1/users/authenticate と POST /v1/users/refresh-token はツールではありません。OAuth2 トークンエンドポイントの POST /v1/users/token と同様に、クライアントが直接呼び出します。

リソースとプロンプト

リソース
henrri://meユーザーと会社。
henrri://referenceドキュメントの種類、行の種類、支払い方法、品目カテゴリー、単位。
henrri://usage使用済みクレジットと残りのクレジット、レート制限。
henrri://webhooks/eventsWebhook イベントのカタログ。
henrri://webhooks/received受信した配信。
henrri://documents/{document_id}すべての要素を含むドキュメント。
henrri://documents/{document_id}/pdfドキュメントの PDF(blob 形式)。
henrri://customers/{customer_id}支払いマイルストーンを含む顧客。
henrri://revenues/{year}年間の売上合計と月別売上。
プロンプト
draft_invoice「誰に」「何を」から、確認済みの下書きを作成し、「はい」の場合にのみ確定します。
chase_unpaid顧客ごとの支払期限超過分と、自分で送信するリマインダーメッセージを確認します。読み取り専用です。
revenue_report年間売上を月ごとに確認し、上位の顧客と品目を表示します。読み取り専用です。
quote_to_invoice見積書を確認し、署名を記録して変換した後、確認し、「はい」の場合に確定します。

実際の動作に基づく Henrri の仕様

このサーバーの構築中にサンドボックスで見つかった挙動を処理しているため、モデルがこれらに遭遇することはありません。各項目は tests/api_contract.rs のテストで固定されています。

  • PUT は送信されなかった項目を消去します。 コメントを含めずに顧客のウェブサイトを更新すると、コメントが削除されます。更新ツールは読み取り、マージしてから書き戻します。
  • 読み取り時に "" として返され、"" での更新が拒否されるフィールドがあります。 vatNumber、siret などです。変更されていない空文字列は書き込みから除外されます。
  • 連絡先を含む顧客の PUT は拒否されます(PUT_WITH_CUSTOMER)。ネストされた品目、その種類、または計算済み合計を含む行の PUT も拒否されます。これらは除外されます。
  • Content-Length のない本文なしの POST は IIS の 411 エラーになります。 transform-to-invoice、deposit-request、pdf/url などには明示的な空の本文を付けます。
  • カンマ区切りのリストフィルターはエラーではなく、空のページを返します(ドキュメントには 400 と記載)。リストはキーを繰り返して送信します。
  • マイルストーン作成時は期日が無視されますが、更新時には反映されます。 create_payment_milestone は2回目の呼び出しで期日を設定します。
  • 確定リクエストの本文では confirmFirstOfMonth が拒否されます。FIRST_ACCOUNTING_DOCUMENT_MONTH エラーでは指定を求められますが、クエリパラメーターとして送信します。
  • 新しい単位は id: 0 として返されます。 create_unit は名前で単位を検索します。
  • 会社全体のマイルストーン一覧には確定済みドキュメントのみが表示され、確定済みドキュメントは顧客の凍結コピー(parentCustomerId)を参照します。 下書きのスケジュールはドキュメントを通じて、顧客のスケジュールはコピーを通じて読み取ります。
  • 市区町村は郵便番号に従います。 Henrri は市区町村名を書き換えます(「Paris 01」)。郵便番号と一致しない市区町村名は空欄になります。両方をまとめて変更してください。
  • refresh_token は /v1/users/token で拒否されます。API ユーザーは単純に再付与されます。
  • 異なる種類の 429 が2つあります。 1分あたりのレート制限は再試行されますが、QUOTA_EXCEEDED(月間クレジット)は再試行されません。
  • PDF のレンダリングには時間がかかり、執筆時点ではサンドボックスで動作しません(500 または応答なし)。PDF ルートには独自の長いタイムアウトが設定されています。

安全性

  • 取り消せない呼び出しはフェイルクローズです。confirm: true がなければプロセス外に何も送信されず、拒否時には何が起きるかが示されます。サーバーの指示とプロンプトは、まず利用者に内容を見せて、承認を得るようモデルに伝えます。
  • HENRRI_READ_ONLY=1 の場合、書き込みツールは一切登録されません。読み取り専用かどうかは、変化する可能性のあるリストではなく、各ツールの readOnlyHint によって決まります。
  • シークレットがログや Debug 出力に出力されることはありません。ログは標準エラー出力に送られます。
  • PDF は HENRRI_DOWNLOAD_DIR の内部に、サニタイズされたファイル名でのみ書き込まれます。
  • HTTP では、/mcp に HENRRI_HTTP_TOKEN が必要です(比較は定時間で行われます)。トークンがない場合、サーバーはループバック以外でのリッスンを拒否します。ループバックでは、DNS リバインディング対策として Host が検証されます。
  • Webhook の配信は、有効な署名があり、タイムスタンプが 5 分以内で、配信 ID ごとに 1 回の場合にのみ受け付けられます。

HTTP 経由で実行する

HENRRI_HTTP_TOKEN=$(openssl rand -hex 32) \
HENRRI_WEBHOOK_SECRET=… \
mcp-henrri --http 127.0.0.1:8080
# MCP at http://127.0.0.1:8080/mcp, webhooks at /webhooks, health at /healthz

Streamable HTTP トランスポートは複数のセッションに対応しており、それらのセッションは Henrri トークンと Webhook の受信ボックスを共有します。リバースプロキシの背後では、0.0.0.0 にバインドし(この場合はトークンが必須です)、Henrri の Webhook コールバック先を https://<your-host>/webhooks に設定してください。Henrri は各配信を再試行せずに 1 回送信します。重複した配信も含め、受信側は直ちに 204 を返します。

検証する

cargo fmt --check
cargo clippy --all-targets -- -D warnings
cargo test                      # unit, contract (fake Henrri), stdio and HTTP protocol tests

実際のサンドボックスに対して実行します。.env にサンドボックスの認証情報を設定してください(下書きの見積書を作成して削除します。確定されるものはありません)。

set -a; source .env; set +a
HENRRI_SANDBOX_TESTS=1 cargo test --test sandbox

API に変更がありましたか?これを実行すると、spec/operations.tsv の形式で現在のオペレーションが出力されます(CI では本番環境とサンドボックスに対して毎日実行されます)。

scripts/spec-operations.sh | diff - spec/operations.tsv

リリース

Cargo.toml と server.json の version を更新し、CHANGELOG.md にセクションを追加してから、vX.Y.Z タグをプッシュしてください。リリースワークフローでは、3 つのバージョンが一致していることを確認し、5 つのターゲット向けのバイナリをビルドして、マルチアーキテクチャイメージを GHCR に公開し、変更履歴からリリースノートを作成します。

コントリビューション

Issue とプルリクエストを歓迎します。コードが従うルールを守ってください。1 つのルートに 1 つのツールを対応させ、実際の API によって必要となるすべての動作にテストを用意します。CONTRIBUTING.md を参照してください。

免責事項

Henrri はその所有者の商標です。このプロジェクトは非公式であり、Henrri と提携、推奨、または支援を受けているものではありません。Henrri の公開 v1 API 仕様を基に構築され、Henrri のサンドボックスに対してテストされています。API の変更に伴い、動作が変わる場合があります。本番環境でドキュメントを確定すると、税務上の影響が生じ、API クレジットが消費されます。ご自身の名義で発行される内容については、ご自身が責任を負います。本ソフトウェアは MIT ライセンスの下で提供され、保証はありません。

ライセンス

MIT © 2026 Edouard Claude

コメント

MCP は初めてですか?

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

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