AIエージェントとMCPサーバーの連携ガイド:設定・ツール・実践例
AIエージェントとMCPサーバーの連携方法を徹底解説。基本設定からツール活用、実践的な連携手順まで、初心者にもわかりやすく紹介します。
AIエージェントとMCPサーバーの連携ガイド:設定・ツール・実践例
はじめに
AIエージェントは、自律的にタスクを実行するプログラムです。その能力を最大限に引き出すには、外部サービスやデータとの連携が欠かせません。そこで注目されているのがMCP(Model Context Protocol) です。MCPは、AIエージェントと外部ツール・サーバーを標準化された方法で接続するプロトコルです。本記事では、MCPサーバーの基本から設定、連携手順までを具体的に解説します。
AIエージェントとは
AIエージェントは、大規模言語モデル(LLM)を基盤とし、ユーザーの指示に基づいて自律的に行動するソフトウェアです。例えば、Web検索、データ分析、メール送信、ファイル操作などを、ユーザーに代わって実行します。代表的なAIエージェントフレームワークには、LangChain、AutoGPT、BabyAGIなどがあります。
MCP(Model Context Protocol)とは
MCPは、Anthropic社が提唱するオープンなプロトコルで、AIエージェントと外部ツール・データソースを安全かつ効率的に連携させるための規格です。従来、各エージェントは独自の方法で外部連携を行っていましたが、MCPにより統一的なインターフェースが提供されます。
MCPの主な要素
MCPサーバーの設定方法
MCPサーバーを設定するには、以下の手順を行います。ここでは、Pythonを使用した簡単な例を示します。
1. 必要なライブラリのインストール
pip install mcp
2. 基本的なMCPサーバーの作成
from mcp.server import Server
from mcp.types import Tool, TextContent
<h1>サーバーインスタンス作成</h1>
server = Server("example-server")
<h1>ツールの定義</h1>
@server.list_tools()
async def list_tools() -> list[Tool]:
return [
Tool(
name="calculator",
description="Perform basic arithmetic operations",
inputSchema={
"type": "object",
"properties": {
"expression": {"type": "string"}
},
"required": ["expression"]
}
)
]
<h1>ツールの実行</h1>
@server.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
if name == "calculator":
expression = arguments["expression"]
result = eval(expression) # 注意: 本番環境では安全な評価方法を使用
return [TextContent(type="text", text=str(result))]
<h1>サーバー起動</h1>
if __name__ == "__main__":
server.run()
このコードは、計算機ツールを提供するMCPサーバーです。evalは危険なため、本番ではast.literal_evalなど安全な方法を使ってください。
3. サーバーの起動
python server.py
デフォルトでは、localhost:8000で待ち受けます。
AIエージェントとの連携
AIエージェントがMCPサーバーと連携するには、MCPクライアントを使用します。以下は、LangChainを使った例です。
LangChainでのMCPクライアント設定
from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
from langchain_mcp import MCPClient
<h1>MCPクライアントの作成</h1>
client = MCPClient("http://localhost:8000")
<h1>ツールの取得</h1>
tools = client.get_tools()
<h1>LLMの設定</h1>
llm = OpenAI(temperature=0)
<h1>エージェントの初期化</h1>
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
<h1>実行</h1>
agent.run("What is 123 plus 456?")
これにより、AIエージェントがMCPサーバーの計算機ツールを使って計算を行います。
実践的な連携例
天気情報APIとの連携
MCPサーバーで天気APIをラップし、AIエージェントから利用する例です。
MCPサーバー側(weather_server.py)
import httpx
from mcp.server import Server, Tool, TextContent
server = Server("weather-server")
@server.list_tools()
async def list_tools():
return [
Tool(
name="get_weather",
description="Get current weather for a city",
inputSchema={
"type": "object",
"properties": {
"city": {"type": "string"}
},
"required": ["city"]
}
)
]
@server.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "get_weather":
city = arguments["city"]
async with httpx.AsyncClient() as client:
response = await client.get(f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid=YOUR_API_KEY")
data = response.json()
weather = data["weather"][0]["description"]
temp = data["main"]["temp"] - 273.15
return [TextContent(type="text", text=f"Weather in {city}: {weather}, temperature: {temp:.1f}°C")]
server.run()
AIエージェント側
from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI
from langchain_mcp import MCPClient
client = MCPClient("http://localhost:8000")
tools = client.get_tools()
llm = OpenAI(temperature=0)
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run("What's the weather in Tokyo?")
注意点とベストプラクティス
evalのような危険な関数は避けましょう。まとめ
MCPサーバーを利用することで、AIエージェントは標準化された方法で外部ツールと連携できるようになります。本記事で紹介した設定手順と実践例を参考に、あなたのAIエージェントに必要な機能を追加してみてください。MCPはまだ発展途上のプロトコルですが、今後の標準となる可能性が高いです。ぜひ試してみましょう。