事情是这样的
最近在Trae里配MCP(Model Context Protocol),想同时连MongoDB和MySQL,方便AI直接查数据库写代码。
我在Trae的应用市场里,分别找到了MongoDB MCP和MySQL MCP,按说明配好。单独测的时候,俩都能用------问MongoDB的事,AI能查;问MySQL的事,AI也能查。
挺好,我以为这就搞定了。
结果两个一起开着的时候,出问题了:MySQL MCP死活调不动。
我让AI查MySQL里的数据,它会直接去用命令。或者直接说"我没有找到相关的工具"。但问MongoDB的事,它秒回。
我以为是规则写错了,又去翻skills配置,改了好几版提示词,什么"你可以使用mysql工具"、"数据库连接已就绪",都没用。AI就像瞎了一样,完全看不见MySQL那套工具。
更诡异的是,只要我把MongoDB MCP关掉,MySQL立刻就活了,问啥答啥。
开始排查
我一开始怀疑是端口冲突。但MCP走的是stdio,不是HTTP,不应该抢端口。
又怀疑是配置语法有问题,但单独用都正常,说明配置没错。
翻Trae的日志,也没看到明显的报错。MySQL MCP进程应该是起来了,但AI就是看不见它。
这时候我搜到一篇火山引擎的官方文档,里面提到一个关键信息
TRAE 未读取到 MCP Server 中的工具 #
使用添加了 MCP Server 的 Builder with MCP 或者自定义智能体时,即使在对话中明确要求模型调用某个 MCP Server 中的工具,模型依然无法调用或识别该工具。
原因:
受模型上下文窗口大小的限制,TRAE 仅会预留一部分固定的上下文空间,用于向模型传递 MCP Server 及其工具的描述信息。目前存在以下限制:
- 所有 MCP Server 描述信息的字符数上限:8,000
- 所有 MCP Server 工具的数量上限:40
当 MCP Server 的配置达到任一上限时,TRAE 会按工具维度丢弃无法容纳的工具描述信息。
解法:
- 在智能体配置面板中,取消勾选当前任务不需要的 MCP Server 和工具。这将释放部分上下文窗口,确保核心 MCP Server 的工具能被完整读取。
- 修改 MCP Server 和工具的
description字段,使用更简练的描述,避免冗长。 - 仅使用当前场景必需的工具。如果一个 MCP Server 包含大量工具(接近或超过 40 个),建议将其拆分为多个功能更专注的小型 MCP Server,并按需启用。
我也不知道是不是这个原因现在还在排查中。