npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@xihe-lab/wechat-mp-mcp-server

v0.2.0

Published

WeChat Official Account (公众号) MCP Server — 25 tools spanning official API, editor channel and HTML lint: media, drafts, long-form publishing and stats via AI assistants

Readme

WeChat MP MCP Server

npm version license Node.js CI

微信公众号 MCP Server,通过 MCP (Model Context Protocol) 接入 Claude、Cursor 等 AI 助手,用自然语言管理微信公众号的素材、草稿和发布。

25 个工具,三层架构:官方 API 层(access_token,素材/短文草稿/发布)、Web 会话层(浏览器登录态,长文直写/传图/数据统计,无 IP 白名单依赖)、本地工具层(HTML 发布前检查)。版本历史见 CHANGELOG。

系统要求

  • Node.js >= 20
  • 微信公众号 AppID 和 AppSecret(在 微信公众平台 → 开发 → 基本配置 中获取)
  • 本机 Chrome 浏览器(仅 Web 会话层需要;官方 API 层与 HTML 检查不需要)

快速开始

1. 获取凭证

方式一:AppID / AppSecret(官方 API 层)

  1. 登录 微信公众平台,进入 设置与开发 → 基本配置
  2. 记录 AppID,点击"重置"获取 AppSecret(只显示一次,注意保存)
  3. IP 白名单:官方 API 层要求把调用方出口 IP 加入白名单(同一页面下方)。家庭/办公网络切换会导致 40164——可调用 wechat_auth_health_check 获取当前出口 IP 与加白指引;或改用方式二规避

开发者文档与接入指引见 微信开放平台 · 公众号开发(服务端 API 目录、测试号申请、错误码说明均在其中)。

方式二:Web 会话层(免凭证)

只用 长文直写 / 传图 / 数据统计 等 Web 会话工具时,无需 AppSecret——首次调用 wechat_web_login 扫码登录即可(cookie 持久保存)。适合不想维护 IP 白名单的场景。

2. 配置 MCP 客户端

方式一:一键安装命令(Claude Code)

注意替换以下参数(必填项标记为 必填,其余可选)。-s user 为用户级配置(所有项目生效),改为 -s project 则仅当前项目生效:

claude mcp add -s user wechat-mp \
  --env WECHAT_APP_ID=your_app_id \                            # 必填(官方 API 层):公众号 AppID
  --env WECHAT_APP_SECRET=your_app_secret \                    # 必填(官方 API 层):公众号 AppSecret
  --env DATA_DIR=/path/to/data \                               # 可选:数据目录(凭据 + 浏览器 profile),默认 ./data
  --env WECHAT_BROWSER_CHANNEL=chrome \                        # 可选:Web 会话层浏览器,默认本机 Chrome
  --env WECHAT_BROWSER_HEADLESS=false \                        # 可选:是否无头,默认 false(登录需可见窗口扫码)
  -- npx -y "@xihe-lab/wechat-mp-mcp-server@latest"

若忘记替换凭证,重新安装前需先卸载旧配置:

claude mcp list
claude mcp remove wechat-mp

方式二:手动配置

编辑 Claude Code 的配置文件(用户目录下 .claude.json):

{
  "mcpServers": {
    "wechat-mp": {
      "command": "npx",
      "args": ["-y", "@xihe-lab/wechat-mp-mcp-server@latest"],
      "env": {
        "WECHAT_APP_ID": "",
        "WECHAT_APP_SECRET": "",
        "DATA_DIR": "",
        "WECHAT_BROWSER_CHANNEL": "chrome",
        "WECHAT_BROWSER_HEADLESS": "false"
      }
    }
  }
}

其他客户端配置方式:

  • Claude Desktop:编辑 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)
  • Cursor / VS Code:在项目根目录创建 .cursor/mcp.json 或 .vscode/mcp.json
  • WorkBuddy(腾讯 CodeBuddy 办公客户端):见下方专节

配置格式与上方相同。

WorkBuddy(腾讯 CodeBuddy 办公客户端)

WorkBuddy 采用标准 mcpServers 配置,支持两级配置文件:

| 级别 | 配置文件路径 | 适用场景 | |------|-------------|---------| | 用户级 | ~/.workbuddy/mcp.json | 配置一次,所有项目复用(推荐) | | 项目级 | <项目目录>/.workbuddy/mcp.json | 仅当前项目生效 |

操作入口:侧边栏 插件 → 右上角 MCP 服务器 → 配置 MCP,在可视化编辑器中粘贴与上方相同的 mcpServers 配置并保存(也可直接编辑上述路径的 JSON 文件)。

保存后检查 MCP Server 状态灯:🟢 连接成功;🔴 配置异常(依次检查 JSON 格式、npx 环境、凭证有效性)。

安全提示:WECHAT_APP_SECRET 是调用凭证。使用项目级配置时,请将 .workbuddy/ 加入 .gitignore,避免提交到仓库。

方式三:从源码运行

git clone https://github.com/xihe-lab/wechat-mp-mcp-server.git
cd wechat-mp-mcp-server
pnpm install && pnpm build

然后在 MCP 客户端配置中指定构建产物路径:

{
  "mcpServers": {
    "wechat-mp": {
      "command": "node",
      "args": ["/absolute/path/to/wechat-mp-mcp-server/dist/index.js"],
      "env": {
        "WECHAT_APP_ID": "your_app_id",
        "WECHAT_APP_SECRET": "your_app_secret"
      }
    }
  }
}

3. 开始使用

配置完成后重启客户端,直接用自然语言与 AI 助手对话:

帮我上传这张图片作为封面 /path/to/cover.jpg

创建一篇草稿,标题是"每周技术分享",内容如下...

检查这篇文章的 HTML 有没有排版问题:/path/to/文章.html

扫码登录公众号后台

把这篇长文直接写进草稿箱:/path/to/文章-待发布.html

查一下最近 7 天的阅读数据

环境变量

| 变量 | 必填 | 说明 | |------|------|------| | WECHAT_APP_ID | 二选一 | 公众号 AppID | | WECHAT_APP_SECRET | 二选一 | 公众号 AppSecret | | DATA_DIR | 否 | 数据存储目录,默认 ./data(浏览器登录 profile 存于其下 browser-profile/) | | WECHAT_BROWSER_CHANNEL | 否 | Web 会话层使用的浏览器,默认 chrome(本机已装的 Google Chrome) | | WECHAT_BROWSER_HEADLESS | 否 | Web 会话层是否无头运行,默认 false(登录时需要可见窗口扫码) |

也可以不设环境变量,启动后通过 wechat_auth_configure 工具动态配置(凭据会持久化到本地 SQLite)。

支持的能力

三层架构:官方 API 层(access_token + IP 白名单)、本地工具层(纯本地无网络)、Web 会话层(浏览器登录态 + 内部接口,无 IP 白名单依赖)。

| 层 | 模块 | 工具数 | 可用操作 | |----|------|--------|----------| | 官方 API | 认证管理 | 5 | 配置凭据并验证;获取 Access Token(自动刷新);强制刷新;凭据健康检查(识别缓存假阳性);从环境变量同步凭据 | | 官方 API | 素材管理 | 4 | 上传临时素材;获取临时素材;上传永久图片素材(封面图);上传正文图片(uploadimg 专用端点) | | 官方 API | 草稿管理 | 5 | 创建草稿(支持 content_file_path 文件入参);获取草稿列表/详情;删除草稿;更新草稿 | | 官方 API | 发布管理 | 4 | 提交发布;获取已发布列表;查询发布状态;删除已发布文章 | | 本地工具 | HTML 检查 | 1 | 发布前静态检查(ul/li、裸 br、占位符、非 mmbiz 图片、SVG 双事件、字数上限) | | Web 会话 | 编辑器通道 | 4 | 扫码登录;登录态检查;filetransfer 传图;长文直写草稿(不受官方接口 2 万 HTML 字符限制) | | Web 会话 | 数据统计 | 2 | 图文阅读/分享数据;用户净增/取关数据 |

共 25 个工具。AI 助手会根据你的自然语言描述自动选择合适的工具。

工具详情

认证管理(官方 API 层)

| 工具 | 说明 | 参数 | |------|------|------| | wechat_auth_configure | 配置 AppID/AppSecret 并验证 | app_id (string)、app_secret (string) | | wechat_auth_get_token | 获取当前 Access Token(自动刷新) | 无 | | wechat_auth_refresh | 强制刷新 Access Token | 无 | | wechat_auth_health_check | 凭据健康检查:清缓存强制换新 token,识别「缓存未过期但 secret 已失效」的假阳性;失败时返回错误码、出口 IP 与操作指引 | 无 | | wechat_auth_sync_from_env | 从环境变量(必要时解析 ~/.zshenv)同步凭据到本地存储并清 token 缓存;secret 不出现在返回结果中 | zshenv_path(可选) |

素材管理(官方 API 层)

| 工具 | 说明 | 参数 | |------|------|------| | wechat_media_upload | 上传临时素材(有效期 3 天) | type (image/voice/video)、file_path (本地文件路径) | | wechat_media_get | 获取临时素材内容 | media_id | | wechat_material_upload_image | 上传永久图片素材(用于草稿封面图) | file_path (JPG/PNG,≤10MB) | | wechat_media_uploadimg | 上传图文正文图片(专用端点),返回可直接嵌入正文 HTML 的 mmbiz URL | file_path (JPG/PNG,≤10MB) |

支持的文件格式:

  • image:JPG、PNG
  • voice:MP3、WMA、WAV、AMR
  • video:MP4

文件大小限制:10MB。

草稿管理(官方 API 层)

| 工具 | 说明 | 参数 | |------|------|------| | wechat_draft_add | 创建草稿(最多 8 篇图文) | articles 数组 | | wechat_draft_list | 获取草稿列表 | offset (默认 0)、count (默认 20) | | wechat_draft_get | 获取草稿详情 | media_id | | wechat_draft_delete | 删除草稿 | media_id | | wechat_draft_update | 更新草稿中的单篇文章(只传需要修改的字段) | media_id、index、可选字段 |

wechat_draft_add 每篇文章的字段:

| 字段 | 必填 | 说明 | |------|------|------| | title | 是 | 标题 | | content | 二选一 | 正文 HTML(注意:官方接口限制正文 <2 万 HTML 字符,超长会被本工具拦截并提示改用编辑器通道) | | content_file_path | 二选一 | 正文 HTML 的本地文件路径(推荐:server 直接读文件,大内容不经对话上下文转手) | | thumb_media_id | 是 | 封面图 media_id(通过 wechat_material_upload_image 获取) | | author | 否 | 作者 | | digest | 否 | 摘要 | | content_source_url | 否 | 原文链接 | | show_cover_pic | 否 | 是否显示封面(默认 true) |

发布管理(官方 API 层)

| 工具 | 说明 | 参数 | |------|------|------| | wechat_publish_submit | 提交发布(草稿 → 发布) | media_id | | wechat_publish_list | 获取已发布文章列表 | offset (默认 0)、count (默认 20) | | wechat_publish_get | 查询发布状态 | article_id | | wechat_publish_delete | 删除已发布文章 | article_id |

发布为异步操作,wechat_publish_submit 后需轮询 wechat_publish_get 确认状态。

HTML 检查(本地工具层)

| 工具 | 说明 | 参数 | |------|------|------| | wechat_html_check | 发布前静态检查:ul/li 残留、裸 br 换行丢失风险、占位符残留、非 mmbiz 图片、script 标签、SVG 动画双事件、去标签字数上限预警 | file_path |

Web 会话层(编辑器通道 + 数据统计)

| 工具 | 说明 | 参数 | |------|------|------| | wechat_web_login | 扫码登录公众号后台(打开 Chrome 窗口),登录一次后 cookie 持久保存 | timeout_ms(默认 300000) | | wechat_web_status | 检查登录态(未登录不报错,返回登录指引) | 无 | | wechat_web_upload_image | filetransfer 通道上传图片,返回 mmbiz URL(不依赖 IP 白名单) | file_path | | wechat_web_write_draft | 长文直写草稿:读本地 HTML → lint 预检 → 外链降级 → 图片自动上图床 → 创建完整草稿;返回 appMsgId 与编辑器 URL | file_path 必填;title/author/digest/source_url/show_cover_pic/auto_process_images/strip_links/wrap_section 可选 | | wechat_stats_article_summary | 图文阅读/分享数据(按日,跨度 ≤7 天) | begin_date、end_date | | wechat_stats_user_summary | 用户净增/取关数据(按日,跨度 ≤7 天) | begin_date、end_date |

Web 会话层与登录

Web 会话层用于解决官方 API 的两个硬限制:draft/add 接口的 2 万 HTML 字符上限(长文排版 HTML 通常 5–10 万字符)与 IP 白名单依赖(家庭/办公网络切换即 40164)。它通过一个持久化的浏览器 profile 维护公众号后台登录态,所有操作以你自己的登录态调用后台内部接口(与主流公众号工具同一模式,等效人工操作)。

使用流程:

  1. 首次使用调用 wechat_web_login,会打开 Chrome 窗口展示二维码,扫码确认后 cookie 持久保存(存于 DATA_DIR/browser-profile/),日常操作无需重复登录
  2. 之后直接调用 wechat_web_write_draft 写入长文草稿——正文图片自动上传图床、非微信域名外链自动降级为纯文本
  3. 工具返回 editor_url,在浏览器打开即可人工预览、补充封面后发表

发布最后一步保持人工:每天仅 1 次群发额度且发错不可撤回,wechat_web_write_draft 只到「草稿已保存」,最终发表由人工确认,这也与发布前人工审核流程互补。

浏览器要求:默认使用本机已安装的 Google Chrome(channel: 'chrome'),无需额外下载;可通过 WECHAT_BROWSER_CHANNEL 切换(如 msedge)。

典型工作流

短文(HTML <2 万字符)走官方 API:

AI 生成文章内容
  → wechat_material_upload_image(上传封面图,获取 thumb_media_id)
  → wechat_draft_add(创建草稿,content 可用 content_file_path 指向本地文件)
  → wechat_draft_get(预览草稿,人工审核)
  → wechat_publish_submit(提交发布)
  → wechat_publish_get(确认发布状态)

长文(排版 HTML,5–10 万字符)走 Web 会话层:

AI 生成排版 HTML → 存本地文件
  → wechat_html_check(发布前静态检查)
  → wechat_web_login(仅首次,扫码)
  → wechat_web_write_draft(长文直写:图片自动上图床、外链自动降级)
  → 浏览器打开 editor_url 人工预览/补充封面 → 人工点发表
  → wechat_stats_article_summary(发布后 1h/24h 记录阅读数据)

常见问题

AI 助手没有识别到微信工具

确认 Node.js >= 20 已安装,npx 可正常执行。修改配置后需重启客户端。

MCP 客户端报 -32000 连接失败

server 进程启动即崩溃,常见原因:本地源码方式运行但未 pnpm install(dist 外部化了 better-sqlite3 等原生依赖)。先安装依赖再启动。另外避免同一台机器重复注册多个 server 实例指向同一 DATA_DIR——浏览器 profile 是单实例的,第二个实例会被 Chrome SingletonLock 拒绝。

工具返回"AppID 或 AppSecret 未配置"

检查环境变量 WECHAT_APP_ID 和 WECHAT_APP_SECRET 是否正确设置,或通过 wechat_auth_configure 工具配置。

Token 获取失败(40164 / 40125)

  • 40164 invalid ip ... not in whitelist:当前出口 IP 不在白名单。调用 wechat_auth_health_check 会返回当前出口 IP 与加白路径指引;切网后 IP 变化属正常现象。Web 会话层不受 IP 白名单影响,可作替代通道
  • 40125 invalid appsecret:AppSecret 已失效(平台侧重置过)。更新 ~/.zshenv 后调用 wechat_auth_sync_from_env 同步本地 SQLite 并自动验证——不要在对话中明文发送 secret

Web 会话工具报"登录态无效或已过期"(200003)

重新调用 wechat_web_login 扫码即可;持久化 profile 让扫码频率保持在最低(通常仅在 cookie 过期或长期未用时需要)。

上传图片返回格式不支持

确认文件格式为 JPG 或 PNG,且不超过 10MB。

发布后查询状态一直显示"发布中"

微信发布审核可能需要几分钟,请稍后再次查询。如果长时间未成功,登录微信公众平台后台检查。

更新

MCP 客户端使用 npx 运行时会自动检查并下载最新版本。如需确保使用最新版本:

Claude Code

重新安装配置(会自动使用最新版本):

claude mcp remove wechat-mp
claude mcp add -s user wechat-mp \
  --env WECHAT_APP_ID=your_app_id \
  --env WECHAT_APP_SECRET=your_app_secret \
  -- npx -y "@xihe-lab/wechat-mp-mcp-server@latest"

Claude Desktop / Cursor

修改配置文件中的版本号为 @latest 或删除版本锁定(WorkBuddy 的配置文件路径见「配置 MCP 客户端 → WorkBuddy」小节):

{
  "mcpServers": {
    "wechat-mp": {
      "command": "npx",
      "args": ["-y", "@xihe-lab/wechat-mp-mcp-server@latest"],
      "env": { ... }
    }
  }
}

npm 全局安装方式

如果通过 npm 全局安装使用:

# 查看当前版本
npm list -g @xihe-lab/wechat-mp-mcp-server

# 更新到最新版本
npm update -g @xihe-lab/wechat-mp-mcp-server

# 或指定版本安装
npm install -g @xihe-lab/[email protected]

更新后需重启 MCP 客户端。

npx 缓存清理

如果 npx 使用了旧版本缓存,可手动清理后重新运行:

# 清理 npx 缓存
npx clear-npx-cache

# 或手动删除缓存目录
rm -rf ~/.npm/_npx

查看版本信息

# 查看最新发布版本
npm view @xihe-lab/wechat-mp-mcp-server version

# 查看所有已发布版本
npm view @xihe-lab/wechat-mp-mcp-server versions

各版本变更明细见 CHANGELOG.md;发布走 GitHub Actions 可信发布(OIDC),见 releases/<版本> 分支流水线。

本地开发

git clone https://github.com/xihe-lab/wechat-mp-mcp-server.git
cd wechat-mp-mcp-server
pnpm install
pnpm build
pnpm dev

添加新工具:在 src/tools/ 下创建模块文件,导出 registerXxxTools(server) 函数,然后在 src/index.ts 中导入并调用。

许可证

Apache-2.0