Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「MCPを使ってる人」が より詳しくなるための解説

「MCPを使ってる人」が より詳しくなるための解説

このプレゼンテーションは、「MCPを使ってる人」がより詳しくなるための解説を目的としています。

内容としては、以下のトピックが扱われています。
MCPとは何か: MCPの基本的な概念と、Function Callingとの違いについて説明しています。
MCPの簡単な仕様: MCPの構造、登場する概念(MCP Server、MCP Client、MCP Protocolなど)、具体的な使い方、Transport Layer(JSON RPC、StdinTransport、StreamableHTTP、HTTP+SSE)について解説しています。
なぜMCPが流行っているのか: MCPのメリットや、なぜ注目されているかを解説しています。
MCPの問題点: MCPの課題点と、その分類(MCP自身が内包する問題とAgentがMCPを使用する際に発生する問題)について説明しています。
今後の展望: A2Aの紹介とマルチエージェント時代の可能性について触れています。

Avatar for Kota-Yamaguchi

Kota-Yamaguchi

May 15, 2025
Tweet

Other Decks in Programming

Transcript

  1. (推測)ツール提供側も困るし、利用者側も困ってた このモデルFunctionCallingのレイ ヤー作らないと... ツール提供者 アプリor プラットフォーム開発者 LLMの利用者 あのリソース使って調べ物したい、 開発したいなあ Difyでは提供してないかー

    Langchainならあるかー 自作するかー リソースあって、LLMに使わせるツー ル作りたいけど、 Langchainで提供がいい? Vercel AI SDKがいい?? Difyのプラグイン作る?? わからない・・・
  2. MCP誕生 MCP は、アプリケーションが LLM にコンテキストを提供する ⽅法を標準化するオープン プロ トコルです。MCP は、AI アプリ

    ケーション⽤の USB-C ポートの ようなものです。 (https://modelcontextprotocol.i o/introduction より)
  3. (推測)MCPが出てきてみんなハッピー! ツール載せるのはMCPで統一できそ う! FunctionCallingをいいい感じにする レイヤーいらなくなった! アプリor プラットフォーム開発者 LLMの利用者 ツール提供者 あのリソースMCPで提供して

    る!ラッキー! とりあえずMCPにのせてリソース公 開すればええやん! 開発者側にも 利用者側にも使ってもらうぞ! MCP Clientさえあれば、ツール提供者と そのままやりとりできる
  4. 登場する概念 • MCP Server ◦ 各社がリソースを公開して いるかはこちらを確認しよ う • MCP

    Client ◦ CursorやClaude Desktop などがこれにあたる • MCP Protocol ◦ MCPClientとMCPServerを 間の通信を扱うプロトコル 部分 https://modelcontextprotocol.io/introduction より
  5. 登場する概念 実装する可能性の高い、 この間部分を今日は深掘 りします! • MCP Server ◦ 各社がリソースを公開して いるかはこちらを確認しよ

    う • MCP Client ◦ CursorやClaude Desktop などがこれにあたる • MCP Protocol ◦ MCPClientとMCPServerを 間の通信を扱うプロトコル 部分 https://modelcontextprotocol.io/introduction より
  6. JSON RPC TransportLayer MCP ClientとServerの間は? stdin StreamableHTT P HTTP+SSE 接続方式

    標準入力+出力 HTTP HTTP+EventSo urce Client→Server 文字列 (JSON-RPC)を 逐次書き込み POST 追加送信は別 REST 呼び出しが 必要 Server→Client stdout へ逐次 書き込み SSE ストリームで プッシュ/単発 JSON SSEエンドポイント でSSE ストリーム - ステートレスにでき る? - Transport層一覧
  7. StreamableHTTP とHTTP+SSEの違い HTTP+SSEとは? HTTPP OST SSE ①GET ②セッションを発⾏+ HTTP POSTのエンドポイントを返却

    ③メッセージを送信 ④イベント キャッチ メッセージ返 却先をセッ ションIDで特 定してSSEかレ スポンス
  8. StreamableHTTP とHTTP+SSEの違い HTTP+SSEとは? HTTPP OST SSE ①GET ②セッションを発⾏+ HTTP POSTのエンドポイントを返却

    ③メッセージを送信 ④イベント キャッチ メッセージ返 却先をセッ ションIDで特 定してSSEかレ スポンス ⑤SSEメッセージをPush
  9. StreamableHTTP とHTTP+SSEの違い HTTP+SSEとは? HTTPP OST SSE ①GET ②セッションを発⾏+ HTTP POSTのエンドポイントを返却

    ③メッセージを送信 ④イベント キャッチ メッセージ返 却先をセッ ションIDで特 定してSSEかレ スポンス ⑤EventをPush すでにHTTP+SSEはLegacy これからは StreamableHTTP
  10. なぜSSE+HTTPからStreamableHTTPに移行した? 前提: • 実装負荷が低く扱いやすい HTTP + SSEを最初に採⽤ ◦ HTTP+SSEは約160⾏、streamableHTTPは約700⾏ほど 問題:

    • mcpが広く使われ、PaaS へのデプロイ で、接続を保持する⽅式が⾜かせ • コネクション状態をサーバ側が抱えるため オートスケール∕サーバーレス環境でス ケールアップ‧ダウンが困難。 解決策: • 接続状態を持たない ストリーミング対応 HTTP へ置き換え、MCP を ステートレス化 ⼀部私の推測が⼊っていますが、基本移⾏の流れはGithubDiscussionに書かれています。 https://github.com/modelcontextprotocol/modelcontextprotocol/pull/206
  11. なぜWebSocketにしなかった? ~WebSocketを眺めながら 問題点① 呼び出ごとにソケットを貼るのは重い 現状想定しているのは単発低頻度で動くRPCのような動かし⽅っ 毎回毎回 WebSocket を開閉すると HTTP‐>WS アップグレード

    ローズ処理のたびに往復遅延とオーバーヘッドが発⽣します 問題点① 呼び出ごとにソケットを貼るのは重い 現状想定しているのは単発低頻度で動くRPCのような動かし⽅っ 毎回毎回 WebSocket を開閉すると HTTP‐>WS アップグレード ローズ処理のたびに往復遅延とオーバーヘッドが発⽣します →とはいえ⾼頻度なやり取りがある場合はWebSocketの⽅がオー ヘッドは少なくなります
  12. Tool Resource Prompt Tool • Resource ◦ MCP サーバーがクライアントに提供したいあらゆ る種類のデータを提供する

    ◦ アプリケーションが制御するもの。ユーザーにどう 使わせるかは各MCP Clientの⾃由とされています。 ◦ 選ばせてもいいし、⾃動で⼊⼒されてもいい • Prompt ◦ サーバーは再利⽤可能なプロンプト テンプレートと ワークフローを定義でき、クライアントはそれを ユーザーや LLM に簡単に表⽰できます ◦ 基本はユーザーが制御するもので、ユーザーが明⽰ 的に選択する ◦ ClaudeForDesktopで主に採⽤されている MCP Server側の機能(Resource, Prompt)
  13. • Sample ◦ Server側がClient側に対 してLLMの⽣成‧補完を 要求できる機能 ◦ Claude for Desktopでも

    まだない機能 ◦ アプリケーション側が ⾃由に実装しても良い MCP Client側の機能(Sampling) Sampling https://modelcontextprotocol.io/specification/2025-03-26/client/sampling より
  14. (推測)MCPが出てきてみんなハッピー! ツール載せるのはMCPで統一できそ う! FunctionCallingをいいい感じにする レイヤーいらなくなった! アプリor プラットフォーム開発者 LLMの利用者 ツール提供者 あのリソースMCPで提供して

    る!ラッキー! とりあえずMCPにのせてリソース公 開すればええやん! 開発者側にも 利用者側にも使ってもらうぞ! MCP Clientさえあれば、ツール提供者と そのままやりとりできる
  15. MCPの問題点 ~私が⾟いなと思う瞬間4選~ 大量のコンテキス トを渡してくる。 それがノイズになっ て邪魔してくる。辛 い ① エージェントが MCPちゃんと選ん でくれない

    ツール大量で多分 選ぶの大変そう。 ツール多いとノイズ にもなりそう ② 長時間・非同期タ スクに適してない notificaiton/progr essを使うことで ⻑時間タスクを進 捗確認しながら実 ⾏できるが、コネ クション繋ぎなが らなので⾮同期で はない。 ③ MCPで外部リソー スを検索するのコ スパわるい 「A」を書いてるド キュメント取得する ために list→read→read →read…を繰り返 して見つからなくて 辛い。 時間もコストだけで 成果はない ④
  16. ①MCP⾃⾝が内包する問題 • セキュリティ ◦ stdio機能を介して、MCPサーバーがローカルで悪意のあるコードを実⾏する可 能性 ◦ MCPサーバー側で意図せずに使っている悪意あるサードパーティのライブラリ を実⾏してしまう。 ◦

    MCPではツールの名前や説明が実際に動くコードが違うことでうっかり悪意の あるツールを実⾏してしまう。 • 使い勝⼿ ◦ Approve押すのめんどくさいけど、ないと不安 • ⾮同期‧⻑時間タスク ◦ notificaiton/progressを使うことで⻑時間タスクを進捗確認しながら実⾏でき るが、コネクション繋ぎながらなので⾮同期ではない。 ◦ LLMにpollingすることをプロンプトで指⽰することで⾮同期チックなことは可 能だが、Agentがそれをどのタイミングで確認させるかや、確認が積み重なる ことでコンテキストを圧迫してしまいよくない。
  17. ②AgentがMCPを使⽤する際に発⽣する問題 • MCPのツールをいっぱい提供するとコンテキスト圧迫する • 問題が複雑であればあるほど解決するためのステップ数やその組み合わせが⼤きく なってうまくいかない。 • MCPに実装されているツールに依存して以下の問題が発⽣(この辺は実装が触れるな ら解決できる) ◦

    コンテキストの量の制御ができないので、コンテキストが多すぎてコスト増加 ‧精度低下を起こしてしまう。 ◦ 「A」を書いてるドキュメント取得するために、 list→read→read→read…を繰り返 して見つからなくて辛い。時間もコストだけで成果はない
  18. ②AgentがMCPを使⽤する際に発⽣する問題 • MCPのツールをいっぱい提供するとコンテキスト圧迫する • 問題が複雑であればあるほど解決するためのステップ数やその組み合わせが⼤きく なってうまくいかない。 • MCPに実装されているツールに依存して以下の問題が発⽣(この辺は実装が触れるな ら解決できる) ◦

    コンテキストの量の制御ができないので、コンテキストが多すぎてコスト増加 ‧精度低下を起こしてしまう。 ◦ 「A」を書いてるドキュメント取得するために、 list→read→read→read…を繰り返 して見つからなくて辛い。時間もコストだけで成果はない 問題解決空間ごとに責務を分ければ うまくいきそう
  19. ②AgentがMCPを使⽤する際に発⽣する問題 • MCPのツールをいっぱい提供するとコンテキスト圧迫する • 問題が複雑であればあるほど解決するためのステップ数やその組み合わせが⼤きく なってうまくいかない。 • MCPに実装されているツールに依存して以下の問題が発⽣(この辺は実装が触れるな ら解決できる) ◦

    コンテキストの量の制御ができないので、コンテキストが多すぎてコスト増加 ‧精度低下を起こしてしまう。 ◦ 「A」を書いてるドキュメント取得するために、 list→read→read→read…を繰り返 して見つからなくて辛い。時間もコストだけで成果はない 問題解決空間ごとに責務を分ければ うまくいきそう エージェントごとに責務を作れば、うまく問 題解決空間絞れてうまくいきそう
  20. ②AgentがMCPを使⽤する際に発⽣する問題 • MCPのツールをいっぱい提供するとコンテキスト圧迫する • 問題が複雑であればあるほど解決するためのステップ数やその組み合わせが⼤きく なってうまくいかない。 • MCPに実装されているツールに依存して以下の問題が発⽣(この辺は実装が触れるな ら解決できる) ◦

    コンテキストの量の制御ができないので、コンテキストが多すぎてコスト増加 ‧精度低下を起こしてしまう。 ◦ 「A」を書いてるドキュメント取得するために、 list→read→read→read…を繰り返 して見つからなくて辛い。時間もコストだけで成果はない 問題解決空間ごとに責務を分ければ うまくいきそう エージェントごとに責務を作れば、うまく問 題解決空間絞れてうまくいきそう マルチエージェント時代が 次に来るのでは?