OmniRoute MCP Server Documentation (日本語)
必須ツール(14)— フェーズ 1
Section titled “必須ツール(14)— フェーズ 1”| ツール | スコープ | 説明 |
|---|---|---|
omniroute_get_health |
read:health |
稼働時間、メモリ、サーキットブレーカー、レート制限、キャッシュ統計 |
omniroute_list_combos |
read:combos |
設定済みのすべてのコンボと戦略(メトリクスは任意) |
omniroute_get_combo_metrics |
read:combos |
特定のコンボのパフォーマンスメトリクス |
omniroute_switch_combo |
write:combos |
コンボを有効化または無効化 |
omniroute_create_combo |
write:combos |
既存のコンボ API を通じて検証済みのコンボを作成 |
omniroute_check_quota |
read:quota |
使用済み/合計クォータ、残量の割合、リセット時刻、トークンの状態 |
omniroute_route_request |
execute:completions |
OmniRoute のルーティングを通じてチャット補完を送信 |
omniroute_cost_report |
read:usage |
期間別(セッション/日/週/月)のコストレポート |
omniroute_list_models_catalog |
read:models |
機能、ステータス、価格を含む完全なモデルカタログ |
omniroute_radar_catalog |
read:radar |
ローカルで署名された Radar カタログ(プロバイダー/ファミリーによるフィルターは任意) |
omniroute_tool_search |
read:tools |
登録済みの MCP カタログからツールを検索 |
omniroute_web_search |
execute:search |
設定済みの検索プロバイダーを通じて Web を検索。X/Twitter は対象外。 |
omniroute_x_search |
execute:search |
xAI/SuperGrok を通じて X を検索。または、Xquik API の結果には xquik-search を選択。選択したバックエンドの認証情報が必要。 |
omniroute_web_fetch |
execute:search |
設定済みの取得プロバイダーを通じて Web コンテンツを取得 |
高度なツール (11) — フェーズ 2
Section titled “高度なツール (11) — フェーズ 2”| ツール | スコープ | 説明 |
|---|---|---|
omniroute_simulate_route |
read:health, read:combos |
フォールバックツリーを使用したドライランのルーティングシミュレーション |
omniroute_set_budget_guard |
write:budget |
劣化/ブロック/アラートのアクションを備えたセッション予算ガード |
omniroute_set_routing_strategy |
write:combos |
実行時にコンボ戦略(優先順位/重み付き/自動など)を更新 |
omniroute_set_resilience_profile |
write:resilience |
aggressive/balanced/conservative のレジリエンスプリセットを適用 |
omniroute_test_combo |
execute:completions, read:combos |
実際のアップストリーム呼び出しを使用して、コンボ内のすべてのプロバイダーをライブテスト |
omniroute_get_provider_metrics |
read:health |
p50/p95/p99 レイテンシーおよびサーキットブレーカーの状態を含むプロバイダー別メトリクス |
omniroute_best_combo_for_task |
read:combos, read:health |
予算/レイテンシーの制約に基づき、タスク種別ごとにコンボを推奨 |
omniroute_explain_route |
read:health, read:usage |
リクエストが特定のプロバイダーにルーティングされた理由を説明(スコアリング要因+フォールバック) |
omniroute_get_session_snapshot |
read:usage |
完全なセッションスナップショット:コスト、トークン、上位モデル/プロバイダー、エラー、予算ガード |
omniroute_db_health_check |
read:health, write:resilience |
壊れたコンボ参照/孤立行などのデータベースドリフトを診断(およびオプションで自動修復) |
omniroute_sync_pricing |
pricing:write |
外部ソース(LiteLLM)から料金データを同期。dryRun をサポート |
キャッシュツール (2)
Section titled “キャッシュツール (2)”| ツール | スコープ | 説明 |
|---|---|---|
omniroute_cache_stats |
read:cache |
セマンティックキャッシュ、プロンプトキャッシュ、冪等性の統計 |
omniroute_cache_flush |
write:cache |
グローバル、またはシグネチャ/モデル別にキャッシュをフラッシュ |
圧縮ツール (13)
Section titled “圧縮ツール (13)”| ツール | スコープ | 説明 |
|---|---|---|
omniroute_compression_status |
read:compression |
圧縮設定、分析サマリー、キャッシュ考慮型の統計(analytics.mcpDescriptionCompression メタデータを含む) |
omniroute_compression_configure |
write:compression |
圧縮モード、しきい値、目標比率、システムプロンプトの保持、MCP 説明圧縮の切り替えを設定 |
omniroute_set_compression_engine |
write:compression |
アクティブなエンジン(off/caveman/rtk/stacked)と Caveman/RTK の強度を選択 |
omniroute_list_compression_combos |
read:compression |
名前付き圧縮コンボとそのエンジンパイプラインを一覧表示 |
omniroute_compression_combo_stats |
read:compression |
圧縮コンボおよびエンジン別にグループ化された分析 |
omniroute_ccr_store |
write:compression |
呼び出し元ごとに分離されたコンテンツを、容量制限付きのインメモリ CCR ストアに保存し、マーカーと ccr:// 参照を返す |
omniroute_ccr_retrieve |
read:compression |
CCR コンテンツを完全取得、または先頭、末尾、行、grep、統計モードで取得 |
omniroute_ccr_inspect |
read:compression |
コンテンツを返さずに、呼び出し元が所有する CCR メタデータを検査 |
omniroute_ccr_list |
read:compression |
呼び出し元が所有する CCR ブロックのメタデータをページネーション付きで一覧表示 |
omniroute_ccr_delete |
write:compression |
呼び出し元が所有する CCR ブロックを削除 |
omniroute_ccr_stats |
read:compression |
呼び出し元スコープのメモリ使用量、ライフサイクルカウンター、ストア制限を報告 |
omniroute_rtk_discover |
read:compression |
オプトインされた RTK 出力サンプル内の繰り返しノイズを検出 |
omniroute_rtk_learn |
read:compression |
オプトインされたサンプルからレビュー可能な RTK フィルタードラフトを生成 |
CCR エントリはインメモリ専用であり、再起動すると消失します。各ブロックの上限は 2 MiB、各 プリンシパルの上限は 16 MiB、グローバルストアの上限は 64 MiB です。エントリのデフォルト TTL は 24 時間(最大 7 日間)です。MCP による完全取得は 256 KiB に制限されます。それより大きいブロックも、 範囲指定モードおよび grep モードで引き続き取得できます。保存、取得、一覧表示、検査、削除、統計は、 認証済み API キーのプリンシパルごとに分離されます。監査レコードにはハッシュとサイズのメタデータのみが含まれ、コンテンツは含まれません。
omniroute_compression_status は、MCP の説明圧縮を
analytics.mcpDescriptionCompression の下に個別に報告します。これらの値は、MCP で一覧取得可能な
説明(tools、prompts、resources、resourceTemplates)のメタデータサイズ推定値です。プロバイダーの使用量
記録ではなく、source: "mcp_metadata_estimate" としてマークされます。
MCP アクセシビリティツリーフィルター (v3.8.0)
Section titled “MCP アクセシビリティツリーフィルター (v3.8.0)”上記の圧縮ツールとは別に、OmniRoute には、MCP のブラウザ/アクセシビリティツールのツール結果をエージェントへ返す前に圧縮する、実行後フィルターが含まれています。このフィルター自体はツールではありません。冗長なアクセシビリティツリーまたはブラウザスナップショットのテキスト(2,000文字以上)を含む任意のツール結果に対して透過的に実行されます。
主な動作:
- 30行以上連続して繰り返される兄弟行を、先頭+末尾の要約にまとめる
- Playwright/computer-use に必要な
[ref=eXX]アンカーを保持する - サイズが過大なテキスト(50,000文字超)を、ナビゲーションヒント付きで強制的に切り詰める
- 想定削減率: ブラウザスナップショットのペイロードで 60~80%
設定: グローバル設定の compression.mcpAccessibility(マイグレーション 056)。
実装: open-sse/services/compression/engines/mcpAccessibility/。
完全なドキュメント: 圧縮エンジン — MCP アクセシビリティツリーフィルター。
これらのツールの基盤となるランタイム圧縮モデルについては、圧縮エンジンおよびRTK 圧縮を参照してください。
1Proxy ツール (3)
Section titled “1Proxy ツール (3)”| ツール | スコープ | 説明 |
|---|---|---|
omniroute_oneproxy_fetch |
read:proxies |
1proxy マーケットプレイスから無料プロキシを取得(プロトコル/国/品質/件数のフィルターに対応) |
omniroute_oneproxy_rotate |
read:proxies |
指定した戦略(random / quality / sequential)で次に利用可能なプロキシを取得 |
omniroute_oneproxy_stats |
read:proxies |
プールの統計、同期ステータス、プロトコル別および国別の分布 |
メモリツール (3)
Section titled “メモリツール (3)”open-sse/mcp-server/tools/memoryTools.ts で定義されています。認証/スコープは標準の MCP スコープパイプラインを通じて適用されます。
| ツール | スコープ | 説明 |
|---|---|---|
omniroute_memory_search |
read:memory |
トークン予算を適用し、クエリ/タイプ/API キーでメモリを検索 |
omniroute_memory_add |
write:memory |
新しいメモリエントリ(factual / episodic / procedural / semantic)を追加 |
omniroute_memory_clear |
write:memory |
API キーに関連するメモリを消去。タイプまたは olderThan タイムスタンプによる絞り込みも可能 |
スキルツール (4)
Section titled “スキルツール (4)”open-sse/mcp-server/tools/skillTools.ts で定義されています。src/lib/skills/registry と src/lib/skills/executor を基盤として使用します。
| ツール | スコープ | 説明 |
|---|---|---|
omniroute_skills_list |
read:skills |
登録済みスキルを一覧表示。API キー、名前、または有効状態による任意の絞り込みが可能 |
omniroute_skills_enable |
write:skills |
ID を指定して特定のスキルを有効化または無効化 |
omniroute_skills_execute |
execute:skills |
指定された入力でスキルを実行し、実行記録を返す |
omniroute_skills_executions |
read:skills |
最近のスキル実行履歴を一覧表示 |
Notion コンテキストソース (6)
Section titled “Notion コンテキストソース (6)”open-sse/mcp-server/tools/notionTools.ts で定義されています。トークンは src/lib/db/notion.ts を介して key_value テーブルに保存されます。REST クライアントは src/lib/notion/api.ts にあります。設定 API は src/app/api/settings/notion/route.ts にあります。ダッシュボード UI は src/app/(dashboard)/dashboard/endpoint/components/NotionSourceCard.tsx にあります。
Endpoint ダッシュボードの コンテキストソース タブ、または REST API を使用して Notion インテグレーショントークンを設定します。
# トークンを設定curl -X POST http://localhost:20128/api/settings/notion \ -H "Content-Type: application/json" \ -d '{"token": "ntn_..."}'
# ステータスを確認curl http://localhost:20128/api/settings/notion
# 接続を解除curl -X DELETE http://localhost:20128/api/settings/notion| ツール | スコープ | 説明 |
|---|---|---|
notion_search |
read:notion |
すべてのページとデータベースを対象に全文検索 |
notion_get_page |
read:notion |
ID を指定してページとそのプロパティを取得 |
notion_list_block_children |
read:notion |
ページまたはブロックの子ブロックを一覧表示 |
notion_query_database |
read:notion |
フィルター、並べ替え、ページネーションを使用してデータベースを照会 |
notion_get_database |
read:notion |
ID を指定してデータベーススキーマを取得 |
notion_append_blocks |
write:notion |
親ブロックに子ブロックを追加(1 リクエストあたり最大 100 個) |
エージェントスキルカタログツール(3)
Section titled “エージェントスキルカタログツール(3)”open-sse/mcp-server/tools/agentSkillTools.ts で定義されています。src/lib/agentSkills/catalog を基盤としています。これらのツールは、45件のエージェントスキルドキュメントカタログをMCPクライアントおよび外部エージェントに公開します。スコープ:read:catalog。
| ツール | スコープ | 説明 |
|---|---|---|
omniroute_agent_skills_list |
read:catalog |
45件のエージェントスキルをすべて一覧表示します。オプションでcategory(api|cli)およびareaフィルターを指定でき、メタデータとカバレッジを返します |
omniroute_agent_skills_get |
read:catalog |
正規idを使用して、単一スキルの完全なメタデータとSKILL.mdの内容を取得します |
omniroute_agent_skills_coverage |
read:catalog |
カバレッジ統計:23件のAPI、21件のCLI、1件のconfigスキルのうち、カタログ総数に対してファイルシステム上にSKILL.mdファイルが存在する数を示します |
完全なカタログと外部エージェントによる利用方法については、AGENT-SKILLS.mdを参照してください。
関連フレームワーク(v3.8.0)
Section titled “関連フレームワーク(v3.8.0)”上記のMCPツール一覧(countUniqueMcpTools()で算出された110個の一意なツール)は、意図的に
ランタイムのルーティング、キャッシュ、圧縮、メモリ、スキル、プロキシ、コンテキストソース操作に限定されています。v3.8.0では、
隣接する2つのフレームワークがMCPサーバーとともに提供されており、それぞれ個別にドキュメント化されています。
クラウドエージェント
Section titled “クラウドエージェント”クラウドエージェントは、LLMプロバイダーに使用されるものと同じ接続モデルを通じて
OmniRouteに統合された、プロセス外のAIコーディングエージェント(codex-cloud、cursor-cloud、devin、jules)です。これらは
独自のRESTインターフェース(/api/v1/agents/*)を介して公開され、MCPツールカタログには含まれません
— クラウドエージェントを呼び出してもMCPスコープは消費されません。
- 実装:
src/lib/cloudAgent/(registry.ts、agents/codex.ts、agents/cursor.ts、agents/devin.ts、agents/jules.ts)。 - ライフサイクル:
createTask、getStatus、approvePlan、sendMessage、listSources。 - ドキュメント:docs/frameworks/CLOUD_AGENT.md。
ガードレール
Section titled “ガードレール”ガードレールは、チャットパイプライン内で適用される実行前後のフィルター(vision-bridge、pii-masker、prompt-injection)です。 MCPツール/ルート層に到達する前に実行され、構造化された違反情報を監査パイプラインに送出します。MCPツールとして呼び出されるものではありません。
- 実装:
src/lib/guardrails/。 - ドキュメント:docs/security/GUARDRAILS.md。
ブロックされたように見えるMCP呼び出しをデバッグする際は、MCP監査ログ
(scope_denied:*エントリ)とガードレールの監査証跡の両方を確認してください。リクエストは、
MCPスコープ適用層に到達する前にガードレールによって拒否される場合があります。
REST APIエンドポイント
Section titled “REST APIエンドポイント”| エンドポイント | メソッド | 説明 | 認証 |
|---|---|---|---|
/api/mcp/status |
GET |
サーバー状態:ハートビート、HTTPトランスポートの状態、監査アクティビティの概要 | 管理(セッション/管理者) |
/api/mcp/tools |
GET |
ツールカタログ(名前、説明、スコープ、フェーズ、ソースエンドポイント) | 管理 |
/api/mcp/sse |
GET / POST |
SSEトランスポートエンドポイント(mcpEnabled + mcpTransport === "sse"によって制御) |
APIキー + スコープ |
/api/mcp/stream |
POST/GET/DELETE |
ストリーミング可能なHTTPトランスポート(mcp-session-idヘッダーを使用し、DELETEでセッションを終了) |
APIキー + スコープ |
/api/mcp/audit |
GET |
mcp_tool_auditからの監査ログエントリ(フィルター:limit、offset、tool、success、apiKeyId) |
管理 |
/api/mcp/audit/stats |
GET |
集計された監査統計(totalCalls、successRate、avgDurationMs、上位ツール) |
管理 |
ソースファイル:src/app/api/mcp/{status,tools,sse,stream,audit,audit/stats}/route.ts。
SSEとストリーミング可能なHTTPトランスポートはどちらも、設定でMCPサーバーが有効化(mcpEnabled)され、適切なmcpTransportが選択されるまでブロックされます。誤ったトランスポートが設定されている場合、ルートは設定を切り替えるためのヒントとともにHTTP 400を返します。
認証とスコープ
Section titled “認証とスコープ”MCP ツールは、呼び出し元からスコープ文字列を読み取ります。このチェックは、3つの独立した名前空間のうちの1つです。あるチェッカーがパスしても、他のチェッカーがパスするとは限りません。ルールは3つのスコープ名前空間にあります。ツールカタログはMCPツールスコープにあります。
3つのスコープ名前空間
Section titled “3つのスコープ名前空間”APIキーのmanage、MCPツールのread:compression、oma_live_…アクセストークンのreadは、それぞれ異なる許可です。readアクセストークンをミューティング管理ルートに送信する呼び出し元は、HTTP 403 Access token scope 'read' is insufficient; 'write' required.を受け取ります。このランクはscopeSatisfiesです。これはMCPテーブルを参照せず、MCPマッチャーもこれを参照しません。
| 名前空間 | 資格情報 | チェッカー | 許可されるもの |
|---|---|---|---|
| APIキー管理 | api_keys.scopes |
hasManageScope |
そのBearerキーの管理REST |
| APIキー追加 | 同じ配列、正確な文字列1つ | 下記のヘルパー | その1つの機能のみ |
| MCPツールスコープ | 同じ配列、それ以外はMCP _meta、それ以外は OMNIROUTE_MCP_SCOPES |
scopeMatches |
そのツール(強制が有効な場合) |
| アクセストークン | oma_live_… |
scopeSatisfies |
そのランクを必要とする管理ルートのメソッドとパス |
各資格情報のミントは、管理認証で説明されています。
APIキーのスコープ
Section titled “APIキーのスコープ”1つのapi_keys.scopes配列が2つのジョブに供給されます。これらは異なる関数を使用します。
管理REST。 manageとadminはMANAGEMENT_API_KEY_SCOPES (src/shared/constants/managementScopes.ts)のメンバーです。hasManageScopeは、そのキーの管理ルートを認証するものです。adminは、それらのルートで管理可能です。ここでのadminという単語は、アクセストークンのランクではなく、MCPツールスコープに展開されません。
追加文字列。 それぞれが正確なメンバーシップテストであり、それぞれがMANAGEMENT_API_KEY_SCOPESの外に留まります。
| スコープ | 許可されるもの
| mcp:connect | 非ループバックの/api/mcp/ LOCAL_ONLYカーブアウトのみ (hasMcpConnectOrManageScope)。manageまたはadminを持つキーもそのカーブアウトを通過します。 |
| self:usage | このキーのGET /api/v1/me/status (src/app/api/v1/me/status/route.ts)。POST /api/keysは作成時にこのスコープを追加します (normalizeSelfServiceScopesForCreate)。 |
| self:account-quota | そのステータスペイロード内のアップストリームアカウントクォータ (src/lib/usage/apiKeySelfService.ts)。ステータスルートは引き続きself:usageを必要とします。 |
| policy:bypass-provider-quota | このキーの推論呼び出しは、プロバイダー割り当てポリシーをスキップします (src/sse/handlers/chat.tsのhasProviderQuotaBypassScope)。 |
カタログはMCPツールスコープの下の表です。src/shared/constants/mcpScopes.tsのMCP_SCOPE_LISTをそのカタログとして扱わないでください。それは元の型付きサブセットです。後のツールは、その隣にさらにスコープを宣言します (read:notion、read:skills、read:local-corpus、および残りの表)。
open-sse/mcp-server/scopeEnforcement.tsのevaluateToolScopesは、すべての必須スコープが許可されたスコープのいずれかに一致する場合に呼び出しを許可します。
*は、すべての必須スコープに一致します。*で終わる許可スコープは、アスタリスクの前のプレフィックスで始まる必須スコープに一致します。read:*はread:compressionに一致します。- その他の許可スコープは、同一の必須文字列にのみ一致します。
スコープが["manage"]であるキーは、read:compressionのscopeMatchesに失敗します。同じ呼び出しは、admin、mcp:connect、read、writeが唯一の許可文字列である場合にも失敗します。MCPツールスコープには、末尾の*を超える階層はありません。
強制はOMNIROUTE_MCP_ENFORCE_SCOPES=trueでない限りオフです(デフォルトはfalse)。オフの場合、evaluateToolScopesは呼び出しを許可し、カタログをスキップします。オンの場合、HTTPはBearerキーのapi_keys.scopesをauthInfoとして使用します(キーごとのHTTPスコープバインディングを参照)。キーのスコープが解決されない場合、許可されたセットはMCP _meta、次にOMNIROUTE_MCP_SCOPESにフォールスルーします。
アクセストークンのスコープ
Section titled “アクセストークンのスコープ”oma_live_…トークン (src/lib/accessTokens/scopes.ts)は、read、write、またはadminを運びます。scopeSatisfiesはランクです。adminはwriteとreadをカバーし、writeはreadをカバーします。不明なスコープは何もカバーしません。
evaluateAccessTokenAuth (src/server/authz/accessTokenAuth.ts)は、そのランクをinferRequiredScope (src/server/authz/accessScopes.ts)と比較します。
GET、HEAD、OPTIONSはreadを必要とします。- その他のメソッドは
writeを必要とします。 ADMIN_SCOPE_PREFIXES内のパスは、すべてのメソッドに対してadminを必要とします。/api/mcpはこのリストにあるため、writeアクセストークンはMCP HTTPサーフェスを呼び出すことができません。ADMIN_MUTATION_PREFIXES内のパスは、ミューテーションに対してのみadminを必要とします。
PATCH /api/keys/{id} はミューテーションであり、それらの管理者リストには含まれていないため、read トークンは 403 Access token scope 'read' is insufficient; 'write' required. を受け取ります。write または admin アクセストークンはそのルートを満たします。ダッシュボード JWT、ループバック CLI の machine-id トークン、および manage または admin を持つ API キーは、他のブランチを通り、このランクによって制限されません。
/api/mcp に対して scopeSatisfies を通過するアクセストークンは、管理ゲートをクリアしたにすぎません。ツール呼び出しは、引き続き API キーのスコープに対して scopeMatches を実行します。アクセストークンのランクは scopeMatches の入力ではありません。
MCPツールのスコープ
Section titled “MCPツールのスコープ”スコープの強制は open-sse/mcp-server/scopeEnforcement.ts に一元化されています。各ツールには特定のスコープが必要です。
| スコープ | ツール |
|---|---|
read:health |
get_health, get_provider_metrics, simulate_route, explain_route, best_combo_for_task, db_health_check |
read:combos |
list_combos, get_combo_metrics, simulate_route, best_combo_for_task, test_combo |
write:combos |
switch_combo, set_routing_strategy |
read:quota |
check_quota |
read:usage |
cost_report, get_session_snapshot, explain_route |
read:models |
list_models_catalog |
execute:completions |
route_request, test_combo |
execute:search |
web_search, x_search, web_fetch |
write:budget |
set_budget_guard |
write:resilience |
set_resilience_profile, db_health_check |
pricing:write |
sync_pricing |
read:cache |
cache_stats |
write:cache |
cache_flush |
read:compression |
compression_status, list_compression_combos, compression_combo_stats |
write:compression |
compression_configure, set_compression_engine |
read:proxies |
oneproxy_fetch, oneproxy_rotate, oneproxy_stats |
read:notion |
notion_search, notion_get_page, notion_list_block_children, notion_query_database, notion_get_database |
write:notion |
notion_append_blocks |
read:memory |
memory_search |
write:memory |
memory_add, memory_clear |
read:skills |
skills_list, skills_executions |
write:skills |
skills_enable |
execute:skills |
skills_execute |
read:catalog |
agent_skills_list, agent_skills_get, agent_skills_coverage |
read:tools |
omniroute_tool_search |
read:radar |
omniroute_radar_catalog |
read:gamification |
gamification_profile, gamification_rank, gamification_leaderboard, gamification_badges, gamification_servers, gamification_anomalies |
write:gamification |
gamification_invite, gamification_transfer |
read:plugins |
plugin_list, plugin_executions |
write:plugins |
plugin_scan, plugin_install, plugin_uninstall, plugin_activate, plugin_deactivate, plugin_configure |
read:obsidian |
13個の読み取りツール — obsidian_list_vault, obsidian_read_note, obsidian_search_simple, obsidian_search_structured, obsidian_get_periodic_note, obsidian_sync_status, … |
write:obsidian |
9個の書き込みツール — obsidian_write_note, obsidian_append_note, obsidian_patch_note, obsidian_move_note, obsidian_delete_note, obsidian_sync_trigger, … |
read:local-corpus |
local_corpus_search, local_corpus_read, local_corpus_status |
ワイルドカードスコープがサポートされています:read:*はすべての読み取りスコープを付与し、*は完全なアクセスを付与します。
mcp:connect — ルート機能の絞り込み (#7895)
Section titled “mcp:connect — ルート機能の絞り込み (#7895)”非ループバックからHTTP/SSE MCPトランスポート(/api/mcp/*)に到達するには、/api/mcp/ LOCAL_ONLYの特別許可(docs/security/ROUTE_GUARD_TIERS.mdを参照)が必要です。これまで、この特別許可は完全なmanage/adminスコープのAPIキーのみを受け入れていましたが、これはMCPとの通信のみを必要とする呼び出し元にとっては広すぎました。src/shared/constants/managementScopes.tsは現在MCP_CONNECT_SCOPE = "mcp:connect"をエクスポートしています。これは、SELF_USAGE_SCOPEと同じ前例を持つ、追加的で狭いスコープであり、src/server/authz/policies/management.tsにおける/api/mcp/バイパスのみを承認します。他の管理ルートアクセスは一切付与せず、意図的にMANAGEMENT_API_KEY_SCOPESから除外されています。manage/adminを持つキーは引き続き特別許可をそのまま通過します。mcp:connectは、リモートのMCP専用呼び出し元向けの低権限の代替手段であり、hasMcpConnectOrManageScope()を介してチェックされます。
キーごとのHTTPスコープバインディング (#7895)
Section titled “キーごとのHTTPスコープバインディング (#7895)”HTTP/SSEでは、open-sse/mcp-server/httpTransport.tsがresolveMcpCallerAuthInfo()(open-sse/mcp-server/httpAuthContext.ts)を介して呼び出し元の実際のapi_keys.scopesを解決し、MCP SDKのtransport.handleRequest(req, { authInfo })に渡すようになりました。これにより、各ツール呼び出しに到達するextra.authInfo.scopesは、Bearerキー自身のスコープを反映します。scopeEnforcement.tsのresolveCallerScopeContext()は、すでに_metaおよびOMNIROUTE_MCP_SCOPES環境フォールバックよりもauthInfoを優先していました。今回の変更は、これまでHTTP経由で供給されていなかった、その最初の最高優先度のソースにデータを投入するだけです。APIキーが解決されない場合(ヘッダーなし、無効なキー)、authInfoはundefinedのままであり、解決は既存のmeta/環境チェーンにそのままフォールバックします。これはOMNIROUTE_MCP_ENFORCE_SCOPESのデフォルトを反転させるものではありません。強制は依然として明示的に有効にする必要があります。この変更は、有効になった場合にキーごとのパスが優先されるようにするだけです。stdioには呼び出し元ごとのIDがないため(mcpCallerIdentity.tsを参照)、影響を受けません。これは_meta/環境フォールバックチェーンにとどまります。
| 変数 | デフォルト | 用途 |
|---|---|---|
OMNIROUTE_BASE_URL |
http://localhost:20128 |
MCP サーバーが OmniRoute の内部 API を呼び出す際に使用するベース URL |
OMNIROUTE_API_KEY |
(空) | 内部 API 呼び出しに Authorization: Bearer として転送される API キー |
OMNIROUTE_MCP_ENFORCE_SCOPES |
false("true" のみ有効化) |
有効にすると、必要なスコープがない場合はツール呼び出しを拒否し、監査ログに scope_denied:<reason> を記録 |
OMNIROUTE_MCP_SCOPES |
(空) | デフォルトで「利用可能」とみなされるスコープのカンマ区切り許可リスト(呼び出し元が独自のスコープを指定しない場合に使用) |
OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS |
(未設定 = オン) | 0/false/off/no に設定すると、登録時の MCP 説明圧縮を無効化 |
OMNIROUTE_MCP_DESCRIPTION_COMPRESSION |
(未設定 = オン) | 上記と同じ切り替え機能の代替エイリアス |
OMNIROUTE_MCP_FETCH_TIMEOUT_MS |
10000 |
内部管理情報の読み取り(ヘルス、レジリエンス、コンボ、クォータ、使用量)を中断するまでの時間 |
OMNIROUTE_MCP_UPSTREAM_TIMEOUT_MS |
60000 |
プロバイダーからの応答を待つホップ(route_request、web_search、web_fetch)を中断するまでの時間 |
MCP_TOOL_DENY |
(未設定 = フィルターなし) | tools/list から除外するツール名のカンマ区切りリスト(ツール数の削減 — 下記参照) |
MCP_TOOL_ALLOW |
(未設定 = フィルターなし) | 排他的に保持するツール名のカンマ区切りリスト(許可リストモード — 下記参照) |
DATA_DIR |
~/.omniroute |
ハートビートファイルは ${DATA_DIR}/runtime/mcp-heartbeat.json に書き込まれる |
MCP のツール、プロンプト、およびリソースのレジストリでは、クライアントに公開されるメタデータの量(したがってプロンプトのコンテキストコスト)を削減するため、登録時または一覧取得時に説明を圧縮できます。実装は open-sse/mcp-server/descriptionCompressor.ts にあり、createMcpServer() 内の compressMcpRegistryMetadata を介して MCP サーバーに組み込まれています。
- 圧縮では、構造的な内容が変更されないように保持対象ブロック(コードスパン、フェンス付きブロックなど)を抽出したうえで、Caveman ルールセット(
getRulesForContext("all", "full"))を使用して説明テキストを処理します。 - デプロイごとに、
key_value設定テーブルのcompression.mcpDescriptionCompressionEnabled値(デフォルト:有効)で切り替えられます。UI では Analytics → MCP description compression として表示されます。 - プロセス全体では、
OMNIROUTE_MCP_COMPRESS_DESCRIPTIONS=falseまたはOMNIROUTE_MCP_DESCRIPTION_COMPRESSION=falseのいずれかで切り替えられます。 - リアルタイム統計は、
analytics.mcpDescriptionCompression配下のomniroute_compression_statusを介して公開され、実際のプロバイダー使用量のレシートと区別するためにsource: "mcp_metadata_estimate"がタグ付けされます。
ツール数の削減(F4.3)
Section titled “ツール数の削減(F4.3)”説明の圧縮では各ツールのメタデータを縮小しますが、ツール数の削減ではさらに一歩進め、通知するツールの_数そのもの_を減らします。tools/list マニフェストで公開するツールを減らすことで、クライアントのモデルがツールカタログに対して支払うリクエストごとのトークンコスト(「レイヤー5」の圧縮)を削減します。実装は open-sse/mcp-server/toolCardinality.ts の純粋かつステートレスなフィルター(reduceToolManifest)であり、createMcpServer()(open-sse/mcp-server/server.ts)の登録ループに組み込まれています。
オプトイン方式で、デフォルトでは無効です。 このフィルターは、2つの環境変数のうち少なくとも1つが設定されている場合にのみ実行されます。どちらも設定されていない場合、110個のツールがすべて変更なしで通知されます。
| 変数 | モード |
|---|---|
MCP_TOOL_DENY |
ブラックリスト — tools/list から常に除外するツール名をカンマ区切りで指定 |
MCP_TOOL_ALLOW |
許可リスト — ツール名をカンマ区切りで指定し、指定したツールのみを残して、それ以外は除外 |
deny は allow より優先されます。名前はカンマで区切られ、前後の空白は除去され、空のエントリは無視されます。例:
# カタログから2つのツールを除外MCP_TOOL_DENY="omniroute_get_health,omniroute_list_combos" omniroute --mcp
# ルーティングとクォータのツールのみを通知(許可リストモード)MCP_TOOL_ALLOW="omniroute_route_request,omniroute_check_quota" omniroute --mcpフィルタリングされたツールの削除方法: 登録自体は常に成功します。その後、プロファイルによって拒否されたツールに対して、MCP SDKハンドル上で .disable() が呼び出されます。これにより、そのツールは tools/list に表示されなくなりますが、接続構成は維持されます(再登録せずに明確な有効化/無効化が可能です)。プロファイルパーサーは readMcpToolProfileFromEnv(process.env) で、両方の変数が空の場合は null(フィルタリングなし)を返します。
reduceToolManifest の背後にある、より高機能な ToolProfile の構造では、スコープの共通部分によるフィルタリング(allowScopes。read:* 形式のワイルドカードマッチングに対応)と、決定論的な maxTools 上限もサポートしています。ただし、この2つの設定には登録時に完全なマニフェストが必要であり、現時点では環境変数を通じて公開されていません(tools/list レベルのフックは、追跡中のフォローアップ項目です)。estimateManifestTokens() を使用すると、削減前後のマニフェストのトークンコストを比較できます。
ランタイムハートビート
Section titled “ランタイムハートビート”stdioトランスポートは、5秒ごとに稼働状態を ${DATA_DIR}/runtime/mcp-heartbeat.json に永続化します。ダッシュボード(/api/mcp/status)は、このファイルとPIDの稼働状態を読み取り、online を判定します。一方、HTTPトランスポートは、プロセス内の getMcpHttpStatus() から状態を報告します(ファイルへの書き込みはありません)。
ハートビートのスナップショットには、次の情報が含まれます:
{ "pid": 12345, "startedAt": "2026-05-13T12:34:56.000Z", "lastHeartbeatAt": "2026-05-13T12:35:01.000Z", "version": "1.8.1", "transport": "stdio", "scopesEnforced": false, "allowedScopes": [], "toolCount": 110}すべてのツール呼び出しは、open-sse/mcp-server/audit.ts によってSQLiteの mcp_tool_audit テーブルへ記録されます:
- ツール名、引数(ツールごとの
auditLevelに従ってハッシュ化/切り詰め)、結果 - 所要時間(ミリ秒)、成功/失敗フラグ、エラーメッセージ(該当する場合)
- APIキーハッシュ、タイムスタンプ
- スコープ拒否は、不足しているスコープのリストとともに
scope_denied:<reason>として記録
最近の呼び出しを確認するには、ダッシュボード、または /api/mcp/audit および /api/mcp/audit/stats RESTエンドポイントを使用してください。
| ファイル | 目的 |
|---|---|
open-sse/mcp-server/server.ts |
MCP サーバーファクトリ、stdio エントリーポイント、スコープ付きツール登録 |
open-sse/mcp-server/httpTransport.ts |
SSE + Streamable HTTP トランスポート(セッション管理) |
open-sse/mcp-server/scopeEnforcement.ts |
ツールスコープの評価と呼び出し元の解決 |
open-sse/mcp-server/audit.ts |
ツール呼び出しの監査ログ(mcp_tool_audit) |
open-sse/mcp-server/runtimeHeartbeat.ts |
stdio ハートビートライター(mcp-heartbeat.json) |
open-sse/mcp-server/descriptionCompressor.ts |
ツール/プロンプト/リソースレジストリ向けの説明圧縮 |
open-sse/mcp-server/schemas/tools.ts |
Zod スキーマ + ツールレジストリ(MCP_TOOLS、45 エントリ) |
open-sse/mcp-server/tools/advancedTools.ts |
フェーズ 2 + キャッシュ + 1proxy ツールハンドラー |
open-sse/mcp-server/tools/compressionTools.ts |
圧縮ツールハンドラー |
open-sse/mcp-server/tools/memoryTools.ts |
メモリツール定義(3 ツール) |
open-sse/mcp-server/tools/skillTools.ts |
スキルツール定義(4 ツール) |
open-sse/mcp-server/tools/notionTools.ts |
Notion コンテキストソースツール定義(6 ツール) |
open-sse/mcp-server/tools/gamificationTools.ts |
ゲーミフィケーションツール定義(8 ツール) |
open-sse/mcp-server/tools/pluginTools.ts |
プラグイン登録および管理ツール(8 ツール) |
src/app/api/mcp/status/route.ts |
/api/mcp/status エンドポイント |
src/app/api/mcp/tools/route.ts |
/api/mcp/tools エンドポイント |
src/app/api/mcp/sse/route.ts |
/api/mcp/sse SSE トランスポートルート |
src/app/api/mcp/stream/route.ts |
/api/mcp/stream Streamable HTTP トランスポートルート |
src/app/api/mcp/audit/route.ts |
/api/mcp/audit 監査ログクエリ |
src/app/api/mcp/audit/stats/route.ts |
/api/mcp/audit/stats 集約監査メトリクス |
src/lib/notion/api.ts |
Notion REST API クライアント(再試行、タイムアウト、エラー分類) |
src/lib/db/notion.ts |
Notion トークンの永続化(key_value テーブル) |
src/app/api/settings/notion/route.ts |
Notion 設定 API(GET/POST/DELETE) |
src/app/(dashboard)/dashboard/endpoint/components/NotionSourceCard.tsx |
Notion トークン管理 UI |
tests/unit/notion-api.test.ts |
Notion API クライアントテスト(7 件) |
tests/unit/notion-tools.test.ts |
Notion ツールのスコープ適用テスト(10 件) |
tests/unit/db/notion.test.mjs |
Notion DB モジュールテスト(3 件) |
HagiCode
HagiCode は構造化ワークフロー、マルチエージェント実行、Hero Dungeon ビューを備えたエージェント型コーディングワークスペースです。
よりスマートで速く、楽しいエージェント型ワークフローで、使いやすいソフトウェアを形にします。

- Smart構造化ワークフローは意図をアイデアから変更のリリースまで実行可能な道筋にします。
- Efficientマルチエージェントのワークフローで調査、実装、レビューを並行して進めます。
- FunHero Dungeon により長時間のコーディングを視覚的で協力的な体験にします。