世界を動かす技術を、日本語で。

MCPはツールではなく、コードが必要だ

2025年8月18日原文(lucumr.pocoo.org)

概要

  • 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サーバーの拡張 やエージェントの適応力向上が期待

Hackerたちの意見

何かを略語で書くときの第一ルールは、まずその内容について説明を加えることだね。略語が何を指しているのかをちゃんと書くか、説明を入れるか、少なくとも他のページへのリンクを貼って、何が起こっているのかを説明する必要があるよ。編集:このリンクは修正されたので、今は古い情報だね。

または少なくとも何が起こっているのかを説明する他のページへのリンクがある その著者の以前の投稿へのリンクがあって(最初の10語の中にさえ!)、探しているコンテキストが含まれてるよ。

MCPはモデルコンテキストプロトコルのことだよ、生きてる世界へようこそ。洞窟の電気は消しておいてね。:) 今はMCPが何を指すのかはかなり知られていると思うけど、他の何かを指しているわけじゃないよね…?

略語が分からないなら、それはあなたがターゲットオーディエンスじゃないってことかも。このブログ投稿は、複数のMCPサーバーを使っている人たちのために書かれていて、LLMの使い方を変えることを主張してるんだ。用語の説明が必要で、略語をグーグルで調べる気もないなら、そもそも言ってることに興味がないってことだよね。株式市場のニュースに出てくる略語が何を意味するのか全く分からないし、株の人たちもCLIとAPI、LLMの違いなんて分からないけど、それが記事が悪いってわけじゃないよ。

MCPのことを言ってるの?そうなら、最初の段落の最初の文でちゃんとフルスペルが書かれてるし、詳しい投稿へのリンクもあるよ。それで、君が言った3つの基準のうち2つは満たしてるね。

「MCP」が何の略か知らないなら、この文章はあなたには向いてないよ。読んでみて、ターゲットオーディエンスじゃないと気づいたら、次に進んでいいんだ。あるいは、自分の時間を使って調べてもいい。HTTPやAPIが説明されてないと文句を言うようなものだよ。

これをやりたい人のために言っておくと、初頭の略語を紹介する正しい方法は、最初にフルタームを使って、その後に略語をカッコ内に入れることだよ。その後は略語だけを使えばいい。常にオーディエンスを考慮するべきだけど、ほとんどの非カジュアルな文章では、いろんな理由からこれが良いデフォルトだよ。

「MCP」は新しい「webscale」だね。 LLMが産業システムの間接的に所有されているオントロジーをオーケストレーションすることについて、哲学的な論文を書くのに使えるよ。SCADAシステムも含めてね。 https://arxiv.org/html/2506.11180v1 SCADAシステムは、以前STUXNETにハッキングされる必要があったから有名になったんだ。未来では、ただ雰囲気でハッキングできるようになるかも。

定義を探してるなら、初心者向けの記事を読むべきだよ。上級者向けじゃなくて。

これは単なるコードインジェクションなの? Pythonコードを渡すことについて話してるけど、Pythonインタープリタツールが必要だね。ガードレールを設置しても、ちょっと危険な感じがするけど、今はAIにコードを書かせる時代だから、他の人にリモートコード実行のアクセスを与えてもいいんじゃないかな、もうどうでもいいし。

そうだね、現代の開発プラクティスはRCEを機能として導入して、それを基に資金調達をすることだよ。

セキュリティについて:AIアシスタントをサンドボックスに入れてるよ。そこで、何でも好きなことができるし、危険なものを削除したり変異させたりもできる。Guixを使ってどうやるか書いたよ:https://200ok.ch/posts/2025-05-23_sandboxing_ai_tools:_how_g... それ以来、Bubblewrapを使うように切り替えた:https://github.com/munen/dotfiles/blob/master/bin/bin/bubble...

Hacker Newsで議論の続きを見る