IRL Gateway について
IRL Gateway は、AI エージェントと取引口座の間でポリシーを確認し、監査記録を残す MCP サーバーです。現物の成行注文に対応し、理由を改ざん検知可能なトレースに記録して、許可された注文と約定を照合します。
主な機能
- 01注文実行前の取引ポリシー確認
- 02理由のハッシュを取引トレースに封印
- 03許可された注文と約定の照合
- 04価格、残高、取引履歴の提供
- 05ローカルキルスイッチによる取引停止
活用シーン
- 01エージェントの取引対象と注文上限の制限
- 02取引理由と結果の確認
- 03ペーパーバランスを使った取引テスト
MCP 対応
取引ポリシー、市場データ、残高、注文実行、トレース取得のツールを MCP クライアントに提供します。注文はペーパー取引先または取引所へ送る前に、エージェントの権限に照らして確認されます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
uvx irl-gatewayIRL_BASE_URLYour IRL server, e.g. https://irl.example.comIRL_API_TOKENシークレットBearer token for the IRL serverIRL_AGENT_IDThe agent registered on IRL (its mandate)IRL_MODEL_HASHThe model hash the agent was registered with (64 hex)GATEWAY_BROKERpaper (default, live prices, no keys) or exchangePAPER_BALANCESStarting paper balances, e.g. USDT=1000ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
IRL Gateway
AI エージェントに、不正に使えない取引口座と、書き換えられないすべての判断の記録を与えます。
IRL Gateway は、AI エージェント(Claude、ChatGPT、または独自のエージェント)と取引所口座の間に位置するMCPサーバーです。エージェントが行うすべての注文は、IRL Engineを通過します。
- 実行前にポリシーを確認します。 IRL は、注文が取引所に送られる前に、エージェントの権限(有効なステータス、注文金額の上限、許可された資産と取引所)に照らして注文を確認します。権限の範囲外であれば、注文は行われません。
- 取引理由を封印します。 エージェントは、取引する理由を説明する必要があります。ゲートウェイは、その理由を取引の入力情報とともにハッシュ化し、IRL の改ざん検知可能なトレースに封印します。このトレースは毎日 Bitcoin にアンカーされます。平文はローカルジャーナルに保存されます。
- 意図と約定を照合します。 取引所で注文が約定した後、IRL は承認された内容と実行された内容を比較し、
MATCHEDまたはDIVERGENTを記録します。
問題が発生した場合、エージェントに許可されていた内容、エージェントが実行すると説明した内容、実際に起きたことを証明できます。
AI agent ── MCP ──> irl-gateway ──> IRL: authorize (policy + sealed rationale)
│
├──────> exchange: market order (client id = sealed intent)
│
└──────> IRL: bind fill -> MATCHED / DIVERGENT
ツール
| ツール | 機能 |
|---|---|
execute_trade(symbol, side, rationale, quantity | notional) | 資金を動かす唯一のツールです。承認 → 発注 → 紐付けを経由する現物成行注文です。IRL の trace_id と判定を含め、filled、denied、blocked、failed のいずれかを返します。 |
get_policy() | IRL が適用するエージェントの権限と、ローカルのキルスイッチの状態を返します。 |
get_quote(symbol) | ゲートウェイの取引所における最終価格を返します。 |
get_balances() | 利用可能な残高(ペーパー取引または取引所)を返します。 |
get_trace(trace_id) | IRL が封印した取引記録を返します。 |
list_recent_trades(limit) | ローカルジャーナルを返します。各取引の理由、コンテキストハッシュ、トレース ID、結果が含まれます。 |
エージェントが想定できる動作:
- フェイルクローズ。 IRL に接続できない場合、または IRL が意図を拒否した場合、注文は送信されません。
- キルスイッチ。 ファイル
~/.irl-gateway/KILLを作成すると、IRL を呼び出す前にすべての取引が拒否されます。再開するには、ファイルを削除してください。 - 約定を隠しません。 取引所で約定しても IRL への紐付けに失敗した場合、結果には約定が報告され、照合が必要であることが示されます。
- 封印された内容が送信されます。 IRL が注文を封印する前に、注文サイズは取引所の刻みに合わせて丸められ、最小注文数量を満たしているか確認されます。そのため、封印された数量がそのまま取引所に送られます。取引所が拒否する注文は、代わりに明確な理由とともにブロックされます。
クイックスタート(ペーパー取引、約1分)
uvx irl-gateway init
このコマンドを実行すると、norve.devから無料のペーパーティアトークンを取得し、スターター権限(BTC/USDT と ETH/USDT、1注文あたり最大 1,000 USDT、paper-binance)を設定してエージェントを登録します。認証情報は ~/.irl-gateway/agent.json に保存され、次の内容が表示されます。
- Claude Code 用の
claude mcp add irl-gateway ...の行、および - Claude Desktop、Cursor、または任意の MCP クライアント用の
mcpServersブロック。
いずれかを貼り付けてから、エージェントに get_policy を呼び出させ、初めてのペーパー取引を行うよう依頼してください。ペーパー取引の約定は、Binance の公開リアルタイム価格と、Binance の実際の注文サイズ規則に基づいてシミュレートされるため、取引所の API キーは不要です。
オプション:--name、--assets BTC/USDT,SOL/USDT、--max-notional 250、--contact [email protected](連絡先として)、--server(独自の IRL エンジン)。
無料プランの制限: ペーパー取引所のみ、トークンあたり最大 3 エージェント、1日あたり 500 件の承認です。実際の取引を行う場合や、制限なしで利用する場合は、エンジンをセルフホストするか、フルトークンを申請してください。
手動で設定する場合
curl -X POST https://norve.dev/irl/signup -H "Content-Type: application/json" -d '{"client_name": "my-claude-trader"}'
# -> {"token": "...", "tier": "paper", ...} (shown once)
curl -X POST https://norve.dev/irl/agents -H "Authorization: Bearer $IRL_API_TOKEN" -H "Content-Type: application/json" -d '{
"name": "my-claude-trader",
"model_hash_hex": "<sha256 of your agent config>",
"max_notional": 100,
"allowed_assets": ["BTC/USDT", "ETH/USDT"],
"allowed_venues": ["paper-binance"]
}'
次に、ゲートウェイを MCP クライアントに追加します。
{
"mcpServers": {
"irl-gateway": {
"command": "uvx",
"args": ["irl-gateway"],
"env": {
"IRL_BASE_URL": "https://norve.dev",
"IRL_API_TOKEN": "…",
"IRL_AGENT_ID": "<agent_id from registration>",
"IRL_MODEL_HASH": "<the same model_hash_hex>",
"AGENT_MODEL_ID": "claude-opus-5-5",
"PAPER_BALANCES": "USDT=1000"
}
}
}
}
| 変数 | デフォルト | 意味 |
|---|---|---|
IRL_BASE_URL, IRL_API_TOKEN | 必須 | IRL サーバーとベアラートークン |
IRL_AGENT_ID, IRL_MODEL_HASH | 必須 | 登録済みエージェントとそのモデルハッシュ |
AGENT_MODEL_ID | unspecified-model | 各トレースに記録されるモデル名(エージェントは取引ごとに上書きできます) |
AGENT_CONFIG_CHECKSUM | none | エージェントの設定の任意のチェックサム。各トレースに記録されます |
IRL_L2_MODE | off | IRL サーバーで Layer 2 のレジームバインディングが必要な場合は regime |
GATEWAY_BROKER | paper | paper または exchange |
EXCHANGE_ID | binance | 任意の ccxt 取引所 ID。ペーパートレードの価格ソースとしても使用されます |
EXCHANGE_API_KEY, EXCHANGE_API_SECRET | exchange の場合に必須 | |
EXCHANGE_TESTNET | true | 取引所のテストネットを使用します |
PAPER_BALANCES | USDT=1000 | ペーパー取引の開始残高(paper_state.json が存在するまでのみ使用され、その後はペーパーアカウントが再起動後も保持されます) |
IRL_GATEWAY_HOME | ~/.irl-gateway | ジャーナル(journal.jsonl)、キルスイッチ(KILL)、ペーパーアカウント(paper_state.json)の保存場所 |
IRL が認識する取引場所は、取引所 ID(binance)またはペーパートレードの場合は paper-<exchange> です。そのため、指令でペーパートレードを許可しつつ、実口座を拒否できます。
判断理由の記録方法
各取引で、ゲートウェイは判断理由、シンボル、売買の別、数量、基準価格、取引場所、モデル ID、クライアント注文 ID のコンテキストを作成します。そのコンテキストを正規化 JSON(キーをソートし、空白を含めない)として SHA-256 でハッシュ化し、prompt_version = "ctx-sha256:<hex>" として IRL に送信します。IRL はこれをトレースの reasoning_hash に記録します。
ジャーナルにはハッシュとともにコンテキスト全体が保存されるため、ジャーナルの行を保持する人は誰でもハッシュを再計算し、記録されたトレースと照合できます。IRL 自体が判断理由のテキストを見ることはありません。
開発
python -m venv .venv && .venv/bin/pip install -e ".[dev]"
pytest --cov=irl_gateway
ruff check src tests && black --check src tests && isort --check-only src tests && mypy src
ステータス
初期段階(0.1)です。現物市場の成行注文のみ対応しています。ペーパートレードと ccxt 取引所に対応しており、次は Alpaca に対応予定です。投資助言ではなく、戦略も含まれていません。ゲートウェイはエージェントの動作を制御・記録しますが、判断は行いません。
MIT ライセンスです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。