Henrri (unofficial) について
Henrri (unofficial)は、Henrri v1 APIをMCPクライアントに公開するRust製MCPサーバーです。顧客、見積書、請求書、支払い、Webhookを扱い、読み取り専用モードと不可逆操作の確認に対応します。
主な機能
- 01Henrri v1 APIの操作を網羅
- 02顧客、見積書、請求書、支払いの管理
- 03変更箇所のみを反映する更新
- 04不可逆操作で確認を必須化
- 05Webhook署名を検証し再送を拒否
活用シーン
- 01支払い期限を過ぎたマイルストーンを確認
- 02署名済み見積書を請求書に変換
- 03読み取り専用で会計データを確認
- 04Webhookイベントを受信して検査
MCP 対応
Henrri APIの読み取り、書き込み、Webhook操作を構造化ツールとしてMCPクライアントに公開します。stdioまたはHTTPで接続でき、読み取り専用ツールに制限できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
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.0HENRRI_USERNAMEHenrri API user login (or set HENRRI_CLIENT_ID and HENRRI_CLIENT_SECRET)HENRRI_PASSWORDシークレットHenrri API user passwordHENRRI_CLIENT_IDDeveloper client id, instead of a userHENRRI_CLIENT_SECRETシークレットDeveloper client secretHENRRI_ENVIRONMENTproduction or sandboxHENRRI_READ_ONLY1 to withhold every write tool (finalize, pay, delete…)HENRRI_TOOLSETSComma-separated toolsets: account, customers, documents, catalog, payments, revenues, webhooksローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/edouard-claude/henrri-mcp:0.1.0stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
mcp-henrri
Henrri の請求業務を、質問するだけで。
単一の Rust バイナリで、Henrri の v1 API(Henrri)の全機能 (顧客、見積書、請求書、クレジットノート、支払いスケジュール、前受金、支払い、Webhook)を、 あらゆる MCP クライアントから利用できます。
🇫🇷 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 種類あり、次の順で優先されます。
- 開発者クライアント —
HENRRI_CLIENT_IDとHENRRI_CLIENT_SECRETをPOST /v1/users/authenticateに送信して交換し、POST /v1/users/refresh-tokenで更新します。 - API ユーザー —
HENRRI_USERNAMEとHENRRI_PASSWORDを使用します。POST /v1/users/tokenで OAuth2 のpasswordグラントを使います(サンドボックスから提供される認証情報はこちらです。例:[email protected])。 - 発行済みトークン —
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_PASSWORD | API ユーザーです。Docker シークレットには HENRRI_PASSWORD_FILE を使用します。 | |
HENRRI_CLIENT_ID / HENRRI_CLIENT_SECRET | または開発者クライアントです。HENRRI_CLIENT_SECRET_FILE も使用できます。 | |
HENRRI_ACCESS_TOKEN | またはベアラートークンです。更新されません。 | |
HENRRI_ENVIRONMENT | production | production または sandbox(staging)です。 |
HENRRI_BASE_URL | 環境ごと | API ルートを上書きします。 |
HENRRI_TOOLSETS | すべて | account,customers,documents,catalog,payments,revenues,webhooks |
HENRRI_READ_ONLY | 0 | 1 にすると、readOnlyHint ではないツールをすべて非表示にします。 |
HENRRI_TIMEOUT_SECS | 30 | リクエストごとのタイムアウトです。 |
HENRRI_PDF_TIMEOUT_SECS | 120 | オンデマンドで生成する PDF ルートのタイムアウトです。 |
HENRRI_MAX_RETRIES | 3 | レートリミッター、503、処理中の確定に対する再試行回数です。 |
HENRRI_DOWNLOAD_DIR | ユーザーごとのキャッシュ | PDF の保存先です(~/Library/Caches/mcp-henrri/downloads、~/.cache/…、%LOCALAPPDATA%\…)。0700 で作成され、他のユーザーが書き込める場合は拒否されます。共有一時ディレクトリへのフォールバックはありません。 |
HENRRI_WEBHOOK_SECRET | Henrri の Webhook 設定にある署名シークレットです。 | |
HENRRI_HTTP_BIND | stdio の代わりにこのアドレスで HTTP を提供します(--http と同じです)。 | |
HENRRI_HTTP_TOKEN | HTTP トランスポートで必要なベアラートークンです。ループバック以外では必須です。 | |
HENRRI_LOG | info | ログフィルターです。ログは 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_documents | R | GET /v1/documents — 種類、状態、期間、検索、min_id |
list_documents_table | R | GET /v1/documents/with-selected-fields |
create_document | W | POST /v1/documents — 空の下書き |
get_document | R | GET /v1/documents/{id} |
get_document_with_all | R | GET /v1/documents/{id}/with-all |
get_document_all_included | R | GET /v1/documents/{id}/all-included |
update_document | W | PUT /v1/documents/{id} — 部分更新、マージ |
delete_document | D | DELETE /v1/documents/{id} |
finalize_document | D | POST /v1/documents/{id}/finalize — 8 または 2 クレジット |
validate_quotation | W | POST /v1/documents/{id}/validate — 2 クレジット、confirm が必要 |
transform_quote_to_invoice | W | POST /v1/documents/{id}/transform-to-invoice |
get_document_tax_details | R | GET /v1/documents/{id}/tax-details |
get_document_display | R | GET /v1/documents/{id}/display |
get_payment_terms_display | R | GET /v1/documents/{id}/paymenttermsdisplay |
set_payment_terms_display | W | PUT /v1/documents/{id}/paymenttermsdisplay — 部分更新 |
list_document_payment_milestones | R | GET /v1/documents/{documentId}/paymentmilestones |
get_document_pdf | R | GET /v1/documents/{id}/pdf — ディスクに保存、Factur-X オプション |
create_document_pdf_url | W | POST /v1/documents/{id}/pdf/url |
download_document_pdf_file | R | GET /v1/documents/{id}/pdf/files/{guid} |
next_quote_batch | W | GET /v1/documents/next-quote-batch — サーバー側のカーソルを進めます |
list_document_types | R | GET /v1/documenttypes |
list_document_lines | R | GET /v1/documents/{documentId}/lines |
add_document_line | W | POST /v1/documents/{documentId}/lines — kind を対応する種類 ID に解決 |
get_document_line | R | GET /v1/documents/{documentId}/lines/{id} |
update_document_line | W | PUT /v1/documents/{documentId}/lines/{id} — 部分更新、マージ |
delete_document_line | D | DELETE /v1/documents/{documentId}/lines/{id} |
move_document_line | W | POST /v1/documents/{documentId}/lines/{id}/move |
list_document_line_types | R | GET /v1/documentlinetypes |
payments — マイルストーン、前受金、支払い
| ツール | ルート | |
|---|---|---|
list_payment_milestones | R | GET /v1/paymentmilestones — 支払い済み、期限超過、ドキュメント |
list_unpaid_milestones_table | R | GET /v1/paymentmilestones/with-selected-fields |
create_payment_milestone | W | POST /v1/paymentmilestones |
get_payment_milestone | R | GET /v1/paymentmilestones/{id} |
update_payment_milestone | W | PUT /v1/paymentmilestones/{id} — 部分更新 |
delete_payment_milestone | D | DELETE /v1/paymentmilestones/{id} |
pay_payment_milestone | W | POST /v1/paymentmilestones/{id}/pay — confirm が必要 |
pay_payment_milestones | W | POST /v1/paymentmilestones/pay — confirm が必要 |
get_milestone_payment | R | GET /v1/paymentmilestones/{id}/payment |
create_deposit_request | W | POST /v1/paymentmilestones/{id}/deposit-request |
create_deposit_settlement | W | POST /v1/paymentmilestones/{id}/deposit-settlement |
cancel_deposit | D | DELETE /v1/paymentmilestones/{id}/deposit |
list_payment_modes | R | GET /v1/paymentmodes |
list_payments | R | GET /v1/payments |
get_payment | R | GET /v1/payments/{id} |
list_payment_settled_milestones | R | GET /v1/payments/{id}/milestones |
customers — 顧客と連絡先
| ツール | ルート | |
|---|---|---|
list_customers | R | GET /v1/customers |
list_customers_table | R | GET /v1/customers/with-selected-fields |
list_best_customers | R | GET /v1/customers/best-sales |
list_last_used_customers | R | GET /v1/customers/last-used |
create_customer | W | POST /v1/customers — 連絡先ルールと SIRET/BCE を最初に確認 |
get_customer | R | GET /v1/customers/{id} |
update_customer | W | PUT /v1/customers/{id} — 部分更新、マージ |
delete_customer | D | DELETE /v1/customers/{id} |
get_customer_address | R | GET /v1/customers/{id}/address |
list_customer_payment_milestones | R | GET /v1/customers/{id}/paymentmilestones |
list_customer_contacts | R | GET /v1/customers/{id}/contacts |
add_customer_contact | W | POST /v1/customers/{id}/contacts |
get_customer_contact | R | GET /v1/customers/{id}/contacts/{contactId} |
update_customer_contact | W | PUT /v1/customers/{id}/contacts/{contactId} — 部分更新 |
delete_customer_contact | D | DELETE /v1/customers/{id}/contacts/{contactId} |
catalog — 品目、カテゴリ、テキスト品目、単位
| ツール | ルート | |
|---|---|---|
list_items | R | GET /v1/items |
list_items_table | R | GET /v1/items/with-selected-fields |
list_most_used_items | R | GET /v1/items/most-used |
list_best_selling_items | R | GET /v1/items/best-sales |
create_item | W | POST /v1/items |
get_item | R | GET /v1/items/{id} |
update_item | W | PUT /v1/items/{id} — 部分更新、マージ |
delete_item | D | DELETE /v1/items/{id} |
list_item_categories | R | GET /v1/itemcategories |
list_text_items | R | GET /v1/textitems |
create_text_item | W | POST /v1/textitems |
get_text_item | R | GET /v1/textitems/{id} |
update_text_item | W | PUT /v1/textitems/{id} — 部分更新 |
delete_text_item | D | DELETE /v1/textitems/{id} |
list_units | R | GET /v1/units |
create_unit | W | POST /v1/units |
get_unit | R | GET /v1/units/{id} |
アカウント、売上、Webhook
| ツール | ルート | |
|---|---|---|
ping | R | GET /v1/secures/hello-world |
whoami | R | GET /v1/users/me |
get_user | R | GET /v1/users/{id} |
get_user_address | R | GET /v1/users/{id}/address |
get_my_company | R | GET /v1/users/companies |
get_company | R | GET /v1/companies/{id} |
get_company_address | R | GET /v1/companies/{id}/address |
get_api_usage | R | X-Credits-* ヘッダーと X-RateLimit-* ヘッダー |
get_yearly_revenue | R | GET /v1/revenues/{year} |
get_monthly_revenue | R | GET /v1/revenues/{year}/months |
list_webhook_event_types | R | 仕様に記載された12種類のWebhookイベントとテスト用ping |
verify_webhook_signature | R | {timestamp}.{rawBody} の HMAC-SHA256、定時間比較 |
list_received_webhook_events | R | /webhooks で受信した配信(HTTP トランスポート) |
POST /v1/users/authenticate と POST /v1/users/refresh-token はツールではありません。OAuth2 トークンエンドポイントの POST /v1/users/token と同様に、クライアントが直接呼び出します。
リソースとプロンプト
| リソース | |
|---|---|
henrri://me | ユーザーと会社。 |
henrri://reference | ドキュメントの種類、行の種類、支払い方法、品目カテゴリー、単位。 |
henrri://usage | 使用済みクレジットと残りのクレジット、レート制限。 |
henrri://webhooks/events | Webhook イベントのカタログ。 |
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
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。