Rein について
Reinは、有料コンテンツの取得前にAIエージェントのx402決済を支出ポリシーで確認するMCPサーバーです。決済の制御や記録を必要としつつ、ポリシー管理権限をサーバーに与えたくない運用者向けです。
主な機能
- 01ポリシーに基づくx402取得
- 02決済レシートと精算状況
- 03エージェントのポリシーと支出状況
- 04人による対応待ちの確認
- 05停止監視用ハートビート
活用シーン
- 01有料URLへのエージェント支出の制限
- 02決済判断と精算状況の確認
- 03人の承認待ち決済の追跡
MCP 対応
MCPクライアントに取得、状態、レシート、エスカレーション、ハートビートのツールを提供します。資金を移動できるのは取得ツールのみで、承認やポリシー管理の機能はありません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @reinconsole/mcpREIN_AGENT_FILEPath to the rein-agent.json written by `npx @reinconsole/init` (engine URL, agent id, API key, wallet).REIN_ENGINE_URLPolicy engine base URL. Required unless REIN_AGENT_FILE is set.REIN_AGENT_IDThe one agent this server speaks for. Required unless REIN_AGENT_FILE is set.REIN_ENGINE_API_KEYシークレットBearer key for the engine, ideally an evaluate key narrowed to this agent.REIN_PAYER_PRIVATE_KEYシークレットAgent wallet key. Omit for advisory mode: policy is checked, nothing is paid.REIN_NETWORK_PROFILEtestnet (default) or mainnet: which network's 402s this server will pay.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
@reinconsole/mcp
MCP サーバーとしての Rein ガードです。MCP 対応のハーネスを接続すると、そのエージェントは支出が管理されたフェッチを利用できます。x402 のペイウォールはすべて、1 セントも動く前にポリシーでチェックされ、レシートが発行され、可視化されます。
Rein は非カストディアルです。資金ではなく、エージェントの支出権限を管理します。
インストール
最も手早く始められるのは、無料のテストネットサンドボックスです。アカウントも登録も不要です。
npx @reinconsole/init
ホストされたエンジン上にスターターポリシー付きのエージェント(Base Sepolia、1 回あたりの上限額は $0.004)、少量のテスト用 USDC が入ったテストウォレット、および rein-agent.json を作成し、パスを埋め込んだ以下の設定を出力します。
{
"mcpServers": {
"rein": {
"command": "npx",
"args": ["-y", "@reinconsole/mcp"],
"env": { "REIN_AGENT_FILE": "/path/to/rein-agent.json" }
}
}
}
このファイルにはエンジン URL、エージェント ID、API キー、ウォレットが記載されるため、キーがコマンドラインや設定ファイルに保存されることはありません。サンドボックスの有効期間は 7 日間です。npx @reinconsole/init --claim を実行し、GitHub または Ethereum ウォレットでサインインすると、サンドボックスを維持できます。
独自のエンジン
ファイルの代わりに変数を使って、任意のポリシーエンジンを指定できます。
{
"mcpServers": {
"rein": {
"command": "npx",
"args": ["-y", "@reinconsole/mcp"],
"env": {
"REIN_ENGINE_URL": "http://127.0.0.1:8787",
"REIN_AGENT_ID": "agt_01J..."
}
}
}
}
これはアドバイザリーモードです。ペイウォールはポリシーに照らして評価され、報告されますが、支払いは一切行われません。許可された支払いを決済するには、REIN_PAYER_PRIVATE_KEY を追加してください。
npx -p @reinconsole/policy-engine rein-policy-engine を実行すると、エンジンがローカルの 127.0.0.1:8787 で起動します。エージェントの登録方法とポリシーの作成方法については、@reinconsole/policy-engine をご覧ください。
サーバーが起動すると、標準エラー出力に正確に 1 行だけ出力されます。ハーネスにはそれ以外何も表示されません。この行が表示されない場合、サーバーは起動しておらず、その前に出力された内容が原因です。
[rein-mcp] 0.2.0 ready on stdio for agt_01J... via http://127.0.0.1:8787 (advisory -- no payer configured)
環境
| 変数 | 必須 | 意味 |
|---|---|---|
REIN_AGENT_FILE | いいえ | npx @reinconsole/init が書き込む rein-agent.json へのパスです。以下の4つの値を提供します。変数が明示的に設定されている場合は、そのフィールドより優先されます。 |
REIN_ENGINE_URL | ファイルがない場合ははい | ポリシーエンジンのベース URL です。 |
REIN_AGENT_ID | ファイルがない場合ははい | このサーバーが代表する唯一のエージェントです。ツールの引数ではありません。 |
REIN_ENGINE_API_KEY | エンジンに認証がある場合 | エンジン用のベアラーシークレットです。 |
REIN_PAYER_PRIVATE_KEY | いいえ | エージェントのウォレットキーです。アドバイザリーモードでは省略してください。ポリシーは確認されますが、支払いは行われません。 |
REIN_NETWORK_PROFILE | いいえ | testnet(デフォルト)または mainnet です。このサーバーがどのネットワークの 402 に支払うかを指定します。もう一方のネットワークは、署名が生成される前に拒否されます。不明な値の場合、起動は拒否されます。 |
REIN_MCP_TASK_ID | いいえ | デフォルトのタスク帰属先です。タスクごとの予算で、このエージェントの作業に上限を設定できます。 |
REIN_MCP_ESCALATION_WAIT_MS | いいえ | 署名済みの承認を待つ間、ツール呼び出しを保留する時間です。デフォルトは 0 です。 |
REIN_MCP_MAX_BODY_BYTES | いいえ | モデルに返すレスポンスボディの上限です。デフォルトは 65536 です。 |
すべて起動時に固定されます。ツール呼び出しからアクセスできるものはありません。
エンジンではこの境界を設定できないため、REIN_NETWORK_PROFILE が用意されています。エンジンは Base と Base
Sepolia を同じチェーンとして扱うため、一方を許可するポリシーはもう一方も許可します。また、ベンダーの 402 によって、エージェントのキーがどちらのネットワークで支払うかが決まってしまいます。デフォルトは testnet です。そのため、mainnet の 402 に支払っていた 0.1.x のインストールは、プロファイルを意図的に mainnet に設定するまで、その支払いを拒否します。
HOSTED エンジンでは、REIN_ENGINE_API_KEY に、組織とともに発行され、この1つのエージェントに制限された evaluate キーを設定してください。
POST /v1/keys
{ "name": "claude-desktop", "scopes": ["evaluate"], "orgId": "org_01J...", "agentIds": ["agt_01J..."] }
デスクトップの設定ファイルに置かれたこのシークレットによる影響範囲は、これがすべてです。このエージェントのインテントを送信できますが、それ以外は何もできません。同じ組織内の別のエージェント、ポリシー、キー、他のテナントの情報にはアクセスできません。単一テナントのセルフホスト型エンジンでは、両方のフィールドを省略してください。キーは従来どおりの動作をします。
ツール
| ツール | 読み取り専用 | 回答する内容 |
|---|---|---|
rein_fetch | いいえ | ポリシーで許可されている場合にのみ支払い、URL を取得します。 |
rein_status | はい | このエージェントに適用されるルールと、それらに対する現在の状況を確認します。 |
rein_receipts | はい | 支払い内容と、その支払いが決済されたかどうかを確認します。 |
rein_escalations | はい | 人間の対応を待って保留されている支払いを確認します。 |
rein_heartbeat | いいえ | デッドマン監視用に、エージェントが稼働中であることを報告します。 |
資金を移動できるのは rein_fetch だけです。また、readOnlyHint のないツールもこれだけです。
権限の境界
このパイプの反対側にいるクライアントは、エージェントそのもの、つまり制御対象です。そのため、ツールが実行できるのは、エージェントが自身のフェッチ機能ですでに実行できることだけであり、エージェント自身の権限を広げることはできません。
エスカレーションの承認、ポリシーの編集、エージェントの一時停止や再開、API キーの発行、承認者の登録を行うツールは意図的に用意していません。Rein の承認は、登録済みの承認者キーによる決定への ed25519 署名です。ツール呼び出しは署名ではなく、署名の代わりとなるツールがあれば、送金を進める権限がパイプを保持するプロセスの手に渡ってしまいます。rein_escalations は設計上読み取り専用であり、テストではツールの一部ではなく全体を検証するため、権限を持つツールを追加すると、まずテストに失敗します。
また、1 つのサーバーが代弁するエージェントは、必ず 1 つだけです。呼び出し元がエージェント ID を選べるようにすると、エージェント単位のツール群が複数のエージェントを横断する管理 API になってしまいます。
支払いがブロックされた場合
ポリシーによる拒否は、ツールのエラーとして返されます。フェッチは実行されておらず、これを通常の結果として読み取ったモデルは、拒否の説明を要求したデータとして扱ってしまうためです。拒否の種類によって次に取るべき対応が変わるため、詳細も返されます。
DENIED— 最終的な拒否です。同じリクエストは、同じように拒否されます。ESCALATED— 人間による署名を待つ状態です。rein_escalationsをポーリングするか、次に進んでください。エージェントが呼び出せるものに、これを承認する手段はありません。ALLOWED_BUT_UNPAID— エラーではありません。ポリシーは許可しましたが、このサーバーはアドバイザリーモードで動作しているため、402 が未払いの状態で返されます。
プログラムからの使用
import { createReinMcpServer } from '@reinconsole/mcp';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
const server = createReinMcpServer({ engineUrl, agentId, payer });
await server.connect(new StdioServerTransport());
createToolContext と reinTools もエクスポートされているため、他のツールも提供するサーバーに、同じツールを組み込めます。
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。