2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
我审查了数十个由开发者构建的自定义模型上下文协议(MCP)服务器,这些服务器用于将人工智能助手连接到他们的内部工具。构建教程随处可见——但错误模式却鲜有人提及。
以下是导致 MCP 服务器不可靠、缓慢或静默故障的五个最常见错误。
太长不看版(TL;DR)
| # | 错误 | 影响 | 修复方法 |
|---|---|---|---|
| 1 | 向标准输出打印信息 | 服务器立即断开连接 | 将所有诊断信息路由到标准错误 |
| 2 | 模糊的工具描述 | 人工智能调用错误的工具或虚构参数 | 编写供人工智能在调用时阅读的描述 |
| 3 | 同步阻塞输入/输出 | 一个缓慢的工具会冻结所有其他工具 | 使用 async def 和连接池 |
| 4 | 缺乏输入验证 | 垃圾输入导致服务器崩溃 | 为每个工具架构使用 Pydantic 模型 |
| 5 | 缺乏工具级别的错误处理 | 人工智能收到原始堆栈跟踪信息 | 封装工具,返回结构化错误 |
1. 标准输出陷阱——打印导致服务器崩溃的诊断信息
这是 MCP 服务器“无故断开连接”且没有任何有用错误消息的最常见原因。
当你通过标准输入/输出传输运行 MCP 服务器时(这是 Claude Desktop、Cursor 和本地代理的默认设置),标准输出是协议通道。你写入标准输出的每一个字节都必须是有效的 JSON-RPC 格式。一个随意的 print() 语句就会破坏整个数据流。
错误示例:
@mcp.tool()
def query_data(filters: dict) -> list:
print(f"正在使用过滤器查询: {filters}") # 崩溃
results = db.query(filters)
return results
那个 print() 在本地测试时工作正常。一旦 Claude Desktop 连接,它收到的不是 JSON-RPC 消息,而是你的调试行,并会以通用的“MCP 服务器已断开连接”错误断开连接。
修复方法:
import logging
import sys
logging.basicConfig(
level=logging.INFO,
stream=sys.stderr, # MCP 服务器必须始终使用标准错误
format="免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。