はじめに
いまにはじまったことではありませんが、MCPがとても流行っていますね。
私もちまちま記事を見る程度には情報を収集していましたが、正直よくわからなかった。「言ってることはわかるんだけど、なんか実際のイメージが湧かない」みたいなふんわりとした状態でした。
そこで今回、まずはちょっとだけ理解するところまで勉強してみたので、その共有です。
前提
私は以下あたりの前提があります。
- 生成AIは業務でも、プライベートでも利用している
- 趣味程度にLangChainなどを用いたエージェント開発をしている
結論
読むのが面倒な方への結論です。(本当の結論は触ってみるのが早い)
- MCPはプロトコル(通信規約)である
- MCPに対応したアプリが、MCPサーバー経由で提供された機能を実行する
- アプリがMCPに対応することで、各AIサービスの機能に依存せず、MCPサーバーと接続して機能拡張が可能になる
- このアプリとは、Claudeなど
※「アプリ」という呼称については正式なホスト、クライアントの概念で後述
最初にもやもやしていたこと
以下、モヤモヤしていたことです。どれも理解が乏しかったがゆえ。
LangChainのToolsと何が違うのか
なんか「XXXのMCPが公開されました!」というニュースを見ますが、前からAPI呼び出せてたよね。みたいな。
MCP?MCPサーバー?
結局どれがただしいのか?サーバーはどこかにあるの?でもファイルアクセスするMCPがあったような?みたいな疑問がありました。
例えば、何かの操作を提供してくれるなら。
まあわからなくない。(いや認証認可とかどうするのかしら、という疑問はありましたが)
ただ、ローカルのファイルにアクセスするとなるなら...まあ理解が追いつかない状況でした。
結局何で使うのか。
MCPのメリットの表現として、LangChainのツールなどが比較で挙げられました。が、使っている情報をみると、ClaudeDesktopなり、GIthubCopilotなどで使っていました。
ツールの実装を楽にする(なくす)ものなのか、既存サービスの拡張機能なのか、???という状態でした。
理解が追いついたこと
色々と調べたり、使ってみたりして、以下のように理解が追いつきました。
LangChainのToolsと何が違うのか
Tools
あくまでLangChainで作成しているプログラムの一部。自前での実装が基本。
MCP(と呼ばれているもの、この言葉自体はプロトコルを指す)
MCPに準拠したプログラムが提供されているため実装などが不要。既存のツールを用意して自身の端末で起動して使用する。
(一部リモートにホストされるケースもあるらしいので例外あり)
MCP?MCPサーバー?
ここは複数の文脈がごちゃごちゃしていました。
MCP(Model Context Protocol)
まだMCPの哲学やアーキテクチャなどの背景までは理解していません。
ただ、理解したこととしては、まずMCPはプロトコルであること。
HTTPを例に挙げると、HTTPに準拠したクライアント(ブラウザなど)とサーバー(Nginx、SpringBootアプリケーション)が通信し、リクエストとレスポンスのやり取りを行う。
「MCP」も、クライアントとサーバーのやり取りのルールと理解しました。
てことは、そのプロトコルを使用する登場人物がいそうですね。
MCPサーバー
MCPサーバーについて、最初はどこかにあるサーバーを指すのかと思っていました。
(ただそういうケースもあるらしいですね、自分はまだそのケースを触れられていません)
実際は、基本的にはMCPサーバーと呼んでいるもの自体も、ユーザーのPC上で起動するものでした。
MCPホスト、MCPクライアント
ホスト自体はClaude Desktopや、GithubCopilitなどがあります。
クライアントは、ホストのなかでMCPの通信を司る部分を指し、特定のサービスがMCPに対応することで、ホストにMCPクライアントが用意され、MCPホストと呼べる状態になるのかもしれません。
「Why」について、やっと追いついてきたこと
言っていることはわかるんだけど、何のために使うの?についても結構モヤモヤしていました。
何のために使うか、という観点、以下のように理解できました。
これまで(これまでがちょっと前を指すなら私が時代遅れだった)
- デフォルトのサービス群は提供された機能しか使えませんでした
- Claudeのアーティファクト
- OpenAI,Geminiのdeepresearch
- あとは何か色々あるけど、各種サービスがいろいろ連携を追加、それに一喜一憂
- てことは提供されないとそれ以上のことができない
- で、私はLangChainなどでLLMを用いて、LLMをベースに、ファイルやAPIなど、+αに作用するプログラムを作成して遊んでいました
MCPを用いることで
ホストはMCPに対応することで、プロトコルに基づいて、いろいろな機能拡張が可能になった。
そして、それぞれの目線でも、以下のようなメリットが生まれる。
利用者
- 自分で使いたい機能を取り込むことができる
- 好きなMCPホストから、好きなサービスを利用できる
開発者
- 自身のサービスに対して、MCPサーバーを提供することで、LLMアプリケーションから利用可能にするIFを提供
ああ、ここまで来ると、MCPがUSB-Cポートに例えられる意味が理解できてきました。
Think of MCP like a USB-C port for AI applications.
もやもやの源泉
一番の根本原因は早く一次情報にアクセスして、やってみなかったことにあるのですが、そこはさておき。
自分のなかで理解が難しかった一番の理由は、LangChainのToolの実装の視点が色濃く残っていたためと思われます。
「不要になる」「サーバーで機能が提供される」みたいなのを見て、ライブラリが提供されるのか、REST APIを呼び出すのか、それは既存と何が違うのか?みたいなことを考えていました。
じゃあLangChainでどう使うのか?
LangChainアプリケーション(エージェント)にMCPクライアントを用意するみたいです。
世の中に全くついていけていませんが、以下のようなものを用いて解決できるようです。使ってみよう。
LangChainのToolなどは不要になるのか?MCPに置き換わるのか?
そんな感じはしていません。
これまでを踏まえて、MCPのポイントとして、以下が挙げられると考えます。
- プロトコルをベースとした機能の提供
- 共有性
そのため、そもそも提供されていない、独自のビジネスロジックである場合は、当たり前ですが実装が必要になります。
そして、それをMCPベースに作成するかは、そのユースケースにおける取捨選択と感じました。
まとめ
今回、今更感ありますが、MCPについてリサーチして、モヤモヤしていたことを理解してみました。
その過程で、GithubCopilotから「playwright mcp」を使用しましたが、自然言語でWebブラウザを操作できるという面白さと、
なにより、既存サービスだけではできないことを、MCPを用いることで、既存サービス+MCPで、機能拡張できることに驚きでした。
MCPについては、MCPクライアントとサーバーの通信や機能提供など、まだまだ気になることは多いので、引き続きリサーチしつつ、何か作ってみたいですね。
MCPはLLMアプリ、エージェント開発において、銀の弾丸みたいなすごいものなのかと思っていましたが、なんとなく標準化に近いのかな...なんて今回思いました。引き続き、使って楽しい、みたいなところだけではなく、アーキテクチャなどの部分も理解を深めていきたいと思います。
理論というよりとっかかり、モヤモヤの解消ネタでしたが、参考になれば幸いです。
以上です。