mcpField
E
Exec Sandbox

Exec Sandbox

ローカル
github.com/inhuman開発ツール115 週間前に更新

Exec Sandbox について

Exec Sandboxは、呼び出し元が指定したPythonを制限環境で実行するオープンソースのMCPサーバーです。単一の`exec`ツールが出力と終了状態を返し、実行制限を設けています。stdioでの運用ではネットワークが遮断されます。

主な機能

  1. 01単一のPython `exec`ツール
  2. 02stdioでのネットワーク分離サンドボックス
  3. 03タイムアウトとリソース制限
  4. 04stdoutとstderrの出力上限
  5. 05stdio、HTTP、SSEトランスポート

活用シーン

  1. 01エージェント向けのPython計算実行
  2. 02ツールスキーマを増やさずにデータ変換
  3. 03制限環境での信頼できないコードの実行

MCP 対応

stdio、HTTP、SSE経由で、単一の`exec`ツールをMCPクライアントに公開します。ツールはPythonコードを受け取り、stdout、stderr、終了コード、実行時間、出力切り詰め、タイムアウト状態を返します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"inhuman-mcp-exec": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"MCP_EXEC_TRANSPORT",
"-e",
"MCP_EXEC_DEFAULT_TIMEOUT_S",
"-e",
"MCP_EXEC_MAX_TIMEOUT_S",
"-e",
"MCP_EXEC_MAX_OUTPUT_BYTES",
"-e",
"MCP_EXEC_MAX_STDIN_BYTES",
"-e",
"MCP_EXEC_AUTH_TOKEN",
"docker.io/idconstruct/mcp-exec:v0.5.4"
],
"env": {
"MCP_EXEC_TRANSPORT": "<MCP_EXEC_TRANSPORT>",
"MCP_EXEC_DEFAULT_TIMEOUT_S": "<MCP_EXEC_DEFAULT_TIMEOUT_S>",
"MCP_EXEC_MAX_TIMEOUT_S": "<MCP_EXEC_MAX_TIMEOUT_S>",
"MCP_EXEC_MAX_OUTPUT_BYTES": "<MCP_EXEC_MAX_OUTPUT_BYTES>",
"MCP_EXEC_MAX_STDIN_BYTES": "<MCP_EXEC_MAX_STDIN_BYTES>",
"MCP_EXEC_AUTH_TOKEN": "<MCP_EXEC_AUTH_TOKEN>"
}
}
}
}
起動コマンドdocker run -i --rm -e MCP_EXEC_TRANSPORT -e MCP_EXEC_DEFAULT_TIMEOUT_S -e MCP_EXEC_MAX_TIMEOUT_S -e MCP_EXEC_MAX_OUTPUT_BYTES -e MCP_EXEC_MAX_STDIN_BYTES -e MCP_EXEC_AUTH_TOKEN docker.io/idconstruct/mcp-exec:v0.5.4
設定が必要な環境変数
MCP_EXEC_TRANSPORTMCP transport. Must be 'stdio' for direct docker/stdio use.
MCP_EXEC_DEFAULT_TIMEOUT_SDefault wall-clock timeout per exec, seconds.
MCP_EXEC_MAX_TIMEOUT_SMaximum wall-clock timeout a caller may request, seconds.
MCP_EXEC_MAX_OUTPUT_BYTESCap on combined stdout/stderr before truncation.
MCP_EXEC_MAX_STDIN_BYTESCap on stdin passed to the sandboxed code.
MCP_EXEC_AUTH_TOKENシークレットOptional X-MCP-AUTH token (http/sse transports only).

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocidocker.io/idconstruct/mcp-exec:v0.5.4

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

mcp-exec

英語 | ロシア語

Version MCP Registry Docker Pulls Docker Image Version Build Go Version Go Report Card License: MIT Issues Last Commit

Go と MIT ライセンスによるオープンソースの公開 MCP サーバーです。単一の強力なツール exec を公開し、呼び出し元が指定した Python コードをネットワークから隔離された、制限付きのサンドボックスで実行して、stdout/stderr/exit_code を返します。これは「コード実行モード」を構成する基本要素です。エージェントのコンテキストを何百ものツールスキーマで埋め尽くす代わりに、エージェントがコードを書いて作業を調整します。

stdio/HTTP/SSE の3つのトランスポートに対応しており、どのトランスポートでも同じツールセットを利用できます(公式の modelcontextprotocol/go-sdk)。

exec ツール

入力:{ code: string (required), timeout_s?: int, stdin?: string } 出力:{ stdout, stderr, exit_code, duration_ms, truncated, timed_out }

  • exit_code がゼロ以外、または timed_out=true の場合も、ツールエラーではなく通常の結果です。ツール呼び出しエラーになるのは、無効な入力(code が空、stdin がサイズ超過)のみです。
  • サンドボックス v1:標準ライブラリに加え、PyYAML、Jinja2、Pillow、numpy、pandas、matplotlib を含む Python 3。

セキュリティモデル(不変条件)

実行ごとに、ネットワークなし、非 root、cap-drop=ALL、no-new-privileges、読み取り専用 rootfs、CAP_SYS_ADMIN なし、一時 tmpdir(実行後にクリーンアップ)、壁時計によるタイムアウト(プロセスグループ全体を強制終了)、メモリ/PID/CPU の制限、出力上限(1 MiB。超過時は truncated)が適用されます。インスタンス内では実行が直列化されます。レプリカを使用してスケールアウトしてください。呼び出し元のデータ(code/stdin/出力)は永続化されず、全内容がログに記録されることもありません。記録されるのはメタデータのみです。

exec は最も強力な機能です。エージェントに組み込む場合は、そのエージェントのツールポリシーで利用を制限してください(信頼されたロールのみ)。

ネットワークに関する注意: --network none が適用されるのは stdio のみです。HTTP/SSE ではポートを提供するためにコンテナにネットワーク接続が必要となるため、サンドボックス内のコードにも外部への通信が引き継がれます。オーケストレーター側で拒否してください。k8s では、ポートへの ingress を許可し、すべての egress を拒否する NetworkPolicy を設定します。

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata: { name: mcp-exec-lockdown }
spec:
  podSelector: { matchLabels: { app: mcp-exec } }
  policyTypes: [Ingress, Egress]
  ingress: [{ ports: [{ port: 8080 }] }]
  egress: []   # deny all egress → sandbox has no network

実行

go build -o mcp-exec ./cmd/mcp-exec
MCP_EXEC_TRANSPORT=stdio ./mcp-exec

Docker(本番環境での推奨設定):

docker run --rm -i --network none --read-only --cap-drop ALL \
  --security-opt no-new-privileges --user 65532:65532 \
  --tmpfs /tmp:rw,noexec,nosuid,size=64m \
  --memory 256m --pids-limit 128 --cpus 1 \
  idconstruct/mcp-exec

rootfs は読み取り専用であり、実行ごとに書き込み可能な一時ワークスペースが必要となるため、--tmpfs /tmp は必須です(一時ワークスペースは実行後にクリーンアップされます)。

認証(HTTP/SSE、任意)

MCP_EXEC_AUTH_TOKEN を設定すると、すべての HTTP/SSE リクエストに一致する X-MCP-AUTH ヘッダーが必要になります(比較は定時間で行われ、一致しない場合は 401 を返します)。空のトークンを設定すると無効になります。stdio には適用されません。

設定

環境変数用途デフォルト
MCP_EXEC_TRANSPORTstdio | http | ssestdio
MCP_EXEC_ADDRhttp/sse のリッスンアドレス:8080
MCP_EXEC_DEFAULT_TIMEOUT_Sデフォルトの実時間タイムアウト30
MCP_EXEC_MAX_TIMEOUT_Sタイムアウトの上限300
MCP_EXEC_MAX_OUTPUT_BYTESstdout と stderr の合計上限1048576
MCP_EXEC_MAX_STDIN_BYTESstdin サイズの上限1048576
MCP_EXEC_PYTHONインタープリターのパスpython3
MCP_EXEC_AUTH_TOKEN設定されている場合、http/sse では X-MCP-AUTH ヘッダーが必須です(定時間比較)。空の場合は無効です``

v1 では未対応

bash/複数言語、サンドボックスからのネットワーク接続、他の MCP サーバーのサンドボックスへのプロキシ。

ライセンス

MIT。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。