mcpField
D
Deno Sandbox MCP Server

Deno Sandbox MCP Server

ローカル
github.com/bewt85AI・エージェント1378 週間前に更新

Deno Sandbox MCP Server について

Deno Sandbox MCP Serverは、LLMが生成したコードを試せるよう、DenoのサンドボックスでTypeScript、JavaScript、Pythonを実行します。起動引数でファイルやネットワークのアクセス範囲を設定できます。

主な機能

  1. 01TypeScript、JavaScript、Pythonのサンドボックス実行
  2. 02ディレクトリ単位のファイル読み書き制限
  3. 03ドメインやIP単位のネットワーク制限
  4. 04利用可能な権限を示すリソース

活用シーン

  1. 01隔離したディレクトリで生成コードをテスト
  2. 02コードの接続先を特定サイトに限定
  3. 03LLMが使えるサンドボックス権限の確認

MCP 対応

MCPクライアントに、Denoサンドボックスでコードを実行するツールと、サンドボックス権限を説明するリソースを提供します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"deno-sandbox": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/inspector"
]
}
}
}
起動コマンドnpx -y @modelcontextprotocol/inspector

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

パッケージ
npm@modelcontextprotocol/inspector

ツール

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

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

詳細

Deno Sandbox MCP Server

npm version

Deno® サンドボックスを使用して、ローカルマシン上のサンドボックスで TypeScript、JavaScript、Python のコードを実行できる MCP サーバーです。このサーバーは、明示的な権限設定(アクセス可能なウェブサイトや読み取り可能なファイルなど)に基づいてコードを実行するための、制御された環境を提供します。

注: このプロジェクトは Deno Land LLC とは一切関係ありません。私は Deno® ランタイムのファンというだけです。「Deno」は Deno Land LLC の登録商標です。

牛の絵が「hello」と話す cowsay のスクリーンショット

方法と理由

LLM はコードを書くのが得意であり、LLM 自身がコードを実行してテストできると便利です。問題は、特に悪意のある人間がプロンプトインジェクションを使って LLM をだます可能性がある場合、LLM が被害を与えないとは信頼できないことです。たとえば、メールを要約するよう LLM に何気なく依頼したところ、誰かがメールに、コードを実行してすべてのファイルを削除し、すべてのビットコインを自分に送るよう指示を書いていたとします。

サンドボックスは、LLM が書いたコードで実行できる操作を制限します。たとえば、特定のフォルダー内のファイルだけを変更できるようにしたり、信頼できる特定のウェブサイトにだけ接続できるようにしたりできます。

オペレーティングシステムによって、サンドボックスを作成する方法は異なります。より安全なものもあれば、より簡単に設定できるものもあります。このプロジェクトでは、その両方のバランスを取っています。

このサンドボックスは Deno を使用しており、Deno は Chrome が悪意のあるウェブサイトによるコンピューターへの被害を防ぐために使用しているものと同じ技術を使用しています。これにより TypeScript と JavaScript を実行でき、私のコードはごくわずかです。

また、熱心な開発者たちが、ウェブブラウザー内で Python を実行できる Pyodide を開発しました。これを使用して、同じ Deno 環境内でPython を実行できるようにしています。

Deno ランタイムに直接渡される引数を指定して、権限を制御します。次の項目を設定できます。

  • 読み取り可能なファイル(例:コードベース)
  • 書き込み可能なファイル
  • 特定のファイル(例:SSH キー)へのアクセス拒否
  • アクセス可能なウェブサイトまたは IP アドレス

対応していない機能

このコードベースは、代替手段よりも読みやすく保ち、利用者自身が監査できるようにしたいと考えています。シンプルさは重要なセキュリティ機能です。理解できる人が増えるほど、バグを見つけられる人も増えます。

また、Pyodide 環境を再利用しないことで、一部のパフォーマンスを犠牲にしています。わずかなオーバーヘッドが生じますが、実装の動作を把握しやすくなります。

着想を得たプロジェクト

Claude Desktop での使用方法

この MCP は、さまざまな MCP クライアントで動作するはずです。

Node.js または Deno をインストールする必要があります。両方をインストールする必要はありません。

Claude Desktop でこの MCP サーバーを使用するには、次の場所にある claude_desktop_config.json に追加します。

  • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows:%APPDATA%\Claude\claude_desktop_config.json

Deno がインストールされている場合

{
  "mcpServers": {
    "denoSandbox": {
      "command": "deno",
      "args": [
        "run",
        "npm:mcp-deno-sandbox",
        "--allow-net=icanhazip.com,example.com",
      ]
    }
  }
}

Node.js がインストールされている場合は、Deno が自動的にインストールされます

{
  "mcpServers": {
    "denoSandbox": {
      "command": "npx",
      "args": [
        "mcp-deno-sandbox",
        "--allow-net=icanhazip.com,example.com"
      ]
    }
  }
}

これらのツールを使うよう促すことで、LLM を活用できます。また、サンドボックスで利用可能な権限を定義するリソースもあります。権限拒否エラーが繰り返し発生する場合は、利用可能な権限を確認するよう LLM に提案できます。

権限の例

権限は実行時に設定する必要があります。変更した場合は、サーバーを再起動する必要があります。

権限はDeno® の権限と同じで、そのまま渡されます。

例

  1. ネットワークアクセス

    • 制限なし:--allow-net
      • すべてのネットワークアクセスを許可します
    • 制限あり:--allow-net=api.github.com,example.com
      • 特定のドメインへのネットワークアクセスのみを許可します
  2. ファイルシステム

    • 制限なし:--allow-read --allow-write
      • ファイルシステムへの完全なアクセスを許可します
      • トレードオフ:悪意のある LLM は、ドットファイルなど、あなたがアクセスできるものなら何でもアクセスできます(自身により多くの権限を付与できるよう編集可能なファイルも含みます)
    • 制限あり:--allow-read=/tmp --allow-write=/tmp
      • 特定のディレクトリのみに制限します
      • 隔離されたファイルの処理に適しています

権限の一覧と詳細なドキュメントについては、Deno® Securityを参照してください。

セキュリティに関する考慮事項

このサーバーは、サーバー起動時に指定された権限を使ってコードを実行します。これらの権限は Deno® ランタイムに渡されます。

有効にする権限には注意してください。次の操作を行うと、サンドボックスの保護が完全に損なわれます。

  • FFI または実行権限を無制限に付与する
  • サーバーの権限を管理するファイル(例:claude_desktop_config.json)への書き込みを許可する

また、機密情報を含む dotfiles(例:AWS、NPM、OpenAI の認証情報を含むファイル)への読み取り権限についても、慎重に検討してください。特に、ネットワークアクセスを許可している場合は注意が必要です。

悪意のある人物がプロンプトインジェクションを使い、あなたが使っている言語モデルをだまして、コンピューター上で有害な処理を実行させる可能性があることを覚えておいてください。読めない PDF の中や、要約を依頼した長文の途中に、見えないテキストを隠すこともできるかもしれません。

信頼できないコードをさらに隔離したい場合は、Deno® の追加の提案も参照してください。

既知の問題

Python
  • 何らかの理由で、open(PATH, 'w')を使ってファイルを書き込めません。ファイルの読み取りはできますが、書き込みができない理由は分かりません。回避方法のヒントをツールの説明に記載しました。また、LLM に import js; js.fs.writeFileSync(PATH, CONTENT)を実行できることを伝えることもできます。これは同じ Deno サンドボックス内で実行されますが、少し手間がかかります。
  • -A、-R、または-W権限を付与すると、どのファイルを pyodide 環境にマウントすべきか判断するのが難しくなります。現時点では、ホームディレクトリと/tmpを推測してマウントしています。他のディレクトリを明示的に指定することもでき、その場合はそれらもマウントされます。
  • このマウントが Windows で正しく機能するかどうかは分かりません。

開発

# Clone the repository
git clone https://github.com/bewt85/mcp-deno-sandbox.git
cd mcp-deno-sandbox

# Install dependencies
npm install

コードのフォーマットと型を確認します。

npm run checks

一部の問題を自動的に修正します。

npm run fix

MCP Inspector でテストします。

npx @modelcontextprotocol/inspector ./node_modules/.bin/ts-node src/index.ts

Inspector で次の例を試してください。

  1. 基本的な算術(権限なしで動作します):

    console.log(1 + 2);
    
  2. ネットワークアクセス(--allow-netが必要です):

    fetch('https://icanhazip.com').then(response => response.text()).then(ip => console.log(`Your IP is: ${ip.trim()}`));
    
  3. ファイルシステムへのアクセス(--allow-readが必要です):

    const text = Deno.readTextFileSync('/path/to/file.txt');
    console.log(text);
    

コントリビューション

時間にあまり余裕がないため、ほとんどの機能リクエストやコントリビューションには対応できません。何か追加したい場合は、リポジトリをフォークするのがよいでしょう。申し訳ありません。

リリース

リリースする場合:

  • package.jsonのバージョンを X.Y.Z に更新する
  • 変更をマージする
  • GitHub で vX.Y.Z のリリースを作成する
  • NPM に自動デプロイされるまで待つ

ライセンス

MIT

コメント

MCP は初めてですか?

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

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