Wechatsync 源码架构 | 浏览器扩展如何连接 CLI、MCP 与平台适配器

Wechatsync 将文章同步放在浏览器扩展中执行,再通过 CLI 和 MCP 接收外部任务。研究它的源码时,最值得看的是这条链路:命令行或 Agent 不必分别实现每个平台的登录流程,而是把任务交给已登录的浏览器,再由平台适配器转换内容、上传图片和建立草稿。本文按仓库 v2 分支说明,当前扩展清单标注 2.0.9。

Wechatsync 浏览器扩展、CLI 与 MCP 同步链路封面
Wechatsync 扩展、命令行与 MCP 协作关系概念图(AI 生成)。

任务进入扩展后,谁负责哪一步

本地 Markdown / Agent 工具调用
        ↓
CLI / MCP → WebSocket 桥接
        ↓
浏览器扩展 Service Worker
        ↓
core 平台适配器 → 目标平台接口 → 草稿

CLI、MCP 与浏览器之间依靠本地桥接通信。适配器在扩展环境中运行,借助浏览器的登录态访问目标平台;所以装好了 npm 包,还要安装配套扩展、开启相应连接,并在目标平台完成登录。

源码区域 主要职责 修改入口
packages/core 平台适配、文章类型、运行时抽象与内容转换 增加平台或修正接口与格式适配
packages/extension Manifest V3 扩展、界面与浏览器运行时 账号检测、同步交互和扩展权限
packages/cli 本地文章与命令行任务 文件输入、参数、预览与任务输出
packages/mcp-server 将同步能力提供给 Agent 客户端 工具定义、参数和桥接调用

同步后通常先得到平台草稿,再去目标编辑器检查标题、正文、图片和平台格式。成功响应并不等于文章已经正式发布;维护平台接口时,要把草稿创建和发布状态明确区分。

新增平台,先沿着文章经过的路径读代码

登录检测与接口调用

先阅读 docs/adapter-spec.md,再找一个机制接近的现有适配器。理解它如何检查账号、接受文章字段、发请求并返回结果,随后实现相应接口和注册。仅把平台名加入列表,扩展还不会知道怎样创建文章。

规范中的 RuntimeInterface 将 fetch、Cookie、存储和请求头规则等能力抽象出来。平台调用应通过这些接口配合扩展环境,避免把浏览器窗口脚本或 Node.js 示例原样搬进适配器。

图片上传与正文转换

目标平台可能要求先上传图片,再将正文中的原地址替换成平台地址;HTML、Markdown 与编辑器结构也可能不同。要分别检查图片返回值、正文替换和文章响应,不能只证明一个请求返回成功就认定整篇内容正确。

适配器主要运行在 Chrome Extension Service Worker 中,不能默认有 window、document 或 DOMParser。转换逻辑必须适合实际运行环境,确实需要 DOM 时另选扩展支持的处理方式。平台调整接口以后,优先定位相应适配器和请求契约,其他入口未必都需要改。

Hexo、Hugo 等导出路线生成 Markdown 和 ZIP 材料,和直接向平台建立草稿是不同交付方式。导出的文章与资源仍要放进自己的站点,再走该站的构建和部署流程。

Wechatsync v2 CLI、MCP Server、Chrome Extension 与平台适配器架构图
根据 v2 仓库包结构绘制的架构示意:CLI 与 MCP Server 将任务交给 Chrome Extension,core 和平台适配器处理内容后生成各平台草稿(AI 生成,非官方架构图)。

先预览一篇文章,再接自动化入口

CLI 文档提供以下安装和检查方式。先确认平台登录态,再用 dry-run 查看解析结果;这里只展示命令,没有执行同步:

npm install -g @wechatsync/cli
wechatsync platforms --auth
wechatsync sync article.md --dry-run

确认标题、正文和选定平台后,才发送草稿任务,例如:

wechatsync sync article.md -p zhihu,juejin

--dry-run 用于预览,不等于已经验证了目标平台的写入结果。正式同步以后,仍要在平台草稿中检查内容。先同步一篇短文章,检查图片、排版和接口,再考虑批量分发。

  • MCP 提供平台列表、认证检查、文章同步和页面提取等工具,工具参数仍要限定目标与操作范围。
  • CLI 的 WECHATSYNC_TOKEN、MCP 的对应 Token 配置,应与扩展侧设置一致;令牌不一致会影响桥接认证。
  • 远程桥接涉及默认 9527 端口和明文 WebSocket,不能把令牌认证当作传输加密。需要跨机器连接时,限制访问范围并使用受控加密通道。

扩展清单申请 Cookie、标签页、脚本注入、下载和请求规则等权限,并有较广的 HTTP/HTTPS 主机权限。它需要接触文章页面和登录会话;执行同步时,正文和图片也会提交给选定平台,因此“在浏览器中运行”不能理解成全部数据永远不离开设备。

源码开发需要按同一分支准备依赖与扩展构建,根配置要求 Node.js 20+。CLI、MCP 和扩展分别有包版本,不能用根包的版本号推断已安装扩展。仓库根许可为 GPL-3.0,部分子包元数据标注 MIT;抽取组件独立分发时需确认具体授权范围,不只看一项 package 字段。

  • v2 源码与架构:https://github.com/wechatsync/Wechatsync/tree/v2
  • 平台适配器规范:https://github.com/wechatsync/Wechatsync/blob/v2/docs/adapter-spec.md
  • CLI 用法:https://github.com/wechatsync/Wechatsync/tree/v2/packages/cli
  • MCP 桥接说明:https://github.com/wechatsync/Wechatsync/tree/v2/packages/mcp-server
Wechatsync 源码架构 | 浏览器扩展如何连接 CLI、MCP 与平台适配器 - 杂货喵
Wechatsync 源码架构 | 浏览器扩展如何连接 CLI、MCP 与平台适配器
此内容为免费资源,请登录后查看
M币0
发布平台GitHub
编码语言TypeScript
运行方式浏览器扩展
项目版本v2.0.9(扩展)
项目许可GPL-3.0(仓库)
支持系统Chromium浏览器
免费资源
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像 - 杂货喵
欢迎您留下宝贵的见解!
提交
头像 - 杂货喵

昵称

取消
昵称图片快捷回复

    暂无评论内容