【LangGraph】MCP Adapters(模型上下文协议 适配器):连接多个 MCP 服务器并加载 LangChain 兼容工具、提示和资源的类和函数_multiservermcpclient
LangChain 模型上下文协议(MCP)适配器
MCP 适配器模块提供了用于连接多个 MCP 服务器并加载 LangChain 兼容工具、提示和资源的类和函数。
1. 类
1.1 类 MultiServerMCPClient
描述:
MultiServerMCPClient
是用于连接多个 MCP 服务器并从中加载 LangChain 兼容工具、提示和资源的客户端。
1.1.1 方法
__init__
MultiServerMCPClient
。session
get_tools
get_prompt
get_resources
方法 __init__
__init__( connections: dict[str, Connection] | None = None,) -> None
描述:
使用 MCP 服务器连接初始化 MultiServerMCPClient
。
参数:
connections
dict[str, Connection] | None
None
,则不建立初始连接。None
方法 session
async session( server_name: str, *, auto_initialize: bool = True) -> AsyncIterator[ClientSession]
描述:
连接到 MCP 服务器并初始化会话。
参数:
server_name
str
auto_initialize
bool
True
引发异常:
ValueError
返回值:
AsyncIterator[ClientSession]
方法 get_tools
async get_tools( *, server_name: str | None = None) -> list[BaseTool]
描述:
获取所有连接服务器的所有工具列表。
参数:
server_name
str | None
None
,返回所有服务器的所有工具(默认)。None
注意:
每次工具调用将创建一个新会话。
返回值:
list[BaseTool]
方法 get_prompt
async get_prompt( server_name: str, prompt_name: str, *, arguments: dict[str, Any] | None = None) -> list[HumanMessage | AIMessage]
描述:
从指定 MCP 服务器获取提示。
参数:
server_name
str
prompt_name
str
arguments
dict[str, Any] | None
None
返回值:
list[HumanMessage | AIMessage]
方法 get_resources
async get_resources( server_name: str, *, uris: str | list[str] | None = None) -> list[Blob]
描述:
从指定 MCP 服务器获取资源。
参数:
server_name
str
uris
返回值:
list[Blob]
1.1.2 示例
示例:基本用法(每次工具调用启动新会话)
from langchain_mcp_adapters.client import MultiServerMCPClientclient = MultiServerMCPClient( { \"math\": { \"command\": \"python\", # 请确保更新为您的 math_server.py 文件的完整绝对路径 \"args\": [\"/path/to/math_server.py\"], \"transport\": \"stdio\", }, \"weather\": { # 请确保在端口 8000 上启动您的天气服务器 \"url\": \"http://localhost:8000/mcp\", \"transport\": \"streamable_http\", } })all_tools = await client.get_tools()
示例:显式启动会话
from langchain_mcp_adapters.client import MultiServerMCPClientfrom langchain_mcp_adapters.tools import load_mcp_toolsclient = MultiServerMCPClient({...})async with client.session(\"math\") as session: tools = await load_mcp_tools(session)
2. 函数
2.1 函数 load_mcp_tools
async load_mcp_tools( session: ClientSession | None, *, connection: Connection | None = None) -> list[BaseTool]
描述:
加载所有可用的 MCP 工具并将其转换为 LangChain 工具。
参数:
session
connection
返回值:
list[BaseTool]
2.2 函数 load_mcp_prompt
async load_mcp_prompt( session: ClientSession, name: str, *, arguments: dict[str, Any] | None = None) -> list[HumanMessage | AIMessage]
描述:
加载 MCP 提示并将其转换为 LangChain 消息。
参数:
session
ClientSession
name
str
arguments
返回值:
2.3 函数 load_mcp_resources
async load_mcp_resources( session: ClientSession, *, uris: str | list[str] | None = None) -> list[Blob]
描述:
加载 MCP 资源并将其转换为 LangChain Blob。
参数:
session
ClientSession
uris
返回值:
list[Blob]
3. 总结
- MCP 适配器机制:LangChain 的 MCP 适配器模块提供了连接多个 MCP 服务器并加载工具、提示和资源的客户端,支持与 LangChain 生态系统的无缝集成。
- 关键类:
MultiServerMCPClient
:客户端类,用于管理多个 MCP 服务器连接并加载资源。
- 关键函数:
load_mcp_tools
:加载 MCP 工具并转换为 LangChain 工具。load_mcp_prompt
:加载 MCP 提示并转换为 LangChain 消息。load_mcp_resources
:加载 MCP 资源并转换为 LangChain Blob。
- 使用建议:
- 使用
MultiServerMCPClient
连接多个 MCP 服务器,灵活管理工具和资源。 - 通过
session
方法显式管理会话以优化性能,或使用get_tools
自动创建会话。 - 指定
uris
参数以加载特定资源,避免加载不需要的动态资源。 - 确保服务器连接配置(如路径、端口、传输方式)正确,以避免
ValueError
。 - 在生产环境中,使用异步编程模式以提高效率。
- 使用
- 注意事项:
load_mcp_resources
的uris=None
不会加载动态资源,需显式指定 URI。- 确保 MCP 服务器运行并可访问,例如,天气服务器需在指定端口(如 8000)启动。
MCP 适配器模块为 LangChain 提供了强大的外部服务器资源整合能力,适合构建需要动态加载工具和提示的复杂工作流。
参考资料:
- https://langchain-ai.github.io/langgraph/reference/mcp/