前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片NEW
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 业务场景题真实业务问题与追问
  • 查漏补缺常见问题解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
    • AI 定制路线NEW按你的简历现排
    • AI 知识地图NEW串起全站知识点
  • 动态
    • AI 热点NEWAI 每日动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
AI 助手NEW
旧版
返回 AI 情报前线
All News · 全部资讯8767
  • LLM 应用七大攻击面与防御层
  • 大规模 AI 编程成本控制实战指南
  • 自学AI三年成为AI与系统开发总监
  • Copilot 使用量 API 新增 Agent 应用活动追踪
  • Meta推出编程Agent Muse Code:成本低但数据安全存疑
  • Coinbase、Shopify、Ramp自建编程Agent为何仍付费给Anthropic
  • AMD收购Taalas将AI模型直接刻入芯片
  • 我们如何用MCP协议让AI助手直接预订餐厅
  • DGX Spark六个月实测:营销数字在骗人,真实性能这样算
  • Agentic Coding未来五年将重塑软件工程
  • EU AI Act第50条内容溯源规范落地:实际可用的双层方案
  • MCP工具返回值格式实测:72次试验对比摘要行与原始时序数据
  • Oracle禁止在OpenJDK中使用AI生成代码
  • 人机交互场景下LLM低延迟推理工程实践
  • Anthropic Agent Skills 设计反思:Skill 不是 Capability
  • x402 协议实现可靠 Agent 支付的工程实践
  • DeepSeek涨价Claude Code烧钱:Dev成本控制三招
  • 2026年多AI编程智能体运行工具横评
  • AI智能体越界真相:一次34小时的真实攻击链复盘
  • Cohere Health基于Bedrock AgentCore的临床政策数字化实践
  • 生产级MCP服务器测试与调试指南
  • claude-crew:持久化多终端Claude Code智能体架构详解
  • TReNDS用Bedrock将根因分析从30分钟压缩到60秒
  • AI Agent访问控制架构:如何防止数据库被恶意篡改
  • AWS用约束规划自动计算NHL季后赛锁定条件,经验证四个赛季
  • AI Agent自动化开发者工作流:41%发布周期压缩实战
  • Token末日:Accenture 数据显示非工程师才是 token 消耗大户
  • Cloudflare 推出面向 AI Agent 的浏览器 Kitesurf
  • AI独立生成50次测试用例:49次精准覆盖所有边界条件
  • AI Agent支付基础设施一周内集体企业级化
  • AI Agent 故障隔离实战: blast radius 与三级 kill switch 设计
  • OpenAI发布Astra模型网络安全初步评估报告
  • Claude Code 高级编排:子 Agent 模式与防耗尽策略
  • 用 Spring Boot 搭建自托管 AI 客服组件,零 SaaS 订阅
  • 给 AI 写指令本质是写警告标签
  • Meta 认为编程代理的未来在于持久记忆而非更强模型
  • GitHub Code Quality 不再自动为 PR 添加 Copilot 审阅者
  • 别再往ChatGPT扔错误堆栈了
  • Claude Fable 5单次会话从推文构建可玩3D游戏
  • 让AI Agent拥有支付能力:x402协议实战
  • AI Agent工具优化:让Agent能安全调用你的工具
  • 用 Python + AI 自动化播客元数据流水线
  • AWS上Agentic AI实际成本拆解:单元经济学分析
  • open-connector:让AI Agent永远不接触用户凭证
  • npm脚本骗过多数用户:Agent权限提示研究
  • 警惕:MCP服务器正重蹈npm安全覆辙
  • GitHub Actions触发器丢失需手动恢复,附多条工具快讯
  • 本地语音助手如何做到「即时感」的工程实践
  • SpaceXAI Grok 4.6、OpenAI 免费无限聊、Meta 编程 Agent 入局
  • 子进程清理的正确姿势:terminate 的三个谎言
  • TypeScript 子代理设计指南:何时该分叉,何时该内联
  • 已加载 51 / 8767
8.0
热点
AI SCORE
编程提效2026-08-08 00:26

生产级MCP服务器测试与调试指南

dev.to · AI#MCP#Claude Code#测试
Editor brief · 编辑速览

详细阐述MCP服务器在生产环境中容易失败的各类场景(工具返回错误、API超时、租户凭证过期、模型选错工具等),并给出完整的测试策略,包括分层测试、租户隔离和可观测性建设。

文章思维导图
Knowledge map
拖拽缩放
Full translation

完整中文译文

问题:本地 MCP 演示与生产环境的差异

一个在本地演示中运行完美的 MCP 服务器,在生产环境中可能彻底失效。工具返回错误数据、外部 API 超时、阻塞函数冻结事件循环、租户的过期凭证导致重复失败,以及模型本身可能选错工具或生成无效参数。

除非从第一天起就为 MCP 应用构建测试和可观测性,否则这些故障几乎无法诊断。

应该测试什么?

MCP 应用有多个运动部件:

User → AI Client → MCP Server → Tool → External API/Database/Service

故障可能发生在任何一层。完整的测试策略应覆盖:

  • 外部集成
  • 认证与授权
  • 日志、指标和追踪

仅测试 Python 函数是不够的。你需要验证从客户端到外部服务的完整请求行为。

1. 从单元测试开始

单元测试一次验证应用程序的一个小部分。假设你的 MCP 服务器暴露了一个天气工具:

Cover image for Testing and Debugging MCP Applications: A Practical Production Guide

@mcp.tool()
def get_weather(city: str):
    if not city.strip():
        raise ValueError("City is required")
    return weather_client.get(city)

一个基础测试验证空输入被拒绝:

import pytest

def test_get_weather_rejects_empty_city():
    with pytest.raises(ValueError):
        get_weather("")

另一个测试验证预期响应:

def test_get_weather_returns_result(mocker):
    mocker.patch("weather_client.get", return_value={"city": "Toronto", "temperature": 24})
    result = get_weather("Toronto")
    assert result["city"] == "Toronto"
    assert result["temperature"] == 24

有用的单元测试覆盖:有效输入、缺失输入、无效值、权限失败、预期输出结构、错误响应和边界条件。

关键规则:保持工具小而专注。窄职能的工具比执行多个不相关操作的工具更容易测试。

2. Mock 外部服务

MCP 工具通常依赖 API、数据库、云平台和第三方服务。在每次测试中都调用真实服务会使测试套件变慢、昂贵、不可靠、难以复现,并且依赖互联网访问。

相反,应该 mock 外部依赖:

def test_customer_lookup(mocker):
    mocker.patch("customer_api.get_customer", return_value={"id": "cust-104", "status": "active"})
    result = get_customer("cust-104")
    assert result["status"] == "active"

你还应该测试失败响应:

def test_customer_api_timeout(mocker):
    mocker.patch("customer_api.get_customer", side_effect=TimeoutError())
    result = get_customer("cust-104")
    assert result["error"] == "service_unavailable"

不要只测试成功响应。模拟超时、无效凭证、速率限制、空响应、格式错误的 JSON、网络故障和服务器错误。生产系统以多种方式失败——你的测试应该反映这一点。

3. 添加集成测试

单元测试确认单个函数工作正常。集成测试确认多个组件协同工作。

对于 MCP 应用,集成测试验证完整流程:客户端请求 → MCP 服务器接收请求 → 工具被发现 → 工具执行 → 返回结构化响应。

一个有用的集成测试检查:

  • 服务器是否正确启动
  • 预期工具是否已注册
  • 参数是否被正确解析
  • 响应是否符合 MCP 协议模式
  • 错误是否作为结构化 MCP 错误返回

4. 测试工具选择和无效参数

在生产环境中,模型可能选错工具或生成无效参数。你无法从服务器端完全控制这一点,但可以让你的服务器更加健壮:

  • 在工具边界验证所有输入
  • 返回模型可以恢复的清晰、结构化错误
  • 记录哪个工具被调用以及使用了什么参数

5. 添加可观测性:日志、指标和追踪

没有可观测性的情况下调试 MCP 故障是盲目的。添加:

  • 每一次工具调用的结构化日志:时间戳、工具名称、参数、持续时间、结果/错误
  • 工具调用频率、错误率和延迟的指标
  • 跨越客户端 → 服务器 → 工具 → 外部服务路径的追踪

当租户的过期凭证导致重复失败时,你需要日志来显示是哪个租户和哪个工具失败了。当阻塞函数冻结事件循环时,你需要指标来显示延迟峰值。

这如何应用于 Claude Code

Claude Code 使用 MCP 服务器来扩展其能力。如果你正在为 Claude Code 构建 MCP 服务器——无论是内部工具还是公共服务器——相同的测试原则都适用。

在你信任 Claude Code 工作流中的 MCP 服务器之前:

  • 使用有效、无效和边界输入对每个工具进行单元测试
  • Mock 外部服务使测试快速可靠
  • 集成测试完整流程以捕获协议级别的问题
  • 添加可观测性以便在故障发生时进行调试

如果你在为 Claude Code 构建 MCP 服务器,从覆盖这三层的测试套件开始:

# Run unit tests for tool logic
pytest tests/unit/

# Run integration tests against the MCP server
pytest tests/integration/

向每个工具添加结构化日志:

import logging
logger = logging.getLogger("mcp.tool")

@mcp.tool()
def get_customer(customer_id: str):
    logger.info(f"get_customer called", extra={"customer_id": customer_id})
    # ...

这是你在生产环境中调试 MCP 服务器所需的最低要求。

Originally published on gentic.news

Original source

本文由 AI 翻译整理自 dev.to · AI,原文版权归原作者所有。

阅读英文原文
上一篇
Cohere Health基于Bedrock AgentCore的临床政策数字化实践
下一篇
claude-crew:持久化多终端Claude Code智能体架构详解