コンテンツにスキップ
OmniRoute source

OmniRoute MCP Server Documentation (日本語)

ツール スコープ 説明
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 をサポート
ツール スコープ 説明
omniroute_cache_stats read:cache セマンティックキャッシュ、プロンプトキャッシュ、冪等性の統計
omniroute_cache_flush write:cache グローバル、またはシグネチャ/モデル別にキャッシュをフラッシュ
ツール スコープ 説明
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 圧縮を参照してください。

ツール スコープ 説明
omniroute_oneproxy_fetch read:proxies 1proxy マーケットプレイスから無料プロキシを取得(プロトコル/国/品質/件数のフィルターに対応)
omniroute_oneproxy_rotate read:proxies 指定した戦略(random / quality / sequential)で次に利用可能なプロキシを取得
omniroute_oneproxy_stats read:proxies プールの統計、同期ステータス、プロトコル別および国別の分布

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 タイムスタンプによる絞り込みも可能

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 最近のスキル実行履歴を一覧表示

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を参照してください。

上記のMCPツール一覧(countUniqueMcpTools()で算出された110個の一意なツール)は、意図的に ランタイムのルーティング、キャッシュ、圧縮、メモリ、スキル、プロキシ、コンテキストソース操作に限定されています。v3.8.0では、 隣接する2つのフレームワークがMCPサーバーとともに提供されており、それぞれ個別にドキュメント化されています。

クラウドエージェントは、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。

ガードレールは、チャットパイプライン内で適用される実行前後のフィルター(vision-bridge、pii-masker、prompt-injection)です。 MCPツール/ルート層に到達する前に実行され、構造化された違反情報を監査パイプラインに送出します。MCPツールとして呼び出されるものではありません。

ブロックされたように見えるMCP呼び出しをデバッグする際は、MCP監査ログ (scope_denied:*エントリ)とガードレールの監査証跡の両方を確認してください。リクエストは、 MCPスコープ適用層に到達する前にガードレールによって拒否される場合があります。


エンドポイント メソッド 説明 認証
/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を返します。


MCP ツールは、呼び出し元からスコープ文字列を読み取ります。このチェックは、3つの独立した名前空間のうちの1つです。あるチェッカーがパスしても、他のチェッカーがパスするとは限りません。ルールは3つのスコープ名前空間にあります。ツールカタログはMCPツールスコープにあります。

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 そのランクを必要とする管理ルートのメソッドとパス

各資格情報のミントは、管理認証で説明されています。

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にフォールスルーします。

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 の入力ではありません。

スコープの強制は 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" がタグ付けされます。

説明の圧縮では各ツールのメタデータを縮小しますが、ツール数の削減ではさらに一歩進め、通知するツールの_数そのもの_を減らします。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() を使用すると、削減前後のマニフェストのトークンコストを比較できます。


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 件)

OmniRoute ソースコード (a58000c7685f)

HagiCode

HagiCode は構造化ワークフロー、マルチエージェント実行、Hero Dungeon ビューを備えたエージェント型コーディングワークスペースです。

よりスマートで速く、楽しいエージェント型ワークフローで、使いやすいソフトウェアを形にします。

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