TL;DR
- LangChain MCP Adapters は MCP サーバーを LangChain/LangGraph のツールに変換するライブラリ(MIT)
-
MultiServerMCPClient1 つで Stdio・HTTP・SSE の複数サーバーを同時接続し、すべてのツールを統一的に扱える - v0.3.0 で MCPエラー(
isError=true)をToolMessage(status="error")に自動変換——エージェントが自己修正できる -
pip install langchain-mcp-adapters langgraphだけで動き、LangGraph のStateGraph+ToolNodeとシームレスに統合できる
LangChain MCP Adapters とは
MCP(Model Context Protocol)は Anthropic が開発した AI とツールの接続標準で、2026年現在 Linux Foundation 傘下の AAIF で管理されています。GitHub・Filesystem・ブラウザ操作など 1 万以上の MCP サーバー が公開されており、Claude Code や Cursor などが標準対応しています。
一方、LangChain/LangGraph は Python/TypeScript の AI エージェントフレームワークとして広く使われていますが、MCP サーバーを直接 LangChain ツールとして扱う仕組み がありませんでした。
LangChain MCP Adapters はこのギャップを埋めるライブラリです。MCP サーバーを LangChain 互換のツールに変換し、既存の LangGraph ワークフローにそのまま組み込めます。
MCP サーバー群 LangChain/LangGraph
──────────────────── ─────────────────────────────────
[math_server.py] ─── Stdio ──┐
[weather_server] ─── HTTP ───┼─── MultiServerMCPClient ─── ToolNode
[github MCP] ─── SSE ────┘ ↓
StateGraph (LangGraph)
6月10日にリリースされた v0.3.0 では:
- エラー自動処理(
handle_tool_errors=True)でエージェントの自己修正能力が向上 - Streamable HTTP クライアントの最新仕様対応
- セキュリティ修正が含まれます
セットアップ
前提条件
- Python 3.10 以上
- OpenAI API キー(または Anthropic API キー)
インストール
pip install langchain-mcp-adapters langgraph "langchain[openai]"
環境変数の設定:
export OPENAI_API_KEY="sk-..."
ステップ 1: MCP サーバーを作る
まず、テスト用のシンプルな MCP サーバーを 2 つ用意します。FastMCP を使うと数行で書けます。
pip install "mcp[cli]"
math_server.py — 四則演算サーバー(Stdio 接続)
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Math")
@mcp.tool()
def add(a: int, b: int) -> int:
"""2つの整数を加算する"""
return a + b
@mcp.tool()
def multiply(a: int, b: int) -> int:
"""2つの整数を乗算する"""
return a * b
if __name__ == "__main__":
mcp.run(transport="stdio")
weather_server.py — ダミー天気サーバー(HTTP 接続)
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("Weather")
@mcp.tool()
def get_weather(city: str) -> str:
"""指定都市の天気を返す(デモ用ダミーデータ)"""
weather_data = {
"tokyo": "晴れ、気温 28°C",
"osaka": "曇り、気温 25°C",
"sapporo": "雨、気温 18°C",
}
return weather_data.get(city.lower(), f"{city} のデータなし")
if __name__ == "__main__":
mcp.run(transport="streamable-http", host="localhost", port=8000)
weather サーバーを起動しておきます:
python weather_server.py
ステップ 2: MultiServerMCPClient で複数サーバーに接続
MultiServerMCPClient は複数の MCP サーバーを辞書形式で管理します。
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient({
"math": {
"command": "python",
"args": ["./math_server.py"],
"transport": "stdio",
},
"weather": {
"url": "http://localhost:8000/mcp",
"transport": "streamable_http",
},
})
# 全サーバーのツールを取得
tools = await client.get_tools()
print([t.name for t in tools])
# → ['add', 'multiply', 'get_weather']
ツール名の衝突を防ぐ
複数サーバーに同名のツールがある場合は tool_name_prefix=True を指定します:
client = MultiServerMCPClient(
{...},
tool_name_prefix=True, # "math_add", "weather_get_weather" のように prefix が付く
)
ステップ 3: LangGraph エージェントに統合
StateGraph + ToolNode を使って、ツールを呼び出せるエージェントを構築します。
import asyncio
from langchain_mcp_adapters.client import MultiServerMCPClient
from langgraph.graph import StateGraph, MessagesState, START
from langgraph.prebuilt import ToolNode, tools_condition
from langchain.chat_models import init_chat_model
async def main():
model = init_chat_model("openai:gpt-4o-mini")
client = MultiServerMCPClient({
"math": {
"command": "python",
"args": ["./math_server.py"],
"transport": "stdio",
},
"weather": {
"url": "http://localhost:8000/mcp",
"transport": "streamable_http",
},
})
tools = await client.get_tools()
def call_model(state: MessagesState):
response = model.bind_tools(tools).invoke(state["messages"])
return {"messages": response}
builder = StateGraph(MessagesState)
builder.add_node("call_model", call_model)
builder.add_node("tools", ToolNode(tools))
builder.add_edge(START, "call_model")
builder.add_conditional_edges("call_model", tools_condition)
builder.add_edge("tools", "call_model")
graph = builder.compile()
# 複数ツールを組み合わせた質問
result = await graph.ainvoke({
"messages": [
("human", "(3 + 5) × 12 の計算と、東京の天気を教えて")
]
})
print(result["messages"][-1].content)
asyncio.run(main())
実行例:
(3 + 5) × 12 = 96 です。
東京の天気は「晴れ、気温 28°C」です。
add(3, 5) → 8、multiply(8, 12) → 96、get_weather("tokyo") → "晴れ..." の順でツールが呼ばれます。
v0.3.0 の新機能: エラー自動処理
MCP サーバーがエラー(isError=true)を返した場合、v0.3.0 以前はそのまま例外になってエージェントが停止していました。v0.3.0 からは handle_tool_errors=True(デフォルト)で自動的に ToolMessage(status="error") に変換されます。
client = MultiServerMCPClient(
{...},
handle_tool_errors=True, # デフォルト。エラーをエージェントが自己修正できる
)
動作の違い:
| バージョン | MCPエラー発生時の挙動 |
|---|---|
| v0.2.x 以前 |
ToolException が発生し、エージェントが停止 |
| v0.3.0 |
ToolMessage(status="error", content=エラー内容) として返され、エージェントが再試行可能 |
これにより、エージェントが「このツールは失敗した、別の方法を試そう」と自律的にリカバリーできます。
特定サーバーのみを使う
session() コンテキストマネージャーで特定のサーバーにだけ接続することもできます:
from langchain_mcp_adapters.tools import load_mcp_tools
async with client.session("math") as session:
math_tools = await load_mcp_tools(session)
# math サーバーのツールのみ使用
まとめ
| 機能 | 内容 |
|---|---|
| インストール | pip install langchain-mcp-adapters langgraph |
| 接続方式 | Stdio・HTTP・Streamable HTTP・SSE に対応 |
| 複数サーバー |
MultiServerMCPClient で辞書形式に一括管理 |
| ツール名衝突 |
tool_name_prefix=True でサーバー名プレフィックスを付与 |
| エラー処理 | v0.3.0 から handle_tool_errors=True でエージェント自己修正に対応 |
LangChain MCP Adapters を使えば、既存の LangGraph エージェントに MCP エコシステムの 1 万以上のサーバーを組み込めます。GitHub MCP・Filesystem MCP などの公式サーバーと組み合わせることで、ファイル操作・コード検索・Web 検索などを 1 つのエージェントループで実現できます。