wechat-official-studio-mcp-server
This server provides read, analytics, and draft-writing tools for a WeChat Official Account using a locally stored session cookie.
Read:
Check login/session status.
Get account info (nickname, original ID, avatar, type).
List/search published articles (paginated, keyword filter).
Read public mp.weixin.qq.com/s articles, extracting title, author, date, summary, images, links, and text.
Analytics:
Fetch article analytics and follower analytics for date ranges (up to 100 days).
Write/drafts:
Validate draft content locally (titles, HTML, covers, etc.).
Upload JPEG/PNG/GIF images as cover/material or inline article images.
Create and save drafts of 1–8 articles to the draft box.
Limitations: No publishing/mass-sending, deleting, editing existing drafts, cross-account actions, or arbitrary crawling. Write operations require explicit confirmation and file-path allow-listing; retries are blocked to prevent duplicates.
Provides tools for managing WeChat Official Account content, including reading account info and published articles, retrieving article and follower analytics, uploading images, and creating drafts in the WeChat Official Account backend.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@wechat-official-studio-mcp-serverCheck my WeChat login status and show my recent published articles."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
WeChat Official Studio MCP
一个面向微信公众号运营的本地 MCP Server 与配套 Codex Skill。它使用用户已经登录的微信公众平台网页会话,读取账号自己的文章和数据,并在明确确认后上传图片素材、保存公众号草稿。
非微信官方项目,与腾讯、微信不存在隶属或背书关系。微信公众平台网页接口未公开且可能变化;请只操作自己有权管理的账号。
项目命名
GitHub 仓库:
wechat-official-studio-mcpMCP npm 包与服务名:
wechat-official-studio-mcp-serverCodex Skill:
wechat-official-studio推荐 MCP 配置 ID:
wechat_official(保持工具名前缀稳定)中文名:微信公众号工作台
Related MCP server: WeChat Official Account MCP Server
能力范围
读取
检查当前公众号登录状态;
读取账号基本信息;
分页读取或搜索本账号已发表文章;
读取公开
mp.weixin.qq.com/s文章正文;获取图文分析和用户分析导出数据。
写入
上传 JPEG、PNG、GIF 图片到素材库或正文图片空间;
校验一至八篇文章组成的草稿;
直接导入允许目录内的原始 HTML:将文档 CSS 内联为富文本样式,移除正文全部标题(h1 单独写入标题字段,正文不重复标题)、超链接、“发布配置”区和最外层版心边距,压紧列表空白行与空列表项,保留正文广告位文案;
将已确认的文章保存到草稿箱。
写入能力属于实验功能:它依赖微信公众号后台网页当前使用的非公开接口。首次使用或微信后台改版后,应先用测试图片和测试草稿验证,不要把草稿保存成功等同于可直接发布。
项目不提供发布、群发、删除、修改已有草稿、跨账号操作、任意公众号爬取、音视频上传。
安全设计
Cookie 只从本地
.wechat-cookie或环境变量读取,不作为 MCP 工具参数;.wechat-cookie由配置脚本以0600权限写入,并被项目级.gitignore排除;后台请求采用 GET/POST 独立路径白名单,未登记路径会被拒绝;
所有上传和草稿写入都要求
confirm=true;上传图片和导入的 HTML 必须位于
WECHAT_OFFICIAL_UPLOAD_ROOTS指定目录内,并经过真实路径、扩展名和大小校验;图片还会校验文件头;工具结果不返回 Cookie、token、ticket、账号内部标识、原始上游响应或本地绝对路径;
超时后的写入结果可能不确定,MCP 不会自动重试,避免重复素材或重复草稿;
不包含发布和删除工具,草稿必须回到微信公众平台人工检查后再发布。
环境要求
Node.js 20 或更高版本;
已登录、且有权管理的微信公众平台账号;
Codex 或其他支持 stdio MCP 的客户端。
安装
npm install
npm run build配置登录 Cookie
在浏览器登录
https://mp.weixin.qq.com并进入目标公众号后台。打开开发者工具的 Network,刷新页面,选择主机名为
mp.weixin.qq.com的后台请求。在 Request Headers 里复制
Cookie的值,不要包含Cookie:字样。把 Cookie 放入剪贴板,然后在项目目录执行:
npm run configure-cookie -- --from-clipboard也可以执行 npm run configure-cookie,在隐藏输入中粘贴。不要把 Cookie 发到聊天、Issue、README、终端历史或 Git 提交中。
Cookie 更新后会在下一次调用时重新读取,通常不需要重启 MCP。如果配置了 WECHAT_OFFICIAL_COOKIE 环境变量,它会优先于文件,此时需要更新客户端配置并重启 MCP 进程。
配置允许读取的本地内容目录
默认禁止读取本地图片和 HTML。使用上传或 HTML 导入前,必须显式设置允许目录:
export WECHAT_OFFICIAL_UPLOAD_ROOTS="/absolute/path/to/article-batch:/absolute/path/to/other-approved-content"macOS/Linux 使用冒号分隔多个目录,Windows 使用分号。只配置确实需要导入或上传的内容目录,不要配置用户主目录、磁盘根目录或包含密钥的目录。
注册 MCP
Codex 的配置示例:
[mcp_servers.wechat_official]
command = "node"
args = ["/absolute/path/to/wechat-official-studio-mcp/dist/index.js"]
env = { WECHAT_OFFICIAL_UPLOAD_ROOTS = "/absolute/path/to/approved-images" }重新打开任务后,先调用 wechat_official_check_auth。
安装配套 Skill
仓库内的 skill/wechat-official-studio 是配套 Codex Skill:
cp -R skill/wechat-official-studio "${CODEX_HOME:-$HOME/.codex}/skills/"重新打开任务后,可使用 $wechat-official-studio。Skill 会先检查登录、执行草稿校验和预览确认,再允许上传与保存草稿。
MCP 工具
工具 | 类型 | 说明 |
| 读取 | 检查本地登录状态,不返回认证材料 |
| 读取 | 获取当前公众号基本信息 |
| 读取 | 分页读取或搜索本账号发表历史 |
| 读取 | 读取一篇公开公众号文章;默认匿名优先,遇环境验证时才校验登录态并携带本地 Cookie 重试一次 |
| 读取 | 获取图文分析导出数据 |
| 读取 | 获取用户分析导出数据 |
| 本地读取 | 校验草稿;可从 |
| 写入 | 经目录与图片校验后上传素材或正文图片,要求确认 |
| 写入 | 保存新草稿,不发布,要求确认 |
除公开文章的匿名首请求和本地草稿校验外,每个使用后台会话的操作都会在实际执行前请求一次轻量登录验证。该验证不会信任缓存 token;一旦发现 Cookie/token 失效、登录跳转或验证超时,当前操作会直接中止,并明确要求用户在本地重新设置 Cookie、再次执行 wechat_official_check_auth。只有验证返回 authenticated 后才继续后续流程。
公开文章读取支持 authentication=auto|never|required。默认 auto 不发送 Cookie;只有检测到 /mp/wappoc_appmsgcaptcha、“环境异常”等验证页时,才执行登录预检并携带本地 Cookie 重试一次。两次仍被拦截时返回 PUBLIC_ARTICLE_CHALLENGE,要求用户在自己的浏览器完成环境验证,不会密集重试。公开页面只用于正文和公开元数据,阅读、分享、点赞等运营指标仍从已登录后台报表读取。
写入参数概要
wechat_official_upload_imagefile_path:已批准上传目录内的图片路径;usage=material:上传封面或素材库图片,返回media_id;usage=article:上传正文图片,返回cdn_url;confirm=true:必须在用户确认文件和用途后设置。
wechat_official_create_draftarticles:1—8 篇;每篇必须提供content_html或source_html_path之一,以及封面素材 ID;标题和摘要可从原 HTML 推断;source_html_path:从允许目录直接读取.html/.htm。MCP 会把<style>计算为元素内联样式,删除正文内全部<h1>(标题仍写入公众号标题字段,正文不包括标题)、“发布配置”区和最外层容器的宽度/左右边距,把<a>转成无链接的<span>;列表会移除空项和节点间空白,并把有效<li>的上下 margin 归零;正文中显式带边框、没有嵌套块级内容的卡片会转成已验证兼容的<p>蓝色圆角卡片,保留正常项目符号、锚文本、数据属性和.ad广告位文案;confirm=true:必须在最终草稿预览经用户确认后设置;只创建新草稿,不修改已有草稿,也不发布。
推荐工作流
读取与分析
wechat_official_check_auth按需读取发表记录或分析报表
分页、小批量处理
Cookie 过期时在本机重新配置,然后再次检查登录
上传并保存草稿
wechat_official_check_authwechat_official_validate_draft原 HTML 已存在时优先传
source_html_path,不要先转纯文本或重新拼装正文;
向用户展示账号、标题、内容长度、图片文件名、评论设置与警告
用户明确确认
wechat_official_upload_image,传入confirm=true把素材 ID 作为封面 ID,或把正文图片 URL 写入正文 HTML
再次校验最终内容
wechat_official_create_draft,传入confirm=true回到公众号草稿箱人工检查样式与链接后再发布
如果上传或草稿保存发生超时,不要直接重试。先检查素材库或草稿箱是否已经生成对应内容,再决定是否重新调用。
开发与验证
npm test
npm run check
npm run build
npm run security:scansecurity:scan 会检查项目级忽略规则、Cookie 文件权限、硬编码 Cookie/token/ticket、真实本机路径及可能的账号标识转储。它只报告文件名、行号和规则名,不打印命中的敏感内容。
上传 GitHub 前检查
npm run verify
git status --short --ignored确认 .wechat-cookie、.env、node_modules/、dist/ 只显示为 ignored,且提交内容中没有真实账号名称、原始 ID、Cookie、token、ticket、数据报表、文章草稿或本地绝对路径。
登录过期与上游变化
AUTH_REQUIRED、AUTH_EXPIRED:在本机重新配置 Cookie,然后调用wechat_official_check_auth。读取请求
REQUEST_TIMEOUT:检查网络与 Cookie 后最多重试一次。写入请求
REQUEST_TIMEOUT:结果不确定,先人工检查素材库或草稿箱,禁止自动重试。UPSTREAM_CHANGED:微信网页返回结构发生变化;停止写入并更新解析器,不要猜测替代字段或接口。
隐私说明
本项目不会把 Cookie 发送给模型或写入普通日志,但 Cookie 仍代表公众号后台登录权限。请仅在受信任的本机使用,限制文件权限和上传目录,不要共享 .wechat-cookie,不要把带真实运营数据的测试输出提交到公开仓库。
Available Tools
9 toolswechat_official_check_authCheck WeChat Official Account loginARead-onlyIdempotent
Validate the locally stored WeChat Official Platform cookie and return non-secret session/account status. Call this first before backend reads. Never pass a cookie as an argument.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, open-world, idempotent, and non-destructive behavior. The description adds meaningful context beyond annotations: the cookie is locally stored, only non-secret status is returned, and cookies must not be passed as arguments. This clarifies the tool's security and privacy posture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, front-loaded with the main verb and purpose, and contains no fluff. Every sentence earns its place: purpose, when to call, and a critical security warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple auth-check tool with rich annotations, the description is mostly complete: it states what is validated, what is returned, when to call it, and a key constraint. The only minor omission is what an invalid/expired cookie returns, but the high-level return description and the tool's straightforward nature keep this sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single optional response_format parameter is fully described by the schema with an enum and default value, so the agent can invoke the tool correctly without additional description. However, the description does not mention this parameter at all, giving 0% schema description coverage; since the parameter is trivial and optional, this is not a serious gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates a locally stored WeChat cookie and returns non-secret session/account status. This distinguishes it from sibling tools that read articles, reports, or account info, making it a dedicated auth preflight check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this first before backend reads,' providing clear when-to-use guidance. The warning 'Never pass a cookie as an argument' is a useful negative instruction, though it does not name alternative tools because none exist for this purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_official_create_draftCreate and save a WeChat draftA
Create and save up to 8 articles as a draft on the logged-in WeChat Official Account. Uses cover media IDs from prior uploads. Requires confirm=true. The draft is saved but never published.
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | Yes | Must be set to true to proceed with the draft save. | |
| articles | Yes | 1-8 draft articles with cover media IDs from prior upload_image calls | |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only signal that the tool is not read-only, not idempotent, and not destructive. The description adds meaningful behavior: 'The draft is saved but never published' and 'Requires confirm=true', which are not captured in annotations. It could add more about auth or error behavior, but the added context suffices.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short, purposeful sentences. Each sentence adds distinct information: purpose, dependency, requirement, and outcome. There is no wordiness or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core workflow: prerequisites (cover media IDs), the safety mechanism (confirm=true), the limit (8 articles), and the outcome (saved draft, not published). It does not mention return values or error handling, but given no output schema and a straightforward creation operation, this is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so the description partially compensates. 'Uses cover media IDs from prior uploads' adds meaning to the cover_media_id parameter by explaining its source, and 'Requires confirm=true' clarifies the confirm safety gate. However, response_format remains undocumented, so it does not fully compensate for all gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Create and save'), the resource ('draft'), and the scope ('up to 8 articles', 'logged-in WeChat Official Account'). It also distinguishes from siblings by emphasizing the draft is never published, separating it from publishing or reading tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it requires cover media IDs from prior uploads and confirm=true, indicating this is used after uploading images and before publication. It does not explicitly name alternative tools or when not to use, but the workflow is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_official_get_account_infoGet current WeChat Official Account infoARead-onlyIdempotent
Read the nickname, original ID, avatar, and account type for the currently logged-in WeChat Official Account. Does not expose cookies or login tokens.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds a valuable behavioral detail not covered by annotations: the tool does not expose cookies or login tokens. This provides security context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action and fields. It is concise, with no fluff, and every sentence adds value. 'Does not expose cookies or login tokens' is a useful caveat in one short sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no output schema, the description adequately explains what is returned (the four listed fields) and a key limitation (no tokens). It does not explain response_format variants, but the schema covers the enum/default. Overall, it is complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has one parameter (response_format) with 0% schema description coverage, so the description should compensate. However, it never mentions the parameter or its effect on output format. The schema's enum and default provide some meaning, but the description adds no parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Read') and resource (the currently logged-in WeChat Official Account's nickname, original ID, avatar, and account type). It distinguishes this tool from siblings such as article or report tools, which are about different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is for reading info about the logged-in account. It implies usage when account details are needed, though it does not explicitly list alternatives or when not to use the tool. The 'currently logged-in' phrase adds scope clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_official_get_article_reportGet WeChat article analyticsARead-onlyIdempotent
Read the currently logged-in account's official exported article analytics for a fixed date range of at most 100 days. Returns the columns supplied by WeChat without inventing metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| end_date | Yes | Inclusive end date in YYYY-MM-DD | |
| begin_date | Yes | Inclusive start date in YYYY-MM-DD | |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral detail beyond the annotations: the date-range limit of 100 days and the guarantee that it returns only WeChat's original columns without inventing metrics. This complements the read-only and non-destructive hints already provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver the core purpose and a key behavioral guarantee with no fluff. The description is front-loaded and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with five parameters, no output schema, and strong annotations, the description covers the essential context: what the tool does, the date-range limit, and the return behavior. It lacks mention of pagination or response_format options, but the schema provides those details, so the description is sufficient for selection and basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds a meaningful constraint on begin_date/end_date by noting the maximum range of 100 days, which is not in the schema. However, it does not elaborate on limit, offset, or response_format, leaving those parameters to be understood from defaults and naming. Schema coverage for these parameters is low (40%), so the description only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads the currently logged-in account's official exported article analytics, using a specific verb ('read') and a well-defined resource. It also distinguishes from siblings by focusing on article analytics as opposed to follower reports or article content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by specifying the scope (current account, fixed date range up to 100 days) and the nature of the data (exported article analytics). However, it does not explicitly mention alternatives or exclusions, though the sibling tool names imply distinct use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_official_get_follower_reportGet WeChat follower analyticsARead-onlyIdempotent
Read the currently logged-in account's official exported follower analytics for a fixed date range of at most 100 days. Returns the source columns as supplied by WeChat.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| end_date | Yes | Inclusive end date in YYYY-MM-DD | |
| begin_date | Yes | Inclusive start date in YYYY-MM-DD | |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds valuable context: it reads 'official exported' data (not real-time computation), enforces a maximum 100-day range, and returns raw source columns. These details go beyond what annotations provide, though pagination and error behavior are not disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise, front-loaded sentences with no redundant information. Every clause adds value: the source, the scope, the date limit, and the return behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is fairly complete given the absence of an output schema and the moderate complexity (5 params, 2 required). It covers the core purpose, the constraint on date range, and the raw nature of the return data. However, it does not clarify pagination behavior or available output formats, which would be more helpful for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 40% schema description coverage, the description partially compensates by adding the 'at most 100 days' constraint relevant to begin_date/end_date. However, it does not explain limit, offset, or response_format, which remain undocumented in the schema and description. The enum and constraints for these params are present in the schema, but the description adds limited meaning beyond the date parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Read') and clearly identifies the resource: 'currently logged-in account's official exported follower analytics.' It also adds a key scope ('fixed date range of at most 100 days') and distinguishes from sibling analytics tools by focusing on follower data and noting it returns source columns as supplied by WeChat.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when follower analytics are needed, but it does not explicitly state when to use this tool versus alternatives like get_article_report. The mention of the 100-day date range constraint is a guideline, but no exclusions or alternative tool names are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_official_list_published_articlesList published WeChat articlesARead-onlyIdempotent
List or search articles published by the currently logged-in account. This reads the account's own publication history; it is not an arbitrary third-party account crawler.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Optional title keyword | |
| offset | No | ||
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While annotations already indicate read-only and idempotent behavior, the description adds a meaningful scoping constraint—'reads the account's own publication history; not an arbitrary third-party account crawler.' This goes beyond annotations by clarifying what the tool cannot do, though it omits pagination and result format details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, with the primary purpose front-loaded and the scope clarification in the second sentence. No wasted words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with 4 parameters and no output schema, the description adequately covers purpose and scope but lacks explicit details about return format, pagination behavior, or search matching semantics. The schema provides parameter defaults, but the description could be more complete about what the returned list contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only 'query' has a description). The tool description adds no parameter-specific explanations for limit, offset, or response_format; it merely paraphrases the 'search' aspect already covered by the schema's query description. This does not compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists or searches articles published by the currently logged-in account, distinguishing it from arbitrary third-party crawling. This specific verb+resource+scope clarifies its role and separates it from siblings like read_article or report tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it operates on the account's own publication history, not third-party accounts, implying when to use it. However, it does not explicitly mention alternatives or exclusion criteria, such as using wechat_official_read_article for a single article.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_official_read_articleRead a public WeChat articleARead-onlyIdempotent
Extract title, account, author, date, summary, images, links, and readable text from one public mp.weixin.qq.com/s article URL. Defaults to an anonymous request, then performs an authentication preflight and retries once with the local backend Cookie only if WeChat returns an environment challenge.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| authentication | No | auto: anonymous first with one authenticated fallback; never: never send the backend Cookie; required: preflight and use the Cookie immediately | auto |
| max_characters | No | ||
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral detail beyond the annotations: it explains the anonymous-first request, the authentication preflight, and the conditional fallback to Cookie-based auth. This complements the readOnlyHint and idempotentHint. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff: the first sentence front-loads the primary purpose and deliverables, the second adds a critical behavioral nuance. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The core functionality and auth behavior are covered, but without an output schema, the description does not describe return-value structure, truncation behavior, or error handling. It is adequate for a read-only tool but leaves some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only 'authentication' has a schema description). The description elaborates on the authentication parameter's default behavior, but does not explain max_characters or response_format, leaving them partially ambiguous despite their enums and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific action verb ('Extract') and identifies the exact resource ('one public mp.weixin.qq.com/s article URL'), while enumerating the extracted fields (title, account, author, etc.). This distinguishes it from sibling tools like wechat_official_list_published_articles (listing) and wechat_official_get_article_report (analytics).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied by the name and description (reading a single article), but there is no explicit 'use when' or 'use instead' statement referencing sibling tools. No exclusions or alternative tool recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_official_upload_imageUpload an image to WeChat Official AccountA
Upload one local JPEG, PNG, or GIF image to the logged-in WeChat Official Account as material (cover) or article body image. Returns safe metadata (filename, size, MIME, media_id, CDN URL). Requires confirm=true. Never publishes.
| Name | Required | Description | Default |
|---|---|---|---|
| usage | No | Upload as material (cover/library) or article (inline body image) | material |
| confirm | Yes | Must be set to true to proceed with the upload. | |
| file_path | Yes | Local path to the image file (must be within WECHAT_OFFICIAL_UPLOAD_ROOTS) | |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by disclosing that the tool requires confirm=true, returns only safe metadata (filename, size, MIME, media_id, CDN URL), and never publishes content. It also implies the need for a logged-in account. These details provide meaningful behavioral context beyond the readOnlyHint/idempotentHint/destructiveHint annotations, with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with the verb and resource front-loaded. Each sentence earns its place: formats, usage modes, safe response, confirmation requirement, and a non-publication guarantee. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the presence of annotations and a well-described schema, the description covers all essential aspects: what it uploads, accepted formats, usage modes, the confirm gate, safe return metadata, and the non-publication guarantee. The file path root restriction is in the schema, so no critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, and the description adds additional meaning for key parameters: file_path is clarified as a local image with specific allowed formats, usage is mapped to 'material (cover)' or 'article body image,' and confirm is highlighted as mandatory. The response_format parameter is not mentioned in the description, but the schema already describes its enum values and default, so the overall parameter semantics are well-supported.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool uploads a local image file to the logged-in WeChat Official Account, and specifies the image formats (JPEG, PNG, GIF) and the two usage modes (material or article body). This distinguishes it from sibling tools that handle reading, reports, and drafts. It also explicitly notes 'Never publishes,' setting it apart from publication actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use the tool: for uploading local images as cover or inline article images, and notes the requirement confirm=true. It does not explicitly name alternative tools for other scenarios (e.g., reading or publishing), but the purpose clarity and 'Never publishes' provide strong implicit differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_official_validate_draftValidate a draft before savingARead-onlyIdempotent
Local-only validation of article drafts for a WeChat Official Account. Checks title/author/digest lengths, HTML content for forbidden tags and URLs, and cover media IDs. Returns errors, warnings, and per-article summaries. Does not access the network.
| Name | Required | Description | Default |
|---|---|---|---|
| articles | Yes | 1-8 draft articles | |
| response_format | No | markdown |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, idempotentHint, destructiveHint) already indicate a safe read operation, but the description adds critical behavioral context: it is local-only, does not access the network, and returns errors/warnings/summaries. It also specifies exactly what validation is performed, going beyond the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise, front-loaded sentences. The first sentence states purpose and scope, the second details checks, the third covers output and network behavior. Every sentence earns its place with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a validation tool with two parameters (one being a rich array), the description covers the key aspects: what is validated, that it is local-only, and what it returns. It does not detail the return format, but the response_format parameter handles that. The absence of an output schema makes the description's mention of 'errors, warnings, and per-article summaries' essential and sufficient for an agent to understand the tool's behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explains which fields are validated (title, author, digest, content_html, cover_media_id), adding meaning beyond the schema. However, it does not mention the response_format parameter or cover boolean fields like show_cover/open_comment, which the schema does describe. With 50% schema coverage, the description partially compensates but could go further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (validate), names the resource (article drafts), and lists concrete actions (checks lengths, forbidden tags/URLs, cover media IDs). It clearly distinguishes itself from sibling tools like create_draft or read_article by focusing on validation rather than mutation or retrieval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The title 'Validate a draft before saving' and description 'Local-only validation' clearly imply use before saving a draft, especially compared to wechat_official_create_draft. No explicit 'use this when' or 'instead of X' is stated, but the context is strong enough for an agent to infer the intended scenario.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource and action: reading external articles, listing own published articles, separate analytics for articles and followers, auth/account info, draft validation, image upload, and draft creation. No two tools have overlapping purposes.
All tools share the consistent prefix `wechat_official_` and follow a clear `verb_noun` pattern (e.g., `read_article`, `get_follower_report`, `validate_draft`). The naming is uniform and predictable.
Nine tools is well-scoped for a WeChat Official Account studio, covering core reading, analytics, auth, account info, draft creation, and image upload without unnecessary redundancy or bloat.
The set covers reading and draft-creation workflows well, but lacks update/delete/publish operations for drafts and articles. These are minor gaps for a content management workflow and can be worked around or handled externally.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Remote MCP server for China brand visibility, destination demand, and KOL discovery workflows.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Remote MCP server for Web3TV creators — manage your account over MCP.
Remote MCP server for AI.TV creators — delegate account operations to your AI agent over MCP.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables AI tools to automatically publish articles to WeChat Official Accounts, supporting Markdown-to-HTML conversion, image handling, and both preview and official publishing modes.254MIT
- FlicenseNot gradedqualityDmaintenanceEnables management of WeChat Official Accounts by supporting draft creation, image uploads, and content publishing via the MCP protocol. It provides tools for interacting with the WeChat API, including secure token caching and draft list management.
- AlicenseAqualityDmaintenanceMCP server for reading WeChat public account articles by reusing authenticated browser sessions, handling captchas and rate limits.613MIT
- FlicenseNot gradedqualityDmaintenanceMCP server for WeChat automation, supporting message sending, chat history retrieval, and contact list management via SSE protocol.5
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/zero-times/wechat-official-studio-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server