以编程方式使用文档

模型上下文协议(MCP)是一种开放协议,用于以模型无关的格式描述工具和数据源,使 LLM 能够通过结构化 API 发现和使用它们。

Agent Server 使用 Streamable HTTP 传输实现 MCP。这允许 LangGraph **代理** 作为 **MCP 工具**公开,使其可与任何支持 Streamable HTTP 的 MCP 兼容客户端一起使用。

MCP 端点可在此处访问 /mcp on Agent Server.

您可以设置 自定义认证中间件 来通过 MCP 服务器认证用户,以获取对 LangSmith 部署中用户范围的工具的访问权限。

此流程的示例架构:

sequenceDiagram
  %% Actors
  participant ClientApp as Client
  participant AuthProv  as Auth Provider
  participant LangGraph as Agent Server
  participant SecretStore as Secret Store
  participant MCPServer as MCP Server

  %% Platform login / AuthN
  ClientApp  ->> AuthProv: 1. Login (username / password)
  AuthProv   -->> ClientApp: 2. Return token
  ClientApp  ->> LangGraph: 3. Request with token

  Note over LangGraph: 4. Validate token (@auth.authenticate)
  LangGraph  -->> AuthProv: 5. Fetch user info
  AuthProv   -->> LangGraph: 6. Confirm validity

  %% Fetch user tokens from secret store
  LangGraph  ->> SecretStore: 6a. Fetch user tokens
  SecretStore -->> LangGraph: 6b. Return tokens

  Note over LangGraph: 7. Apply access control (@auth.on.*)

  %% MCP round-trip
  Note over LangGraph: 8. Build MCP client with user token
  LangGraph  ->> MCPServer: 9. Call MCP tool (with header)
  Note over MCPServer: 10. MCP validates header and runs tool
  MCPServer  -->> LangGraph: 11. Tool response

  %% Return to caller
  LangGraph  -->> ClientApp: 12. Return resources / tool output

要求

要使用 MCP,请确保已安装以下依赖项:

  • * langgraph-api >= 0.2.3
  • * langgraph-sdk >= 0.1.61

使用以下命令安装:

pip install "langgraph-api>=0.2.3" "langgraph-sdk>=0.1.61"
uv add "langgraph-api>=0.2.3" "langgraph-sdk>=0.1.61"

用法概述

启用 MCP:

  • * 升级至 langgraph-api>=0.2.3。如果您正在部署 LangSmith,创建新版本时会自动为您完成此操作。
  • * MCP 工具(代理)将自动公开。
  • * 使用任何支持 Streamable HTTP 的 MCP 兼容客户端连接。

客户端

使用 MCP 兼容客户端连接到 Agent Server。以下示例展示如何使用不同的编程语言进行连接。

JavaScript/TypeScript

    npm install @modelcontextprotocol/sdk
    

> **注意** > 将 serverUrl 替换为您的 Agent Server URL,并根据需要配置认证标头。

    // 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

使用以下命令安装适配器:

    pip install langchain-mcp-adapters
    

以下是一个如何连接到远程 MCP 端点并使用代理作为工具的示例:

    # Create server parameters for stdio connection
    from mcp import ClientSession
    from mcp.client.streamable_http import streamablehttp_client


    from langchain_mcp_adapters.tools import load_mcp_tools
    from langchain.agents import create_agent


    server_params = {
        "url": "https://mcp-finance-agent.xxx.us.langgraph.app/mcp",
        "headers": {
            "X-Api-Key":"lsv2_pt_your_api_key"
        }
    }

    async def main():
        async with streamablehttp_client(**server_params) as (read, write, _):
            async with ClientSession(read, write) as session:
                # Initialize the connection
                await session.initialize()

                # Load the remote graph as if it was a tool
                tools = await load_mcp_tools(session)

                # Create and run a react agent with the tools
                agent = create_agent("gpt-5.5", tools)

                # Invoke the agent with a message
                agent_response = await agent.ainvoke({"messages": "What can the finance agent do for me?"})
                print(agent_response)

    if __name__ == "__main__":
        asyncio.run(main())
    

将代理公开为 MCP 工具

部署后,您的代理将作为工具出现在 MCP 端点中 使用此配置:

  • * **工具名称**:代理的名称。
  • * **工具描述**:代理的描述。
  • * **工具输入模式**:代理的输入模式。

设置名称和描述

您可以在 langgraph.json:

{
    "graphs": {
        "my_agent": {
            "path": "./my_agent/agent.py:graph",
            "description": "A description of what the agent does"
        }
    },
    "env": ".env"
}

部署后,您可以使用 LangGraph SDK 更新名称和描述。

模式

定义清晰、最小化的输入和输出模式,以避免向 LLM 暴露不必要的内部复杂性。

默认的 MessagesState 使用 AnyMessage,支持多种消息类型,但对于直接暴露给 LLM 来说过于通用。

相反,请定义 **自定义智能体或工作流** 使用明确定义类型的输入和输出结构。

例如,用于回答文档问题的工作流可能如下所示:

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_schema=InputState, output_schema=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 工具

要使您 LangSmith 部署中的用户作用域工具可用,请从实现类似以下代码片段开始:

from langchain_mcp_adapters.client import MultiServerMCPClient

def mcp_tools_node(state, config):
    user = config["configurable"].get("langgraph_auth_user")
         , user["github_token"], user["email"], etc.

    client = MultiServerMCPClient({
        "github": {
            "transport": "streamable_http", # (1)
            "url": "https://my-github-mcp-server/mcp", # (2)
            "headers": {
                "Authorization": f"Bearer {user['github_token']}"
            }
        }
    })
    tools = await client.get_tools() # (3)

    # Your tool-calling logic here

    tool_messages = ...
    return {"messages": tool_messages}
  1. MCP 仅支持向发出的请求添加标头 streamable_httpsse transport servers.
  2. 您的 MCP 服务器 URL。
  3. 从您的 MCP 服务器获取可用工具。

_这也可以通过 在运行时重建图 以在新的运行中具有不同的配置_

会话行为

当前的 LangGraph MCP 实现不支持会话。每个 /mcp 请求都是无状态且独立的。

身份验证

/mcp 端点使用与 LangGraph API 其余部分相同的身份验证方式。请参阅 身份验证指南 了解设置详情。

禁用 MCP

要禁用 MCP 端点,请设置 disable_mcp to true 在您的 langgraph.json 配置文件中:

{
  "$schema": "https://langgra.ph/schema.json",
  "http": {
    "disable_mcp": true
  }
}

这将防止服务器暴露 /mcp endpoint.