Skip to content

Releases: CheserEri/wechat-mcp

灵语 v0.8.7

Choose a tag to compare

@CheserEri CheserEri released this 07 Oct 00:10

让抖音链接真正能解析、能下载:改走「浏览器桥」,不再依赖会被服务端轮换的签名算法。

修复

  • 抖音链接现在能解析了。抖音 Web 接口要求一个 a_bogus 签名参数,由页面里混淆的 webmssdk 实时生成,缺了或不对就是一连串 403:

    • 不带签名 → 403 Blocked by ArgusSecurityPlugin Uifid Not Found
    • 补上 Uifid 请求头 → 403 ... Signature Not Found
    • 签名格式对但内容错 → 403 ... Signature Invalid

    内置 yt-dlp(2026.08.19)的 DouyinIE 只有一行 TODO,根本没实现签名。而 Cookie 解决不了这个问题 —— 实测带上一份完整的抖音登录 Cookie,依旧是 Signature Not Found。0.8.6 声称「配 cookies.txt 即可解析抖音」是不准确的,已更正。

新增

  • 浏览器桥(bot/browser.py):起一个无头的 Chrome / Edge,通过 CDP(Chrome DevTools Protocol)打开作品页,让页面自己把签名算好,再在页面里用 XHR 取回 aweme/v1/web/aweme/detail 的结果。
    • 只依赖标准库:自己实现了 RFC 6455 的 WebSocket 客户端(CDP 只用到文本帧、分片、ping/pong),不引入 websocket-client 等新依赖,打包时无需额外收集。
    • 不碰用户的浏览器:用独立临时用户目录启动,退出时杀掉整个进程树并删掉该目录;读不到用户的配置、书签与登录态。清理本身要十几秒,所以放到后台线程做,不挡住解析结果的返回;目录名带创建者 PID,下次启动会扫掉此前异常退出遗留的目录。
    • 无需登录:取公开作品的信息不需要账号,也就不再需要导出 cookies.txt。
    • 为何用 XHR 而不是 fetch:站点的安全 SDK 是 hook XMLHttpRequest 来补签名的,直接 fetch 绕过了它(实测被风控直接拒绝)。
    • 为何要轮询:Uifid 是页面首个请求由服务器下发后才写进 Cookie 的,所以头一两次必然 403,会一直重试到 200 为止。
  • 抖音直链下载:解析出的 play_addr(按码率取最高档)用 urllib 带 Referer 直接下载,同样不经过 yt-dlp;仍受「单文件体积上限」约束(超限会中止并删掉半成品)。
  • 解析结果缓存 5 分钟:解析与下载是两次独立调用,缓存让下载复用解析结果,不必为同一条作品启动两次浏览器(play_addr 直链有时效,故 TTL 不长)。

变更

  • 抖音的解析结果标签为 [抖音],摘要里标注「类型:视频 / 图文(N 张)」。
  • 抖音图文作品能正常解析(标题、作者、图片数),但暂不支持下载(日志里会说明)。
  • 更正文档里「抖音靠 cookies.txt 解析」的说法:README、界面提示、docs/TROUBLESHOOTING.md、config.py 注释均已改为「抖音走浏览器桥,微博/小红书等仍需 cookies.txt」。
  • bot/douyin.py 里那份纯 Python a_bogus 实现(移植自 f2,曾逐字节验证正确)作为参考保留但不再使用 —— 抖音已轮换 SDK,256 字节置换表藏在 JSVMP 里,离线复现要重做一遍逆向,且随时可能再变。

说明

  • 解析一条抖音链接约 3 秒(启动无头浏览器 + 轮询到签名就绪);同一作品的后续解析命中缓存,几乎瞬时。
  • 解析需要系统装有 Edge 或 Chrome(Windows 10/11 自带 Edge,一般不必额外安装);两者都没有时会明确提示「未找到 Chrome/Edge」,不会静默失败。

产物

文件 说明
wechat-mcp-setup-x64.exe Windows 安装包(约 60.9 MB),双击按向导安装
wechat-mcp-win32-x64.zip 免安装绿色版(约 82.6 MB),解压即用

测试

315 项单元测试全部通过(0.8.6 为 296 项,本次新增 19 项)。

灵语 v0.8.6

Choose a tag to compare

@CheserEri CheserEri released this 06 Oct 05:26

新增

  • 「链接解析」页新增「cookies.txt 路径」(link_cookies_file,留空即不使用)。
    抖音这类站点的网页是空壳(没有 <title>、没有 og:title,正文靠混淆 JS 渲染),
    接口对未带 Cookie 的请求一律返回 403,yt-dlp 的原话是
    Fresh cookies (not necessarily logged in) are needed。填上一份 Netscape 格式的
    cookies.txt 后,解析与下载都会带上它。
    • 路径会自动规整:剥掉首尾空白与引号、展开 ~ 与 %VAR%;文件不存在、
      指向目录、或内容是空文件时一律按「未设置」处理。
    • 改了路径立刻生效:热更新会清掉失败的解析缓存(成功的不动),
      刚配好 Cookie 的链接马上重试,不必等 TTL 过期或重启程序。

修复

  • yt-dlp 的失败原因不再被吞掉。此前 yt-dlp 提取失败后会改走「抓网页标题」兜底,
    兜底也失败时只报兜底的原因——抖音这种空壳页面的兜底原因永远是「未能提取标题」,
    yt-dlp 那句关键的 Fresh cookies ... are needed 就这样丢了。现在两条路都失败时以
    yt-dlp 的原因为主,网页兜底的原因不同则附在其后。

变更

  • 失败原因说人话:命中「缺 Cookie」类错误(fresh cookies / cookies are required /
    sign in to confirm / DPAPI 解密失败)时,错误信息后面直接追加「该站点需要浏览器
    Cookie 才能解析(抖音/微博/小红书等常见);请在「链接解析」页设置 cookies.txt 路径」。
  • 界面说明里同步标注:不必登录也能解析的站点留空即可。

产物

  • wechat-mcp-setup-x64.exe(60.9 MB)——安装包,推荐:按用户安装、不弹 UAC,
    且不带「网络来源」标记(绕开解压后黑屏)。
  • wechat-mcp-win32-x64.zip(82.6 MB)——免安装版,解压即用。

全套 296 项单元测试通过。

灵语 v0.8.5

Choose a tag to compare

@CheserEri CheserEri released this 05 Oct 12:29

修掉「群里 @ 了机器人、模型也答了,但群里就是不出现回复」的根因:群没有设置群名称。

修复

  • 没有群名称的群,现在也能回复了。群聊如果没设群名称,contact.db 里的 nick_name / remark 都是空的,而微信搜索框只认名字、不认 xxx@chatroom 这种 ID,发送前定位不到会话就直接被拒绝——现象是日志里有入站消息、有模型调用成功的记录,群里却始终没有回复。现在 _chat_display_name 按微信自己的显示习惯兜底:用群成员昵称拼出可搜索名(A、B、C,最多 3 个)。
    • 只在能拼出两个以上昵称时才用:只有一个名字时,微信搜索会先命中同名的联系人,可能把群消息发进私聊——宁可不猜,退回会话 ID 并提醒用户去设置群名称。
    • 拼出来的名字带 、,几乎不可能与私聊联系人的显示名混淆;真要命不中会话,仍然走「拒绝发送」这条安全底线,不会误发。

变更

  • 发送失败的原因写清楚了:会话 ID 反查不到显示名时,如果目标是群聊(xxx@chatroom),错误信息里直接给出原因和做法——「该群还没有群名称,微信搜索框无法定位它;请在微信里给这个群设置一个群名称后再试」,不再只丢一句「无法解析会话名」让用户去猜。私聊的错误信息保持原样,不出现误导性提示。
  • 检测到无名群时,桥接会在「运行日志」里提前打一条 warning(每个群只打一次),不用等到发送失败才发现。
  • 全套 284 项单元测试通过(新增 11 项:无名群兜底名 9 项、错误提示 2 项)。

产物

  • wechat-mcp-setup-x64.exe — Windows 安装包(推荐,按用户安装、不弹 UAC、不含「解压锁定」问题)
  • wechat-mcp-win32-x64.zip — 免安装压缩包(解压后请先对目录执行「解除锁定」,否则可能黑屏)

提示:请确保只运行一个实例,多个实例会互相争抢微信窗口,导致「发送超时 / 回复重复 / 回复发送失败」。群聊建议设置一个群名称,回复定位最可靠。

灵语 v0.8.4

Choose a tag to compare

@CheserEri CheserEri released this 05 Oct 12:09

群聊「@ 机器人」的可诊断性与健壮性:改了微信昵称不必再重启程序。

新增

  • 群消息没被触发时给出可读原因(BotEngine._explain_no_reply):群聊里没 @ 到机器人时打一行日志,并把机器人当前识别到的昵称一并打出来,例如 群消息未 @ 机器人,已忽略 [某群] 张三:@某某 在吗|机器人昵称:Viollete。此前这条路径一行日志都不打,用户只看到入站消息、看不到任何解释,很容易误以为程序坏了。

修复

  • 修复改了微信昵称必须重启程序才生效:昵称只在连接微信时读取一次,改完昵称后旧名字仍在缓存里,群里 @ 新名字不会触发。现在 _is_at_me 遇到「消息文本里有 @ 但没匹配上任何已知昵称」时,按 60 秒冷却重读一次昵称再判——改完昵称最慢在下一条 @ 消息上自动生效。
  • 修复 _load_bot_identity 在读不到昵称时把已识别的名字清空的问题:一旦某次读取失败(微信未就绪、DB 暂时读不到),@ 识别会被整个抹掉,之后群里 @ 机器人永远不会触发。现在读不到就保留上一次的结果。

变更

  • _is_at_me 抽出 _matches_bot_name,并去掉「昵称集合为空就直接返回 False」的早退,让空昵称也能通过刷新自愈。
  • 全套 273 项单元测试通过(新增 12 项)。

产物

  • wechat-mcp-setup-x64.exe — Windows 安装包(推荐,按用户安装、不弹 UAC、不含「解压锁定」问题)
  • wechat-mcp-win32-x64.zip — 免安装压缩包(解压后请先对目录执行「解除锁定」,否则可能黑屏)

提示:安装或解压后请确保只运行一个实例,多个实例会互相争抢微信窗口,导致「发送超时 / 回复发送失败」。

灵语 v0.8.3

Choose a tag to compare

@CheserEri CheserEri released this 05 Oct 07:57

新增

  • 下载目录占用上限(link_download_quota_mb,默认 1024 MB,0 = 不限制):在「链接解析 → 下载并回发」页可设定下载目录的总占用上限。每次下载完成后统计目录大小,超出上限就按修改时间从旧到新删除文件,直到降到上限以内。新增 src/wechat_mcp/bot/storage.py(dir_usage / total_size / enforce_quota):只删下载目录内的普通文件、跳过符号链接,protect 里的路径(正在下载/发送的文件)永不删除;删除失败只记日志,不影响已完成的回发。

修复

  • X 推文卡片多图变形:多图网格原先把每张图直接 resize 到固定格子大小,竖图会被横向拉宽、横图被压扁。现在改为等比「覆盖裁切」(_fit_cover:按较大的一边缩放再居中裁切,宽高比始终不变);单图限高时也同步收窄宽度,不再只截高度。
  • 配图落位逻辑抽成 _media_boxes(单图按原比例、多图两列等格),便于单测覆盖。

产物

  • wechat-mcp-setup-x64.exe:Windows 安装包(按用户安装,不弹 UAC)
  • wechat-mcp-win32-x64.zip:免安装压缩包

全套 261 项单元测试通过。

灵语 v0.8.2

Choose a tag to compare

@CheserEri CheserEri released this 05 Oct 06:46

修复

  • 桌面端不再附带黑色命令行窗口:打包出的 exe 是控制台程序(MCP stdio 模式要靠 stdout 通信),双击启动时系统会额外分配一个命令行窗口。现在启动时自动隐藏它(仅打包产物、且控制台只属于本进程时才隐藏),原本打在控制台的内容——loguru 日志、print、异常回溯——改为转投到界面「运行日志」页。
  • 窗口与任务栏图标改用项目鲸鱼标志:pywebview 未收到 icon 时从 sys.executable 提取图标,源码方式运行会显示 python.exe 的图标;现在显式传入打包内置的 .ico。
  • 界面「运行日志」补齐 warning 级别配色(此前只定义了 .log-warn,而引擎发的是 warning)。

变更

  • 引擎日志读写加锁(BotEngine._log_lock):日志现在还会来自 loguru sink、下载线程等任意线程,而 get_logs 会整体遍历日志缓冲,并发追加会抛「deque mutated during iteration」。

产物

  • wechat-mcp-setup-x64.exe:Windows 安装包(按用户安装,不弹 UAC)
  • wechat-mcp-win32-x64.zip:免安装压缩包

全套 250 项单元测试通过。

灵语 v0.8.1

Choose a tag to compare

@CheserEri CheserEri released this 05 Oct 05:57

打包与品牌化版本:新增 Windows 安装包,修复解压即黑屏,桌面端显示名统一为「灵语」。

下载

  • wechat-mcp-setup-x64.exe — Windows 安装包(按用户安装、免 UAC、中文向导、含卸载项,约 60.8 MB)。
  • wechat-mcp-win32-x64.zip — 免安装绿色版(解压即用,约 82.5 MB)。

本次变更

  • 新增 Inno Setup 6 安装包流水线,build.py 在 onedir/zip 之后自动编译安装包。
  • 修复解压即黑屏:启动时自动清除内置程序集的「Internet 区域」标记(unblock.py)。
  • 桌面端显示名统一为「灵语」,应用图标改用项目所用的鲸鱼标志。
  • 技术标识(wechat-mcp 包名/exe 名、AppId、MCP 工具前缀)保持不变,便于后续适配 QQ 等其他聊天软件。
  • 全套 250 项单元测试通过。

运行时需微信 PC 客户端已登录且主窗口可见;详见 README。

WeChat MCP Server v0.8.0

Choose a tag to compare

@CheserEri CheserEri released this 05 Oct 03:44

WeChat MCP Server v0.8.0

面向通用 AI Agent 的 Windows 微信桌面自动化工具服务,同时内置一个实时自动回复桌面助手。
本版本为链接解析(内置 yt-dlp),并汇总自 v0.3.0 以来累积的桌面助手能力。

亮点

0.8.0 — 链接解析(内置 yt-dlp)

  • 上下文出现的链接自动解析,结果以 [链接] … 注入,供模型就链接内容回应;普通网页回退抓 <title>/meta description,媒体站点走 yt-dlp。
  • 短链展开:b23.tv / v.douyin.com / xhslink.com / t.cn 等先跟随重定向拿真实地址。
  • 下载并回发(默认关闭):把音视频下载后作为文件发回当前聊天。
  • X(Twitter)推文卡片(默认开启):免登录抓取 syndication 数据,本地 PIL 渲染成卡片图发回,含视频时再发视频。
  • 链接处理独立于触发判定:群聊里不必 @ 机器人也会处理;固定提示「正在解析链接」不经过大模型。
  • 诊断命令:wechat-mcp --resolve <url> [--download]、wechat-mcp --tweet <推文链接>。

0.7.0 — 图像识别(多模态)

  • 图片消息解密微信 .dat(v1/v2/WXAM)后以 image_url 形式随上下文送入多模态模型;开关 vision_enabled,默认关闭。

0.6.0 — 静默与水群

  • 静默时段(支持跨零点)、群级节流(默认 30 分钟 5 条)、偶发主动参与(默认关闭,[SILENT] 哨兵保持安静)。

0.5.0 — 拟人化

  • 按概率回复、长回复按句末标点分条发送并带随机间隔、口语化行为约束。

0.4.0 — 实时自动回复桌面助手

  • pywebview 桌面端(运行状态 / 群聊设置 / 拟人化 / 静默与水群 / 链接解析 / 模型设置 / 人设 / 运行日志)。
  • 群聊 @我或引用回复、私聊消息实时触发;OpenAI 兼容模型客户端(默认 DeepSeek);同一发送者冷却与会话延续。

下载与运行

  • wechat-mcp-win32-x64.zip:Windows x64 独立运行时(onedir)。
  • 解压后 wechat-mcp.exe 默认以 stdio 模式运行(供 MCP 客户端调用);wechat-mcp.exe --gui 启动桌面助手。
  • 运行前请确保微信 PC 客户端已登录且主窗口可见。

已知限制

  • 读取能力基于服务运行期间的被动监听缓冲,仅包含来自其他账号的入站消息,无法获取启动前的历史。
  • send_file 默认拒绝发送任何文件,需通过 WECHAT_SEND_DIRS 显式放宽。
  • 发送结果无法确认时返回 failed,不自动重试。
  • 内置 vendor/yt_dlp 为上游 yt-dlp 2026.08.19(Unlicense);收录的上游 wechat_bridge.py 未声明许可证,再分发前请自行确认授权(见 THIRD_PARTY_NOTICES.md)。

验证

  • 238 项单元测试全部通过。
  • 冻结包 --selfcheck 通过:version: 0.8.0、yt_dlp_version: 2026.08.19、ffmpeg / bridge / webui 均已内置。

完整变更见 CHANGELOG.md。

v0.4.0

Choose a tag to compare

@CheserEri CheserEri released this 04 Oct 09:12

实时自动回复桌面助手

同一个 exe 加 --gui 启动原生窗口:消息到达即处理,无需 Agent 轮询。

新增

  • 桌面助手界面(DeepSeek Harness 风格):状态 / 群聊触发 / 模型 / 人设 / 运行日志
  • 触发条件:群聊中 @我 或引用回复我;刚被回复过的人在该窗口内(默认 120 秒)继续发言也接着回复;私聊可选
  • 人设默认为空,可在界面编辑、保存与清空
  • 模型走 OpenAI 兼容接口(默认 DeepSeek deepseek-chat),API Key 仅存本地

修复

  • 会话识别改为以会话 ID 为稳定标识:不再把 xxx@chatroom 当作关键词搜进微信搜索框;解析不到可搜索名时明确失败而非误发
  • 触发消息在上下文中标记为 [待回复],避免回答更早的其他人的话题
  • 上下文条数 10 → 20,最大回复 100 → 300 tokens
  • 强制纯文本回复,禁用 Markdown 标记(微信不渲染)

使用

下载 wechat-mcp-win32-x64.zip 解压后:

  • MCP 服务:直接把 wechat-mcp.exe 配到 MCP 客户端
  • 桌面助手:.\wechat-mcp.exe --gui

前置:微信 PC 客户端已登录,且主窗口可见。

v0.3.0 - 打包分发(独立运行时 + DSH 插件)

Choose a tag to compare

@CheserEri CheserEri released this 04 Oct 06:09

独立运行时 + DeepSeek Harness 插件

  • 新增 Windows onedir 独立运行时 wechat-mcp-win32-x64.zip(约 32.7 MB),已内置 wechat_bridge.py,无需安装 Python,也不依赖外部 DEEPSEEKGIRL_PATH。
  • 新增 DSH 插件包 dsh-wechat-mcp:通过官方 MCP 客户端桥接,以 stdio 启动随包运行时,微信工具以 mcp__wechat__* 暴露给模型。
  • 打包剔除 cv2 / numpy / winsdk 等惰性重依赖,体积从约 341 MB 降至约 71 MB(zip 32.7 MB)。
  • 完整变更见仓库 CHANGELOG.md 的 [0.3.0] 段落。

安装(DeepSeek Harness)

dsh plugin --profile web add dsh-wechat-mcp

前置条件

  • Windows 10/11 64 位
  • 微信 PC 客户端已登录且主窗口可见

注意

packaging/wechat_bridge.py 收录自上游 deepseekgirl(该上游未声明开源许可证);来源与授权说明见仓库 THIRD_PARTY_NOTICES.md,再分发前请自行确认授权情况。