Token导航 LogoToken导航TokenDH.com
Deep MCP Langchain logo
AI代理stdio官方级别未说明来源级核验

Deep MCP Langchain

MCP Server

DeepMCPAgent是一个模型无关的LangChain/LangGraph代理框架,通过MCP协议动态发现和调用工具,支持多种语言模型和外部API集成。

工具数

0

提示词数

0

GitHub Stars

0

资源数

0
PythonClaudeAI代理Claude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

BenjaminGhiggo

提供方

BenjaminGhiggo

最后核验

2026/5/17 20:20

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

pip install "deepmcpagent[deep]"

详细介绍

🤖 DeepMCPAgent

Model-agnostic LangChain/LangGraph agents powered entirely by MCP tools over HTTP/SSE.

Discover MCP tools dynamically. Bring your own LangChain model. Build production-ready agents—fast.

📚 Documentation • 🛠 Issues

✨ 为什么选择DeepMCPAgent?

  • 🔌 零手动工具接线 --从MCP服务器(HTTP/SSE)动态发现工具
  • 🌐 欢迎外部API --连接到远程MCP服务器(使用headers/auth)
  • 🧠 模型无关 --传递任何LangChain聊天模型实例(OpenAI、Anthropic、Ollama、Groq、local等)
  • DeepAgent(可选) --如果安装了,您将获得一个深度代理循环;否则,LangGraph ReAct回退将十分稳健
  • 🛠️ 键入工具参数 --JSON模式→ 派丹蒂克→ LangChain BaseTool (键入、验证的呼叫)
  • 🧪 优质酒吧 --mypy(严格)、ruff、pytest、GitHub操作、文档
首先是MCP。 代理不应该硬编码工具——他们应该 发现呼叫 他们。DeepMCPAgent构建了这座桥。

______________________________________________________________________

🚀 安装

从以下位置安装 PyPI:

pip install "deepmcpagent[deep]"

这将安装DeepMCPAgent DeepAgent支持(推荐) 以获得最佳代理循环。 其他可选附加功能:

  • dev → 打字、测试
  • docs → MkDocs+材料+mkdocstring
  • examples → 捆绑示例使用的依赖关系
# install with deepagents + dev tooling
pip install "deepmcpagent[deep,dev]"

⚠️ 如果你正在使用 Z shell,记得引用额外内容:

pip install "deepmcpagent[deep,dev]"

______________________________________________________________________

🚀 快速启动

1) 启动示例MCP服务器(HTTP)

python examples/servers/math_server.py

这为MCP端点提供服务: http://127.0.0.1:8000/mcp

2) 运行示例代理(带有花哨的控制台输出)

python examples/use_agent.py

您将看到:

screenshot

______________________________________________________________________

🧑‍💻 自带模型(BYOM)

DeepMCPAgent允许您通过 任何LangChain聊天模型实例 (或者,如果您愿意,可以提供提供商id字符串 init_chat_model):

import asyncio
from deepmcpagent import HTTPServerSpec, build_deep_agent

# choose your model:
# from langchain_openai import ChatOpenAI
# model = ChatOpenAI(model="gpt-4.1")

# from langchain_anthropic import ChatAnthropic
# model = ChatAnthropic(model="claude-3-5-sonnet-latest")

# from langchain_community.chat_models import ChatOllama
# model = ChatOllama(model="llama3.1")

async def main():
    servers = {
        "math": HTTPServerSpec(
            url="http://127.0.0.1:8000/mcp",
            transport="http",    # or "sse"
            # headers={"Authorization": "Bearer "},
        ),
    }

    graph, _ = await build_deep_agent(
        servers=servers,
        model=model,
        instructions="Use MCP tools precisely."
    )

    out = await graph.ainvoke({"messages":[{"role":"user","content":"add 21 and 21 with tools"}]})
    print(out)

asyncio.run(main())
提示:如果你通过了 字符串 喜欢 "openai:gpt-4.1",我们会打电话给LangChain的 init_chat_model() 为您(它将读取env-vars,如 OPENAI_API_KEY).通过a 模型实例 让你完全控制。

______________________________________________________________________

🖥️ CLI(不需要Python)

# list tools from one or more HTTP servers
deepmcpagent list-tools \
  --http name=math url=http://127.0.0.1:8000/mcp transport=http \
  --model-id "openai:gpt-4.1"

# interactive agent chat (HTTP/SSE servers only)
deepmcpagent run \
  --http name=math url=http://127.0.0.1:8000/mcp transport=http \
  --model-id "openai:gpt-4.1"
CLI接受 重复的 --http 阻碍;添加 header.X=Y 身份验证配对: `` --http name=ext url=https://api.example.com/mcp transport=http header.Authorization="Bearer TOKEN" ``

______________________________________________________________________

🧩 建筑(一览)

┌────────────────┐        list_tools / call_tool        ┌─────────────────────────┐
│ LangChain/LLM  │  ──────────────────────────────────▶ │ FastMCP Client (HTTP/SSE)│
│  (your model)  │                                      └───────────┬──────────────┘
└──────┬─────────┘  tools (LC BaseTool)                               │
       │                                                              │
       ▼                                                              ▼
  LangGraph Agent                                    One or many MCP servers (remote APIs)
  (or DeepAgents)                                    e.g., math, github, search, ...
  • HTTPServerSpec(...)FastMCP客户端 (单客户端,多服务器)
  • 工具发现 → JSON模式→ 派丹蒂克→ LangChain BaseTool
  • 代理循环 → DeepAgent(如果已安装)或LangGraph ReAct回退

______________________________________________________________________

完整架构和代理流

1) 高层架构(模块和数据流)

flowchart LR
    %% Groupings
    subgraph User["👤 User / App"]
      Q["Prompt / Task"]
      CLI["CLI (Typer)"]
      PY["Python API"]
    end

    subgraph Agent["🤖 Agent Runtime"]
      DIR["build_deep_agent()"]
      PROMPT["prompt.py\n(DEFAULT_SYSTEM_PROMPT)"]
      subgraph AGRT["Agent Graph"]
        DA["DeepAgents loop\n(if installed)"]
        REACT["LangGraph ReAct\n(fallback)"]
      end
      LLM["LangChain Model\n(instance or init_chat_model(provider-id))"]
      TOOLS["LangChain Tools\n(BaseTool[])"]
    end

    subgraph MCP["🧰 Tooling Layer (MCP)"]
      LOADER["MCPToolLoader\n(JSON-Schema ➜ Pydantic ➜ BaseTool)"]
      TOOLWRAP["_FastMCPTool\n(async _arun → client.call_tool)"]
    end

    subgraph FMCP["🌐 FastMCP Client"]
      CFG["servers_to_mcp_config()\n(mcpServers dict)"]
      MULTI["FastMCPMulti\n(fastmcp.Client)"]
    end

    subgraph SRV["🛠 MCP Servers (HTTP/SSE)"]
      S1["Server A\n(e.g., math)"]
      S2["Server B\n(e.g., search)"]
      S3["Server C\n(e.g., github)"]
    end

    %% Edges
    Q -->|query| CLI
    Q -->|query| PY
    CLI --> DIR
    PY --> DIR

    DIR --> PROMPT
    DIR --> LLM
    DIR --> LOADER
    DIR --> AGRT

    LOADER --> MULTI
    CFG --> MULTI
    MULTI -->|list_tools| SRV
    LOADER --> TOOLS
    TOOLS --> AGRT

    AGRT |messages| LLM
    AGRT -->|tool calls| TOOLWRAP
    TOOLWRAP --> MULTI
    MULTI -->|call_tool| SRV

    SRV -->|tool result| MULTI --> TOOLWRAP --> AGRT -->|final answer| CLI
    AGRT -->|final answer| PY

______________________________________________________________________

2) 运行时序列(端到端工具调用)

sequenceDiagram
    autonumber
    participant U as User
    participant CLI as CLI/Python
    participant Builder as build_deep_agent()
    participant Loader as MCPToolLoader
    participant Graph as Agent Graph (DeepAgents or ReAct)
    participant LLM as LangChain Model
    participant Tool as _FastMCPTool
    participant FMCP as FastMCP Client
    participant S as MCP Server (HTTP/SSE)

    U->>CLI: Enter prompt
    CLI->>Builder: build_deep_agent(servers, model, instructions?)
    Builder->>Loader: get_all_tools()
    Loader->>FMCP: list_tools()
    FMCP->>S: HTTP(S)/SSE list_tools
    S-->>FMCP: tools + JSON-Schema
    FMCP-->>Loader: tool specs
    Loader-->>Builder: BaseTool[]
    Builder-->>CLI: (Graph, Loader)

    U->>Graph: ainvoke({messages:[user prompt]})
    Graph->>LLM: Reason over system + messages + tool descriptions
    LLM-->>Graph: Tool call (e.g., add(a=3,b=5))
    Graph->>Tool: _arun(a=3,b=5)
    Tool->>FMCP: call_tool("add", {a:3,b:5})
    FMCP->>S: POST /mcp tools.call("add", {...})
    S-->>FMCP: result { data: 8 }
    FMCP-->>Tool: result
    Tool-->>Graph: ToolMessage(content=8)

    Graph->>LLM: Continue with observations
    LLM-->>Graph: Final response "(3 + 5) * 7 = 56"
    Graph-->>CLI: messages (incl. final LLM answer)

______________________________________________________________________

3) 代理控制循环(规划和行动)

stateDiagram-v2
    [*] --> AcquireTools
    AcquireTools: Discover MCP tools via FastMCP\n(JSON-Schema ➜ Pydantic ➜ BaseTool)
    AcquireTools --> Plan

    Plan: LLM plans next step\n(uses system prompt + tool descriptions)
    Plan --> CallTool: if tool needed
    Plan --> Respond: if direct answer sufficient

    CallTool: _FastMCPTool._arun\n→ client.call_tool(name, args)
    CallTool --> Observe: receive tool result
    Observe: Parse result payload (data/text/content)
    Observe --> Decide

    Decide: More tools needed?
    Decide --> Plan: yes
    Decide --> Respond: no

    Respond: LLM crafts final message
    Respond --> [*]

______________________________________________________________________

4) 代码结构(类型和关系)

classDiagram
    class StdioServerSpec {
      +command: str
      +args: List[str]
      +env: Dict[str,str]
      +cwd: Optional[str]
      +keep_alive: bool
    }

    class HTTPServerSpec {
      +url: str
      +transport: Literal["http","streamable-http","sse"]
      +headers: Dict[str,str]
      +auth: Optional[str]
    }

    class FastMCPMulti {
      -_client: fastmcp.Client
      +client(): Client
    }

    class MCPToolLoader {
      -_multi: FastMCPMulti
      +get_all_tools(): List[BaseTool]
      +list_tool_info(): List[ToolInfo]
    }

    class _FastMCPTool {
      +name: str
      +description: str
      +args_schema: Type[BaseModel]
      -_tool_name: str
      -_client: Any
      +_arun(**kwargs) async
    }

    class ToolInfo {
      +server_guess: str
      +name: str
      +description: str
      +input_schema: Dict[str,Any]
    }

    class build_deep_agent {
      +servers: Mapping[str,ServerSpec]
      +model: ModelLike
      +instructions?: str
      +returns: (graph, loader)
    }

    StdioServerSpec  ServerSpec : uses servers_to_mcp_config()
    MCPToolLoader o--> FastMCPMulti
    MCPToolLoader --> _FastMCPTool : creates
    _FastMCPTool ..> BaseTool
    build_deep_agent --> MCPToolLoader : discovery
    build_deep_agent --> _FastMCPTool : tools for agent

______________________________________________________________________

5) 部署/集成视图(集群和边界)

flowchart TD
    subgraph App["Your App / Service"]
      UI["CLI / API / Notebook"]
      Code["deepmcpagent (Python pkg)\n- config.py\n- clients.py\n- tools.py\n- agent.py\n- prompt.py"]
      UI --> Code
    end

    subgraph Cloud["LLM Provider(s)"]
      P1["OpenAI / Anthropic / Groq / Ollama..."]
    end

    subgraph Net["Network"]
      direction LR
      FMCP["FastMCP Client\n(HTTP/SSE)"]
      FMCP ---|mcpServers| Code
    end

    subgraph Servers["MCP Servers"]
      direction LR
      A["Service A (HTTP)\n/path: /mcp"]
      B["Service B (SSE)\n/path: /mcp"]
      C["Service C (HTTP)\n/path: /mcp"]
    end

    Code -->|init_chat_model or model instance| P1
    Code --> FMCP
    FMCP --> A
    FMCP --> B
    FMCP --> C

______________________________________________________________________

6) 错误处理和可观察性(工具错误和重试)

flowchart TD
    Start([Tool Call]) --> Try{"client.call_tool(name,args)"}
    Try -- ok --> Parse["Extract data/text/content/result"]
    Parse --> Return[Return ToolMessage to Agent]
    Try -- raises --> Err["Tool/Transport Error"]
    Err --> Wrap["ToolMessage(status=error, content=trace)"]
    Wrap --> Agent["Agent observes error\nand may retry / alternate tool"]

______________________________________________________________________

这些图表反映了当前的实施情况: - 型号为必填项 (字符串提供程序id或LangChain模型实例)。 - 仅限MCP工具,在运行时通过以下方式发现 FastMCP (HTTP://SSE)。 - 代理循环偏好 DeepAgent 如果已安装;否则 LangGraph重新激活. - 工具通过以下方式键入 JSON模式➜ 派丹蒂克➜ LangChain基础工具. - 花哨的控制台输出显示 发现的工具, 电话, 结果,以及 最终答案.

______________________________________________________________________

🧪 发展

# install dev tooling
pip install -e ".[dev]"

# lint & type-check
ruff check .
mypy

# run tests
pytest -q

______________________________________________________________________

🛡️ 安全与隐私

  • 你的钥匙,你的模型 --我们不强制供应商;传递任何LangChain模型。
  • 使用 http头 在……里面 HTTPServerSpec 将承载/Autho令牌传递到服务器。

______________________________________________________________________

🧯 故障排除

  • PEP 668:外部管理环境(macOS+Homebrew)

使用virtualenv:

  python3 -m venv .venv
  source .venv/bin/activate
  • 404连接时未找到

确保您的服务器使用路径(例如。, /mcp)您的客户端URL包含它。

  • 工具调用失败/属性错误

确保您使用的是最新版本;我们的工具包装器使用 PrivateAttr 对于客户端状态。

  • 代币数量高

对于工具调用模型来说,这很正常。使用较小的模型进行开发。

______________________________________________________________________

📄 许可证

Apache-2.0--参见 LICENSE.

______________________________________________________________________

⭐ 星星

🙏 致谢

目录标签

目录标签

PythonClaudeAI代理LangChain代理本地部署动态工具发现MCP协议模型无关API集成

支持客户端

Claude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

token

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiotoken部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP