Token导航 LogoToken导航TokenDH.com
Langchain Out Of The Box MCP Server Adapters Test logo
地图位置stdio官方级别未说明来源级核验

Langchain Out Of The Box MCP Server Adapters Test

MCP Server

该项目展示了如何使用`@langchain/mcp-adapters`自动从MCP服务器加载工具,无需在LangChain中手动声明,适用于天气和空气质量查询等场景。

工具数

2

提示词数

0

GitHub Stars

0

资源数

0
LangChainTypeScript位置天气

安装说明

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

作者 / 组织

vinzlac

提供方

vinzlac

最后核验

2026/5/17 20:20

运行时

Python

快速接入

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

命令预览

uvx mcp_weather_server --help

详细介绍

LangChain开箱即用MCP服务器适配器测试

本项目演示了 @langchain/mcp-adapters 倾倒充电器 自动 工具来自 serveur MCP开箱即用 (mcp_weather_server)无需在langchain中手动声明。

🎯 目标

创建一个LangChain代理,使用开箱即用的天气MCP服务器回答有关不同城市天气和空气质量的问题 自动数据优化 以减少响应时间。

🏗️ 建筑

┌─────────────────┐
│   User Query    │
└────────┬────────┘
         │
         ▼
┌─────────────────────────────────────┐
│   LangChain Agent (GPT-4)          │
│   - createAgent() API v1.0.0       │
│   - Orchestre les outils           │
│   - Sélection intelligente         │
└────────┬────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────┐
│   Tool Wrapper (Optimisation)      │
│   - Extrait données essentielles   │
│   - Réduit taille des réponses     │
│   - ~90% de réduction               │
└────────┬────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────┐
│   @langchain/mcp-adapters v1.0.0   │
│   MultiServerMCPClient              │
│   - Charge automatiquement          │
│     tous les outils MCP            │
│   - getTools() discovery           │
└────────┬────────────────────────────┘
         │
         ▼
┌─────────────────────────────────────┐
│   MCP Server (out-of-the-box)      │
│   - uvx mcp_weather_server          │
│   - Expose les outils météo        │
│   - Qualité de l'air, météo        │
└─────────────────────────────────────┘

📊 序列图

sequenceDiagram
    participant User as 👤 Utilisateur
    participant Client as 📱 Client LangChain
    participant Agent as 🤖 Agent LangChain
(ReactAgent)
    participant Wrapper as 🔧 Tool Wrapper
(Optimisation)
    participant MCPClient as 📦 MCP Client
(MultiServerMCPClient)
    participant MCPServer as 🌐 MCP Server
(mcp_weather_server)
    participant LLM as 🧠 LLM
(OpenAI GPT-4)
    participant API as 🌍 APIs Externes
(Open-Meteo)

    Note over Client,MCPServer: Phase 1: Initialisation
    Client->>MCPClient: initialize()
    MCPClient->>MCPServer: ListTools request (stdio)
    MCPServer-->>MCPClient: Tools list (8 outils)
    MCPClient-->>Client: getTools() → [get_air_quality, ...]
    Client->>Wrapper: wrapToolWithDataOptimization()
pour chaque outil
    Wrapper-->>Client: Outils wrappés avec proxy
    Client->>Agent: createAgent(model, tools, systemPrompt)
    Agent-->>Client: Agent initialisé

    Note over User,API: Phase 2: Traitement d'une question
    User->>Client: "Quelle est la qualité de l'air à Paris ?"
    Client->>Agent: agent.invoke({messages: [HumanMessage]})
    
    Note over Agent,LLM: Étape 1: Décision d'utiliser un outil
    Agent->>LLM: Appel 1: Analyser la question
(~1193 tokens input)
    LLM-->>Agent: ToolCall: get_air_quality(city="Paris")
(~17 tokens output, ~1.4s)
    
    Note over Agent,API: Étape 2: Appel de l'outil MCP
    Agent->>Wrapper: invoke("get_air_quality", {city: "Paris"})
    Wrapper->>MCPClient: Appel outil original
    MCPClient->>MCPServer: CallTool request (stdio)
get_air_quality
    MCPServer->>API: GET /geo/1.0/direct?name=Paris
    API-->>MCPServer: Coordonnées (lat, lon)
    MCPServer->>API: GET /air-quality?lat=X&lon=Y&hourly=...
    API-->>MCPServer: Données qualité de l'air
(~17868 caractères)
    MCPServer-->>MCPClient: Réponse complète avec full_data
    MCPClient-->>Wrapper: Réponse brute (~17868 caractères)
    
    Note over Wrapper: Étape 3: Optimisation des données
    Wrapper->>Wrapper: extractEssentialData()
Parse JSON, extrait current_air_quality
Supprime full_data (données horaires)
    Wrapper-->>Agent: Réponse optimisée (~1850 caractères)
Réduction: -89.6% (~500ms)
    
    Note over Agent,LLM: Étape 4: Génération de la réponse finale
    Agent->>LLM: Appel 2: Générer réponse
(~1200 tokens input au lieu de ~7631)
Prompt optimisé grâce au wrapper
    LLM-->>Agent: Réponse finale formatée
(~436 tokens output, ~2-3s au lieu de ~17s)
    Agent-->>Client: Messages complets avec réponse
    Client-->>User: "La qualité de l'air à Paris est bonne..."

    Note over Client: Phase 3: Analyse des performances
    Client->>Client: Analyse des timings
Estimation LLM améliorée
Logs détaillés avec timestamps

✨ 主要特点

🚀 自动数据优化

该项目包括 工具包装器 在将MCP响应传递给LLM之前自动优化MCP响应:

  • 减少约90% 响应大小(从约16k到约2k个字符)
  • 基本数据的提取 :仅限警卫 current_air_quality,删除 full_data (小时数据)
  • 减少LLM时间 :第二次LLM呼叫约17s至约2-3s
  • 透明 :自动适用于所有MCP工具

📊 使用时间戳进行详细日志记录

该项目包括一个完整的日志系统,带有ISO时间戳,用于跟踪每个步骤:

  • 精确时间戳 :ISO格式(2025-11-10T12:32:44.406Z)
  • 每阶段日志 :初始化、LLM调用、MCP调用、优化
  • 性能指标 :执行时间、数据大小、减少
  • 改进的估计 :基于提示大小的LLM时间的精确计算

⏱️ 改进的LLM时间估计

该项目使用 高级估算公式 基于GPT-4的实际性能:

  • 提示小(\10000个代币) :~20s+1.5ms/额外令牌

这允许有一个 精确分布 在每个阶段花费的时间。

📋 先决条件

  • Node.js 18+
  • Python与 uv 已安装(用于 uvx)
  • CléAPI OpenAI(GPT-4)
  • MCP天气服务器已安装并可通过 uvx mcp_weather_server

🚀 安装

  1. 克隆或创建项目:
cd langchain-out-of-the-box-mcp-server-adapters-test
  1. 安装依赖项:
npm install
  1. 创建文件 .envenv.example :
cp env.example .env
  1. 编辑文件 .env 并添加OpenAI API密钥:
OPENAI_API_KEY=votre_cle_openai
OPENAI_MODEL=gpt-4
  1. 检查是否安装了MCP天气服务器:
uvx mcp_weather_server --help

如果没有,请根据MCP天气服务器文档进行安装。

💻 使用

开发模式(带自动加载)

npm run dev

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

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

编译项目

npm run build

运行编译的项目

npm start

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

📁 项目结构

langchain-out-of-the-box-mcp-server-adapters-test/
├── src/
│   ├── index.ts              # Point d'entrée principal (CLI interactive)
│   ├── client.ts             # Client LangChain avec optimisation des données
│   │                         # - Wrapper d'outils pour optimisation
│   │                         # - Logging détaillé avec timestamps
│   │                         # - Estimation améliorée des temps LLM
│   └── 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
└── README.md

🔧 它是如何工作的

1.伺服MCP开箱即用

本项目使用MCP天气服务器 开箱即用 (mcp_weather_server) :

  • 通过安装 uvx mcp_weather_server
  • 通过stdio自动作为子进程启动
  • 展示天气和空气质量工具
  • 无需额外配置

2.客户端MCP配置

MCP服务器配置在 client.ts :

const mcpServerConfig = {
  weatherServer: {
    transport: "stdio" as const,
    command: "uvx",
    args: ["mcp_weather_server"],
  },
};

const mcpClient = new MultiServerMCPClient(mcpServerConfig);

3.自动加载和工具优化

工具自动加载并包装以进行优化:

// Charger les outils depuis le serveur MCP
const rawTools = await this.mcpClient.getTools();

// Wrapper chaque outil pour optimiser les réponses
const tools = rawTools.map(tool => wrapToolWithDataOptimization(tool));

包装器拦截响应 并且在将基本数据传递给LLM之前仅提取基本数据。

4.数据优化

功能 extractEssentialData() :

  • 检测空气质量工具 (get_air_quality, get_air_quality_details)
  • 解析JSON 在答复中
  • 仅提取 current_air_quality 并删除 full_data (完整的小时数据)
  • 缩小尺寸 约90%(从约16k到约2k个字符)

转换示例:

// Avant optimisation (~17868 caractères)
{
  "city": "Paris",
  "current_air_quality": {...},
  "full_data": {
    "hourly": {
      "time": ["2025-11-10T00:00", ...120 heures...],
      "pm10": [15.8, 14.5, ...120 valeurs...],
      "pm2_5": [12.4, 11.2, ...120 valeurs...],
      ...
    }
  }
}

// Après optimisation (~1850 caractères)
{
  "city": "Paris",
  "current_air_quality": {...},
  "summary": {
    "timezone": "GMT",
    "elevation": 44.0
  }
}

5.与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 et optimisés
  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

📊 详细日志

该项目包括一个完整的日志记录系统,带有ISO时间戳,用于跟踪所有调用:

日志前缀

  • [MCP-CLIENT] :MCP客户端(工具加载)
  • [TOOL-WRAPPER] :工具包装器(调用、优化)
  • [DATA-OPTIMIZATION] :数据优化(提取、减少)
  • [LANGCHAIN-AGENT] :Langchain代理(调用、响应)
  • [LLM-ESTIMATION] :LLM时间估计
  • [TIMINGS-DETAIL] :详细阶段分析
  • [TOTAL] :最终时间分配
  • [USER] :用户输入
  • [ERROR] :错误

日志示例

[2025-11-10T12:32:44.406Z] [TOOL-WRAPPER] 🔧 Appel de l'outil "get_air_quality"
[2025-11-10T12:32:44.406Z] [TOOL-WRAPPER] 📤 Arguments: {"city":"Paris"}
[2025-11-10T12:32:44.407Z] [TOOL-WRAPPER] 📡 Envoi de la requête au serveur MCP...
[2025-11-10T12:32:44.902Z] [TOOL-WRAPPER] ✅ Réponse MCP reçue en 495ms (17868 caractères)
[2025-11-10T12:32:44.902Z] [TOOL-WRAPPER] 🔄 Début de l'optimisation des données...
[2025-11-10T12:32:44.903Z] [DATA-OPTIMIZATION] 🔍 Analyse de la réponse pour get_air_quality (17868 caractères)
[2025-11-10T12:32:44.903Z] [DATA-OPTIMIZATION] 🎯 Détection d'un outil de qualité de l'air...
[2025-11-11T12:32:44.904Z] [DATA-OPTIMIZATION] 📦 JSON trouvé: 17800 caractères
[2025-11-10T12:32:44.905Z] [DATA-OPTIMIZATION] ✅ JSON parsé avec succès
[2025-11-10T12:32:44.906Z] [DATA-OPTIMIZATION] ✂️  Réponse optimisée: 17868 → 1850 caractères (-89.6%) en 3ms
[2025-11-10T12:32:44.906Z] [TOOL-WRAPPER] ⚡ Optimisation terminée en 4ms
[2025-11-10T12:32:44.906Z] [TOOL-WRAPPER] 📊 Réduction: 17868 → 1850 caractères (-89.6%)
[2025-11-10T12:32:44.906Z] [TOOL-WRAPPER] ⏱️  Temps total outil: 500ms (MCP: 495ms, Optimisation: 4ms)

[2025-11-10T12:32:45.000Z] [LLM-ESTIMATION] 📊 Appel LLM 1: 1193 prompt + 17 completion tokens → ~1860ms estimé
[2025-11-10T12:32:47.000Z] [LLM-ESTIMATION] 📊 Appel LLM 2: 1200 prompt + 436 completion tokens → ~2150ms estimé

[2025-11-10T12:32:47.500Z] [TOTAL] ⏱️  Temps total pour la question: 5650ms
[2025-11-10T12:32:47.500Z] [TOTAL] 📊 Répartition détaillée (estimations améliorées):
[2025-11-10T12:32:47.500Z] [TOTAL]   - Appels LLM (OpenAI): ~4010ms (71%)
[2025-11-10T12:32:47.500Z] [TOTAL]     • LLM Call 1: 1193 prompt + 17 completion tokens → ~1860ms
[2025-11-10T12:32:47.500Z] [TOTAL]     • LLM Call 2: 1200 prompt + 436 completion tokens → ~2150ms
[2025-11-10T12:32:47.500Z] [TOTAL]   - Appels MCP (outils): ~500ms (9%)
[2025-11-10T12:32:47.500Z] [TOTAL]   - Overhead (sérialisation, etc.): ~1140ms (20%)

日志内容

每个日志包括:

  • 时间戳ISO :格式 2025-11-10T12:32:44.406Z 为了精确的可追溯性
  • 请求有效载荷 :发送完整数据(JSON格式)
  • 响应有效载荷 :接收到的完整数据(JSON格式)
  • 性能指标 :执行时间、数据大小、减少
  • 温度估算 :基于提示大小的精确计算

🎯 功能

空气质量

代理人可以获得城市的空气质量:

  • “巴黎的空气质量怎么样?”
  • “给我切尔斯的空气质量”
  • “伦敦的空气质量”

天气

代理人可以获得天气信息:

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

复杂请求

代理可以使用适当的工具回答复杂问题:

  • “比较巴黎和里昂的空气质量”
  • “巴黎的天气和空气质量”

⚡ 性能优化

减少响应时间

通过自动数据优化:

  • 前卫优化 约19-23秒(约7631个代币的大提示)
  • 优化后 约4-6秒(提示减少至约1200个代币)
  • 改进 :总时间减少约75%

减少提词器的大小

  • MCP的原始响应 :约17868个字符(~7631个代币)
  • 优化响应 :约1850个字符(约1200个代币)
  • 减少 :尺寸减少约89.6%

精确的时间估计

系统使用高级估计公式精确计算每个阶段花费的时间:

  • 估计LLM :基于提示的实际大小(步骤公式)
  • MCP估算 :基于工具调用次数(每次调用约500ms)
  • 开销 :按其余部分计算(序列化、反序列化等)

🐛 故障排除

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

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

错误“找不到模型”

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

TypeScript编译错误

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

MCP服务器未启动

确保 uvx 可用,并且 mcp_weather_server 已安装。您可以使用以下方法进行测试:

uvx mcp_weather_server --help

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

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

日志显示优化不起作用

检查日志 [DATA-OPTIMIZATION] 查看JSON是否正确解析。如果您看到“响应中未找到JSON”,则MCP响应的格式可能已更改。

📚 文件和资源

资源

🔍 与MCP自定义服务器的差异

本项目使用 serveur MCP开箱即用 而不是自定义服务器:

开箱即用MCP服务器(本项目)

优势 :

  • 无需开发/维护MCP服务器
  • 安装简单,通过 uvx
  • 可能的自动更新
  • 功能齐全(天气、空气质量)
  • 自动优化 减少响应时间的数据

MCP自定义服务器

如果您需要特定的功能,您可以创建自己的MCP服务器,但本项目的重点是使用优化的现有服务器。

🎓 学习和优化

本项目展示了几种重要技术:

  1. MCP工具的自动加载 :无需手动声明的动态发现
  2. 数据优化 :在进入LLM之前,回复大小减少约90%
  3. 详细日志记录 :使用时间戳进行完全可追溯性,以识别瓶颈
  4. 精确估计 :基于GPT-4实际性能的实际运行时间计算
  5. 包装模式 :使用代理JavaScript拦截和转换响应

📄 许可证

国际协调委员会

🤝 贡献

欢迎捐款!不要犹豫:

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

目录标签

目录标签

LangChainTypeScript位置天气本地部署MCP适配器天气查询空气质量数据优化

接入字段

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

stdio

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

none

运行时(runtime,运行环境)

Python

工具数量(toolCount,工具数)

2

资源数量(resourceCount,资源数)

0

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

0

权限和风险

stdionone部署方式未说明

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

安装前确认

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

来源信息

继续浏览同类 MCP