MCP 端点¶
模型上下文协议 (MCP) 是一种开放协议,用于以模型无关的格式描述工具和数据源,使大型语言模型能够通过结构化 API 发现和使用它们。
LangGraph 服务器 使用 Streamable HTTP 传输实现 MCP。这使得 LangGraph Agent 可以作为 MCP 工具暴露,从而可以通过任何支持 Streamable HTTP 并符合 MCP 规范的客户端使用它们。
MCP 端点位于
在 LangGraph 服务器上。
要求¶
要使用 MCP,请确保已安装以下依赖项
langgraph-api >= 0.2.3
langgraph-sdk >= 0.1.61
通过以下命令安装
将 Agent 暴露为 MCP 工具¶
部署后,您的 Agent 将以以下配置作为工具出现在 MCP 端点中
- 工具名称:Agent 的名称。
- 工具描述:Agent 的描述。
- 工具输入模式:Agent 的输入模式。
设置名称和描述¶
您可以在 langgraph.json
中设置 Agent 的名称和描述
{
"graphs": {
"my_agent": {
"path": "./my_agent/agent.py:graph",
"description": "A description of what the agent does"
}
},
"env": ".env"
}
部署后,您可以使用 LangGraph SDK 更新名称和描述。
模式¶
定义清晰、最小的输入和输出模式,以避免向大型语言模型暴露不必要的内部复杂性。
默认的 MessagesState 使用 AnyMessage
,它支持多种消息类型,但对于直接暴露给大型语言模型来说过于通用。
相反,定义使用显式类型输入和输出结构的自定义 Agent 或工作流。
例如,一个回答文档问题的工作流可能看起来像这样
API 参考:StateGraph | START | END
from langgraph.graph import StateGraph, START, END
from typing_extensions import TypedDict
# Define input schema
class InputState(TypedDict):
question: str
# Define output schema
class OutputState(TypedDict):
answer: str
# Combine input and output
class OverallState(InputState, OutputState):
pass
# Define the processing node
def answer_node(state: InputState):
# Replace with actual logic and do something useful
return {"answer": "bye", "question": state["question"]}
# Build the graph with explicit schemas
builder = StateGraph(OverallState, input=InputState, output=OutputState)
builder.add_node(answer_node)
builder.add_edge(START, "answer_node")
builder.add_edge("answer_node", END)
graph = builder.compile()
# Run the graph
print(graph.invoke({"question": "hi"}))
更多详情,请参阅低级概念指南。
用法概述¶
要启用 MCP
- 升级到使用 langgraph-api>=0.2.3。如果您正在部署 LangGraph 平台,如果您创建新的修订版本,这将自动完成。
- MCP 工具 (Agent) 将自动暴露。
- 连接任何支持 Streamable HTTP 并符合 MCP 规范的客户端。
客户端¶
使用符合 MCP 规范的客户端连接到 LangGraph 服务器。以下示例展示了如何使用不同的编程语言进行连接。
注意 将
serverUrl
替换为您的 LangGraph 服务器 URL,并根据需要配置身份验证头部。
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
// Connects to the LangGraph MCP endpoint
async function connectClient(url) {
const baseUrl = new URL(url);
const client = new Client({
name: 'streamable-http-client',
version: '1.0.0'
});
const transport = new StreamableHTTPClientTransport(baseUrl);
await client.connect(transport);
console.log("Connected using Streamable HTTP transport");
console.log(JSON.stringify(await client.listTools(), null, 2));
return client;
}
const serverUrl = "http://localhost:2024/mcp";
connectClient(serverUrl)
.then(() => {
console.log("Client connected successfully");
})
.catch(error => {
console.error("Failed to connect client:", error);
});
目前尚未提供适用于 Python 的官方 MCP 客户端。
会话行为¶
当前的 LangGraph MCP 实现不支持会话。每个 /mcp
请求都是无状态且独立的。
身份验证¶
/mcp
端点使用与 LangGraph API 其余部分相同的身份验证。有关设置详情,请参阅身份验证指南。
禁用 MCP¶
要禁用 MCP 端点,请在 langgraph.json
配置文件中将 disable_mcp
设置为 true
这将阻止服务器暴露 /mcp
端点。