尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

AI 应用开发(一):TRAE 下自定义 MCP Server 的 config.toml 骨架与联调验证

AI 应用开发(一):TRAE 下自定义 MCP Server 的 config.toml 骨架与联调验证 1. 为什么要在 TRAE 里手写 config.toml如果你最近在折腾 AI 应用开发大概率绕不开 MCP Server 这个词。MCP 全称 Model Context Protocol你可以把它理解成模型和外部世界之间的 USB-C 接口模型本身只会推理但通过 MCP它能读你的本地文件、查数据库、调第三方 API。TRAE 作为字节推出的 AI 编程 IDE内置了 MCP 客户端能力你只要把 Server 的启动参数写进配置文件它就能在对话里被智能体调用。问题在于很多教程只给你一段 JSON 让你贴进 TRAE 的图形界面一旦要接多个 Server、要区分本地和远程、要统一管理 API Key图形界面就开始力不从心。这时候config.toml骨架的价值就出来了它是纯文本、可版本控制、可复用团队里谁拉下代码都能一键跑通。这篇就聚焦 TRAE 下自定义 MCP Server 的 config.toml 骨架配合 TaoToken 的统一 Key 通道把启动、连通性检查、报错排查整条链路走一遍。适合已经会写 Python 函数、但还没把 MCP 真正落地到日常开发流里的同学。2. TaoToken 前置统一 Key 与 API 通道在写 config.toml 之前先把模型通道这件事解决掉。自定义 MCP Server 里通常会调用大模型做审核、总结、分类这类动作如果每个 Server 都去申请一家平台的 Key环境变量会乱成一锅粥。我的做法是走 TaoToken 的统一通道一个 Key 覆盖多家模型MCP Server 里只认一个TAOTOKEN_API_KEY环境变量。TaoToken 的官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 基址是 https://taotoken.net/api 注意这个地址不带任何查询参数配置时直接填。你需要先去控制台生成 Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 生成后复制保存后面 config.toml 的 env 段会用到。如果你只是想先验证模型通不通可以用模型对话页面快速试一句 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。等确认通道没问题再回到 MCP Server 的代码里接。对于长期跑编码和 Agent 的场景Coding Plan 会更省心入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 这里先不展开后面单独写一篇。注意Key 只放在环境变量或 config.toml 的 env 段里不要硬编码进 Python 源码更不要提交到 Git。3. 可复制的 config.toml 骨架TRAE 的 MCP 配置支持 JSON 和 TOML 两种形态图形界面默认给你 JSON但 TOML 在注释和多 Server 分组上更舒服。下面这份骨架你可以直接抄改路径和 Key 就能用。# TRAE MCP 配置骨架 # 位置建议项目根目录/.trae/mcp.toml [server.xhs_check] # 启动命令Python 环境建议用绝对路径的 python command python # 脚本路径Windows 用双反斜杠或正斜杠 args [D:/code/mcp/xhs_check_server.py] # 传输协议本地进程用 stdio transport stdio # 环境变量统一走 TaoToken 通道 env { TAOTOKEN_API_KEY sk-你的Key, TAOTOKEN_BASE_URL https://taotoken.net/api } [server.repo_summary] command python args [D:/code/mcp/repo_summary_server.py] transport stdio env { TAOTOKEN_API_KEY sk-你的Key, TAOTOKEN_BASE_URL https://taotoken.net/api } # 远程 SSE 形态的 Server 示例 [server.remote_doc] url http://127.0.0.1:8000/sse transport sse几个关键点解释一下。command和args决定 TRAE 怎么把 Server 拉起来Python 场景下最容易踩的坑是用了虚拟环境里的 python 但没写绝对路径结果 TRAE 用系统 python 启动依赖找不到。transport目前本地进程用stdio远程用sse别写错。env段是重点把 TaoToken 的 Key 和 Base URL 注入进去Server 代码里用os.getenv读这样换 Key 只改一处。对应的 Python Server 骨架长这样注意读取环境变量的方式# -*- coding: utf-8 -*- import os import logging from mcp.server.fastmcp import FastMCP from pydantic import Field logger logging.getLogger(mcp) mcp FastMCP(xhs-check-server, log_levelERROR) mcp.tool(name内容审核, description输入文案返回合规审核结果) async def check_content( prompt: str Field(description待审核文案) ) - str: api_key os.getenv(TAOTOKEN_API_KEY, ) base_url os.getenv(TAOTOKEN_BASE_URL, https://taotoken.net/api) if not api_key: return 缺少 TAOTOKEN_API_KEY请检查 config.toml 的 env 段 logger.info(收到文案长度%d, len(prompt)) # 这里接你的模型调用base_url 用上面读到的值 return f已接收通道{base_url} def run(): mcp.run(transportstdio) if __name__ __main__: run()依赖安装用pip install mcp[cli]或uv add mcp[cli]装完pip list确认一下。如果你还没生成 Key先去 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 拿一个接入细节可以对照文档 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。4. 启动与连通性验证配置写完先别急着在 TRAE 里点。第一步是本地裸跑确认 Server 自己能起来# 直接运行看是否有报错 python D:/code/mcp/xhs_check_server.py # 用 MCP Inspector 做协议级检查 mcp dev D:/code/mcp/xhs_check_server.pymcp dev会拉起一个本地调试界面你能看到 Server 暴露了哪些 tool、参数 schema 对不对。这一步过了再回到 TRAE。在 TRAE 里进入 AI 功能管理找到 MCP选择手动配置把上面的 TOML 内容贴进去。保存后看状态灯绿色表示进程启动成功红色说明启动失败。红色的时候别慌先看 TRAE 的日志目录Windows 下一般在C:\Users\你的用户名\AppData\Roaming\Trae CN\logs日志里会明确告诉你command not found还是ModuleNotFoundError。我试过最常见的是路径里有空格没转义以及虚拟环境 python 没写全路径。连通性验证的最后一环是在 TRAE 对话框里选自定义智能体把一段测试文案粘进去看它能不能正常返回。如果返回的是「缺少 TAOTOKEN_API_KEY」说明 env 段没生效回去检查 TOML 的env是不是写在了[server.xxx]下面而不是文件顶层。5. 本篇常见错排查第一个高频错误是 TOML 语法本身。TOML 对引号和缩进比 JSON 敏感env { ... }这种内联表必须写在一行换行就报解析失败。建议用 VS Code 装个 TOML 插件保存时就能看到红色波浪线。第二个是 stdio 传输下的日志污染。MCP 协议规定 stdout 只能走 JSON-RPC 消息如果你在 Server 代码里随手print(debug)这条输出会混进协议流TRAE 直接解析失败。解决办法是把所有调试输出改成logger.info日志走 stderr。上面骨架里我特意用了 logging 而不是 print就是这个原因。第三个是环境变量读取时机。有些同学把os.getenv写在模块顶层结果 TRAE 注入 env 之前代码已经执行了读到空值。正确做法是在 tool 函数内部读或者用os.environ.get配合默认值兜底。第四个是远程 SSE 的地址写成了https://taotoken.net/api这种模型 API 地址。注意区分TaoToken 的 API 地址是给模型调用用的MCP 的 SSE 地址是你自己 Server 监听的地址两者不是一回事别混。报错现象大概率原因处理动作状态灯红色日志 command not foundpython 路径不对写绝对路径返回缺少 API Keyenv 段位置或拼写错检查 TOML 层级协议解析失败stdout 被 print 污染改用 logging工具列表为空装饰器没生效确认mcp.tool在函数上6. 把通道固定下来再谈复用自定义 MCP Server 真正难的不是写第一个 tool而是让它在团队里、在不同机器上都能稳定跑起来。config.toml 骨架解决的是「配置即代码」TaoToken 统一 Key 解决的是「通道即一处」。这两件事做完你后面加第二个、第三个 Server 就是复制粘贴改路径的事。如果你在接入阶段卡在 Key 或 Base URL 上直接去 API Keys 页面重新生成一个对照文档排查 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想先确认模型侧没问题用模型对话跑一句最快 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 。下一篇我会在这个骨架上加 Resources 和 Prompts把 MCP Server 从「能调」做到「好用」。
返回列表