Skip to main content
Glama

mmbiz-mcp

微信公众号后台管理的 MCP 服务。接入 Cursor、Claude Desktop 等支持 MCP 的 agent 后,可以直接让 agent 帮你写稿、上传图片、保存草稿、发布文章。

功能

工具

说明

wechat_create_draft

新建草稿(支持多篇、Markdown 正文、正文图片自动上传、封面自动上传)

wechat_update_draft

修改草稿中的某一篇文章

wechat_get_draft / wechat_list_drafts / wechat_count_drafts

查询草稿

wechat_delete_draft

删除草稿

wechat_upload_article_image

上传正文图片(jpg/png ≤1MB),返回可用于 <img src> 的微信 URL

wechat_upload_image_material

上传永久图片素材,返回 media_id(可作封面)

wechat_list_materials / wechat_count_materials / wechat_delete_material

管理永久素材

wechat_publish_draft / wechat_get_publish_status / wechat_list_published

发布草稿并查询结果

几个对 agent 友好的细节:

  • 图片来源灵活:所有图片参数都支持本地路径、file://、http(s):// 链接和 data: URI。

  • 正文图片自动转存:微信不显示外链图片,wechat_create_draft / wechat_update_draft 默认会把正文里非微信域名的图片上传到微信并替换链接(可用 localize_images: false 关闭)。

  • 上传前本地校验:按微信规则检查图片格式与大小,避免浪费接口调用次数。

  • access_token 自动管理:使用 stable_token 接口(不会让其他服务持有的 token 失效),自动缓存、提前刷新,遇到 token 失效自动刷新重试一次。

  • 错误可读:常见错误码附带中文提示(例如 IP 白名单、接口权限、配额)。

Related MCP server: WeChat Official Account MCP Server

准备工作

  1. 在 微信公众平台 → 设置与开发 → 基本配置 中获取 AppID 和 AppSecret。

  2. 在同一页面把运行本服务的机器的出口 IP 加入 IP 白名单,否则会返回 40164。

  3. 草稿与发布接口需要公众号具备相应权限(一般需认证)。

安装与配置

运行需要 Node.js ≥ 20(开发与跑测试需要 ≥ 22.12)。

git clone https://github.com/Siubaak/mmbiz-mcp.git
cd mmbiz-mcp
npm install
npm run build

在 MCP 客户端中配置(以 Cursor 的 ~/.cursor/mcp.json 或 Claude Desktop 的 claude_desktop_config.json 为例):

{
  "mcpServers": {
    "wechat-mp": {
      "command": "node",
      "args": ["/绝对路径/mmbiz-mcp/dist/index.js"],
      "env": {
        "WECHAT_APP_ID": "wx...",
        "WECHAT_APP_SECRET": "..."
      }
    }
  }
}

环境变量

必填

说明

WECHAT_APP_ID

是

公众号 AppID

WECHAT_APP_SECRET

是

公众号 AppSecret

WECHAT_API_BASE_URL

否

默认 https://api.weixin.qq.com。若本机 IP 不固定,可指向一台已加入白名单的反向代理

使用示例

对 agent 说:

把 ~/blog/posts/mcp-intro.md 保存为公众号草稿,封面用 ~/blog/images/cover.jpg,作者写“小明”。

agent 会调用 wechat_create_draft:

{
  "articles": [
    {
      "title": "MCP 入门",
      "content": "# MCP 入门\n\n![架构图](/Users/me/blog/images/arch.png)\n\n正文……",
      "content_format": "markdown",
      "thumb_image": "/Users/me/blog/images/cover.jpg",
      "author": "小明"
    }
  ]
}

返回草稿的 media_id,以及本次自动上传的正文图片和封面素材,之后可在公众平台“草稿箱”中预览和编辑。wechat_publish_draft 会让文章公开可见,只建议在明确需要时让 agent 调用。

开发

项目按 TDD 开发,所有微信接口在测试中以假的 fetch 模拟,MCP 工具通过 SDK 的内存传输端到端测试,另有一个通过 stdio 启动真实子进程的集成测试。

npm test          # 运行测试
npm run test:watch
npm run typecheck
npm run build
npm run dev       # 用 tsx 直接运行源码

目录结构:

src/
  config.ts   环境变量读取
  errors.ts   微信错误码与中文提示
  token.ts    stable access_token 缓存与刷新
  client.ts   微信 API 客户端(草稿 / 素材 / 发布)
  media.ts    图片加载(路径 / URL / data URI)与格式大小校验
  content.ts  Markdown 转 HTML、正文图片转存
  server.ts   MCP 工具定义
  index.ts    stdio 入口
test/         与 src 一一对应的测试

License

MIT

Available Tools

14 tools
wechat_count_drafts草稿总数C
Read-only

获取草稿总数。

NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, so the agent knows this is a safe read operation. The description adds nothing beyond that — no information about response shape, whether it is a plain integer, whether it counts drafts in all states, or whether it has any limits — so it provides almost no behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It consists of one short sentence with no wasted words, and the purpose is stated up front. Its brevity is efficient, though it borders on under-specification given the missing usage context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter, read-only count tool this is minimal but workable. Because there is no output schema, the description could state what is returned, such as whether it is a plain number and whether it counts drafts across all statuses; that information is currently absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters and the schema is empty, so there is nothing for the description to clarify about parameter semantics. The baseline of 4 applies because no semantic gaps exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

"获取草稿总数" states a verb (get) and a resource (draft count), so what the tool does is understandable. However, it essentially restates the name and title (草稿总数) and adds no scope information — such as whether it counts all drafts or a filtered subset — and it does not distinguish itself from wechat_list_drafts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance about when to use this tool instead of the very similar sibling wechat_list_drafts. It does not state exclusions, preconditions, or when a count would be preferred over listing drafts, so it offers no usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_count_materials永久素材总数B
Read-only

获取各类型永久素材的数量。

NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The readOnlyHint annotation already establishes that this is a safe read operation. The description adds a small amount of useful context, namely that the result is broken down per material type, but nothing about the response shape, possible type keys, or limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no wasted words and the core action front-loaded. It is terse but appropriately sized for a zero-parameter query.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple counting tool the description is minimally adequate, but it has no output schema to lean on, and it never explains what the per-type breakdown looks like or which types can appear, so the return value is left partly unclear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to explain; the baseline of 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it counts permanent materials, broken down by type (各类型). This is clearly distinguishable from a generic listing tool, though it never names its closest sibling, wechat_list_materials, to make the count-versus-list distinction explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus wechat_list_materials or the other material tools in the sibling set. An agent must infer that it is the tool to call when only a count is required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_create_draft新建草稿A

新建图文草稿(可包含多篇文章),返回草稿 media_id。支持 Markdown 正文;默认会把正文中的本地/外链图片自动上传到微信并替换链接;封面可传已有 thumb_media_id 或图片来源 thumb_image。

NameRequiredDescriptionDefault
articlesYes文章列表,最多 8 篇

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description still discloses substantive traits: it produces a draft (not a published article) and returns a media_id, and by default it uploads inline images to WeChat and rewrites their links. That side effect is exactly the kind of behavior an agent needs to know before calling. It omits draft-count quota limits and any auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact clauses: purpose and return value first, then content-format behavior, then cover options. It stays front-loaded and wastes little, though the cover sentence overlaps with the schema's 二选一 note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create tool with no annotations, no output schema, and a fairly rich nested article schema, the description covers the essentials: what is created, what is returned, and the default image-localization behavior. Missing quota/limit information and confirmation that nothing is published immediately leaves a small gap, but the agent can call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the nested article fields are all documented, so the schema does the heavy lifting. The description echoes a few of those fields (Markdown body, automatic image localization, cover alternatives) but adds no syntax or format detail beyond what the schema already says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource (新建图文草稿), notes support for multiple articles, and states the return value (草稿 media_id). An agent can distinguish it from wechat_update_draft or wechat_publish_draft by the word 新建, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a creation workflow and clarifies the cover-image choice between thumb_media_id and thumb_image, which helps with one decision. It never states when to prefer this over wechat_update_draft or wechat_publish_draft, and gives no prerequisites such as account or IP-whitelist requirements.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_delete_draft删除草稿A
Destructive

删除指定草稿。此操作不可撤销。

NameRequiredDescriptionDefault
media_idYes草稿 media_id

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, so the safety profile is known from structured data. The description adds the meaningful detail that the action is irreversible (不可撤销), but says nothing about failure behavior for an invalid media_id, permission requirements, or whether published articles derived from the draft are affected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste, and the destructive consequence is front-loaded immediately after the action statement so the agent sees the risk before invoking.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with full schema coverage and an explicit destructiveHint, this is close to sufficient, but a delete operation would benefit from stating expected behavior on a nonexistent or already-deleted media_id and confirming that publish history is untouched. No output schema exists, so return values go unexplained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with a single required media_id already documented in the schema, so the baseline of 3 applies. The description does not clarify what a media_id is, where to obtain it, or whether it must come from wechat_create_draft or wechat_list_drafts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description pairs a specific verb (删除) with a specific resource (指定草稿), so an agent can immediately tell it removes a single draft rather than listing or publishing one. It does not explicitly distinguish itself from wechat_delete_material or note that draft deletion differs from deleting published content, leaving sibling differentiation to the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the agent must infer that this is the tool for removing an unwanted draft rather than wechat_update_draft or wechat_delete_material. There is no explicit statement of when to prefer this over alternatives, nor any prerequisite such as whether the draft must be unpublished first.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_delete_material删除永久素材A
Destructive

删除指定永久素材。此操作不可撤销,使用该素材的草稿封面可能失效。

NameRequiredDescriptionDefault
media_idYes素材 media_id

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, so the base safety profile is covered. The description adds genuinely new behavioral context: the operation is irreversible and deleting a material may invalidate draft covers that reference it – a side effect not captured by any structured field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler; the action is stated first and the risk warning immediately follows. Every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter destructive tool with no output schema, the description covers what matters most: the target, irreversibility, and downstream impact on draft covers. It could mention permission requirements or behavior when the material is in use, but is otherwise sufficient to call safely.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage ('素材 media_id'), so the schema fully documents it. The description adds no format hints, sourcing guidance, or examples beyond what the schema provides, which is the expected baseline for full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('删除指定永久素材'), making the target object unambiguous and implicitly distinct from sibling deletion tools like wechat_delete_draft. It stops short of explicitly naming those siblings, but an agent can identify the operation from the resource noun alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the destructive nature of the operation, and the irreversibility warning effectively signals 'only use when certain'. However, it never says how to obtain a media_id (e.g., via wechat_list_materials) or notes any preconditions before deletion, leaving the agent to infer the workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_get_draft获取草稿B
Read-only

获取草稿详情(包含每篇文章的标题、正文、封面、预览链接等)。

NameRequiredDescriptionDefault
media_idYes草稿 media_id

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotation readOnlyHint=true already tells the agent this is a safe, non-mutating read, and the description is consistent with that. Beyond the annotation, the description adds its value by listing the returned fields. It is silent, however, on rate limits, error behavior when media_id is invalid, and whether the preview link expires; those would be the natural next details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single efficient sentence with the core action front-loaded. The parenthetical enumeration of return fields earns its place because there is no output schema. The trailing 等 is slightly vague, but overall the sentence is tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool this is close to complete: the safety profile is covered by annotations, and the return fields are described because no output schema exists. The notable gap is that it doesn't say how the agent gets a media_id, for example through wechat_list_drafts or wechat_create_draft, or what a failure looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is only one parameter, and the schema already fully documents it as "草稿 media_id" (schema coverage is 100%), so the baseline score of 3 applies. The description doesn't add any detail about valid formats or where to obtain the media_id. That is acceptable, because the schema does the work here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("获取草稿详情") and enumerates the returned fields (title, body, cover, preview link), so the agent knows it fetches a single draft's full content. It does not explicitly distinguish itself from wechat_list_drafts or wechat_get_publish_status, but the word 详情 and its singular focus make its role reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: look up an existing draft by its media_id to inspect the full content of its articles. It does not explain when to choose this tool over wechat_list_drafts, when it should not be used, or what happens with a stale or invalid media_id. Usage must be inferred from the tool name and the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_get_publish_status查询发布状态B
Read-only

根据 publish_id 查询发布状态;成功时返回 article_id 与文章链接。

NameRequiredDescriptionDefault
publish_idYes发布任务 publish_id

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

readOnlyHint=true is already declared, so the description's main added value is the success return shape (article_id plus article link). It hints that non-success outcomes exist but never says what pending/failed looks like or whether results change over time, which matters for a status-check tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the lookup key first and the return payload second; nothing is wasted. It could be split into usage and return clauses without growing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does well to state the success return fields, but it omits status values and pending/failure handling, which is the core of a status-check tool. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One parameter with 100% schema description coverage, so the schema already documents publish_id. The description restates the parameter but adds no format, origin, or validity details beyond the schema – baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (查询发布状态) keyed on publish_id, which clearly separates it from the draft/material/publish siblings. It doesn't name the sibling that produces the publish_id (wechat_publish_draft), so the workflow linkage is implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to call it, e.g. after wechat_publish_draft returns a publish_id, or whether to poll. The agent must infer the call sequence and any retry/polling behavior from the sibling list alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_list_drafts草稿列表A
Read-only

分页获取草稿列表,按更新时间倒序。默认不返回正文内容以节省篇幅。

NameRequiredDescriptionDefault
countNo返回数量,1-20
offsetNo从第几条开始,0 为第一条
no_contentNo为 true 时不返回文章正文 content 字段

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare readOnlyHint, and the description adds real behavioral facts: fixed update-time descending order and a default that suppresses the article body to save space. It stops short of describing what fields are returned or whether there is a total count, but the added context is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler; the retrieval scope and the default no-body behavior are both front-loaded. Every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with no output schema, the description covers ordering and body suppression but says nothing about the shape of returned items or how to paginate to the end (e.g., total count). Adequate but with a visible gap around return values.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (count, offset, no_content) are already documented in the schema, including defaults and ranges. The description restates the no_content default rather than adding new semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (获取草稿列表) plus its pagination and ordering behavior, which clearly separates it from single-item siblings like wechat_get_draft. It does not explicitly name sibling alternatives such as wechat_list_published, so it falls just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the resource ('drafts' vs the published-list and count siblings), but there is no explicit when-to-use or when-not-to-use guidance. An agent must infer that this is for browsing drafts rather than counting them or fetching one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_list_materials永久素材列表C
Read-only

分页获取永久素材列表。

NameRequiredDescriptionDefault
typeNo素材类型image
countNo返回数量,1-20
offsetNo从第几条开始,0 为第一条

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds only that results are paginated, which the schema's count/offset parameters already convey; there is no information about ordering, return shape, or limits on total retrievable items (offset max is a schema detail the description never contextualizes).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler, which is appropriately front-loaded. But it is terse to the point of under-specification rather than genuinely efficient, since it omits any usage or behavioral context an agent would need.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with no output schema, the description should explain what is returned (item fields, ordering, how the four material types are represented). It says nothing about return values, so an agent must discover the response shape by trial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with type enums, count bounds (1-20), and offset semantics all documented in the schema itself. The description's '分页' restates the pagination concept without adding format, ordering, or default behavior information, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('分页获取永久素材列表' – paginated retrieval of the permanent material list), so the core purpose is clear. However, it does nothing to distinguish this tool from the sibling wechat_count_materials, which also touches the permanent material collection, leaving the agent to infer the difference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus wechat_count_materials or the draft-listing siblings. The word '分页' hints at a use case for large collections, but no explicit conditions, prerequisites, or alternatives are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_list_published已发布文章列表B
Read-only

分页获取已成功发布的文章列表。

NameRequiredDescriptionDefault
countNo返回数量,1-20
offsetNo从第几条开始,0 为第一条
no_contentNo为 true 时不返回文章正文 content 字段

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so safety is covered; the description adds that results are paginated and restricted to successfully published articles, which is real extra context. It says nothing about ordering, what happens for empty result sets, or that no_content defaults to true and strips the article body.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler, and the pagination qualifier comes first. It is arguably too terse rather than padded, so it is efficient but leaves no room for the routing detail an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 a fully documented 3-parameter schema, the essential call information is present, and no output schema means return-shape detail is not mandatory. Still, the description omits the 1-20 count cap and the fact that article bodies are excluded by default, both of which materially shape the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (count, offset, no_content) are fully documented in the schema. The description only echoes the pagination concept and adds no further semantics such as ordering of the offset window or the cost of setting no_content=false. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb + resource (分页获取 / 已发布文章列表) and adds a scope qualifier, 'already successfully published', which implicitly separates it from the draft-listing siblings. It stops short of naming wechat_list_drafts or wechat_get_publish_status explicitly, so the distinction must be inferred from the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is given, even though the sibling set contains obvious near-collisions (wechat_list_drafts, wechat_get_publish_status, wechat_count_drafts). The agent must derive the choice purely from the words 'published' vs 'draft'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_publish_draft发布草稿A
Destructive

将草稿提交发布(发布后内容对外可见,且不会推送给粉丝/不占群发次数)。发布是异步的,返回 publish_id,请用 wechat_get_publish_status 查询结果。仅在用户明确要求发布时调用。

NameRequiredDescriptionDefault
media_idYes要发布的草稿 media_id

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond destructiveHint=true and openWorldHint=true, it discloses the concrete consequence (content becomes externally visible), the side-effect boundary (no fan push, no quota consumption), and that execution is asynchronous with a publish_id returned. That is exactly the extra context annotations cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short clauses ordered by importance: what happens, what the side effects are, how to retrieve the result, and when to invoke. No redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an async mutation with one parameter and no output schema, the description covers the effect, the async return value (publish_id), and the polling tool needed to resolve the outcome. Nothing required for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter at 100% schema description coverage, so the schema already defines media_id fully. The description adds no syntax, format, or sourcing guidance for it, which matches the baseline-3 expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

"将草稿提交发布" is a specific verb+resource, and the parenthetical clarifies the exact effect (publicly visible, no push to followers, no mass-send quota used). This distinguishes it cleanly from siblings like wechat_create_draft and wechat_get_publish_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives both an explicit trigger ("仅在用户明确要求发布时调用") and the follow-up path (poll with wechat_get_publish_status), naming the sibling tool and its role. An agent knows both when to call and what to do next.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_update_draft修改草稿A

整体替换草稿中指定位置(index,从 0 开始)的一篇文章。参数与新建草稿中的单篇文章一致。

NameRequiredDescriptionDefault
indexNo要修改的文章在草稿中的位置,从 0 开始
articleYes
media_idYes草稿 media_id

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description must carry the full behavioral burden. It does disclose the most important trait — the article at index is replaced wholesale, so existing content at that position is overwritten — but it says nothing about whether other articles in the draft are untouched, what happens on an out-of-range index, or that image uploads (thumb_image/localize_images) are triggered as side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler; the core replace semantics and the index base are front-loaded, and the cross-reference follows. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with a 13-property nested object, no annotations and no output schema, the description covers the essential semantics and delegates field detail to the schema and to create draft. It is still thin on return behavior (whether an updated media_id comes back) and on failure modes such as index out of range, which an agent would want before calling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67% and the nested article object already documents most fields, so this is near the baseline. The description adds two real pieces of meaning the schema does not: index is 0-based (repeated from the schema) and, more valuably, that the article object mirrors the single-article shape from wechat_create_draft, letting an agent reuse that mental model.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Uses a specific verb (整体替换 / wholesale replace) plus a precisely scoped resource (one article at position index in a draft). 'Entirely replace' implicitly distinguishes it from any partial-edit operation, and it points at wechat_create_draft as the parameter reference. It does not explicitly name which sibling to prefer over it, but the operation itself is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (modify an existing article in a draft) and gives a useful cross-reference that the article parameters match a single article in create draft. However, it never states prerequisites (the draft must already exist, media_id must be valid) or when to use this versus deleting and recreating a draft.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_upload_article_image上传正文图片A

上传文章正文内使用的图片(仅 jpg/png,≤1MB),返回可直接写入 的微信图片 URL。不占用素材库数量限制。

NameRequiredDescriptionDefault
sourceYes图片来源:本地文件路径(相对路径基于 MCP 服务的工作目录)、file:// 、http(s):// 链接,或 data:image/...;base64 URI

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full load and does well: it discloses format and size constraints, the fact that the returned URL is directly embeddable, and the quota side effect. It omits permission/credential requirements and whether re-uploads create duplicates, but the operationally important traits are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose and constraints, with the quota carve-out last as supporting detail. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter upload tool with no output schema, the description still explains what comes back (a directly usable image URL) and what inputs are rejected on format or size. An agent has everything needed to call it and consume the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter's schema description already enumerates local path, file://, http(s)://, and base64 data URI. The description adds only the format/size constraints, so schema does the heavy lifting — baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (上传文章正文内使用的图片), its accepted formats and size cap (仅 jpg/png, ≤1MB), and the return value (可直接写入 <img src> 的微信图片 URL). The clause 不占用素材库数量限制 separates it from wechat_upload_image_material without the agent needing to open either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Makes the use case explicit — images embedded in article body — and implicitly rules out the material-library path by noting it does not consume material quota. It stops short of naming wechat_upload_image_material as the alternative, so the routing is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wechat_upload_image_material上传永久图片素材A

上传永久图片素材到素材库,返回 media_id(可作为草稿封面 thumb_media_id)和 url。type=image 支持 bmp/png/jpeg/jpg/gif(≤10MB);type=thumb 仅 jpg(≤64KB)。

NameRequiredDescriptionDefault
typeNo素材类型image
sourceYes图片来源:本地文件路径(相对路径基于 MCP 服务的工作目录)、file:// 、http(s):// 链接,或 data:image/...;base64 URI

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden and does it reasonably well: it states format and size limits per type (bmp/png/jpeg/jpg/gif ≤10MB; thumb jpg ≤64KB) and describes the return values since no output schema exists. Gaps remain around quota limits for permanent materials and failure behavior, but the safety-relevant constraints are surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence front-loads the action and outputs, then packs per-type constraints compactly. No filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Because there is no output schema, the description correctly explains what is returned (media_id, url) and where the media_id can be reused. Parameters and limits are covered; only material-quota and error-handling behavior are unaddressed, which is a minor gap for a two-parameter upload tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, but the description adds genuine meaning beyond the schema by attaching distinct format and size constraints to each value of the type enum. The source parameter's accepted schemes are left to the schema, which is acceptable given full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (upload permanent image material to the material library) and names the outputs (media_id, url). The word "永久" implies the permanent-material distinction versus wechat_upload_article_image, but the sibling is never named, so differentiation is inferential rather than explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the note that the returned media_id can serve as a draft cover thumb_media_id, which hints at a real workflow. There is no explicit statement of when to prefer this over wechat_upload_article_image or wechat_create_draft, so the agent must infer the routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 14 tool updatesv0.1.0
    • First observedwechat_count_drafts
    • First observedwechat_count_materials
    • First observedwechat_create_draft
    • First observedwechat_delete_draft
    • First observedwechat_delete_material
    • First observedwechat_get_draft
    • First observedwechat_get_publish_status
    • First observedwechat_list_drafts
    • First observedwechat_list_materials
    • First observedwechat_list_published
    • First observedwechat_publish_draft
    • First observedwechat_update_draft
    • First observedwechat_upload_article_image
    • First observedwechat_upload_image_material

TDQS

A3.5/5.0

Scored across 14 tools

Disambiguation4/5

Most tools target a distinct resource+action pair, but two upload tools (wechat_upload_article_image vs wechat_upload_image_material) could be momentarily confused, though their descriptions clearly separate inline images from permanent materials. The near-trivial wechat_count_materials and wechat_count_drafts are distinguishable but add slight noise to the draft/material distinction.

Naming Consistency5/5

All 14 tools follow a uniform wechat_<verb>_<noun> snake_case pattern (create/get/list/update/delete/publish/count). Minor variation in noun ordering between the two upload tools does not break predictability.

Tool Count5/5

14 tools is well within a healthy range for a WeChat MP publishing workflow and each maps to a real operation. Nothing feels padded beyond the two optional count helpers.

Completeness4/5

Draft lifecycle is fully covered (create/update/get/list/delete/count plus publish and status polling) and materials have upload/list/count/delete. Gaps are minor: no get-material-by-media_id and no update of an existing material, which agents can work around by re-uploading.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers