mcp2py — 任意のMCPサーバをPythonモジュール化するライブラリ
概要
mcp2pyは「任意のMCPサーバをPythonモジュールとして扱う」ことを目指した軽量ラッパーです。コマンド文字列(例: npxコマンド)でサーバを起動し、ライブラリのload関数を呼ぶだけで、そのサーバ上で提供されるAPIをPythonの同期メソッドとして利用できます。設定ファイルや非同期プログラミングは不要で、短いコードでMCP対応サーバを統合できる点が最大の特徴です。READMEにある「3行で使える」というコンセプトがそのまま体現されています(約300字)。
リポジトリの統計情報
- スター数: 27
- フォーク数: 1
- ウォッチャー数: 27
- コミット数: 16
- ファイル数: 13
- メインの言語: Python
主な特徴
- 任意のMCPサーバをコマンド一発で読み込み、Pythonオブジェクト経由で呼び出せる
- 非同期(async/await)不要の同期APIを提供し、既存の同期コードベースに統合しやすい
- npx などのコマンドを使ってNode系MCPサーバともシームレスに連携可能
- 最小限の依存とシンプルな設計で、導入が容易
技術的なポイント
mcp2pyのコアアイデアは「任意プロセスとして動くMCPサーバをプロキシして、Python側で透過的に呼べるようにする」ことです。ユーザはload(“任意のコマンド”)でサーバプロセスを起動し、ライブラリはその標準入出力やソケットを使ってMCPプロトコルで通信するラッパーを作成します。実装上は、以下のような要素が重要になります:
- プロセス管理:指定コマンドの起動・終了、再起動やタイムアウトなどのライフサイクル管理
- シリアライズ/メッセージング:MCPプロトコルに基づくリクエスト/レスポンスの整形、JSONやバイナリなどのペイロード処理
- 同期APIラッパー:非同期なIOやイベント駆動のやりとりを内部で吸収し、ユーザ側にはブロッキングなメソッド呼び出しとして提供
- エラー処理とフォールトトレランス:サーバが落ちた場合の例外変換やログ出力、再接続の方針
- セキュリティとサンドボックス:任意コマンド実行によるリスク(シェル注入や不審プロセス)への注意喚起と利用上のガイド
READMEに示された例ではnpxを用いたNode製のMCPサーバをロードしています。これにより、配布されているMCPサーバパッケージをローカルにインストールせずに利用可能で、言語や実行環境の違いを気にせずPythonから機能を呼び出せる点が実用的です。一方で、ネイティブなランタイム(Nodeや外部バイナリ)をプロセスとして実行するため、起動コスト・依存環境・権限やパスの扱い(PATHにnpxが存在するか等)に注意する必要があります。リポジトリには実装計画やレビューのドキュメント(IMPLEMENTATION_PLAN.md / IMPLEMENTATION_REVIEW.md)が含まれており、設計や今後の改善点についての考察が見られます。
プロジェクトの構成
主要なファイルとディレクトリ:
- .coverage: file
- .gitignore: file
- .python-version: file
- IMPLEMENTATION_PLAN.md: file
- IMPLEMENTATION_REVIEW.md: file
…他 8 ファイル
(README抜粋)
mcp2py: Turn any MCP server into a Python module
Use any MCP server in 3 lines of Python code.
from mcp2py import load
server = load("npx -y @modelcontextprotocol/server-filesystem /tmp")
server.list_directory(path="/tmp")
That’s it. No configuration, no async/await, no setup. Just import, load, and call.
まとめ
設定不要で手軽、MCPサーバのPython統合に最適。
リポジトリ情報:
- 名前: mcp2py
- 説明: Turn any MCP server into a Python module
- スター数: 27
- 言語: Python
- URL: https://github.com/MaximeRivest/mcp2py
- オーナー: MaximeRivest
- アバター: https://avatars.githubusercontent.com/u/10967951?v=4