wechat-mcp
Provides tools for interacting with WeChat desktop 4.1.6+ via UI automation, including retrieving chat history by date, sending messages and files, accessing contacts and group members, searching chat history, listing recent sessions, checking unread messages, and managing Moments.
Click on "Deploy 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-mcpWhat did 张三 and I talk about yesterday?"
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-mcp
把 微信 4.1.6+ 桌面版 的聊天记录、消息发送、通讯录、朋友圈等能力,暴露为标准 MCP 工具,供 Claude Desktop、Cursor、Cherry Studio 等支持 MCP 的客户端调用。
本项目是 mcp-server-wechat 的功能等价替代实现:
旧项目依赖 pywechat,只支持微信 3.9 系列(4.x 的 UI 树已完全重构)。本项目改用
pywechat 仓库中面向 4.1+ 的 pyweixin 子模块 重写,
四个核心工具的名称与参数与旧版完全一致,可直接替换客户端配置。
实测环境:Windows 11 + 微信 4.1.15.56 + Python 3.13。 所有操作基于 Windows UI 自动化(pywinauto / UIA),不做任何逆向 Hook。
一、功能对照
核心工具(与 mcp-server-wechat 同名同参,可直接替换)
工具 | 说明 | 必填参数 |
| 获取某天的聊天记录 |
|
| 给单个好友/群聊发一条消息 |
|
| 给单个好友/群聊发多条消息 |
|
| 给多个好友发消息(群发或分别发送) |
|
扩展工具(pyweixin 4.1+ 的额外能力)
工具 | 说明 |
| 发送本地文件(可附带文本) |
| 好友 / 群聊 / 公众号 / 服务号 / 企业微信联系人 |
| 群成员列表 |
| 关键字全局搜索聊天记录 |
| 最近会话列表 |
| 检查未读消息 |
| 获取最近朋友圈 |
| 发布朋友圈 |
| 导出与某人的聊天文件 |
| 微信版本、wxid、数据目录等排障信息 |
Related MCP server: wechat-mcp
二、环境要求
项 | 要求 |
操作系统 | 仅 Windows 10 / 11(详见下方「平台支持」) |
微信 | 桌面版 4.1.6 及以上,已启动并登录 |
Python | 3.10+ |
依赖 |
|
重要:调用期间请勿手动操作微信窗口,否则会打断 UI 自动化流程。
平台支持
平台 | 状态 | 说明 |
Windows 10 / 11 | ✅ 支持 | 唯一受支持的平台,已在微信 4.1.15.56 上实测 |
macOS | ❌ 不支持 | 见下方原因 |
Linux | ❌ 不支持 | 见下方原因 |
为什么只能跑 Windows:自动化能力来自 pyweixin,其底层是 pywinauto
(UI Automation)加 win32gui / winreg / win32clipboard / win32con / pycaw
等 Win32 接口;pywechat127 在包元数据中也只声明了 Platforms: Windows 与
Operating System :: Microsoft :: Windows。微信在 macOS 上是原生 App,UI 树和
可访问性接口完全不同,这些 Win32 调用无法复用。
在 macOS / Linux 上会发生什么:MCP 层(server.py / args.py / dates.py /
config.py)是纯 Python、与平台无关,pip install 会因 sys_platform 标记自动跳过
pywechat127,服务器仍可启动并列出 14 个工具,但任一工具调用都会返回结构化错误,
不会崩溃:
{
"status": "error",
"error_type": "WeChatUnavailable",
"message": "当前平台 darwin 不受支持,pyweixin 只能驱动 Windows 桌面版微信。",
"hint": "请在 Windows 10/11 上运行本 MCP 服务器。"
}若要移植:无需重写工具层,只需替换 wechat_client.py 中与 pyweixin 交互的
那一层(约 10 个方法),改用目标平台的原生可访问性接口(macOS 可用 AppleScript /
PyObjC 的 AXUIElement,Linux 可用 AT-SPI)。工具定义、参数 schema、日期解析、
配置与测试均可直接复用:build_server(client=...) 已支持注入自定义客户端实现。
三、安装
git clone <本仓库>
cd wechat-mcp
python -m venv .venv
.venv\Scripts\activate
pip install -e .安装完成后自带两个入口,等价:
wechat-mcp :: 控制台脚本
python -m wechat_mcp :: 模块方式四、配置到 MCP 客户端
stdio(推荐)
{
"mcpServers": {
"wechat": {
"command": "D:\\code\\python\\wechat-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "wechat_mcp", "--folder-path", "D:\\wechat-logs"],
"env": { "WECHAT_MCP_MAX_MESSAGES": "3000" }
}
}
}--folder-path 指定聊天记录 JSON 的落盘目录;不传则不落盘(除非单次调用显式
save_json=true,此时默认写到 %USERPROFILE%\wechat-mcp\chat_history)。
SSE / Streamable HTTP
旧版需要分别安装 mcp_server_wechat_sse、mcp_server_wechat_Streamable_HTTP 两套包,
本项目同一个包通过 --transport 切换:
wechat-mcp --transport sse --host 127.0.0.1 --port 3000
:: 客户端配置 "url": "http://localhost:3000/sse"
wechat-mcp --transport streamable-http --host 127.0.0.1 --port 3000
:: 客户端配置 "url": "http://localhost:3000/mcp"命令行参数
参数 | 说明 |
|
|
| HTTP 传输监听地址与端口,默认 |
| 产物默认保存目录 |
| 操作期间最大化微信窗口(界面复杂度高时更稳) |
| 每次操作结束后关闭微信(默认不关闭) |
| 日志级别,默认 |
环境变量
均可通过 MCP 配置的 env 段传入,优先级低于命令行参数。
变量 | 默认 | 说明 |
| 空 | 产物保存目录 |
|
| 按日期取记录时最多回溯的消息条数 |
|
| 首次回溯条数,未命中则翻倍 |
|
| 会话列表滚动查找次数,0 = 用顶部搜索框 |
|
| 单条消息发送间隔(秒) |
|
| 操作期间最大化窗口 |
|
| 操作后关闭微信 |
|
| 日志级别 |
五、关键实现说明
1. 按日期取聊天记录:倍增回溯
微信本身没有"按日期查询"的接口,pyweixin 只能"从最新往上回溯 N 条"。因此
wechat_get_chat_history 采用倍增回溯:
先取
initial_batch(默认 200)条;解析每条的时间文本,若最早一条仍晚于目标日期,说明没翻够 → 条数翻倍重取;
命中目标日期的消息、或已回溯到目标日期之前、或历史已到头、或达到
max_messages上限时停止;按日期过滤,统一成时间正序后返回。
时间文本还原覆盖微信的全部显示形态,这也是 dates.py 独立成模块并可单独测试的原因:
界面显示 | 含义 |
| 含完整日期(聊天记录窗口的常见形态) |
| 今年 |
| 相对日期 |
| 今天 |
| 英文版微信 |
目标日期 target_date 支持 25/3/22(与旧版 YY/M/D 一致)、2025-03-22、
20250322、3/22、今天/昨天/前天。
2. 微信 4.1.12+ 窗口标题引号兼容(关键修复)
PyPI 上的 pywechat127 1.9.8 把"聊天记录"窗口标题硬编码成中文弯引号
与“好友”,而微信 4.1.12+ 的窗口标题改用了直引号 与"好友"。结果是
move_window_to_center 找不到窗口,抛出:
ElementNotFoundError: found_index is specified as 0, but 0 window/s found上游已在 git 主干按版本号做过修复,但尚未发布到 PyPI。本项目在 wechat_client.py
里加了最小侵入的兼容补丁 _install_chat_history_title_compat:先按原条件查找,
仅在失败且判定为引号问题时,换另一种引号重试一次。因此无论安装的是 PyPI 版还是
git 版都能正常工作,且修复上线后补丁会自动失效(首次即命中,不触发重试)。
3. stdio 通道保护
pyweixin 内部存在 print(),在 stdio 传输下会污染 JSON-RPC 通道导致客户端解析失败。
本项目在所有 pyweixin 调用期间把 sys.stdout 临时指向 stderr,日志同样只写 stderr。
4. 串行化
微信是单实例 GUI,UI 自动化不能并发。客户端内部使用一把可重入锁,所有工具调用串行执行。
5. 双 SDK 版本兼容
同时适配 MCP Python SDK 两个大版本:mcp >= 2(MCPServer)与 mcp >= 1.9(FastMCP),
无需用户手动锁版本。
六、与旧版 mcp-server-wechat 的行为差异
四项核心能力等价,以下差异是有意为之:
项 | 旧版 | 本项目 | 原因 |
操作后关闭微信 | 默认关闭 | 默认不关闭 | 反复关闭会导致下次调用需要重新登录 |
| 按英文逗号拆分 | 只按换行/分号拆分 | 避免"你好,张三"被拆成两条消息误发 |
多好友分别发送数量不匹配 | 补齐/截断后照发 | 直接报错 | 防止把 A 的话发给 B |
返回值 | 混用纯文本与 JSON | 统一 JSON( | 便于模型判断成败并自我修正 |
传输方式 | 三个独立包 | 一个包 + | 部署简化 |
错误提示 | 异常堆栈 | 结构化错误 + 可执行建议 | 模型可据此重试 |
七、已知限制
仅支持 Windows(macOS / Linux 的现状与原因见「平台支持」);必须保持微信已登录、窗口未被锁屏。
受 UI 自动化固有开销影响:一次"按日期取记录"约 10~15 秒;回溯条数越多越慢。
红包/转账消息在界面上没有时间戳,无法参与按日期过滤(会计入
scanned但不返回)。群聊记录的发送人解析较慢,可把群成员列表通过
group_members传入以提速。语音/视频通话等操作未暴露为工具(需要额外的音频虚拟驱动),如需可基于
pyweixin.Messages.send_audios_to_friend自行扩展。
八、开发与测试
pip install -e ".[dev]"
python -m pytest测试共 91 项,覆盖:
tests/test_dates.py:时间文本解析、目标日期解析、日期过滤与排序(含跨年、 星期、跨零点等边界);tests/test_args.py:工具入参归一化(数组/JSON/换行/分隔符、误拆防护);tests/test_client.py:倍增回溯、空记录兼容、落盘、发送校验、引号兼容补丁、 非 Windows 平台的降级提示;tests/test_protocol.py:真实 stdio 子进程 + 官方 SDK 客户端,验证工具清单、 JSON Schema、端到端调用、错误参数处理、资源读取与 stdout 纯净性。
测试使用 tests/fake_wechat.py 提供的 pyweixin 替身,无需真实微信即可运行。
目录结构:
src/wechat_mcp/
├── server.py # MCP 服务器:工具定义、参数 schema、CLI
├── wechat_client.py # pyweixin 封装:串行化、stdout 保护、兼容补丁
├── dates.py # 微信时间文本解析与按日期过滤(纯函数)
├── args.py # 入参归一化
└── config.py # 运行配置(环境变量)九、免责声明
本项目仅用于个人效率场景(如让 AI 帮你整理自己的聊天记录)。请遵守《微信软件许可及 服务协议》,不要用于群发营销、骚扰他人或任何违法用途;由此产生的一切后果由使用者自行承担。
依赖的上游项目:Hello-Mr-Crab/pywechat(LGPL)。
License
MIT
Available Tools
14 toolswechat_check_new_messagesB
检查会话列表中的新消息,返回有未读的会话及其最新内容。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It hints at read-only polling by describing a 'check' that returns unread sessions, but it never states whether calling it clears/marks messages as read, what the time window is, or how it interacts with server-side state — a critical ambiguity for a message-checking tool.
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?
A single front-loaded sentence stating the action and the return payload, with no filler. It is efficient, though slightly terse given the side-effect questions it leaves open.
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?
An output schema exists, so return values need not be described, and the zero-parameter schema is trivial. What remains missing is the side-effect/refresh semantics (does checking consume unread state, and over what window), which matters for a message-polling tool with no annotations.
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 tool takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate. No parameter meaning is missing or misstated.
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 gives a specific verb+resource (check new messages in the session list) and states what is returned (unread sessions with their latest content). It does not explicitly differentiate itself from the close sibling wechat_get_recent_sessions, so it stops 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The purpose implies a polling/refresh use case, but there is no explicit guidance on when to call this instead of wechat_get_recent_sessions or wechat_get_chat_history. Usage is inferable from the wording 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_export_chat_filesB
导出与某个好友的聊天文件到本地目录(过期未下载的文件无法导出)。
| Name | Required | Description | Default |
|---|---|---|---|
| number | No | 导出的文件数量上限,默认 20 | |
| to_user | Yes | 好友或群聊的备注/昵称,需与微信中显示的名称完全一致 | |
| target_folder | No | 保存目录;留空则使用配置的输出目录 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses one failure mode (expired/undownloaded files cannot be exported), which is real value beyond the schema, but it says nothing about local write behavior, permissions, or whether an export is idempotent. Output schema exists, so return values need not be covered.
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?
A single compact sentence with the core action front-loaded and the caveat placed in a parenthetical at the end. Nothing is wasted, though the brevity leaves room for a routing hint at no real cost.
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 three-parameter file-export tool with full schema coverage and an output schema, the description covers the essential action and one important constraint. It omits sibling differentiation and any note on the side effect of writing files to disk, which leaves gaps an agent must resolve elsewhere.
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 100% and all three parameters (number, to_user, target_folder) are documented inline with defaults and exact-match semantics for to_user. The description adds no parameter-level detail beyond the schema, so the baseline of 3 applies.
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?
States a specific verb (导出/export) and resource (聊天文件/chat files) plus the destination (本地目录/local directory), which clearly separates it from sibling readers like wechat_get_chat_history. It does not explicitly name a sibling, but the verb+resource combination is unambiguous.
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?
Usage is implied by the verb and the friend-scoped framing, and the parenthetical adds a failure condition (expired/undownloaded files cannot be exported). However, it never states when to prefer this over wechat_get_chat_history or wechat_send_files, 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.
wechat_get_chat_historyA
获取指定好友或群聊在某一天的聊天记录。
自动向上回溯历史消息直到覆盖目标日期,再按日期过滤,返回按时间正序排列的记录。 目标日期较久远时可调大 max_messages。
| Name | Required | Description | Default |
|---|---|---|---|
| to_user | Yes | 好友或群聊的备注/昵称,需与微信中显示的名称完全一致 | |
| save_json | No | 是否把结果保存为 JSON 文件 | |
| folder_path | No | 保存目录;留空则使用服务器配置的输出目录 | |
| target_date | Yes | 目标日期。支持 YY/M/D(如 25/3/22,与旧版一致),也支持 2025-03-22、20250322、3/22、今天/昨天/前天 | |
| max_messages | No | 最多向上回溯的消息条数,默认 2000;目标日期越久远需要调大 | |
| search_pages | No | 在会话列表中滚动查找好友的次数;0 表示直接使用顶部搜索框 | |
| group_members | No | 群成员昵称列表;传入可显著加快群聊记录中发送人的解析 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and largely meets it: it discloses the internal strategy (scroll back until the target date is covered, then filter by date) and the return ordering (ascending by time). It omits preconditions that matter for a UI-driven WeChat tool, such as the client being logged in/running, expected latency, or whether it mutates anything.
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 tight sentences: purpose first, mechanism second, tuning tip last. Nothing is wasted and the most important information is front-loaded, which is exactly the right shape for a frequently-scanned tool description.
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 7-parameter tool with a full output schema and 100% schema coverage, the description supplies the missing behavioral layer (retrieval algorithm, ordering) that structured fields cannot express. The remaining gap is sibling disambiguation against wechat_search_chat_history, which is the one thing an agent could still get wrong.
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 100%, so the schema already documents all seven parameters, including max_messages, search_pages and group_members. The description's only parameter note (raise max_messages for older dates) duplicates what the max_messages schema field already says, so it adds no new semantics – baseline 3 is appropriate.
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 states a specific verb and resource: retrieve chat records for a named friend or group on a specific day, with scope bounded to a single date. That is clear enough to act on, but it never distinguishes itself from the close sibling wechat_search_chat_history, so the agent must guess which retrieval tool applies.
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?
Usage is only implied by the artifact ('get a day's history for X'), with no explicit when-to-use framing and no mention of alternatives such as wechat_search_chat_history or wechat_get_recent_sessions. The one piece of practical guidance offered – increase max_messages for older dates – is tuning advice rather than usage routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_get_contactsC
获取通讯录中的好友、群聊、公众号、服务号或企业微信联系人。
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | 联系人类别:friends(好友) | groups(群聊) | official_accounts(公众号) | service_accounts(服务号) | wecom_friends(企业微信) | all(全部) | friends |
| limit | No | 每个分区最多返回多少条,默认不限 | |
| detail | No | 是否获取详细信息(昵称、备注等);群聊暂不支持详情 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it discloses nothing about pagination, rate limits, auth requirements, or ordering. It adds the category list, but that information is already in the schema, so no genuine behavioral context is contributed.
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?
A single front-loaded sentence with no filler or redundancy. It is appropriately sized, though it stops short of earning a 5 because the sentence spends its words re-listing categories already present in the schema rather than adding new guidance.
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?
An output schema exists, so return values need not be described, and the schema covers all three parameters. However, with no annotations and no usage guidance, the definition leaves the read-only nature, pagination behavior of limit, and the group-contacts overlap with siblings unaddressed.
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 100%, so the schema already documents kind, limit, and detail thoroughly. The description's category enumeration merely restates the kind values (friends/groups/公众号/服务号/企业微信) without adding format, default, or interaction semantics. Baseline 3 applies when the schema does the heavy lifting.
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?
States a specific verb (获取) and resource (通讯录) and enumerates the contact categories, so the agent knows exactly what data comes back. It is clear enough to distinguish from send_* siblings, but it never addresses the overlapping wechat_get_group_members sibling, leaving boundary ambiguity for the group-contact case.
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?
There is no indication of when to use this tool versus alternatives. Given that wechat_get_group_members also returns group-related contacts and wechat_get_recent_sessions covers chats, the definition should have stated the routing condition but does not.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_get_group_membersB
获取指定群聊的成员昵称列表。
| Name | Required | Description | Default |
|---|---|---|---|
| group | Yes | 群聊名称 | |
| search_pages | No | 在会话列表中滚动查找好友的次数;0 表示直接使用顶部搜索框 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read operation through '获取' but does not describe authentication requirements, error behavior, rate limits, or pagination/scrolling behavior. Since an output schema exists, return values need not be explained, but the behavioral profile remains largely undisclosed.
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 a single, front-loaded sentence that states the tool's purpose without unnecessary words. For a simple retrieval tool, this is appropriately sized and structurally efficient.
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 tool is simple, parameters are fully documented in the schema, and an output schema exists, so the description need not explain return values. However, with no annotations and no usage or behavioral context, the description is only minimally sufficient for correct 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?
Schema description coverage is 100%, so both parameters are already documented in the input schema. The description does not add syntax, format, or meaning beyond what the schema provides, making the baseline score of 3 appropriate.
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 states a specific verb+resource: retrieving the member nickname list for a specified group chat. This clearly distinguishes the tool from general contact or chat-history siblings by focusing on group members, but it does not explicitly name or contrast itself with any sibling tool. Thus it is clear but lacks explicit sibling differentiation.
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 only states what the tool does; it gives no guidance about when to use it versus alternatives such as wechat_get_contacts or wechat_get_chat_history. There is a weak implied use case when group member nicknames are needed, but no context, prerequisites, or exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_get_momentsC
获取最近的朋友圈内容。
| Name | Required | Description | Default |
|---|---|---|---|
| number | No | 最多获取多少条,默认不限 | |
| recent | No | Today | Yesterday | Week | Month | Today |
| with_name | No | 是否同时获取发布者昵称(较慢) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It implies a read operation but discloses nothing about auth requirements, rate limits, failure modes, or whether the fetch is paginated. Notably, it omits the 'recent' default scoping that the schema uses, leaving behavior under-specified.
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?
A single short sentence with no waste, but it is arguably under-specified rather than genuinely concise. Minimal front-loading is present since there is only one 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?
An output schema exists, so return values need not be explained, and the schema handles all three optional parameters well. However, the description omits usage context and behavioral notes that would round out a read tool with no annotations.
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 100%, so all three parameters (number, recent, with_name) are already documented in the schema, including the default value and '较慢' performance note for with_name. The description adds no parameter-level detail beyond the baseline.
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?
States a specific verb+resource combination (获取/朋友圈), making it immediately distinguishable from wechat_post_moments. However, it doesn't explicitly name siblings or clarify how it differs from related reads like wechat_get_chat_history.
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?
There is no guidance on when to use this tool versus alternatives such as wechat_get_recent_sessions or wechat_get_chat_history. No prerequisites (e.g., login state) or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_get_recent_sessionsB
获取会话列表中的最近会话(名称、最后一条消息与时间)。
| Name | Required | Description | Default |
|---|---|---|---|
| recent | No | Today | Yesterday | Week | Month | Year,也支持“今天”“本周”等中文 | Today |
| chat_only | No | 是否只返回有消息的会话 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the shape of returned items (name, last message, time), but says nothing about ordering, pagination, or scope limits, and gives no explicit read-only/side-effect confirmation for an agent that might otherwise assume it touches messages.
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?
A single compact sentence with the resource front-loaded and return contents tucked into a parenthetical. Nothing is redundant and nothing needs to be moved earlier.
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?
With an output schema covering return values and full schema coverage on both parameters, the core call information is present. What is missing is usage context relative to the many read siblings (check_new_messages, get_chat_history), which leaves the agent to guess at routing.
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 100%: both 'recent' (with its English/Chinese time-range values) and 'chat_only' are fully documented in the schema. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
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?
States a specific verb (获取) and resource (会话列表中的最近会话) and even names the returned fields (名称、最后一条消息与时间). It is clearly distinguishable from write-oriented siblings, though it does not explicitly separate itself from the closest read siblings like wechat_check_new_messages or wechat_get_chat_history.
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?
There is no when-to-use statement, no prerequisites, and no mention of alternatives. The agent must infer that this is the tool for browsing the recent session list rather than for fetching message content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_get_weixin_infoA
获取当前微信的版本、wxid、数据目录及本服务器配置,用于排障。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only 'get' operation with no side effects, but never states this explicitly, nor does it note sensitivity of the disclosed server config/wxid or any rate limits.
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?
A single front-loaded sentence that names the tool's output fields first and the usage context last. 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?
An output schema exists, so return-value documentation is not required, yet the description still summarizes the payload (version, wxid, data dir, server config). For a zero-param diagnostic tool this is essentially complete; only the read-only/no-side-effect guarantee 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?
The tool takes zero parameters, so there is nothing for the description to disambiguate. The baseline of 4 applies for a parameterless tool.
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 names a concrete verb (获取) and enumerates the specific resources returned: WeChat version, wxid, data directory, and server configuration. This clearly separates it from the sibling messaging/contact/moments tools, though it doesn't name a sibling explicitly.
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 trailing phrase '用于排障' (for troubleshooting) gives an implied use context, so the agent knows this is a diagnostic call rather than a routine data fetch. However, no alternatives or when-not-to-use conditions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_post_momentsC
发布一条朋友圈(文案 + 图片/视频)。
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | 朋友圈文案 | |
| medias | No | 图片/视频的本地绝对路径列表,支持 jpg/png/gif/bmp/mp4/mov |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses nothing beyond the bare action. It does not say the post is publicly visible to contacts, whether it is reversible/deletable, whether login/permission is required, or how media paths are validated.
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?
A single short sentence that front-loads the action and stays tight with no filler. It is efficient, though so terse that conciseness shades into under-specification.
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 publish/mutation tool with zero annotation coverage, the description is too thin. The output schema removes the need to explain return values, but the absence of any behavioral, permission, or reversibility context leaves meaningful gaps.
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 100%, so both parameters are already documented in the schema, and the description merely echoes them as (文案 + 图片/视频). Baseline 3 applies since the schema does the heavy lifting and the description adds no format or constraint detail.
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?
States a specific verb (发布/publish) and resource (朋友圈/Moments), and the parenthetical clarifies the payload is text plus media. An agent can distinguish it from the read counterpart wechat_get_moments by the verb alone, though it never names that sibling explicitly.
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?
There is no when-to-use, when-not-to-use, or alternative routing guidance. The posting intent is only implied by the verb; nothing tells the agent when this is preferable to another tool or what prerequisites exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_search_chat_historyB
用关键字在微信中全局搜索聊天记录。
| Name | Required | Description | Default |
|---|---|---|---|
| number | No | 最多获取多少条,默认不限 | |
| keyword | Yes | 搜索关键字 | |
| with_content | No | 是否返回具体聊天内容;默认只返回命中数量 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing beyond the search semantics implied by the name. It does not state that the operation is read-only, that results are limited/sorted, or what permissions are needed. The only behavioral hint (global scope) is minimal for a tool with zero annotation coverage.
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?
A single front-loaded sentence with zero filler. It is efficient, though arguably undersized for a tool with no annotations and multiple parameters.
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?
An output schema exists, so return values need not be described, and parameters are covered by the schema. However, with no annotations the description should still convey more (read-only nature, result behavior, relationship to wechat_get_chat_history) than it does.
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 100%, so keyword, number, and with_content are already fully documented in the schema. The description adds no format, syntax, or matching-rule detail beyond that, so the baseline 3 applies.
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?
States a specific verb (搜索/search), resource (聊天记录/chat history), and scope (全局/global, 用关键字/by keyword). The 'global' qualifier implicitly distinguishes it from wechat_get_chat_history, but the sibling is never named explicitly.
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 word '全局' hints at when this is appropriate (cross-conversation lookup) versus a single-chat fetch, but there is no explicit when-to-use, when-not-to-use, or named alternative. Usage is only inferable from the scope adverb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_send_filesB
向单个好友或群聊发送本地文件(单个文件需小于 1GB)。
| Name | Required | Description | Default |
|---|---|---|---|
| delay | No | 发送间隔(秒),默认 0.2 | |
| files | Yes | 本地文件的绝对路径列表,也支持换行分隔的字符串;单个文件需小于 1GB | |
| to_user | Yes | 好友或群聊的备注/昵称,需与微信中显示的名称完全一致 | |
| messages | No | 随文件一起发送的文本消息 | |
| messages_first | No | 为 True 时先发消息再发文件;默认先发文件 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses only the 1GB per-file limit — which is already repeated in the schema's files parameter — and says nothing about prerequisites (WeChat must be running/logged in), failure behavior, rate limits around the delay parameter, or whether sending is retried. For a write/action tool with zero annotation coverage this is a significant gap.
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?
A single front-loaded sentence stating the verb, scope, and constraint with no filler. It is not under-padded to the point of being cryptic, but it also omits any routing or prerequisite information that would have earned space.
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?
An output schema exists, so return values need not be described, and the schema fully documents all 5 parameters. However, for an unannotated mutation tool, the description omits prerequisites, failure modes, and any hint about file-type or path validity, leaving gaps an agent would want before invoking it.
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 100%, so every parameter (files, to_user, messages, messages_first, delay) is already documented in the schema, setting the baseline at 3. The description adds no format or syntax detail beyond what the schema provides; the 1GB note duplicates the files parameter description.
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?
States a specific verb (发送) and resource (本地文件) plus the recipient scope (单个好友或群聊) and a key constraint(单个文件需小于 1GB)。An agent can distinguish it from wechat_send_message and wechat_send_multiple_messages, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The recipient scope (single friend or group chat, as opposed to multiple friends) implicitly signals when this tool applies, but there is no explicit when-to-use, when-not, or named alternative such as wechat_send_message for text-only sending.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_send_messageB
向单个微信好友或群聊发送一条消息。
| Name | Required | Description | Default |
|---|---|---|---|
| delay | No | 发送间隔(秒),默认 0.2 | |
| message | Yes | 要发送的文本消息;超过 2000 字时微信会转成 txt 文件发送 | |
| to_user | Yes | 好友或群聊的备注/昵称,需与微信中显示的名称完全一致 | |
| search_pages | No | 在会话列表中滚动查找好友的次数;0 表示直接使用顶部搜索框 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, yet it says nothing about the fact that this sends an irreversible real message to a real contact, what happens if the name matches multiple contacts, whether a WeChat login is required, or rate limiting. Only the schema's incidental note about >2000-character messages becoming txt files adds behavior.
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?
A single front-loaded sentence with zero filler; the scope qualifiers appear before any call to action.
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?
An output schema exists so return values need no explanation and parameters are fully documented, but for a side-effecting outbound-message tool with no annotations the description omits preconditions, ambiguity handling for name matching, and failure behavior — gaps an agent needs before calling it.
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 100% — to_user, message, delay and search_pages all carry their own descriptions including the 2000-character behavior and the meaning of search_pages=0. The description adds no parameter semantics beyond that, so baseline 3 applies.
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?
States a specific verb+resource (发送一条消息) plus scope qualifiers (单个好友或群聊、一条) that directly contrast with siblings like wechat_send_multiple_messages and wechat_send_to_multiple_friends. An agent can pick this tool over those siblings without opening any schema.
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 words 单个 and 一条 imply the single-recipient, single-message case and thus hint that bulk sends belong to the sibling tools, but no alternative is named and no prerequisites (e.g. must be logged in) are given. Usage is implied 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_send_multiple_messagesB
向单个微信好友或群聊连续发送多条消息。
| Name | Required | Description | Default |
|---|---|---|---|
| delay | No | 发送间隔(秒),默认 0.2 | |
| to_user | Yes | 好友或群聊的备注/昵称,需与微信中显示的名称完全一致 | |
| messages | Yes | 消息列表。可传数组,也可传用换行或分号分隔的文本;消息内部的逗号会被保留,不会被拆分 | |
| search_pages | No | 在会话列表中滚动查找好友的次数;0 表示直接使用顶部搜索框 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It only says messages are sent consecutively, without covering delivery timing, ordering guarantees, rate limits, authentication needs, or failure behavior, though the schema does document a delay parameter.
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 a single, front-loaded sentence with zero wasted words. It clearly and efficiently conveys the core purpose without 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 tool with four parameters and no annotations, the description is too sparse. While an output schema exists so return values need not be explained, behavioral details such as what 'consecutive' means operationally, how the delay works, and how search_pages affects the send are left entirely to the schema or omitted.
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 100%, so all four parameters are already fully documented in the input schema. The description adds no additional parameter meaning beyond what the schema provides, matching the baseline score for high-coverage schemas.
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 states a specific verb (发送) and resource (多条消息) with a clear scope constraint (单个好友或群聊). It implicitly distinguishes itself from the sibling wechat_send_to_multiple_friends (multiple recipients) and wechat_send_message (single message), but does not name either alternative explicitly.
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?
Usage is only implied: use this tool when sending multiple messages to one chat. The description offers no explicit when-to-use guidance, no prerequisites, and no direct comparison to the single-message sibling wechat_send_message.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wechat_send_to_multiple_friendsB
向多个微信好友或群聊发送消息(支持统一群发或分别发送)。
| Name | Required | Description | Default |
|---|---|---|---|
| delay | No | 发送间隔(秒),默认 0.2 | |
| message | Yes | 要发送的内容。传字符串=同一条消息发给所有人;传数组且长度与 to_user 相同时=分别发送;传换行文本且行数与好友数相同时=按行分别发送 | |
| to_user | Yes | 好友/群聊名称列表;可传数组,也可传逗号、顿号或换行分隔的字符串 |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions that both unified and separate sending modes are supported, but it omits critical side-effect context such as required login state, rate limits, error handling for individual recipients, or that messages are actually sent and cannot be undone.
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 a single, front-loaded sentence with no redundant or filler content. Every part of the sentence contributes to stating what the tool does and its two sending modes.
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?
Although the schema is rich and an output schema exists, the absence of annotations places a heavier contextual burden on the description for a side-effecting send operation. The one-sentence description does not cover authentication needs, failure modes, rate limiting, or safety caveats, leaving important context missing for an agent calling a messaging tool.
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 100%, so the parameters to_user, message, and delay are fully documented in the schema. The description adds no additional parameter meaning or syntax beyond what the schema already provides, making the baseline 3 appropriate.
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 states a specific verb and resource: sending messages to multiple WeChat friends or group chats, and further specifies support for unified mass sending or separate sending. This distinguishes it from the single-recipient sibling wechat_send_message, but it does not explicitly name or contrast with other similar siblings like wechat_send_multiple_messages.
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 the use case (multiple recipients, either unified or separate messages) but provides no explicit when-to-use or when-not-to-use guidance, prerequisites, or named alternatives. An agent must infer from the sibling list that this tool is for multi-recipient sends rather than single sends.
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.
14 tool updates
v1.0.0- First observed
wechat_check_new_messages - First observed
wechat_export_chat_files - First observed
wechat_get_chat_history - First observed
wechat_get_contacts - First observed
wechat_get_group_members - First observed
wechat_get_moments - First observed
wechat_get_recent_sessions - First observed
wechat_get_weixin_info - First observed
wechat_post_moments - First observed
wechat_search_chat_history - First observed
wechat_send_files - First observed
wechat_send_message - First observed
wechat_send_multiple_messages - First observed
wechat_send_to_multiple_friends
TDQS
Scored across 14 tools
Most tools target distinct resources/actions, but the four send variants (send_message, send_multiple_messages, send_to_multiple_friends, send_files) create a cluster where single-vs-multiple-vs-recipients distinctions must be read carefully. Descriptions clarify the boundaries, so confusion is limited rather than severe.
All tools share a consistent wechat_ prefix followed by a verb_noun pattern (get_chat_history, send_message, post_moments, export_chat_files). No mixing of camelCase or divergent verb styles.
14 tools is well within the ideal 3-15 range and each tool maps to a concrete WeChat capability (messaging, contacts, history, moments, diagnostics). No obvious filler or redundancy.
Strong coverage of the messaging lifecycle (send, batch send, files, history, search, export), contacts, group members, sessions, and moments with both read and write. Minor gaps like friend management, group creation/administration, or message recall are absent but not essential to core workflows.
Maintenance
Related MCP Connectors
Let Claude or ChatGPT search, read and send your WhatsApp messages over MCP. OAuth sign-in.
Carbon Voice MCP serves as a bridge that connects AI assistants like ChatGPT, Claude, and Cursor to a user's Carbon Voice account, turning voice messages and conversations into a private, on-demand knowledge base. It provides 28 specialized tools for comprehensive voice messaging management, including creating and sending messages, accessing conversation history with instant transcription, running AI actions (summarization, TLDR generation, meeting notes), and managing workspace collaboration through folders, contacts, and team communications.
WhatsMCP connects Claude and other MCP-compatible AI agents directly to WhatsApp. Send and receive text, images, documents, and voice notes; manage groups (create, add/remove members, promote admins); look up contacts and profiles; follow channels; and read call and message history — all through a standard MCP interface. For voice use cases, WhatsMCP offers SIP-based calling plans (inbound-only, or full inbound/outbound) so AI voice agents can answer and place WhatsApp calls, plus low-latency WebSocket integrations with voice agent providers like ElevenLabs. Multiple WhatsApp accounts can be paired and managed per workspace, with webhook support for real-time inbound message delivery to your own infrastructure.
MCP connector that lets ChatGPT list, search, and run your Apple Shortcuts via a local Mac agent
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables automated WeChat operations on Windows through pywinauto, allowing users to send messages to multiple friends or groups programmatically. Provides tools for searching contacts, sending bulk messages, and controlling WeChat interface elements via MCP protocol.18-
- FlicenseAqualityDmaintenanceEnables AI agents to control WeChat through MCP protocol, including sending messages, managing contacts, and searching messages.10-
- AlicenseNot gradedqualityBmaintenanceEnables WeChat automation on PC via MCP, supporting sending messages and files, searching contacts, retrieving chat history, and executing commands, compatible with WeChat 4.1+.2MIT
- FlicenseNot gradedqualityBmaintenanceEnables MCP clients to control the Windows WeChat desktop app, including reading conversations, sending messages, searching contacts, and monitoring new messages via UI automation.-