模型上下文协议 (MCP) 是一个开放协议,它标准化了应用程序向 LLM 提供工具和上下文的方式。LangChain 智能体可以使用 @langchain/mcp-adapters 库来调用 MCP 服务器上定义的工具。

快速入门

安装 @langchain/mcp-adapters 库:
@langchain/mcp-adapters 使智能体能够使用一个或多个 MCP 服务器上定义的工具。
MultiServerMCPClient 默认是无状态的。每次工具调用都会创建一个新的 MCP ClientSession,执行工具,然后清理。
访问多个 MCP 服务器
使用 LangSmith 追踪 MCP 工具调用及其伴随的智能体推理步骤。请遵循追踪快速入门指南进行设置。

自定义服务器

要创建你自己的 MCP 服务器,可以使用 @modelcontextprotocol/sdk 库。该库提供了一种简单的方式来定义工具并将其作为服务器运行。
要使用 MCP 工具服务器测试你的智能体,请参考以下示例:
数学服务器(stdio 传输)
天气服务器(SSE 传输)

传输机制

MCP 支持不同的客户端-服务器通信传输机制。

HTTP

http 传输(也称为 streamable-http)使用 HTTP 请求进行客户端-服务器通信。更多详细信息,请参阅 MCP HTTP 传输规范。 对于你自己运行的服务器,请使用本地 URL;对于托管服务器,可以使用类似 LangChain 文档 MCP 服务器(https://docs.langchain.com/mcp)这样的公开 URL,该服务器无需 API 密钥。

传递请求头

认证

stdio

客户端作为子进程启动服务器,并通过标准输入/输出进行通信。最适合本地工具和简单配置。

核心功能

工具

工具允许 MCP 服务器暴露可执行函数,LLM 可以调用这些函数来执行操作——例如查询数据库、调用 API 或与外部系统交互。LangChain 将 MCP 工具转换为 LangChain 工具,使其可以直接在任何 LangChain 智能体或工作流中使用。

加载工具

使用 client.getTools() 从 MCP 服务器检索工具并将其传递给你的智能体:
当 MCP 工具执行失败(CallToolResult 的 isError: true)时,@langchain/mcp-adapters 会引发 ToolException。使用 try/catch 包装工具调用来处理这些错误。与 Python 适配器不同,TypeScript 适配器不会将错误作为失败的工具消息返回给模型。

多模态工具内容

MCP 工具可以在其响应中返回多模态内容(图像、文本等)。当 MCP 服务器返回包含多个部分的内容(例如,文本和图像)时,适配器会将它们转换为 LangChain 的标准内容块。你可以通过 ToolMessage 上的 contentBlocks 属性访问标准化的表示:
这使你能够以与提供者无关的方式处理多模态工具响应,而无需关心底层 MCP 服务器如何格式化其内容。

其他资源