High Performance MCP Server について
High Performance MCP Serverは、TypeScriptとMCP v2 SDKで構築されたモジュール型サーバーです。ワークスペース、ネットワーク、診断、計算ツールへのアクセスを設定したいアプリケーション向けに、安全プロファイル、ワーカープール、キャッシュ、2種類のトランスポートを備えています。
主な機能
- 01安全プロファイルによるツール公開
- 02許可されたワークスペースの読み取り
- 03任意で有効化する保護付き編集とネットワークアクセス
- 04リクエストキャンセル対応のワーカープール
- 05LRUキャッシュと構造化ログ
活用シーン
- 01許可ディレクトリ内のファイル検索と読み取り
- 02必要に応じたワークスペースのテキスト編集
- 03保護機能を使った公開HTTP・HTTPSコンテンツの取得
- 04診断ツールによるサーバーメトリクスの確認
MCP 対応
MCP経由でツール、プロンプト、リソーステンプレート、プロファイル別の説明を公開します。stdioとStreamable HTTPに対応し、HTTPモードはローカルのループバックアドレスだけにバインドします。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
2掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| message | string | はい | エコーバックするメッセージ |
詳細
高性能 MCP サーバー
TypeScript と最新の MCP v2 SDK(@modelcontextprotocol/server)で構築された、高性能でモジュール式の Model Context Protocol(MCP)サーバーです。デフォルトで安全なセキュリティプロファイル、プロファイル対応のサーバー指示、モジュール式の MCP プロンプト、許可リスト方式のワークスペース検査とオプトイン方式のガード付きテキスト変更、SSRF 対策を強化したネットワークアクセス、Streamable HTTP、Stdio トランスポート、再利用可能なワーカースレッドプール、単一実行によるスタンピード保護を備えた本番環境向け LRU キャッシュ、構造化テレメトリーを備えています。
プロジェクトの状況:パブリックプレビュー(v0.5.0)
メモ
状況:
0.5.0パブリックプレビューです。 このパッケージは、デフォルトで安全な MCP ツール、読み取り専用のワークスペース検査、オプトイン方式のガード付きワークスペース変更とネットワークアクセス、ワーカーリクエストのキャンセル、正規化された進捗レポート、高性能なワーカー実行を提供します。Node.js >= 22.0.0 が必要です。互換性:新しい v0.5 オプションは追加機能です。
contextLines、maxDepth、createParents、fetch_url.methodを省略する既存の呼び出し元では、従来のデフォルトの動作が維持されます。また、v0.5 には、意図的な create モードの公開処理の強化が含まれています。ハードリンクによる上書きなしの公開に対応できないファイルシステムでは、従来の確認後に名前を変更するフォールバックを使用せず、安全側に失敗するようになりました。
機能
- 最新の MCP v2 アーキテクチャ:標準の JSON Schema draft 2020-12 検証と 2026-07-28 プロトコルの完全なサポートを備え、
@modelcontextprotocol/server上にネイティブに構築されています。 - 2 種類のトランスポートをサポート:標準入力/出力(
stdio)または最新の Streamable HTTP(node:http+/mcp)でシームレスに実行できます。 - プロファイル対応のサーバー指示:アクティブなプロファイルに基づき、推奨されるワークフロー、ツールの実行順序、安全上の境界について、接続された LLM を案内する動的なサーバー指示を提供します。
- モジュール式 MCP プロンプト:再利用可能なタスク用プロンプト(
explore_workspace、find_and_explain、review_file、trace_symbol)を、workspace、workspace_write、allプロファイルでのみ公開します。 - MCP ネイティブのワークスペース補完:ファイルを列挙したりホストパスを公開したりすることなく、すべてのワークスペースプロンプトとワークスペースリソーステンプレートで、論理的な
rootId値を自動補完します。 - デフォルトで安全なツールプロファイル:デフォルトの
safeプロファイルでは、ファイルシステム、ネットワーク、ハードウェアの検査を一切公開しません。ファイルシステムの変更と外部ネットワークへのアクセスには、workspace_write/network(またはall)の明示的なオプトインが必要です。 - ワークスペースのセキュリティとホストパスのプライバシー:許可リストに登録されたディレクトリへの安全なアクセスを提供します。パストラバーサルやシンボリックリンクによる範囲外へのアクセスを防止し、論理ルートのマッピング(
root-1、root-2)、制限付きのテキスト操作、バイナリファイルの保護を備えています。ホストの絶対パスがクライアントやモデルに公開されることはありません。workspaceプロファイルは読み取り専用で、保護された変更機能はworkspace_writeとallのみに分離されています。 - ワークスペースの検索と探索:無視するディレクトリのデフォルト設定、制限付きの並列処理(
SEARCH_CONCURRENCY = 8)、座標マッピング、任意で指定できる制限付きの前後行(contextLines: 0..10)、クライアントによるキャンセルに対応した、高速で制限付きのファイル名・テキストの完全一致検索(search_files、search_text)を提供します。 - 再帰的なディレクトリ一覧表示:幅優先探索と正規化された相対パスを使用し、最大 500 件の全体上限まで、深さを制限したサブディレクトリ走査(
list_directoryのmaxDepth: 1..5)を行います。 - 保護されたワークスペース変更と安全な親ディレクトリ作成:トランザクション形式の編集(
edit_text_file)と、上書きしないアトミックな作成(write_text_file)に対応します。親ディレクトリは、任意でセグメントごとに安全に作成でき(createParents)、楽観的 SHA-256 同時実行制御と、任意で指定できるクライアント確認を備えています。 - 安全なネットワーク取得とメタデータ:複数層の SSRF 防御、DNS リバインディング対策、ポート許可リスト、条件付きレスポンスキャッシュを備えた、外部 HTTP/HTTPS 取得(
fetch_url)と、軽量な HTTPHEADメタデータ検査を提供します。 - キャンセル対応のワーカースレッドプール:CPU 負荷の高いタスクを Node.js イベントループから切り離します。自動的なライフサイクル復旧、
AbortSignalによるキャンセル、および実行中の同期計算の迅速な強制終了に対応しています。 - 正規化された MCP 進捗報告:ワークスペース検索ツールと計算ワーカーツール全体で、高性能な進捗通知を提供します。通知の順序は必ず維持され、進捗報告を省略した場合のオーバーヘッドはありません。
- 本番環境向け LRU キャッシュ:TTL に対応したメモリ上限付きキャッシュとシングルフライトリクエストの集約により、キャッシュスタンピードを防止します。
- 内部構造化ログ:stdio の安全性を保つため、JSON ログは
stderrにのみ出力します。
クイックスタート
MCP クライアントの設定(Claude Desktop、Cursor など)
MCP 設定(例:claude_desktop_config.json)に追加します。
デフォルトの安全プロファイル(Stdio)
{
"mcpServers": {
"high-performance-mcp": {
"command": "npx",
"args": [
"-y",
"high-performance-mcp-server"
]
}
}
}
読み取り専用ワークスペースプロファイル
{
"mcpServers": {
"workspace-mcp": {
"command": "npx",
"args": [
"-y",
"high-performance-mcp-server",
"--profile=workspace",
"--root=/path/to/project"
]
}
}
}
MCP Inspector によるテスト
@modelcontextprotocol/inspector を使ったローカルテストと対話型デバッグについては、examples/inspector-workspace.example.json の設定テンプレートを参照してください。
ローカル開発/ソースからの実行
# Clone and build
git clone https://github.com/AnIayana/high-performance-mcp-server.git
cd high-performance-mcp-server
npm install
npm run build
# Run default safe profile
node dist/cli.js
# Run workspace profile with allowlisted root
node dist/cli.js --profile=workspace --root=.
# Run with Streamable HTTP transport
node dist/cli.js --transport=http --port=3000
Streamable HTTP トランスポートとヘルスエンドポイント
サーバーはループバック上で Streamable HTTP 経由で実行できます。
# Using CLI flag
node dist/cli.js --transport=http --port=3000
# Or using environment variable
MCP_TRANSPORT=http PORT=3000 node dist/cli.js
HTTP トランスポート(--transport=http または MCP_TRANSPORT=http)で実行する場合:
- プロトコルエンドポイント:
http://127.0.0.1:3000/mcp(Streamable HTTP プロトコルハンドラー) - ヘルスエンドポイント:
http://127.0.0.1:3000/healthz(稼働状態のライブネスプローブ)
ループバックのセキュリティとヘルスの仕様
- ループバックのみへのバインド:HTTP サーバーは
127.0.0.1のみにバインドされます。リモートへのバインド、TLS 終端、外部ネットワークへの公開はサポートされていません。 - ホストとオリジンのガード:DNS リバインディング(
localhostHostValidation)およびブラウザー CSRF(localhostOriginValidation)への保護は、/healthzを含むすべてのルートで有効です。 - サポートされるメソッド:
GET /healthz:200 OKと{"status":"ok"}を返します(Content-Type: application/json; charset=utf-8、Cache-Control: no-store)。HEAD /healthz:同一のヘッダーと空の本文を伴う200 OKを返します。- サポートされていないメソッド(
POST、PUT、DELETEなど)は、Allow: GET, HEADを伴う405 Method Not Allowedを返します。
- 副作用なし:
/healthzのプローブは、一定時間で完了するローカルチェックを実行します。MCP セッションを作成せず、ワーカースレッドの割り当ても発生せず、ファイルシステムやネットワークリソースにもアクセスせず、メトリクスも変更しません。 - オーケストレーション/スーパーバイザー:ローカルコンテナーやプロセスのスーパーバイザー(Docker の
HEALTHCHECKや Kubernetes のプローブなど)では、オペレーターはライブネスとレディネスの両方のプローブの接続先として/healthzを指定できます(コマンド例:curl -f -s http://127.0.0.1:3000/healthz)。ポートのリッスンが成功するとサーバーの初期化はすべて同期的にメモリー上で行われるため、個別の/readyzエンドポイントはありません。
Node.js からのプログラムによる使用
サーバーは Node.js アプリケーションに直接組み込めます(ESM のみ、Node >=22)。
import {
createServer,
resolveWorkspaceConfig,
} from "high-performance-mcp-server";
// 1. Safe default server (only 'echo' and 'ping' enabled)
const safeServer = createServer();
// Connect to transport or execute within application...
// Gracefully close protocol sessions when done
await safeServer.close();
// 2. Workspace profile with canonicalized roots
const workspaceConfig = await resolveWorkspaceConfig(["/path/to/project"]);
const workspaceServer = createServer({
profile: "workspace",
workspaceConfig,
});
await workspaceServer.close();
メモ
- 同一の Node.js プロセス内にある複数のサーバーインスタンスは、プロセス全体で共有されるコンピューティングキャッシュ、ワーカープール、メトリクスを使用します。
- ローカルの
WorkspaceConfigオブジェクトには、ローカルホストの検証用として正規化された絶対ファイルシステムパスが含まれる場合があります。物理ホストのパスがリモート MCP クライアントのプロトコル経由で公開されることはありません。
デフォルトで安全なプロファイル
ホストマシンを保護し、意図しないリソース消費やメタデータの漏えいを防ぐため、ツール、リソース、指示、プロンプトはセキュリティプロファイルに分類されています。
| プロファイル | 含まれるカテゴリ | 公開されるツール | プロンプト | 用途 |
|---|---|---|---|---|
safe (デフォルト) | safe | echo、ping | (なし) | ホストの検査、ファイルシステムへのアクセス、変更を一切行いません。公開しても安全です。 |
workspace | safe、workspace | echo、ping、workspace_roots、list_directory、file_info、read_text_file、search_files、search_text | explore_workspace、find_and_explain、review_file、trace_symbol | 許可リストに登録された --root ディレクトリ内に厳密に制限された、読み取り専用のファイルおよびディレクトリの検査です。 |
workspace_write | safe、workspace、workspace_write | echo、ping、workspace_roots、list_directory、file_info、read_text_file、search_files、search_text、write_text_file、edit_text_file | explore_workspace、find_and_explain、review_file、trace_symbol | 楽観的並行性制御を用いた、保護されたワークスペース内のテキストファイルの作成、上書き、トランザクション編集です。 |
network | safe、network | echo、ping、fetch_url | (なし) | 公開リソースを対象とする、SSRF 対策済みの読み取り専用 HTTP/HTTPS ウェブ取得です。 |
diagnostics | safe、diagnostics | echo、ping、cache_stats、server_metrics、system_stats、worker_pool_stats | (なし) | ヘルス状態とイベントループの遅延を監視するための、プロセスおよびシステムの可観測性です。 |
benchmark | safe、benchmark | echo、ping、cached_prime_count、heavy_compute_main、heavy_compute_worker | (なし) | CPU 負荷の高い素数計算のベンチマークとワーカープールのテストです。 |
admin | safe、diagnostics、admin | echo、ping、cache_stats、server_metrics、system_stats、worker_pool_stats、reset_cache、reset_metrics | (なし) | 管理用のランタイム状態変更(キャッシュの消去、メトリクスのリセット)を伴う可観測性です。 |
all | safe、workspace、workspace_write、network、diagnostics、benchmark、admin | 登録済みのツール全 20 個 | ワークスペースのプロンプト全 4 個 | ツールとプロンプトの完全なカタログです。 |
サーバーの指示とプロンプト
プロファイルに応じたサーバーの指示
MCP クライアントが接続すると、サーバーは MCP プロトコルを通じて、簡潔でプロファイルに応じた指示を送信します。
safe:ファイルシステムとハードウェアの検査は利用できないことをモデルに伝えます。workspace:推奨される調査手順(workspace_roots->search_files/search_text->file_info->read_text_file)を示し、読み取り専用の制約を再確認するとともに、ルート相対パスの使用を強調します。diagnosticsとbenchmark:観測されたメトリクスの解釈を案内し、不要な CPU 負荷の高い計算の実行を避けるよう警告します。admin:変更操作がプロセス内のキャッシュとテレメトリ状態にのみ影響することを説明します。
モジュール式 MCP プロンプト
workspace、workspace_write、または all プロファイルで実行すると、サーバーは一般的なエンジニアリングタスク向けの構造化されたワークフローを提供するモジュール式プロンプトを公開します。
| プロンプト | 引数 | 目的 |
|---|---|---|
explore_workspace | rootId (必須)、goal (任意) | 検索とファイルの調査を使用して、許可リストに登録されたワークスペースルートを構造的に探索するようモデルをガイドします。 |
find_and_explain | rootId (必須)、query (必須) | リテラルテキスト検索を使用して関連するコードや設定を特定し、定義元のファイルを読み取って説明を生成します。 |
review_file | rootId (必須)、path (必須)、focus (任意) | ワークスペース内の指定されたテキストファイルを構造的かつ読み取り専用でレビューします。 |
trace_symbol | rootId (必須)、symbol (必須) | ワークスペース全体で、シンボルの宣言、参照、使用箇所を追跡します。 |
メモ
プロンプトの引数は範囲を制限したタスクデータとして扱われ、再利用可能な MCP プロンプトテンプレートに挿入する前にエスケープされます。プロンプト自体はファイルシステムへの直接 I/O を実行しません。実際のファイルの読み取りと検索は、厳格なルート許可リスト制御のもとで、標準の MCP ツールとリソースを使用してモデルが行います。
ワークスペースルートの補完
ワークスペース対応プロファイルは、MCP の completions 機能を公開します。クライアントは、4 つすべてのワークスペースプロンプトの rootId 引数と、workspace:///{rootId}/{+path} の rootId 変数について、completion/complete の候補をリクエストできます。候補には root-1 などの設定済み論理 ID のみが含まれ、ファイルが列挙されたり、ルート名やホストの絶対パスが明らかになったりすることはありません。ワークスペース権限のないプロファイルは、補完機能を公開しません。
ワークスペースへの読み取り専用アクセス
ファイルシステムへのアクセスは、デフォルトで無効です。読み取り専用のワークスペースアクセスを有効にするには、--profile=workspace と、許可リストに登録する --root ディレクトリを少なくとも 1 つ明示的に指定します。より広範な all プロファイルにもこれらのツールが含まれますが、変更、ネットワーク、診断、ベンチマーク、管理機能も有効になります。
# POSIX / macOS / Linux
npx high-performance-mcp-server --profile=workspace --root=/home/user/my-project
# Windows
npx high-performance-mcp-server --profile=workspace --root="C:\Projects\app"
# Multiple roots
npx high-performance-mcp-server --profile=workspace --root=./packages/core --root=./packages/cli
セキュリティ上の保証と制約
- ホストパスのプライバシー:設定されたファイルシステムの絶対パスはサーバー内部に留まります。
workspace_rootsツールは論理ルート識別子(id: "root-1"、name: "my-project")を返し、ワークスペースリソース URI はホストの絶対パスではなくこれらの識別子を使用します:{ "roots": [ { "id": "root-1", "name": "my-project" } ] } - 厳格な許可リスト:明示的に渡された
--rootディレクトリのみアクセスできます。一意のルートは最大 16 個まで許可されます(重複排除前の生パスは最大 64 個です)。 - 読み取り専用プロファイル:標準の
workspaceプロファイルは変更ツールを公開しません。保護されたテキスト変更は、明示的なworkspace_writeプロファイルとallプロファイルでのみ利用できます。削除、任意の名前変更、ディレクトリ作成、権限変更、コマンド実行を公開する MCP ツールはありません。 - パストラバーサルとシンボリックリンクの保護:対象パスは
fs.realpathを使用して正規化され、ルート境界の外に出ないことが厳密に検証されます。 - エラーのサニタイズ:エラーレスポンスで参照されるのは論理ルート ID、ルート名、要求された相対パスのみであり、内部ディレクトリ構造が漏洩しないようにします。
- ファイル読み取り制限:デフォルトのテキスト読み取り制限は 256 KiB、ハード上限は 1 MiB(
MAX_TEXT_READ_BYTES)です。 - バイナリファイルの検出:NUL バイト(
\0)を含むファイルは、コンテキストの汚染を防ぐため、read_text_fileによって拒否されます。 - MCP リソース:標準の
workspace:///{rootId}/{+path}(workspace_text_file)テンプレートを公開します。論理ルートを確認するにはworkspace_rootsを使用してください。resources/listはファイルを再帰的に列挙しません。
ディレクトリとファイルの検査
workspace プロファイルでは、範囲が制限されたファイルおよびディレクトリの検査ツールを利用できます。
-
list_directory:- 許可リストに登録されたワークスペースルート内のディレクトリ内容を、全体で最大500エントリまで一覧表示します(上限を超えると
truncated: trueになります)。 - 範囲が制限された再帰的な走査:任意の
maxDepthパラメーター(1..5、既定値:1)を指定できます。maxDepth > 1の場合、指定された深さまでディレクトリツリーを幅優先探索(BFS)し、フラットなリストとして返します。 - 相対パスの出力:再帰モードでは、エントリにスラッシュ(
/)区切りで正規化されたrelativePathが含まれます。nameにはエントリのベース名が保持されます。 - 決定論的な並べ替え:既存の比較処理の動作が維持されます。
{ "name": "list_directory", "arguments": { "rootId": "root-1", "path": "src", "maxDepth": 2 } } - 許可リストに登録されたワークスペースルート内のディレクトリ内容を、全体で最大500エントリまで一覧表示します(上限を超えると
-
file_info:許可リストに登録されたルート内の相対パスについて、サイズ、タイムスタンプ、ファイル種別の属性を取得します。 -
read_text_file:設定されたバイト数の上限(既定値:256 KiB、最大:1 MiB)まで、UTF-8 ファイルの内容を読み取ります。NUL バイトを含むファイルは拒否されます。
ワークスペースの検索
workspace プロファイルでは、範囲が制限された読み取り専用の検索ツールを利用できます。
-
search_files:- リテラルな部分文字列一致を使って、ファイル名とディレクトリ名を検索します。
- 種類(
file、directory、all)、大文字と小文字の区別、検索開始パスで絞り込みます。 - 既定では、一般的なビルド/ベンダーディレクトリ(
.git、node_modules、.next、dist、build、targetなど)をスキップします。これらも検索するには、includeIgnored: trueを渡します。 - 再帰サイクルや範囲外への移動を防ぐため、シンボリックリンク/ジャンクションディレクトリには入りません。
- クライアントから
progressTokenが提供された場合、ネイティブ MCP 進捗通知(notifications/progress)をストリーム送信します。
-
search_text:- 固定の並列数(8ワーカー)で、範囲が制限されたリテラル一致を使い、UTF-8 テキストファイルを検索します。
- 1始まりの行番号と列番号、および前後の空白を除去したプレビュー(最大300文字)を返します。
- ファイル拡張子による絞り込みに対応しています(例:
extensions: [".ts", ".md"]またはextensions: ["ts", "md"])。 - バイナリファイル(NUL バイトを含むファイル)と、1 MiB を超えるファイル(
MAX_SEARCH_FILE_BYTES)は自動的にスキップします。 - 上限:既定のハード上限(
maxResults: 100[最大500]、maxFiles: 5000[最大50000]、timeoutMs: 10000[最大30000])。 - クライアントの
AbortSignalによる完全なキャンセルに対応しています。 progressTokenによる要求があった場合、ネイティブ MCP 進捗通知(notifications/progress)をストリーム送信します。要求されない場合、進捗通知によるオーバーヘッドはありません。- 範囲が制限されたコンテキスト行:任意の
contextLinesパラメーター(0..10、既定値:0)を指定できます。contextLines > 0の場合、一致した箇所に、周囲の行を含む範囲が制限された文字列配列contextBeforeとcontextAfterが含まれます。省略するか0を指定すると、コンテキストのフィールドは省略されます。範囲の制限のないコンテキストには対応していません。
{ "name": "search_text", "arguments": { "rootId": "root-1", "query": "SEARCH_CONCURRENCY", "path": "src", "contextLines": 2 } }
ワークスペースの保護されたテキスト書き込みと編集(workspace_write)
ワークスペースの変更は既定で無効です。標準の workspace プロファイルは、厳密に読み取り専用のままです。保護されたテキスト書き込みとトランザクション型の編集機能を有効にするには、少なくとも1つの許可リストに登録された --root とともに、workspace_write プロファイル(または all)を明示的に選択してください。
# Start server with workspace write capabilities
npx high-performance-mcp-server --profile=workspace_write --root=./project --workspace-max-write-bytes=2097152
ミューテーションツール
警告
--profile=allまたは--profile=workspace_writeで実行すると、接続されたクライアントと LLM は、設定された--rootディレクトリ内で、保護されたテキストの書き込みおよび編集機能を利用できます。標準の--profile=workspaceは引き続き厳密な読み取り専用です。
-
write_text_file:- 作成モード(
mode: "create"):許可リストに登録されたワークスペースルート内に、新しい UTF-8 テキストファイルを作成します。fs.linkによるアトミックな上書き防止のセマンティクスを適用し、ファイルがすでに存在する場合(already_exists)や親ディレクトリが存在しない場合(missing_parent)は安全に失敗します。作成モードでexpectedSha256を指定することは禁止されています。 - 安全な親ディレクトリの作成:省略可能な
createParents?: boolean(デフォルト:false)。trueの場合、ワークスペースルート内に存在しない親ディレクトリを、厳密な正規 realpath の包含検証を行いながら、セグメントごとに作成します。mode: "create"でのみ有効です(mode: "overwrite"でcreateParentsを指定すると、スキーマ無効として拒否されます)。書き込み確認が有効な場合、ディレクトリの作成やファイルシステムの変更よりも前に、必ず確認が行われます。最終ファイルの公開に失敗した場合、作成された親ディレクトリが部分的な副作用として残ることがあります。最終ファイルの公開には、サポート対象のファイルシステムでアトミックな上書き防止ハードリンクのセマンティクスが維持されますが、親ディレクトリの作成自体は完全にはアトミックではありません。 - 上書き防止のフェイルクローズ強化:作成モードでのファイル公開では、ハードリンクによる公開が利用できない場合に、安全でない確認後のリネーム処理へフォールバックしなくなりました。作成時の公開には
fs.linkを使用します。ハードリンクによる公開がサポートされていない場合は、既存のファイルを上書きせずにフェイルクローズし、予期しないネイティブのファイルシステムエラーはサニタイズされます。 - 上書きモード(
mode: "overwrite"):ファイルの現在の SHA-256 ハッシュと一致するexpectedSha256(小文字の 16 進数 64 文字)が必須です。ファイルが同時に変更された場合はcontent_conflictがスローされ、対象ファイルに触れることなく処理が中止されます。 - 排他的な一時ファイルとアトミックな置換:対象ディレクトリ内に排他的な一時ファイル(
.mcp-temp-<uuid>.tmp)を作成し(O_CREAT | O_EXCL)、ディスクにフラッシュします(fsync)。対象ファイルの種類とハッシュを再検証した後、宛先をアトミックに置換します。
{ "name": "write_text_file", "arguments": { "rootId": "root-1", "path": "src/nested/components/Button.tsx", "mode": "create", "content": "export function Button() { return <button>Click</button>; }\n", "createParents": true } } - 作成モード(
-
edit_text_file:- 完全一致のリテラル置換:正規表現や特殊トークンの展開を使わず、対象を絞ったテキスト置換をメモリ上で順番に実行します(例:
$$、$1、$&、$\``、$'` はそのまま挿入されます)。 - 重複しない出現箇所の保証:完全一致の置換セマンティクスに従った重複しないリテラルマッチングを使用して、
expectedOccurrences(デフォルト:1)を評価します。 - トランザクション実行:すべての編集をメモリ上で順番に適用します。いずれかの編集が
expectedOccurrencesの確認に失敗した場合、またはファイルのハッシュがexpectedSha256と一致しない場合、処理は中止され、ディスク上のファイルには一切変更が加えられません。 - 厳密な UTF-8 対応と BOM の保持:UTF-8 以外のバイナリファイルは拒否されます(
invalid_text_encoding)。既存の UTF-8 BOM ヘッダーと CRLF 改行は、バイト単位で忠実に保持されます。
{ "name": "edit_text_file", "arguments": { "rootId": "root-1", "path": "src/index.ts", "expectedSha256": "4b227777d4dd1fc61c6f884f48641d02b4d121d3fd328cb08b5531fcacdabf8a", "edits": [ { "oldText": "const PORT = 3000;", "newText": "const PORT = 8080;", "expectedOccurrences": 1 } ] } } - 完全一致のリテラル置換:正規表現や特殊トークンの展開を使わず、対象を絞ったテキスト置換をメモリ上で順番に実行します(例:
オペレーターが設定できる書き込み上限
サーバーオペレーターは、書き込みまたは編集で許可するペイロードサイズの最大値(バイト単位)に厳格な上限を設定できます。
- CLI フラグ:
--workspace-max-write-bytes=<bytes>(1~5,242,880 バイト/5 MiB、デフォルト:1048576/1 MiB) - 環境変数:
MCP_WORKSPACE_MAX_WRITE_BYTES=<bytes>
メタデータと並行処理に関する考慮事項
- アトミック置換時のメタデータ:アトミック置換では新しいファイルシステムエントリーが作成され、サポートされている環境では POSIX 権限ビット(
0755、0644)が保持されます。その他の OS 固有のメタデータ(inode 番号、作成タイムスタンプctime、ACL の継承など)は、移植性を保って維持されるとは限りません。 - 残存する並行処理の境界:置換前の再検証により、信頼できない MCP 呼び出し元との TOCTOU レース条件を最小限に抑えます。ただし、同等のファイルシステム権限を持つ悪意あるローカル OS プロセスが、最終検証後の数マイクロ秒の間に並行して書き込みを行うと、パスベースの操作で競合が発生する可能性は残ります。同等の権限を持つローカルファイルシステムの競合は、残存する脅威モデルです。
- パスの間接参照と境界チェック:パスの包含チェックは、設定されたルート境界内で
fs.realpathによる正規化解決を行います。 - フェイルクローズ方式のハードリンク公開:ファイルシステムまたは実行環境がアトミックな
fs.linkによるハードリンク公開をサポートしていない場合、作成モードでの書き込みは、既存ファイルを上書きせずフェイルクローズします。
オプションのクライアント仲介による書き込み確認
確認はデフォルトでオフです。両方の変更ツールで有効にするには、オペレーター専用フラグ --workspace-write-confirmation、または MCP_WORKSPACE_WRITE_CONFIRMATION=true(true/1/false/0)を使用します。CLI フラグを指定すると、環境変数が false でも確認が有効になります。ツール引数で確認を無効にすることはできません。ツールは追加されず、プロファイルへのアクセスも変更されません。
high-performance-mcp-server --profile=workspace_write --root=./project --workspace-write-confirmation
サーバーは対象を検証してから、confirm ブール値を含むフォームをクライアントに表示するよう要求します。承認された応答で confirm: true の場合に限り、処理が続行されます。拒否、キャンセル、false、不正な承認済みコンテンツの場合、ファイルは変更されません。承認待ちの間、一時ファイルは作成されません。承認後も、通常のルート、サイズ、完全一致編集、SHA-256 のチェックが実行されます。プロンプトの表示中にファイルが変更された場合も同様です。
プロンプトには、操作と正規化された論理 rootId/相対パスが表示されます。ファイルの内容、期待されるハッシュ、ルート名、ホストの絶対パスは表示されません。制御文字と双方向テキスト書式文字はエスケープされます。4,096 文字を超える対象は、黙って切り詰めるのではなく拒否されます。応答キーには提案された引数と解決済みの論理対象が含まれるため、提案が変更された場合は再度確認を求めます。
| 接続 | 確認が有効な場合 |
|---|---|
MCP 2026-07-28、stdio または HTTP | ネイティブの input_required フォームエリシテーション |
| レガシー MCP、stdio | SDK 互換シムが elicitation/create を使用 |
| レガシー MCP、ステートレス HTTP | 拒否:承認用の逆方向リクエストチャネルがありません |
| フォームエリシテーションに対応していないクライアント | 変更を行わずに拒否 |
確認が無効の場合、既存のモダンおよびレガシーの呼び出しはこれまでどおり動作します。フォームを実際に人間に提示するクライアントを使用してください。エリシテーションはクライアントを介した安全策であり、認証でも、悪意あるクライアントに対するセキュリティ境界でもありません。サーバーは、クライアントから提供された応答を人間が承認したと証明することはできません。MCP ハンドラーのゲートを介さないサービスレベルへの直接埋め込みも対象外です。プロトコルの詳細は、公式 SDK の input-required ガイドを参照してください。
MCP ワークスペースリソース
ワークスペースの検査ツールに加え、このサーバーは公式の URI テンプレートを使用して、許可リストに登録されたワークスペースのテキストファイルを標準の MCP リソースとしてネイティブに公開します。
workspace:///{rootId}/{+path}
正規リソース URI の形式
ワークスペースリソースでは、ホストのファイルシステムパスではなく論理ルート ID に基づく、安定した移植可能な URI スキームを使用します。
workspace:///root-1/README.mdworkspace:///root-1/src/index.tsworkspace:///root-2/docs/architecture.md
ホストの絶対パス(file:///C:/... や /home/... など)が、リソース URI、タイトル、エラーメッセージに公開されることはありません。
リソースの不変条件とセキュリティ保証
- プロファイルによる制限:ワークスペースのリソースは、ワークスペース対応プロファイル(
workspace、workspace_write、all)でのみ公開されます。ワークスペース非対応プロファイル(safe、network、diagnostics、benchmark、admin)では、リソースエンドポイントはMethod not foundを返し、ワークスペースの存在は一切通知されません。 - 厳格な読み取り専用:リソースは厳格に読み取り専用です。リソース URI を所持していても、変更権限やファイルシステムへの書き込み機能は付与されません。
- ルートとシンボリックリンクの封じ込め:リソースの読み取りでは、中央のワークスペースセキュリティリゾルバーを再利用し、設定された
--rootディレクトリ内への厳格な封じ込めを適用するとともに、シンボリックリンクやジャンクションによる逸脱を阻止します。 - 全件取得またはエラーのセマンティクス:リソースが暗黙に切り詰められることはありません。ファイルがオペレーターのバイト数上限を超える場合、読み取りは
resource_too_largeで拒否されます。 - 厳格な UTF-8 とテキストのみの対応:すべてのリソースコンテンツは、UTF-8 テキストとして厳格にデコードされます(
fatal: true)。NUL バイト(0x00)や UTF-8 以外のシーケンスを含むファイルは、サポート対象外のバイナリファイルとして拒否されます(invalid_text_encoding)。 - 再帰的な列挙なし:
resources/templates/listはリソーステンプレート(workspace_text_file)を通知します。大規模なリポジトリでの遅延、メモリの急増、情報漏えいを防ぐため、サーバーはresources/listのためにリポジトリのディレクトリを再帰的に走査しません。 - オペレーターが設定できるリソースサイズ上限:
- CLI フラグ:
--workspace-max-resource-bytes=<bytes>(1~5,242,880 バイト/5 MiB、デフォルト:1048576/1 MiB) - 環境変数:
MCP_WORKSPACE_MAX_RESOURCE_BYTES=<bytes>
- CLI フラグ:
推奨されるクライアントのワークフロー
- 検出:
workspace_roots、list_directory、またはsearch_filesを使用して、利用可能なルート ID とパスを検出します。 - リソースの読み取り:
workspace:///<rootId>/<path>を使用し、標準の MCPresources/readでテキストファイルを直接読み取ります。 - 保護された変更:変更が必要な場合は、
read_text_fileで信頼できるsha256ハッシュを取得し、workspace_writeプロファイルでwrite_text_fileまたはedit_text_fileを使って、同時実行制御付きの編集を行います。
ネットワークアクセスと fetch_url
ネットワークアクセスはデフォルトで無効です。SSRF 対策を施した読み取り専用のウェブ取得を有効にするには、--profile=network(または --profile=all)を指定して実行します。
# Start server with opt-in network profile
npx high-performance-mcp-server --profile=network
fetch_url ツールの詳細
fetch_url ツールは、公開ウェブリソースに対して厳密に制限された読み取り専用の HTTP/HTTPS リクエストを実行します。
- 対応メソッド:省略可能な
methodパラメーターは"GET"(デフォルト)または"HEAD"を受け付けます。任意の HTTP メソッド(POST、PUT、DELETE、PATCH、OPTIONS)はスキーマ境界で拒否されます。 - HEAD メタデータのサポート:
method: "HEAD"が指定されると、サーバーは GET とまったく同じ SSRF 対策、DNS の複数回答の検証、ソケットのピン留め、リダイレクトポリシーを再利用して、ネイティブの HEAD リクエストを送信します。表現本文は消費されません(bytesRead: 0、truncated: false、body: undefined)。Content-Lengthは、ダウンロードしたバイト数ではなく、サーバーが宣言した表現長のメタデータとして報告されます。これにより、テキスト本文のデコード制約を回避し、バイナリ資産(image/png、application/pdf、application/octet-stream)や圧縮コンテンツ(Content-Encoding: gzip)のメタデータを取得できます。 - リダイレクト時のメソッド維持:すべてのリダイレクト(
301、302、303、307、308)を経由しても、要求された HTTP メソッド(GETまたはHEAD)が維持されます。具体的には、303 See Otherを伴うHEADは、リダイレクト先でもHEADのままです。 - 条件付きキャッシュの分離:GET と HEAD のキャッシュエントリーは、個別のプリイメージを使用して厳密に分離されます。一方のメソッドが他方のメソッドを満たしたり、キャッシュを汚染したりすることはありません。既存の GET キャッシュキーの識別子は維持されます(
network-fetch-v1\0<canonicalUrl>)。HEAD で条件付きの304 Not Modifiedを再検証した場合、キャッシュされた元のステータスと statusText が返され、本文は省略され、revalidationStatus: 304が設定されます。
{
"name": "fetch_url",
"arguments": {
"url": "https://raw.githubusercontent.com/modelcontextprotocol/specification/main/LICENSE",
"method": "HEAD"
}
}
セキュリティ保証と制約
- 多層的なSSRF防御:解決されたすべてのIPアドレスを、標準のIPv4/IPv6プライベートおよび特殊用途サブネット(
net.BlockList)に照らして評価します。ループバック(127.0.0.0/8、::1)、プライベートRFC 1918(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)、リンクローカル(169.254.0.0/16、fe80::/10)、キャリアグレードNAT(100.64.0.0/10)、クラウドメタデータ(169.254.169.254、metadata.google.internal)、ユニークローカルIPv6(fc00::/7)、マルチキャスト、IPv4マップIPv6(::ffff:x.x.x.x)宛ての通信は厳格にブロックされます。 - 権威あるソケット検索(DNSリバインディング防止):接続ソケットは、セキュリティを考慮した専用の検索フックを使用し、TCPソケットが検証済みのパブリックIPアドレスのみに接続するようにすることで、検査時と使用時の間のDNSリバインディング(TOCTOU)を防ぎます。
- 許可ポートの許可リスト:標準のパブリックWebポートである
80、443、8080、8443のみに厳格に制限されます。 - リダイレクトの手動再検証:リダイレクト(
301、302、303、307、308)を最大5回まで手動で追跡します。中間の各宛先について、URL、ポート、IPアドレスに関するすべてのセキュリティポリシーを再検証します。HTTPSからHTTPへのダウングレードリダイレクトは拒否されます。 - IPアドレスの情報漏えいゼロ:クライアントに返されるエラーメッセージから、内部IPアドレス、ローカルソケットの詳細、DNSトポロジーが漏れることはありません。
- リソース使用量の制限:ストリーミングレスポンスリーダーがバッファーするのは、要求された
maxBytes(デフォルトは1 MiB、上限は5 MiB)までです。ペイロードが制限を超えると、truncated: trueを返し、ストリームを直ちに破棄します。 - 厳格なテキストデコード(GET):GETリクエストでは、テキスト系MIMEタイプ(
text/*、application/json、application/xml、application/javascript、application/xhtml+xml、application/yaml)のみを、致命的エラーを検出するUTF-8デコード(new TextDecoder("utf-8", { fatal: true }))でデコードします。バイナリ本文と明示的に指定されたUTF-8以外のエンコーディングは拒否されます。HEADリクエストは本文デコードの制限を受けず、バイナリコンテンツタイプのメタデータを検査できます。
オペレーターが設定可能な送信ポリシー
サーバーオペレーターは、デプロイメントレベルで追加の送信ポリシーを適用し、アウトバウンドネットワーク機能を制限できます。
-
許可するホスト名パターン(
--network-allow-host、MCP_NETWORK_ALLOW_HOSTS_JSON):- 指定した完全一致のホスト名(
example.com)またはサブドメインのワイルドカード(*.githubusercontent.com)のみに、ネットワーク送信を制限します。 - CLIで繰り返し指定するか、環境変数でJSON文字列配列として指定できます。
- 設定されている場合、リストにないホストは
host_not_allowed(「サーバーのネットワークポリシーで宛先のホスト名が許可されていません。」)で拒否されます。
- 指定した完全一致のホスト名(
-
拒否するホスト名パターン(
--network-deny-host、MCP_NETWORK_DENY_HOSTS_JSON):- 指定したホスト名またはサブドメインのワイルドカードを明示的にブロックします。
- 拒否ルールは許可ルールより常に優先されます:宛先が許可パターンと拒否パターンの両方に一致する場合、
host_denied(「サーバーのネットワークポリシーで宛先のホスト名が拒否されています。」)で拒否されます。
-
HTTPS限定モード(
--network-https-only、MCP_NETWORK_HTTPS_ONLY):- すべてのアウトバウンドリクエストで、暗号化されたHTTPSを強制します。初期ターゲットまたはリダイレクト先が
http://の場合、https_required(「サーバーのネットワークポリシーによりHTTPSが必須です。」)で拒否されます。
- すべてのアウトバウンドリクエストで、暗号化されたHTTPSを強制します。初期ターゲットまたはリダイレクト先が
-
オペレーターによるリソース上限:
--network-max-response-bytes(MCP_NETWORK_MAX_RESPONSE_BYTES):最大レスポンスサイズを1~5,242,880バイトに制限します。--network-max-timeout-ms(MCP_NETWORK_MAX_TIMEOUT_MS):最大リクエストタイムアウトを1,000~30,000ミリ秒に制限します。
重要
オペレーターによる制限は、制限の追加のみ可能です:オペレーター設定によって、組み込みのSSRF防御を弱めたり、上書きしたりすることはできません。
--network-allow-hostに指定されていても、プライベートIP、ループバック、リンクローカル、キャリアグレードNAT、クラウドメタデータ宛ての通信は、引き続き厳格にブロックされます。
条件付き HTTP レスポンスキャッシュ
fetch_url でオプションの容量制限付きインメモリ条件付きキャッシュを有効にすると、頻繁にアクセスされる公開 HTTPS ドキュメントの上流帯域幅とレイテンシを削減できます。
- フラグ:
--network-cache(MCP_NETWORK_CACHE_ENABLED=true) - 保持期間とサイズ上限:
--network-cache-max-size-bytes=<n>(MCP_NETWORK_CACHE_MAX_SIZE_BYTES):キャッシュペイロードの論理上限サイズ(1 KiB~64 MiB、デフォルトは 16 MiB)。--network-cache-max-entries=<n>(MCP_NETWORK_CACHE_MAX_ENTRIES):キャッシュエントリーの最大数(1~512、デフォルトは 128)。--network-cache-ttl-ms=<n>(MCP_NETWORK_CACHE_TTL_MS):保持期間の TTL(ミリ秒)(1,000~3,600,000 ミリ秒、デフォルトは 300,000 ミリ秒/5 分)。
- 必須の再検証不変条件:キャッシュエントリーが再検証なしでオフライン提供されることは決してありません。再利用するたびに、完全なセキュアネットワークトランスポート(SSRF チェック、DNS リバインディングの照会、オペレーターポリシー、タイムアウト期限)を通じて、条件付きヘッダー(
If-None-Match、If-Modified-Since)をオリジンに送信します。 - 古いキャッシュへのフォールバックなし:オリジンに到達できない場合、タイムアウトした場合、またはプライベート IP に変更された場合は、エラーを直ちに返します。古いキャッシュコンテンツが提供されることはありません。
- プライバシー保護キー:キャッシュキーには、正規化された HTTPS URL の不透明な SHA-256 ハッシュを使用します。平文の URL と認証情報は保存されません。
コマンドラインインターフェース(CLI)
Usage:
high-performance-mcp-server [options]
Options:
--transport=<stdio|http> Transport protocol to run (default: stdio)
--port=<number> HTTP server port (default: 3000, only for http transport)
--profile=<profile> Security tool profile (default: safe)
--root=<path> Allowlisted workspace root (repeatable, max 16)
--workspace-max-write-bytes=<n> Operator hard cap for text write/edit size in bytes (1-5242880, default: 1048576)
--workspace-max-resource-bytes=<n> Operator hard cap for resource read size in bytes (1-5242880, default: 1048576)
--workspace-write-confirmation Require client-mediated confirmation before text write/edit operations
--network-allow-host=<pattern> Allowlisted public hostname or *.domain pattern (repeatable, operator restriction)
--network-deny-host=<pattern> Denylisted hostname or *.domain pattern (repeatable, operator restriction)
--network-https-only Enforce HTTPS-only mode for all network requests (operator restriction)
--network-max-response-bytes=<n> Operator hard cap for response size in bytes (1-5242880, default: 5242880)
--network-max-timeout-ms=<n> Operator hard cap for request timeout in ms (1000-30000, default: 30000)
--network-cache Enable conditional in-memory response cache for fetch_url (operator restriction)
--network-cache-max-size-bytes=<n> Logical max cache payload size in bytes (1024-67108864, default: 16777216)
--network-cache-max-entries=<n> Max cache entry count (1-512, default: 128)
--network-cache-ttl-ms=<n> Max cache retention TTL in ms (1000-3600000, default: 300000)
--log-level=<level> Operational log level (debug|info|warn|error|off, default: info)
--list-tools Display available tools for the active profile and exit
--help, -h Show this help message and exit
--version, -v Show version and exit
例
# Start default safe server on stdio
high-performance-mcp-server
# Start with network profile, operator egress restrictions, and conditional cache
high-performance-mcp-server --profile=network \
--network-allow-host=example.com \
--network-allow-host="*.githubusercontent.com" \
--network-https-only \
--network-max-response-bytes=262144 \
--network-max-timeout-ms=5000 \
--network-cache \
--network-cache-max-entries=256
# List tools available under the workspace profile
high-performance-mcp-server --profile=workspace --list-tools
# Run Streamable HTTP transport on port 8080 with workspace profile
high-performance-mcp-server --transport=http --port=8080 --profile=workspace --root=./project
HTTP トランスポートの詳細
--transport=http または MCP_TRANSPORT=http を指定して起動すると、サーバーは Node.js 組み込みの node:http を使用して Streamable HTTP トランスポートを起動します。
- 優先順位:
--transport>MCP_TRANSPORT> デフォルト(stdio)。 - エンドポイント:
http://127.0.0.1:<port>/mcp - 適用範囲:トランスポート設定は CLI 実行ファイルのみに適用され、プログラムから使用する
createServerAPI には影響しません。 - セキュリティ:サーバーはループバック(
127.0.0.1)にのみバインドし、DNS リバインディングとクロスサイトリクエストフォージェリを防ぐためにHostヘッダーとOriginヘッダーを検証します。 - 警告:認証を行うリバースプロキシまたはゲートウェイなしで、HTTP トランスポートを信頼できないネットワークに直接公開しないでください。
運用ログとレベル
サーバーは構造化された JSON Lines 形式の運用ログを stderr のみに出力します。
- ログレベル:
debug、info、warn、error、off(デフォルト:info)。 - 設定:CLI フラグ
--log-level=<level>または環境変数MCP_LOG_LEVELで設定できます。 - タイミングを考慮した優先順位:
- インポート時/静的初期化時:
MCP_LOG_LEVEL> デフォルト(info)。 - CLI の解析後:
--log-level>MCP_LOG_LEVEL> デフォルト(info)。
- インポート時/静的初期化時:
- 初期化に関する注意:CLI オプションの解析前に静的モジュールの読み込み時に出力された警告は、CLI の
--log-levelフラグで遡って抑制できません。インポート時の警告を抑制する必要がある場合は、MCP_LOG_LEVELを使用してください。 - 標準入出力プロトコルの純粋性:stdio トランスポートモードでは、
stdoutは 100% MCP JSON-RPC プロトコルのフレーミング専用です。運用ログがstdoutに出力されることはありません。 - ユーザー向け診断情報:CLI 引数の検証エラー、使用方法のヘルプ、致命的なプロセスクラッシュは、引き続き
stderrに人が読みやすい形式で出力され、offでも抑制されません。 - プライバシーポリシー:運用ログに、ツール引数のペイロード、ツールの結果、ファイルの内容、認証ヘッダー、生のリクエストボディ、ネットワーク URL 全体が意図的に記録されることはありません。エラースタックトレースが含まれるのは、有効なログしきい値が明示的に
debugに設定されている場合のみです。
環境変数
すべてのサポート対象環境変数を含む、すぐに使えるテンプレートについては、.env.example を参照してください。
| 変数 | 型 | デフォルト | 説明 |
|---|---|---|---|
MCP_PROFILE | string | safe | デフォルトのツールプロファイルの上書き(safe、workspace、workspace_write、network、diagnostics、benchmark、admin、all) |
MCP_TRANSPORT | string | stdio | トランスポートプロトコルの上書き(stdio、http)。CLI の --transport はこの変数より優先されます。 |
PORT | number | 3000 | デフォルトの HTTP ポートの上書き(厳密な整数、1~65535) |
MCP_LOG_LEVEL | string | info | 運用ログレベルの上書き(debug、info、warn、error、off) |
MCP_ROOTS_JSON | string | (なし) | ワークスペースルートの JSON 配列(例:["/home/user/project", "/home/user/docs"]) |
MCP_WORKSPACE_MAX_WRITE_BYTES | number | 1048576 | オペレーターによるワークスペース書き込みサイズ上限(バイト単位)の上書き(1~5242880) |
MCP_WORKSPACE_MAX_RESOURCE_BYTES | number | 1048576 | オペレーターによるワークスペースのリソース読み取りサイズ上限(バイト単位)の上書き(1~5242880) |
MCP_WORKSPACE_WRITE_CONFIRMATION | boolean | false | クライアントを介した書き込み/編集の承認を必須にします(true/1/false/0) |
MCP_NETWORK_ALLOW_HOSTS_JSON | string | (なし) | 許可するパブリックホストパターンの JSON 配列(例:["example.com","*.githubusercontent.com"]) |
MCP_NETWORK_DENY_HOSTS_JSON | string | (なし) | 拒否するホストパターンの JSON 配列(例:["ads.example.com"]) |
MCP_NETWORK_HTTPS_ONLY | boolean | false | すべてのネットワークリクエストで HTTPS のみを強制します(true/1/false/0) |
MCP_NETWORK_MAX_RESPONSE_BYTES | number | 5242880 | オペレーターによるレスポンスのバイト数上限の上書き(1~5242880) |
MCP_NETWORK_MAX_TIMEOUT_MS | number | 30000 | オペレーターによるリクエストタイムアウト上限(ミリ秒)の上書き(1000~30000) |
MCP_NETWORK_CACHE_ENABLED | boolean | false | 条件付きインメモリレスポンスキャッシュを有効にします(true/1/false/0) |
MCP_NETWORK_CACHE_MAX_SIZE_BYTES | number | 16777216 | キャッシュペイロードの論理的な最大サイズ(バイト単位)の上書き(1024~67108864) |
MCP_NETWORK_CACHE_MAX_ENTRIES | number | 128 | キャッシュエントリーの最大数の上書き(1~512) |
MCP_NETWORK_CACHE_TTL_MS | number | 300000 | キャッシュ保持期間の最大値(TTL、ミリ秒)の上書き(1000~3600000) |
MCP_WORKER_COUNT | number | 4 | プール内で起動するワーカースレッド数(1~16) |
MCP_CACHE_MAX_ENTRIES | number | 256 | LRU 計算キャッシュの最大エントリー数(1~10000) |
MCP_CACHE_TTL_MS | number | 300000 | LRU 計算キャッシュエントリーの有効期間(ミリ秒、5分) |
開発
# Install dependencies
npm install
# Run code generator and TypeScript typecheck
npm run typecheck
# Execute unit, security, search, and modern protocol integration test suites
npm test
# Build production bundle
npm run build
# Validate npm package payload without publishing
npm run pack:check
# Run package payload security & privacy scan
npm run security:package
# Run end-to-end tarball installation smoke test
npm run smoke:package
アーキテクチャ
MCP Clients (Claude Desktop, Cursor, Custom SDK Clients)
│
┌───────────────┴───────────────┐
▼ ▼
Stdio Transport Streamable HTTP Transport
(process.stdin / stdout) (127.0.0.1:3000/mcp)
│ │
└───────────────┬───────────────┘
▼
McpServer Instance
(Profile-Aware Server Instructions)
│
┌───────────────┴───────────────┐
▼ ▼
Tool & Prompt Profiles Internal Telemetry
(safe, workspace, diag, ...) (Metrics & Stderr Logger)
│ │
├──────► Read-Only Workspace, Search, Resources & Prompts (Allowlisted Roots, Host Privacy)
│
├──────► In-Memory LRU Cache (Single-Flight Stampede Protection)
│
└──────► Reusable Worker Thread Pool (CPU Offloading)
セキュリティ
- デフォルトのセキュリティプロファイル(
safe)では、明示的にオプトインしない限り、ファイルシステムやハードウェアの検査機能は公開されません。 - 読み取り専用のワークスペースアクセスでは、ファイルアクセスを設定済みの
--rootディレクトリ内に厳密に限定し、ホストのファイルシステムの絶対パスを公開しません。 - サーバーの指示とプロンプトでは、文字のエスケープを用いて、安全なツールの実行順序と明確なタスク境界を徹底します。
- Stdio トランスポートでは
stdoutを JSON-RPC メッセージ専用とし、内部デバッグログとテレメトリログはすべてstderrに出力します。 - HTTP トランスポートでは、ローカルホストのオリジンと Host ヘッダーを厳密に検証します。
詳細については、SECURITY.md をご覧ください。
貢献とリリース
貢献やフィードバックを歓迎します!コードスタイル、ツール開発の規約、テスト要件、メンテナーによるリリースワークフローの詳細については、CONTRIBUTING.md をお読みください。
ライセンス
このプロジェクトは MIT License の下でライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。