
1. 长任务跑起来就失联Trae/Cursor 进度自动推微信的真实痛点用 Trae 或 Cursor 跑一个跨十几个文件的重构任务最难受的不是等而是不知道要等多久。你盯着 Agent 面板看它一个文件一个文件地改改到第八个文件时你去倒了杯水回来发现它卡在一个 import 报错上已经停了五分钟。更常见的情况是你让它做数据清洗脚本它跑完整个 pipeline 需要七八分钟这段时间你切去回消息、看文档等想起来切回来它早就跑完了但你不知道它到底改了什么、有没有报错。这个问题的本质是AI 编码工具的执行过程是异步的但通知机制是同步的——你得自己盯着。Trae 和 Cursor 都支持 MCPModel Context Protocol这意味着你可以给它们挂一个自定义工具让 Agent 在完成关键节点时主动调用这个工具把进度推送到你指定的地方。微信企业微信群机器人就是一个几乎零成本、触达率极高的通知渠道。我试过用 MCP 协议写一个 Python 小工具让 Trae 在每次完成一个里程碑时自动往企业微信推一条消息同时本地生成一份 progress.md 日志。整个链路是Agent 执行任务 → 调用 MCP 工具 → Python 脚本发 HTTP 请求到企业微信 Webhook → 手机收到消息。全程本地运行Webhook Key 不出本机。这篇文章面向的是已经在用 Trae 或 Cursor 做实际编码任务、想让 Agent 主动汇报进度的开发者。你需要会一点 Python 基础知道怎么在编辑器里配 MCP Server剩下的步骤我会给完整可复制的配置和代码。核心检索词就三个Trae MCP 配置、Cursor MCP 微信通知、Python MCP Server 编写。下面从环境准备到验证请求一步步来。2. TaoToken 统一 Key 接入给 MCP 工具一条稳定的 API 通道在写 MCP 工具之前先解决一个容易被忽略的问题你的 MCP Server 如果需要调用大模型能力比如让 Agent 生成汇报文案、做进度摘要它自己也得有一个可用的 API 通道。很多人只配了 Trae/Cursor 的模型但 MCP 工具内部再发请求时用的还是另一套 Key结果就是编辑器里能跑、工具里 401。TaoToken 在这里的角色是提供一个统一的 Base URL 和 Key让 Trae、Cursor、以及你写的 MCP 工具都能走同一条 API 通道。你不需要在三个地方分别配三套鉴权改一个地方就行。它的 API 地址是https://taotoken.net/api兼容 OpenAI 风格的请求格式所以 Python 里用requests或openaiSDK 都能直接对接。具体来说你的 MCP 工具里如果有一个「生成进度摘要」的步骤可以这样调import requests TAOTOKEN_BASE https://taotoken.net/api TAOTOKEN_KEY sk-你的TaoTokenKey def summarize_progress(raw_log: str) - str: resp requests.post( f{TAOTOKEN_BASE}/v1/chat/completions, headers{ Authorization: fBearer {TAOTOKEN_KEY}, Content-Type: application/json }, json{ model: gpt-4o-mini, messages: [ {role: system, content: 把以下编码进度压缩成一条微信消息不超过80字。}, {role: user, content: raw_log} ] }, timeout30 ) resp.raise_for_status() return resp.json()[choices][0][message][content]这里的关键是TAOTOKEN_BASE和TAOTOKEN_KEY两个变量。Base URL 固定为https://taotoken.net/apiKey 你在 TaoToken 控制台生成。生成后建议放在环境变量里不要硬编码进server.py否则你 git push 的时候容易把 Key 带出去。如果你还没生成 Key可以去控制台创建一个https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmcp_wechat_console。创建时选默认权限就行MCP 工具只需要 chat completions 的调用权限。配好之后你的 MCP 工具就有了两条通道一条是企业微信 Webhook负责推送一条是 TaoToken API负责生成摘要或做其他模型调用。两条通道互不干扰Webhook 挂了不影响 APIAPI 限流了也不影响推送。有一点要注意TaoToken 的 API 地址不要加 UTM 参数直接写https://taotoken.net/api就行。UTM 是给页面链接用的API 端点加了反而可能被某些 HTTP 客户端当成非法路径。这个坑我踩过当时在requests.post里把带 UTM 的完整 URL 填进去返回 404排查了十分钟才发现是参数问题。另外如果你在 Trae 里同时配了 TaoToken 作为模型提供方MCP 工具里的 Key 可以和编辑器里用的是同一个。这样你只需要维护一个 Key轮换的时候改一处即可。Trae 的 MCP 配置和模型配置是分开的但都指向同一个 Base URL管理起来不复杂。3. 可复制配置MCP Server 代码 Trae/Cursor settings 片段这一节给完整可复制的代码和配置。你不需要从零写把下面两段分别存成文件改两个变量就能跑。3.1 Python MCP Server 完整代码新建一个目录mcp-wechat-reporter在里面创建server.pyimport os import json import datetime import requests from mcp.server import Server from mcp.server.stdio import stdio_server from mcp.types import Tool, TextContent app Server(wechat-reporter) WECHAT_WEBHOOK os.environ.get(WECHAT_WEBHOOK, ) TAOTOKEN_BASE https://taotoken.net/api TAOTOKEN_KEY os.environ.get(TAOTOKEN_KEY, ) LOG_FILE os.path.join(os.path.dirname(__file__), progress.md) def push_to_wechat(content: str) - bool: if not WECHAT_WEBHOOK: return False payload { msgtype: markdown, markdown: {content: content} } try: r requests.post(WECHAT_WEBHOOK, jsonpayload, timeout10) return r.status_code 200 and r.json().get(errcode) 0 except Exception: return False def append_log(task: str, status: str, detail: str): ts datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S) line f| {ts} | {task} | {status} | {detail} |\n if not os.path.exists(LOG_FILE): with open(LOG_FILE, w, encodingutf-8) as f: f.write(| 时间 | 任务 | 状态 | 详情 |\n|------|------|------|------|\n) with open(LOG_FILE, a, encodingutf-8) as f: f.write(line) app.list_tools() async def list_tools(): return [ Tool( namereport_progress, description向企业微信推送编码任务进度并写入本地 progress.md 日志, inputSchema{ type: object, properties: { task: {type: string, description: 任务名称}, status: {type: string, description: 状态进行中/完成/报错}, detail: {type: string, description: 详细描述} }, required: [task, status, detail] } ) ] app.call_tool() async def call_tool(name: str, arguments: dict): if name ! report_progress: return [TextContent(typetext, textf未知工具: {name})] task arguments.get(task, ) status arguments.get(status, ) detail arguments.get(detail, ) ts datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S) content f**任务进度汇报**\n 时间{ts}\n 任务{task}\n 状态{status}\n 详情{detail} ok push_to_wechat(content) append_log(task, status, detail) return [TextContent(typetext, text推送成功 if ok else 推送失败已写入本地日志)] async def main(): async with stdio_server() as (read, write): await app.run(read, write, app.create_initialization_options()) if __name__ __main__: import asyncio asyncio.run(main())安装依赖pip install mcp requests设置环境变量Linux/macOSexport WECHAT_WEBHOOKhttps://qyapi.weixin.qq.com/cgi-bin/webhook/send?key你的key export TAOTOKEN_KEYsk-你的TaoTokenKeyWindows PowerShell$env:WECHAT_WEBHOOKhttps://qyapi.weixin.qq.com/cgi-bin/webhook/send?key你的key $env:TAOTOKEN_KEYsk-你的TaoTokenKey3.2 Trae / Cursor MCP settings 配置片段Trae 的 MCP 配置在设置里的 MCP 面板Cursor 在settings.json。两者格式基本一致都是 JSON{ mcpServers: { wechat-reporter: { command: python, args: [/绝对路径/to/mcp-wechat-reporter/server.py], env: { WECHAT_WEBHOOK: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key你的key, TAOTOKEN_KEY: sk-你的TaoTokenKey } } } }三件套对照表配置项值说明Base URLhttps://taotoken.net/apiTaoToken API 端点不加 UTMKeysk-...控制台生成放 env 里Model IDgpt-4o-mini摘要用可换其他模型如果你用的是 Cursor把上面 JSON 合并进~/.cursor/mcp.json或项目级.cursor/mcp.json。Trae 则在 MCP 设置里点「添加」粘贴同样的 JSON。保存后重启编辑器MCP 面板里应该能看到wechat-reporter处于 connected 状态。3.3 企业微信 Webhook 获取在企业微信群里点右上角 → 群机器人 → 添加机器人 → 复制 Webhook 地址。这个地址就是WECHAT_WEBHOOK的值。注意Webhook 只在群内有效换群要重新生成。4. 验证请求从 Trae 触发到微信收到消息的完整链路配置完成后先别急着跑大任务用一个小请求验证链路通不通。4.1 本地直接测试 MCP Server在终端里手动跑一次工具调用逻辑确认 Webhook 和日志都正常cd mcp-wechat-reporter python -c import asyncio from server import call_tool asyncio.run(call_tool(report_progress, { task: 链路验证, status: 完成, detail: MCP Server 本地测试通过 })) 如果企业微信收到消息且目录下生成了progress.md说明 Python 侧没问题。如果没收到先检查 Webhook 地址是否完整、企业微信机器人是否被移出群。4.2 在 Trae 里触发打开 Trae新建一个对话输入帮我检查当前项目的 README.md 有没有拼写错误完成后用 report_progress 工具汇报进度。Trae 的 Agent 会先读文件然后调用report_progress。你可以在 MCP 面板看到工具调用记录。正常情况下几秒后手机收到任务进度汇报 时间2026-03-04 23:15:22 任务README 拼写检查 状态完成 详情发现 3 处拼写错误已列出4.3 在 Cursor 里触发Cursor 的触发方式类似在 Composer 里输入任务Agent 会自动发现可用的 MCP 工具。如果 Cursor 没有自动调用你可以在 prompt 里明确写「使用 wechat-reporter 的 report_progress 工具汇报」。4.4 验证 progress.md 日志每次调用都会追加一行到progress.md| 时间 | 任务 | 状态 | 详情 | |------|------|------|------| | 2026-03-04 23:15:22 | README 拼写检查 | 完成 | 发现 3 处拼写错误 | | 2026-03-04 23:18:05 | 数据库查询优化 | 完成 | 响应速度提升 40% |这个文件可以直接提交到 git作为任务执行记录。如果你想让 Agent 在任务开始时也推一条可以在 prompt 里让它先调一次report_progressstatus 填「进行中」。4.5 一次完整的端到端验证我实测的流程是在 Trae 里输入「优化 User 表的查询索引完成后告诉我」Agent 执行了约 90 秒期间改了 2 个文件最后自动调用report_progress微信收到消息progress.md多了一行。整个过程不需要我手动干预。如果你想让汇报更详细可以在 MCP 工具里加一个summary字段用 TaoToken 的 API 生成摘要后再推送。5. 常见报错排查401、local proxy failed、reading choices、OAuth这一节列几个我实际遇到过的报错和排查路径。401 Unauthorized最常见。原因通常是TAOTOKEN_KEY没设置或设置错了。检查echo $TAOTOKEN_KEYLinux/macOS或echo $env:TAOTOKEN_KEYWindows。如果 Key 正确但还是 401检查 Base URL 是不是写成了https://taotoken.net/api/末尾多了斜杠有些 HTTP 客户端会把/v1/chat/completions拼成//v1/...导致鉴权失败。正确写法是https://taotoken.net/api不带末尾斜杠。local proxy failed这个报错通常出现在 MCP Server 启动时编辑器尝试连接本地进程失败。原因可能是command填的python不在 PATH 里或者args里的路径不对。解决办法在终端里手动跑python /绝对路径/to/server.py看能不能启动。如果报ModuleNotFoundError: No module named mcp说明依赖没装到当前 Python 环境。用which python确认编辑器用的是哪个 Python然后pip install mcp requests。reading choices 报错这个通常出现在调用 TaoToken API 后解析响应时。如果你用的是resp.json()[choices][0]但返回体里没有choices字段就会报 KeyError。先打印resp.text看实际返回。常见原因是模型名写错了比如把gpt-4o-mini写成了gpt-4o-mini-2024或者请求体里messages格式不对。TaoToken 兼容 OpenAI 格式messages必须是[{role: user, content: ...}]这种结构。OAuth 相关报错如果你在 Trae 里同时配了 OAuth 类型的 MCP Server可能会和 stdio 类型的冲突。wechat-reporter用的是 stdio不需要 OAuth。如果编辑器提示 OAuth 失败检查是不是把wechat-reporter的配置写到了 OAuth 区块里。两者要分开。微信收不到消息但日志有记录说明 MCP 工具执行了但 Webhook 请求失败。检查企业微信机器人的 Webhook 是否过期换群或机器人被删会失效。另外企业微信对 markdown 消息有长度限制超过 4096 字符会被截断或拒绝。如果你的detail很长先截断再推送。Trae 里 MCP 工具不出现重启编辑器。Trae 的 MCP 面板有时需要手动刷新。如果还是不出现检查 JSON 格式是否合法可以用python -m json.tool验证。另外Trae 对 MCP Server 的启动超时是 30 秒如果 Python 启动慢比如虚拟环境激活慢可能超时。把command改成虚拟环境里的 Python 绝对路径比如/Users/you/venv/bin/python。6. 把汇报粒度调细让 Agent 在关键节点主动推送基础链路跑通后你可以调整汇报的粒度。默认情况下Agent 只在任务完成时调用一次report_progress。如果你想让它在每个文件修改后都推一条可以在 prompt 里明确要求每修改一个文件后调用 report_progress 汇报一次status 填「进行中」。这样你会收到多条消息适合长任务。但注意别太频繁企业微信机器人有频率限制每分钟 20 条超了会被限流。另一个实用技巧在 MCP 工具里加一个level参数区分「info」「warn」「error」。报错时用error推送时加红色标记。企业微信 markdown 支持font colorwarning标签可以在content里拼进去。如果你想让汇报内容更智能可以在call_tool里先调 TaoToken 的 API 做摘要。比如 Agent 传过来的detail是一大段日志你先用模型压缩成一句话再推送。这样微信消息更干净也省得你点开看长文本。最后progress.md可以配合 git hook 自动提交。每次任务完成后Agent 调用工具写入日志你在本地跑一个git add progress.md git commit -m chore: update progress就能留档。如果不想手动写个 post-commit hook 也行。整套方案的核心就三件事MCP Server 用 Python 写、Webhook 推企业微信、TaoToken 统一 Key 管 API 通道。你不需要一次配全先跑通「Trae 触发 → 微信收到」这一条链路再逐步加摘要、加日志、加分级。配好之后跑长任务时你该干嘛干嘛手机响了再看。