AIにコードを実行させる試みの紹介: mcp-pyodide

AIが文章を書くだけでなく、コードを書いてしかも実行できるようになったことに大変な衝撃を感じました。特に2023年からのOpenAI Code Interpreterの登場以降、この分野は着実に発展を遂げています。しかし、セキュリティと拡張性のバランスという課題は今なお残っていると考えています。

この記事では、AIコード実行技術の歴史を振り返り、安全なPython実行環境として開発した私の「**mcp-pyodide**」というプロジェクトを紹介します。

## AIコード実行技術の進化：年表

AIにコードを実行させる技術について振り返ってみましょう。

| 日付         | 出来事                              | 詳細と意義                                                                                                      |
| ---------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| 2023年3月23日 | OpenAI Code Interpreterアルファ版リリース | ChatGPT Pluginsの一部として発表。ChatGPT Plus（有料版）ユーザーのみが利用できる実験的機能として提供。サンドボックス化されたPython環境でコードを実行できる機能だが、厳しい制限あり。 |
| 2023年7月6日  | OpenAI Code Interpreterベータ版リリース  | 正式発表により、AIにコードを実行させる可能性が広く認識される。インターネットアクセスなし、限られたパッケージ、100MBのアップロード上限、120秒の実行時間制限など多くの制約あり。               |
| 2023年8月    | OpenInterpreterプロジェクト公開          | GitHubでのオープンソースプロジェクト。ローカル環境でコードを実行する自由度を提供し、OpenAIの制限を克服。                                                 |
| 2023年8月28日 | ChatGPT Enterprise発表             | Enterprise版では「Advanced Data Analysis」という名称で、以前のCode Interpreterの機能が無制限に利用可能に。                              |
| 2023年10月   | Cursor IDE発表                     | VSCodeをベースにした「AIファースト」のコードエディタ。AIとの対話を通じてコードを生成・実行する機能を提供。                                                 |
| 2024年1月    | Cline VS Code拡張リリース              | VS Code向けの拡張機能として、MCP（Model Context Protocol）に対応したエージェント型AIアシスタントを提供。システムレベルでの統合を実現。                       |
| 2024年2月    | Microsoft Azure OpenAI Service対応 | MicrosoftがAzure OpenAI ServicesでCode Interpreter機能のサポートを開始。企業向けのAIソリューションとして、セキュリティとコンプライアンスに配慮した実装を提供。    |
| 2024年3月    | CodeGPT Code Interpreter機能追加     | VS Code拡張としてのCodeGPTに、エディタ内で直接AIにコードを作成・実行させる機能が追加される。                                                     |
| 2024年5月16日 | OpenAIのデータ分析機能発表                 | Code Interpreterを拡張した「データ分析」機能が発表。GPT-4oモデルとの統合により、より高度なデータ分析やコード実行が可能に。                                   |
| 2025年2月24日 | Anthropic Claude Code発表           | ターミナル内で動作するエージェント型AIコーディングツール。Claude 3.7 Sonnetモデルを活用し、コードベースを理解し、ファイル編集やテスト実行、Gitワークフローなどを自然言語指示で実行可能。     |




## 安全なAIコード実行環境の条件

理想的なAIコード実行環境には複数の重要な条件が必要だと考えています。

まず、強固なサンドボックス化が不可欠です。意図しないバグや予期せぬシステム動作からも保護するための隔離機能が必要です。ローカルで実行する際には自分のPCの環境やファイルが気づかないうちに変更されることを防ぐためにも重要でしょう。AIが生成したコードには無害に見えても、システムクラッシュやデータ破損を引き起こす予期せぬエラーが含まれている場合があります。人間の処理能力を上回るスピードでコードが生成されるため、全てのバグを実行前にチェックすることは実質的に不可能だと思います。実際に不正なメモリ処理やファイル操作などで仮想環境やPCがクラッシュした経験をされた方もいらっしゃるのではないでしょうか（私は何度も経験しました）

次に、拡張性とアクセス制御のバランスも重要です。上記のようにサンドボックス化した上で、AIがファイルなどのリソースに対して柔軟にアクセスを提供できるようにする必要があります。この両立が完全に達成されたソリューションの登場が待たれます。

## mcp-pyodide：MCPに対応した完全にコントールされたPython実行環境

これらの課題を解決する一案として開発したのが「**mcp-pyodide**」です。もともとPyodideはWebAssemblyというブラウザ向けのPython実行環境ですが、メモリなどのリソースが完全にコントロールされていること、万が一クラッシュしてもホストシステムに影響を与えることのない点などがサンドボックスに適していると考えました。AIとの接続はModel Context Protocol (MCP)を採用し、Claudeアプリから利用することができます。

`claude_desktop_config.json`は下記のように設定します。

```json
{
  "mcpServers": {
    ...
    "pyodide": {
      "command": "npx",
      "args": ["-y", "mcp-pyodide"],
      "env": {
        "PYODIDE_CACHE_DIR": "<キャッシュフォルダのフルパス>",
        "PYODIDE_DATA_DIR": "<データフォルダのフルパス>"
      }
    },
    ...
}
```

`mcp-pyodide`の中で扱えるフォルダは`data`マウントポイントにマウントします。マウントされていないファイルへのアクセスを防ぐ安全な仕組みになっています。

キャッシュフォルダはパッケージなどのキャッシュファイルを保存するフォルダです。`mcp-pyodide`ではごくわずかの例外を除いてほとんどのPythonパッケージを利用することができます(numpy, seaborn, scikit-learn...)。AIにMCP経由で利用したいパッケージをインストールさせることができます。

まだツール間の連携が整っていない部分のもあり、下記の例のようなプロンプトでの制御が必要かもしれません。

```
あなたは与えられたデータを元に分析を行います。

**下記の注意を理解し、落ち着いて取組みましょう**


## Setup

### 1. マウントポイントの確認

1. `pyodide_get-mount-points` でマウントポイントを確認してください\
2. `data` マウントポイントの内容を確認してください

---

## Analyse

### 1. Execution

1. 分析は `pyodide_execute`で行います（`Analyze` ではない）
2. パッケージは使用前に `pyodide_install-packages` でインストールしておく必要があります
3. 実行に時間がかかる場合はタイムアウトを延長しましょう

### 2. Save `.py` file before exec

1. 実行するコードが長くなる場合はマウントポイント以下に `.py` として保存してから実行します
2. `write_file` や `edit_file` を使う場合のパスはマウントポイントからのパスでなく、実際のファイルパスとなるので注意してください
3. 再利用可能なコードを保存するようにしましょう
4. まず最小機能の小さなファイルから始め、徐々に機能を追加していく差分開発を心がけましょう

---

## Image

1. 画像中に日本語を使うと文字化けします。
2. `japanize-matplotlib` は使用できません。

---

## Read file
1. ファイルをそのまま読むとサイズが大きすぎる場合があるので注意してください

---

## Output

1. 出力はマウントポイント以下にしてください
2. 計算途中のデータも出力し、次の計算時に効率よく再利用するようにしてください。
```


## まとめ

AIによるコード実行技術は、OpenAIのCode Interpreterの登場以降、急速に進化してきました。しかし、セキュリティと拡張性のバランスを取る課題は依然として残っています。既存のプラットフォームはそれぞれ長所と短所を持っており、用途によって最適な選択が必要です。

独立したツールとしてのアプローチから統合開発環境への組み込みへの流れが進む中、mcp-pyodideが、Model Context Protocol (MCP) に準拠したPyodide実装として、これらの課題に対するひとつの解決策になれば幸いです。

## 参考リンク

- [mcp-pyodide GitHub](https://github.com/yonaka15/mcp-pyodide)
- [OpenAI Code Interpreter公式ドキュメント](https://platform.openai.com/docs/assistants/tools/code-interpreter)
- [Open Interpreter GitHub](https://github.com/OpenInterpreter/open-interpreter)
- [Azure OpenAI Assistants Code Interpreter](https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/code-interpreter)
- [ChatGPT Release Notes](https://help.openai.com/en/articles/6825453-chatgpt-release-notes)
- [Model Context Protocol](https://github.com/modelcontextprotocol)
- [Cursor公式サイト](https://cursor.sh/)
- [Cline VS Code拡張](https://marketplace.visualstudio.com/items?itemName=SipsCo.cline)
- [CodeGPT VS Code拡張](https://marketplace.visualstudio.com/items?itemName=DanielSanMedium.dscodegpt)
- [Claude Code 概要ドキュメント](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview)
- [Claude Code GitHub](https://github.com/anthropics/claude-code)