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

Langchain Custom MCP Server Adapters Test

MCP Server

LangChain的MCP适配器项目,实现从自定义MCP服务器自动加载工具而无需手动声明,适用于AI代理开发场景。

工具数

2

提示词数

0

GitHub Stars

0

资源数

0
TypeScriptAI代理工作流自动化

安装说明

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

作者 / 组织

vinzlac

提供方

vinzlac

最后核验

2026/5/17 20:20

快速接入

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

详细介绍

LangChain自定义MCP服务器适配器测试

本项目演示了 @langchain/mcp-adapters 倾倒充电器 自动 工具来自 自定义MCP服务器 无需在LangChain中手动声明。

🎯 与先前方法的差异

❌ 以前的方法(手动声明)

  • 为每个MCP工具手动创建LangChain包装器
  • LangChain代码中每个工具的显式声明
  • 添加新工具时需要维护
  • 每个工具的单独文件(mcpSearchTool.ts, mcpWeatherTool.ts)

✅ 新方法(自动加载)

  • 自动加载 来自MCP服务器的所有工具
  • 无需手动声明
  • 工具通过MCP协议动态发现
  • 添加新工具=无需更改langchain代码
  • 利用率 @langchain/mcp-adapters v1.0.0与langchain v1.0.0

🏗️ 建筑

概述

┌─────────────────┐
│   User Query    │
└────────┬────────┘
         │
         ▼
┌─────────────────────────────────────┐
│   LangChain Agent (GPT-4)          │
│   - createAgent() API v1.0.0       │
│   - Orchestre les outils           │
│   - Sélection intelligente         │
└────────┬────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────┐
│   @langchain/mcp-adapters v1.0.0   │
│   MultiServerMCPClient              │
│   - Charge automatiquement          │
│     tous les outils MCP            │
│   - getTools() discovery           │
└────────┬────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────┐
│   MCP Server (custom, stdio)       │
│   - Serveur MCP personnalisé        │
│   - Expose les outils               │
│   - search, weather                 │
└────────┬────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────┐
│   External APIs                     │
│   - Brave Search                    │
│   - OpenWeatherMap                  │
└─────────────────────────────────────┘

序列图

sequenceDiagram
    participant User as 👤 User
    participant Agent as 🤖 LangChain Agent
    participant MCPClient as 📦 MCP Client
(@langchain/mcp-adapters)
    participant MCPServer as 🔧 MCP Server
(Custom)
    participant LLM as 🧠 LLM
(OpenAI GPT-4)
    participant API as 🌐 External APIs
(Brave, OpenWeather)

    Note over Agent,MCPClient: Initialisation
    Agent->>MCPClient: initialize()
    MCPClient->>MCPServer: ListTools request
    MCPServer-->>MCPClient: Tools list (search, weather)
    MCPClient->>Agent: getTools() → [search, weather]
    Agent->>LLM: createAgent(model, tools, systemPrompt)
    LLM-->>Agent: Agent ready

    Note over User,API: Exécution d'une requête
    User->>Agent: Question: "Météo à Paris"
    Agent->>LLM: invoke({messages: [HumanMessage]})
    
    Note over LLM: Analyse la question et décide d'utiliser l'outil weather
    LLM-->>Agent: ToolCall: weather(city="Paris")
    
    Agent->>MCPClient: Call tool: weather
    MCPClient->>MCPServer: CallTool request (weather, {city: "Paris"})
    
    Note over MCPServer,API: Exécution de l'outil weather
    MCPServer->>API: GET /geo/1.0/direct?q=Paris
    API-->>MCPServer: Coordinates (lat, lon)
    MCPServer->>API: GET /data/2.5/forecast?lat=X&lon=Y
    API-->>MCPServer: Weather data
    
    MCPServer-->>MCPClient: Response: Weather text
    MCPClient-->>Agent: Tool result
    
    Note over Agent,LLM: L'agent traite le résultat et génère la réponse finale
    Agent->>LLM: invoke({messages: [HumanMessage, ToolMessage, ...]})
    LLM-->>Agent: Final response message
    
    Agent-->>User: Réponse: "Météo actuelle à Paris..."

带日志的详细流

sequenceDiagram
    participant User as 👤 User
    participant Client as 📱 LangChain Client
    participant MCPClient as 📦 MCP Client
    participant MCPServer as 🔧 MCP Server
    participant LLM as 🧠 LLM
    participant API as 🌐 External APIs

    User->>Client: ask("Météo à Paris")
    Note right of Client: [USER] 📥 Question reçue
[LANGCHAIN-AGENT] 📤 Request payload
    
    Client->>LLM: agent.invoke({messages})
    Note right of LLM: Analyse et décide d'utiliser weather
    
    LLM-->>Client: ToolCall: weather(city="Paris")
    Note left of Client: [LANGCHAIN-AGENT] 🔧 Appel d'outil
    
    Client->>MCPClient: Call tool: weather
    Note right of MCPClient: [MCP-CLIENT] 📤 Tool call
    
    MCPClient->>MCPServer: CallTool request
    Note right of MCPServer: [MCP-SERVER] 📥 Appel d'outil reçu
[MCP-SERVER] 📤 Request payload
[TOOL:weather] 🌤️ Recherche météo
    
    MCPServer->>API: GET /geo/1.0/direct?q=Paris
    Note right of API: [TOOL:weather] 📤 API Request payload (geo)
    API-->>MCPServer: Coordinates
    Note left of API: [TOOL:weather] 📥 API Response payload (geo)
    
    MCPServer->>API: GET /data/2.5/forecast?lat=X&lon=Y
    Note right of API: [TOOL:weather] 📤 API Request payload (weather)
    API-->>MCPServer: Weather data
    Note left of API: [TOOL:weather] 📥 API Response payload (weather)
    
    MCPServer-->>MCPClient: Response with weather text
    Note left of MCPServer: [MCP-SERVER] 📥 Response payload
[TOOL:weather] ⏱️ Temps d'exécution
    
    MCPClient-->>Client: Tool result
    Note left of MCPClient: [MCP-CLIENT] 📥 Tool response
    
    Client->>LLM: invoke({messages: [..., ToolMessage]})
    Note right of LLM: Génère la réponse finale
    
    LLM-->>Client: Final response
    Note left of LLM: [LANGCHAIN-AGENT] ✅ Agent terminé
[LANGCHAIN-AGENT] 📥 Response payload
    
    Client-->>User: Réponse finale
    Note left of Client: [LANGCHAIN-AGENT] 📤 Réponse finale extraite

📋 先决条件

  • Node.js 18+
  • API密钥:

- OpenAI(GPT-4) - 勇敢的搜索 - 开放天气地图

🚀 安装

  1. Cloner le存储库:
git clone 
cd langchain-custom-mcp-server-adapters-test
  1. 安装依赖项:
npm install
  1. 创建文件 .envenv.example :
cp env.example .env
  1. 编辑文件 .env 并添加API密钥:
OPENAI_API_KEY=votre_cle_openai
BRAVE_API_KEY=votre_cle_brave
OPENWEATHER_API_KEY=votre_cle_openweather
OPENAI_MODEL=gpt-4

💻 使用

开发模式(带自动加载)

npm run dev

直接启动客户端(无需编译)

npm run client
备注 :Ce脚本使用 tsx 直接运行TypeScript文件,无需编译,开发速度更快。

单独启动MCP服务器(用于测试)

npm run mcp-server

编译项目

npm run build

运行编译的项目

npm start

启动后,您可以在终端中提问。打字 exitquit 倒酒。

📁 项目结构

langchain-custom-mcp-server-adapters-test/
├── src/
│   ├── index.ts              # Point d'entrée principal
│   ├── client.ts             # Client LangChain avec chargement automatique des outils MCP
│   ├── mcpServer.ts          # Serveur MCP custom (expose les outils search et weather)
│   ├── mcpServerRunner.ts    # Runner pour le serveur MCP en mode stdio
│   └── config.ts             # Gestion de la configuration
├── dist/                     # Fichiers compilés
├── .env                      # Variables d'environnement (à créer)
├── env.example               # Exemple de configuration
├── package.json
├── tsconfig.json
├── ADAPTATION.md             # Documentation de l'adaptation avec Context7
└── README.md

🔧 它是如何工作的

1.自定义MCP服务器

本项目使用 自定义MCP服务器 (不是开箱即用的服务器):

  • 实施于 src/mcpServer.ts 使用SDK @modelcontextprotocol/sdk
  • 手动设置工具 searchweather
  • 实现业务逻辑(外部API调用)
  • 本地启动VIA mcpServerRunner.ts STDIO模式

Pourquoi习俗?

  • 完全控制工具及其逻辑
  • 与您的特定API直接集成
  • 响应和格式的个性化
  • 调试的详细日志

2.客户端MCP配置

MCP服务器配置在 client.ts :

const mcpServerConfig = {
  searchWeatherServer: {
    transport: "stdio" as const,
    command: "npx",
    args: ["-y", "tsx", join(__dirname, "mcpServerRunner.ts")],
  },
};

const mcpClient = new MultiServerMCPClient(mcpServerConfig);

3.自动工具加载

工具通过自动加载 getTools() :

// Charge TOUS les outils de TOUS les serveurs MCP configurés
const tools = await this.mcpClient.getTools();

无需手动声明! 工具通过MCP协议动态发现。

4.与LangChain 1.0.0一起使用

该项目使用新的LangChain API 1.0.0 createAgent() :

import { createAgent, ReactAgent } from "langchain";

// Créer l'agent avec la nouvelle API
this.agent = createAgent({
  model: this.model,
  tools, // Outils chargés automatiquement
  systemPrompt,
});

// Utiliser l'agent
const result = await this.agent.invoke({
  messages: [new HumanMessage(question)],
});

备注 :LangChain 1.0.0使用 createAgent() 而不是 createOpenAIFunctionsAgent()AgentExecutor de la版本0.x。

📦 使用的版本

本项目使用langchain软件包的1.0.0版本进行兼容性:

  • @langchain/core: ^1.0.0
  • @langchain/mcp-adapters: ^1.0.0
  • @langchain/openai: ^1.0.0
  • langchain: ^1.0.0
  • @modelcontextprotocol/sdk: ^1.0.0

📊 详细日志

该项目包括跟踪所有调用的完整日志:

日志前缀

  • [MCP-CLIENT] :MCP客户端(工具加载)
  • [MCP-SERVER] MCP服务器(请求/响应)
  • [TOOL:nom] :个人工具(搜索、天气)
  • [LANGCHAIN-AGENT] :LangChain代理商
  • [USER] :用户输入
  • [ERROR] :错误

日志内容

每个日志包括:

  • 请求有效载荷 :发送完整数据(JSON格式)
  • 响应有效载荷 :接收到的完整数据(JSON格式)
  • 性能指标 :执行时间、数据大小
  • API调用的详细信息 :来自外部API的请求/响应

日志示例

[MCP-CLIENT] 🔄 Chargement des outils depuis le serveur MCP...
[MCP-CLIENT] 📤 Request payload: getTools()
[MCP-SERVER] 📥 Requête ListTools reçue
[MCP-SERVER] 📤 Request payload: {"method":"tools/list",...}
[MCP-SERVER] 📥 Response payload: {"tools":[...]}
[MCP-CLIENT] ✅ 2 outils chargés depuis le serveur MCP
[LANGCHAIN-AGENT] 🔄 Invocation de l'agent avec le message utilisateur...
[LANGCHAIN-AGENT] 📤 Request payload (invoke): {"messages":[...]}
[TOOL:search] 🔍 Recherche Brave Search pour: "TypeScript"
[TOOL:search] 📤 API Request payload: {"url":"...","params":{...}}
[TOOL:search] 📥 API Response payload: {"resultsCount":5,...}
[LANGCHAIN-AGENT] ✅ Agent a terminé en 1234ms

🎯 功能

搜索网络(勇敢搜索)

代理可以在web上搜索信息:

  • “你知道TypeScript吗?”
  • “2024年人工智能新闻研究”

天气

代理可以获得当前天气和预测:

  • “巴黎的天气”
  • “里昂的天气怎么样?”
  • “天气75001”

复杂请求

代理可以组合多种工具来回答复杂问题:

  • “2024年比较React和Vue.js”(将使用搜索)
  • “巴黎天气和本周天气事件搜索”(使用天气+搜索)

🔄 添加新工具

要向MCP服务器添加新工具:

  1. 将工具添加到 mcpServer.ts :

- 将定义添加到 ListToolsRequestSchema - 将处理程序添加到 CallToolRequestSchema

  1. 这是吹牛! 该工具将自动加载并在LangChain中可用,无需更改客户端代码。

📝 使用示例

> Météo à Paris
🤔 Traitement en cours...
────────────────────────────────────────────────────────────
[USER] 📥 Question reçue: "Météo à Paris"
[LANGCHAIN-AGENT] 🔄 Invocation de l'agent avec le message utilisateur...
[TOOL:weather] 🌤️  Recherche météo pour: "Paris"
[TOOL:weather] 📤 API Request payload (geo): {...}
[TOOL:weather] 📥 API Response payload (geo): {...}
[LANGCHAIN-AGENT] ✅ Agent a terminé en 1234ms
────────────────────────────────────────────────────────────

💬 Réponse:
**Météo actuelle à Paris**

🌡️ Température: 15°C (ressentie: 14°C)
☁️ Conditions: nuageux
💧 Humidité: 65%
📊 Pression: 1013 hPa
💨 Vent: 12.5 km/h NE

**Prévisions (prochaines 24h):**
- lun. 14:00: 16°C, nuageux
- lun. 17:00: 17°C, partiellement nuageux
...

🐛 故障排除

错误“缺少必需的环境变量”

检查您的文件 .env 包含所有必需的API密钥。

错误“找不到模型”

确保您的OpenAI密钥可以访问GPT-4。你可以使用 gpt-4-turbo-previewgpt-3.5-turbo 作为替代方案。

TypeScript编译错误

确保已安装所有依赖项 npm install.

MCP服务器未启动

确保 tsx 可用。该项目使用 npx -y tsx 启动服务器,它应该自动工作。

错误“未定义包子路径'./agents'”

此错误表示您使用的是旧版本的LangChain。确保将LangChain 1.0.0与新API一起使用 createAgent().

📚 文件和资源

情境利用7

本项目使用Context7 MCP开发,以获取以下文档: @langchain/mcp-adapters :

  1. 库ID的解析 :
   mcp_context7_resolve-library-id("langchain-mcp-adapters")

结果: /langchain-ai/langchain-mcp-adapters

  1. 恢复文档 :
   mcp_context7_get-library-docs(
     "/langchain-ai/langchain-mcp-adapters",
     "MultiServerMCPClient getTools usage examples"
   )

ADAPTATION.md 有关项目调整的更多详细信息。

资源

🔍 与开箱即用MCP服务器的区别

本项目使用 MCP自定义服务器 而不是预先存在的服务器。原因如下:

MCP自定义服务器(本项目)

优势 :

  • 完全控制工具及其逻辑
  • 与您的特定API直接集成
  • 响应和格式的个性化
  • 调试的详细日志
  • 易于使用新工具扩展

伺服MCP开箱即用

您还可以使用预先存在的MCP服务器:

const mcpServerConfig = {
  // Serveur MCP pré-existant (exemple)
  math: {
    transport: "stdio" as const,
    command: "npx",
    args: ["-y", "@modelcontextprotocol/server-math"],
  },
  // Votre serveur custom
  searchWeatherServer: {
    transport: "stdio" as const,
    command: "npx",
    args: ["-y", "tsx", mcpServerPath],
  },
};

📄 许可证

国际协调委员会

🤝 贡献

欢迎捐款!不要犹豫:

  1. 分叉项目
  2. 为您的功能创建分支
  3. 提交您的更改
  4. 向分支推
  5. 打开拉取请求

目录标签

目录标签

TypeScriptAI代理工作流自动化LangChain适配器本地部署工具自动发现MCP协议AI代理开发动态工具加载

接入字段

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

未说明

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

none

工具数量(toolCount,工具数)

2

资源数量(resourceCount,资源数)

0

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

0

权限和风险

未说明none部署方式未说明

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

安装前确认

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

仍需确认:installCommand

来源信息

继续浏览同类 MCP