SIMPLE

MCPプロトコルの仕組み

MCP(Model Context Protocol)の概要と仕組み、AIエージェントにおける役割、通信方式、実装例について解説する。

通りすがりのラマ🦙
11 May, 2025

サムネはUnsplashのKelly Sikkemaが撮影した写真

はじめに

MCP(Model Context Protocol)は、LLM(大規模言語モデル)が外部のツールと連携するための仕組みである。特にAIエージェント構築において、柔軟かつ標準化されたツール呼び出しを実現する手段として注目されている。

用語

Host

AIエージェント本体を動作させる環境。MCP Clientもこの中で動作する。

MCP Client

エージェントがツールを呼び出す際に利用するクライアント側のモジュール。Host内で動作し、ツールとの通信を担当する。

MCP Server

ツールそのもの、あるいはツールの操作を受け付ける外部プロセス。Clientと通信し、実行結果を返す。

MCPを使ったAIエージェントの動作イメージ

  • MCP ClientはHost内で動作する。
  • MCP ClientとMCP Serverにはそれぞれ複数のツールが含まれる。
    • 例:
      • ローカルのMCP Server:playwright-mcp-server(ブラウザ操作)
      • インターネット上のMCP Server:google-search-mcp-server(Google検索API呼び出し)
  • MCP ClientとMCP Serverは1:1対応で設計されている。
    • 例:playwright-mcp-clientplaywright-mcp-server にのみ接続する。
  • MCP Serverにはローカルで動作するものと、インターネット経由で通信するものがある。
    • 基本的にはローカル動作の構成が主流である。
  • 外部APIとやり取りするMCP Serverも存在する。
    • 例:Google検索、天気予報API、翻訳サービスなどを利用するMCP Server。

MCP ClientとMCP Serverの通信プロトコル

MCP Client ←→ MCP Server(ローカル)

  • 通信には標準入出力(STDIN/STDOUT)を用いる。
  • MCP ClientがMCP Serverをプロセスとして起動し、双方向にデータを送受信する。

MCP Client ←→ MCP Server(インターネット上)

  • SSE(Server-Sent Events)による通信が主流。
  • 非同期リクエストとなることが多く、ストリーミングでレスポンスを返す設計が多い。

コード例

以下は、MCP ClientがローカルのMCP Serverを起動し、提供されているツールの一覧を取得するコード例である。

from mcp_sdk import MCPServerStdio

fetch_params = {"command": "uvx", "args": ["mcp-server-fetch"]}

async with MCPServerStdio(params=fetch_params) as server:
    fetch_tools = await server.list_tools()

for tool in fetch_tools:
    print(f"{tool.name}: {tool.description.replace('\n', ' ')}")

この例では、mcp-server-fetch というMCP Serverを起動し、list_tools() を用いて利用可能なツールの一覧を取得している。

fetch_paramsでプロセス(MCP Server)を起動するコマンドを定義している。プロセスを起動して標準入出力をマウントし、データのやり取りを行うことになる。

おわりに

MCPはLLMがツールと連携するためのシンプルで柔軟な仕組みである。ローカル実行や外部APIとも容易に接続でき、AIエージェントの拡張性を高める手段として有効である。

いろんなベンダーがMCP Serverを実装しているので、基本的には公開されているMCP Serverを使うのがよい。

ToolとMCP Serverの使い分けだが、再利用可能・公開したい場合には自前でMCP Serverを作っても良いが、それ以外の場合(使い捨ての関数など)はToolにした方が利便性が高い。

参考

このコースで学んだ内容です。めっちゃ勉強になるのでおすすめです。

https://www.udemy.com/course/the-complete-agentic-ai-engineering-course/https://www.udemy.com/course/the-complete-agentic-ai-engineering-course/

通りすがりのラマ🦙

このブログでは個人開発で得た知見や興味のあるテクノロジーに関する記事を執筆します。 日々公開されている情報に助けられているので、自分が得た知見も世の中に還元していければと思います。 解決できないバグに出会うと、草を食べます。🦙🌿 経歴: 情報工学部→日系SIer→外資系IT企業 興味: Webアプリケーション開発、Webデザイン、AI 趣味: 個人開発、テニス