概要
- CLIツール にはプラットフォーム依存やセッション管理の課題が存在
- MCP(Model Context Protocol) は状態管理に優れるが、ツールの合成が難しい
- Pythonインタプリタ を1ツールとしてMCPサーバーで実装する手法の提案
- pexpect を活用し、状態を保持したデバッグや自動化が可能
- コード例を通じて、 MCPの利点 とCLIの課題を比較
CLIベースのツール利用における課題
- CLIツール はプラットフォームやバージョン依存、ドキュメント不足の問題
- 非ASCII文字列や制御文字入力時の不具合発生
- エージェント型コーディングツール は新規ツールや未知のシンタックスに弱い傾向
- セキュリティ対策としての 事前チェック(preflight) による遅延(特にClaude Code)
- セッション管理の難しさ(例:tmuxセッションの状態喪失)
- 小さなミスでセッションがリセットされるなど、失敗時のリカバリー困難
CLIにおける合成性とその限界
- bash 等のシェル言語を介したツール合成が可能
- シンプルなコマンドの組み合わせや スクリプト化 で柔軟性を担保
- しかし、MCPでは 推論なしでのツール合成が困難
- コマンドラインは複数ツールの連携が容易だが、MCPはツール単体利用が前提
MCPサーバーの新しいアプローチ
- MCPサーバー で「1ツール=Pythonインタプリタ」を採用する手法
- 状態管理 はMCPが得意とする分野
- Pythonインタプリタを通じて pexpect 等のSDKを利用可能
- MCPのインターフェースを プログラミング言語(Python) に統一
- セッション中のコードをそのまま再利用可能なスクリプトに変換可能
pexpectを活用したMCPツールの実例
- pexpect は古く安定したAPIを持つ、CLI操作自動化用Pythonライブラリ
- MCPツールとしてpexpect_toolを実装
- Pythonコードをセッション状態で実行
- 例:LLDBデバッグセッションの自動化
- コード例
- プロセス起動、コマンド送信、出力取得、例外処理など一連の操作をPythonで記述
- セッション内での状態維持が容易
MCPの利点とCLIとの比較
- 状態管理 やセッション維持がMCPの強み
- CLIではエージェントが状態を追いきれず失敗リスク増
- プログラミング言語としてのPython を利用することで、エージェントの学習済みパターンを活用
- MCPセッションの履歴を活かし、再利用可能なスクリプト生成も容易
まとめ
- CLIツールは柔軟だが、 セッション管理や合成性に課題
- MCPは状態管理に優れるが、 ツール合成や未知ツール対応が課題
- Pythonインタプリタ+pexpect をMCPツールとして活用することで両者の利点を統合
- 今後は MCPサーバーの拡張 やエージェントの適応力向上が期待