WeChat MCP Server
Provides tools for automating the Windows WeChat desktop client, enabling agents to check connection/window status, list chats, read recent chat history, search contacts and group chats, retrieve chat info, send text messages and files, incrementally read new messages, and configure monitored chat filters with safety controls such as confirmation and audit logging.
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 MCP Serversend 'running 5 minutes late' to the project group on WeChat"
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 Server
把 Windows 微信桌面客户端的自动化能力封装为 MCP Server,供通用 AI Agent (Codex、Claude Code 等支持 MCP 的客户端)通过标准工具调用。
Agent 负责理解任务、规划步骤、选择工具。
本服务只提供稳定、可控、可测试的微信操作工具。
不内置大模型、不保留原项目的固定人设与自动回复循环。
前置条件:微信 PC 客户端已登录,且主窗口可见(最小化 / 锁屏 / 被遮挡会导致操作失败)。
功能
P0(MVP)
工具 | 说明 |
| 检查连接状态、窗口可见性与自动化后端 |
| 返回监听期间可读取的会话列表 |
| 读取指定会话缓冲区内最近的消息 |
| 向明确指定的联系人或群聊发送文本 |
P1(扩展)
工具 | 说明 |
| 按名称搜索联系人/群聊,同名时返回候选不猜测 |
| 返回会话名称、类型、消息数与是否在关注列表 |
| 发送本地文件(受目录白名单、确认策略约束) |
| 基于游标增量读取新消息 |
| 白名单/黑名单过滤读取结果(不改动底层监听) |
详细的参数、返回结构与错误码见 docs/TOOL_REFERENCE.md。
Related MCP server: wxauto MCP Server
安装
方式一:预编译独立包(推荐,无需 Python)
从 GitHub Releases 下载
wechat-mcp-win32-x64.zip,解压后直接把 wechat-mcp.exe 配到 MCP 客户端即可:
{
"mcpServers": {
"wechat": {
"command": "D:\\path\\to\\wechat-mcp\\wechat-mcp.exe",
"args": []
}
}
}该包已内置微信桥接模块,不依赖 DEEPSEEKGIRL_PATH。
方式二:DeepSeek Harness 插件(输入名称即安装)
dsh plugin --profile web add dsh-wechat-mcp插件包见 dsh-plugin/,运行时随 npm 包分发,微信工具以
mcp__wechat__* 暴露给模型。详见 dsh-plugin/README.md。
方式三:源码运行(开发用)
环境要求:Windows 10/11 x64、Python 3.10+。
cd F:\Code\wechat-mcp
python -m venv .venv
.venv\Scripts\python.exe -m pip install -e ".[wechat]"[wechat] 会安装微信自动化所需的运行时依赖(wechatauto-replica、wxauto4、
uiautomation、loguru)。源码模式下适配层从 DEEPSEEKGIRL_PATH 指定的项目复用
WeChatBridge;冻结打包时会自动内置该模块。
配置
复制 .env.example 为 .env,或在 MCP 客户端配置的 env 中设置。
常用变量:
变量 | 默认 | 说明 |
|
| 复用 WeChatBridge 的原项目路径 |
|
|
|
|
| 单次发送最长等待秒数 |
| 空 | 允许发送文件的目录;空 = 拒绝发送文件 |
|
| 发送前是否需 |
|
| 是否记录操作审计 |
完整列表见 docs/TOOL_REFERENCE.md。
在 Agent 中接入
在 MCP 客户端配置中加入本地 stdio 服务,示例见 mcp.config.example.json:
{
"mcpServers": {
"wechat": {
"command": "F:\\Code\\wechat-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "wechat_mcp.server"],
"env": { "WECHAT_SEND_DIRS": "F:\\Code\\shared" }
}
}
}安全设计
不隐式指定目标:发送必须给出明确对象;同名或多个候选时拒绝发送并返回候选列表。
不虚报成功:发送结果无法确认时返回
failed,不自动重试,避免重复消息。文件白名单:
send_file默认拒绝所有路径,需通过WECHAT_SEND_DIRS显式放宽; 含..路径穿越会被拒绝。可配置确认:
WECHAT_REQUIRE_CONFIRM=1时,未带confirm=true的发送只返回预览。操作审计:记录工具名、目标、时间与结果,默认不记录聊天正文 (默认写入
logs/audit.jsonl)。关注列表:可只关注/忽略指定会话,仅过滤本服务读取结果,不改变底层监听。
隐私提示:聊天内容可能包含敏感信息。若 Agent 使用在线模型,被读取的内容可能 发送给相应服务商,请自行评估并选择模型服务。
已知限制
依赖 Windows 微信桌面客户端,需已登录且窗口可见。
底层库不提供「按需拉取完整会话列表 / 历史消息」接口;
get_chat_list与get_chat_history返回的是适配层运行期间被动接收到的消息,不是微信完整历史。search_contact的本地联系人库查询依赖wechatauto后端;其他后端退回为 「观察到的会话名称」。自动化可能触发微信风控或受版本变化影响,不保证账号不受限制。
测试
.venv\Scripts\python.exe -m unittest discover -s tests -t .真实环境端到端与联调脚本位于 scripts/:
# 阶段3:以 stdio 协议驱动 Server,覆盖计划书测试场景
.venv\Scripts\python.exe scripts\phase3_e2e.py --wait-inbound 60
# 阶段4:P1 能力真实微信联调
.venv\Scripts\python.exe scripts\phase4_live_check.py构建与发布
# 1. 生成独立运行时(onedir + zip),产物在 dist\
.venv\Scripts\python.exe packaging\build.py
# 2. 把运行时内置进 DSH 插件包
node dsh-plugin\scripts\stage-runtime.mjs
# 3. 发布 GitHub Release(需已登录 gh)
gh release create v0.3.0 dist\wechat-mcp-win32-x64.zip --title "v0.3.0" --notes "…"
# 4. 发布 npm 插件(prepack 会自动执行第 2 步)
cd dsh-plugin
npm publish --access public打包会把仓库内的
packaging/wechat_bridge.py(从上游deepseekgirl收录,来源与授权说明见 THIRD_PARTY_NOTICES.md)内置进 exe, 因此构建不再依赖外部DEEPSEEKGIRL_PATH,仓库 CI 可自动构建。发布 npm 后,在 GitHub 仓库的 About → Topics 中添加
dsh-plugin, 插件即会被 DSH 社区索引收录。
文档
docs/TOOL_REFERENCE.md — 工具接口与环境变量
docs/TROUBLESHOOTING.md — 故障排查
docs/E2E_TEST_RECORD.md — 端到端测试记录
dsh-plugin/README.md — DeepSeek Harness 插件安装与说明
CHANGELOG.md — 版本与变更记录
第三方自动化风险
本项目通过 UI 自动化复用微信桌面客户端,属于第三方自动化手段。使用时请遵守 微信及所在平台的服务条款;自动化操作可能导致账号被限制。建议使用独立的测试账号 或在可控测试会话中验证,避免对真实联系人开展未经确认的自动发送。
Available Tools
9 toolsget_chat_historyB
读取指定会话在缓冲区内最近的消息。需明确指定会话名称;返回数量受缓冲区容量限制。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| chat_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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, and it does disclose two non-obvious traits: data comes from a buffer and the result count is capped by buffer capacity. It omits ordering, whether the buffer is live/truncated in normal operation, and any auth requirements, so the disclosure is partial rather than complete.
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 short clauses, front-loaded with the core action, and no filler. It is efficient, though the buffer caveat could be tied more tightly to the limit parameter rather than standing as a trailing 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 formatting is not required in the description. For a simple two-parameter read tool this is nearly adequate, but the missing differentiation from get_recent_messages and unexplained limit parameter leave gaps an agent must guess at.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It clarifies that chat_name is mandatory (the schema only marks requiredness without semantics) and hints that returned volume is bounded, which loosely relates to limit, but it never explains what the limit parameter does or its default.
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 (read the most recent messages of a designated chat), so the agent knows exactly what the tool returns. However, it never distinguishes itself from the sibling get_recent_messages, which appears to cover overlapping ground, leaving the selection ambiguous.
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?
It states a prerequisite — the chat name must be explicitly supplied — which is useful before calling. But there is no guidance on when to prefer this over get_recent_messages or how it relates to get_chat_info, so the usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chat_infoC
返回指定会话已确认可获取的信息:名称、类型、观察到的消息数与最后时间,以及该会话当前是否在关注列表中。
| Name | Required | Description | Default |
|---|---|---|---|
| chat_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral burden. It describes the returned data fields but says nothing about permissions, rate limits, error behavior (e.g., unknown chat_name), or whether the operation is read-only. The phrase '已确认可获取的信息' hints at availability but does not disclose operational traits.
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 efficiently enumerates the returned information with zero wasted words. It is appropriately sized for a simple getter.
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 are already covered, making the description's field list somewhat redundant. The description does not address the required parameter chat_name or any behavioral aspects, leaving the agent without enough context to invoke the tool correctly beyond what the schema provides.
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 0% for the single parameter chat_name. The description mentions '指定会话' (specified chat) but adds no meaning about what chat_name should be (e.g., exact name, ID, case sensitivity) or how to supply it. It does not compensate for the lack of schema documentation.
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: returns info for a specified chat, and lists the exact fields returned (name, type, observed message count, last time, watch-list status). It does not explicitly distinguish itself from siblings like get_chat_list or get_chat_history, but the purpose is clear enough.
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?
No guidance is given about when to use this tool versus alternatives. The description only states what it returns, leaving the agent to infer that it should be used when specific chat details are needed, with no exclusions or sibling comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_chat_listB
返回当前可读取的会话列表。基于监听期间被动接收到的消息,不是微信完整会话列表。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| keyword | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose one meaningful trait: the list reflects only passively received messages and is not the complete WeChat conversation list. However, it says nothing about permissions, whether 'readable' implies access scope, or how monitoring affects results over time.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core purpose front-loaded and the important scope caveat immediately after. No filler; only minor room to add parameter hints before it would bloat.
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 key data-provenance limitation is stated. Still, with no annotations and undocumented parameters, the definition leaves actionable gaps for a list endpoint.
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 0%, so the description must compensate, but it never mentions limit or keyword. Both parameters are undocumented in both the schema and the description, leaving the agent to guess at their semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('返回当前可读取的会话列表') and defines its boundary by clarifying it is not the complete WeChat chat list. It is clearly distinguishable from the full-list concept, though it does not explicitly contrast with siblings like get_chat_history or get_recent_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?
No explicit when-to-use or when-not-to-use guidance, and no sibling is named as an alternative. The provenance note ('based on passively monitored messages') implicitly tells the agent the list may be incomplete, which is useful context but not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_messagesA
增量读取监听缓冲区中新增的消息。传入上次返回的 next_seq 作为 after_seq,即可只获取新消息。可选用 chat_name 限定单个会话。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| after_seq | No | ||
| chat_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the incremental/buffer polling model and the next_seq feedback loop, which is valuable, but says nothing about permissions, whether the buffer is destructive to read (it seems non-destructive), or rate/limit 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?
Three dense sentences, front-loaded with the incremental-read purpose, then the after_seq workflow, then the optional filter. No filler, though it stops short of a crisp one-line summary.
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 documented, and the description still usefully references next_seq. For a 3-param read tool this is largely complete, missing only limit semantics and any safety/permission context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It explains after_seq (feed back the last next_seq) and chat_name (limit to one conversation) well, but the limit parameter is never mentioned. Two of three parameters are covered, leaving a real gap under 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: incrementally reading newly added messages from the monitoring buffer. The '增量/新增消息' framing distinguishes it from get_chat_history, 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?
It explains the intended call pattern clearly: pass the previously returned next_seq as after_seq to fetch only new messages, and optionally constrain to one conversation with chat_name. This is a clear use context, but it never contrasts with get_chat_history or states when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wechat_statusA
检查微信客户端连接状态、窗口可见性与自动化后端是否可用。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does make clear this is a non-mutating status probe by enumerating what is inspected, but it says nothing about cost, latency, or whether probing can affect the client or automation backend.
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, listing the three checks in a compact parallel structure. Nothing is wasted.
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 zero-parameter probe with an output schema already describing the return payload, the description covers the necessary scope. The only real omission is guidance on how to react to a negative result.
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 no parameter semantics to document; the baseline for a no-arg tool is 4.
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?
Names a specific verb (检查) and resource (微信客户端状态) and enumerates the three concrete aspects checked: connection status, window visibility, and automation backend availability. This is immediately distinguishable from every sibling, all of which operate on chats, messages, or contacts.
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 diagnostic nature implies a preflight use (verify WeChat is reachable before calling send_message or get_chat_list), but the description never states when to call it, when not to, or what to do if a check fails. Usage must be inferred from the content of the checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_contactA
按名称搜索联系人/群聊,返回候选列表。同名时原样返回多个候选,不自行猜测,需由调用方进一步指定。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| keyword | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 does disclose meaningful behavior beyond the schema: results are a candidate list, duplicates are returned unmodified, and the tool will not guess a single match. It omits any statement about read-only safety, result limits/pagination, or the data source being searched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler. The core action is front-loaded and the ambiguity-handling rule follows immediately; every clause carries information.
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 structure needn't be explained, and the duplicate-handling rule is a genuinely useful addition. Still missing for a search tool: scope of the search corpus, limit/truncation behavior, and how the caller is expected to refine an ambiguous result set.
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 0%, so the description must compensate. It clarifies that the required keyword matches by name (contacts and group chats), but adds nothing about the limit parameter, its default of 20, or whether results are truncated — leaving half the parameters undocumented in both places.
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: search contacts/group chats by name and return a candidate list. That is clearly distinct from siblings like get_chat_list, get_chat_info or get_chat_history, though it never names an 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?
The description implies usage (look up an entity when you only know its name) and gives one concrete handling rule for ambiguous results — return duplicates as-is and let the caller disambiguate. However, it never states when to prefer this over get_chat_list or get_chat_info, so routing guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_fileA
向明确指定的联系人或群聊发送本地文件。文件必须存在且位于允许目录内;未配置可发送目录时拒绝发送。结果无法确认时返回失败,不自动重试。
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| dry_run | No | ||
| file_path | Yes | ||
| recipient | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose real behavior: directory-scoped access control, refusal on misconfiguration, failure return when the outcome cannot be confirmed, and an explicit no-auto-retry policy. It does not explain the confirm/dry_run switches, which materially change what the call actually does (dry_run presumably prevents the send).
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 sentences, each earning its place: purpose first, then preconditions, then failure/retry semantics. No filler and the most important constraint (send scope) is front-loaded.
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 detail is not required, and the description covers the critical constraints plus failure semantics. The remaining gap is the semantics of confirm/dry_run and what counts as an 'explicit' recipient match, which an agent would otherwise have to guess.
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 0%, so the description must compensate for all four parameters. It clarifies recipient ('explicitly specified' contact or group) and the file_path constraints (must exist, must be in an allowed directory), but confirm and dry_run receive no explanation at all, leaving half the parameters opaque.
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: send a local file to an explicitly named contact or group chat. The word 'file' (文件) plus the required file_path/recipient pairing distinguishes it from the sibling send_message, which handles text messages, without needing the schema. No ambiguity about what the tool does.
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?
Preconditions are stated explicitly: the file must exist, must live inside an allowed directory, and sending is refused when no sendable directory is configured. What is missing is routing guidance against alternatives (e.g., when to prefer send_message vs send_file, or behavior for ambiguous recipient names).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_messageB
向明确指定的联系人或群聊发送文本消息。目标不唯一时拒绝发送并返回候选列表;无法确认发送成功时返回失败状态,不自动重试。
| Name | Required | Description | Default |
|---|---|---|---|
| confirm | No | ||
| dry_run | No | ||
| message | Yes | ||
| recipient | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does disclose meaningful traits: refusal on ambiguous recipients, a returned candidate list, a failure status when delivery cannot be confirmed, and an explicit no-auto-retry policy. It omits permissions and the meaning of the confirm/dry_run switches, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler, and the primary action is front-loaded before the guardrail clauses. It is efficient, though the second sentence compresses two distinct behaviors into one line.
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. However, for a four-parameter write tool with zero schema coverage and no annotations, the description leaves the dry_run/confirm semantics entirely undocumented, which is a real gap 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 0%, so the description must compensate for all four parameters and it does not. The recipient concept is hinted at ('explicitly specified contact or group'), but message, confirm, and especially dry_run are never mentioned, leaving the agent unable to discover preview or confirmation behavior.
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 (send a text message) and narrows the scope to an explicitly specified contact or group chat, which implicitly separates it from send_file. It does not name any sibling outright, so it falls just short of full differentiation, but the action 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?
It gives a conditional rule (if the target is not unique, refuse and return candidates), which tells the agent it must resolve ambiguity first, but it never says when to prefer this tool over alternatives like send_file or how to obtain a unique recipient. Usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_monitored_chatsA
设置会话关注列表:add/remove 增删会话名,mode 选择 allow(白名单,空=全部)或 block(黑名单,优先级更高)。仅过滤本服务返回的读取结果,不改变底层监听行为。
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | ||
| mode | No | ||
| remove | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does add meaningful context: it discloses that the list only filters read results returned by this service and does not alter underlying monitoring behavior, plus that block outranks allow. However, it omits persistence, permission/auth requirements, and 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?
It is a compact, front-loaded statement with the purpose up front and supporting detail in trailing parentheses. The nested colon/parenthesis structure makes it dense but nothing is wasted.
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. For a 3-param config tool, the description covers the operation, the mode behavior, and the scope of effect well; the main omission is any note on persistence or permissions.
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 0%, so the description must compensate, and it largely does: add/remove are explained as adding/removing chat names, and mode is given the allow/block values with their meanings (including the empty=all case for allow). This meaningfully exceeds the bare schema.
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 ('设置会话关注列表' / set the chat focus list) and breaks it into concrete operations (add/remove chat names, mode selection). The purpose is clear and distinct from the read/send siblings, though it never explicitly names an alternative tool.
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?
It explains mode semantics (allow = whitelist with empty meaning all; block = blacklist with higher priority), which hints at usage, but it never states when to reach for this tool versus just reading with the sibling getters. Usage is implied rather than instructed.
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.
9 tool updates
v0.3.0- First observed
get_chat_history - First observed
get_chat_info - First observed
get_chat_list - First observed
get_recent_messages - First observed
get_wechat_status - First observed
search_contact - First observed
send_file - First observed
send_message - First observed
set_monitored_chats
TDQS
Scored across 9 tools
Most tools have clearly distinct purposes: status, chat listing, contact search, sending, and monitoring are separate. There is some overlap between get_chat_history and get_recent_messages since both retrieve messages, but the descriptions clarify buffer-based history versus incremental sequence-based reading.
All tool names follow a consistent snake_case verb_noun pattern (get_*, send_*, search_*, set_*). No mixed conventions or ambiguous verb styles are present.
9 tools is well within the ideal 3-15 range and each appears to cover a necessary capability for WeChat automation. The set is neither bloated nor too thin for the domain.
The surface covers status, chat listing, message history, sending text/files, contact search, and monitoring configuration. Minor gaps such as retrieving full chat history beyond the buffer or fetching detailed contact information exist but are workable around.
Maintenance
Related MCP Connectors
Messaging tools for AI agents: send messages, manage chats, groups and channels.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
- mcpOAuthcom.curviate
LinkedIn actions for AI agents: search, messaging, posts and invites, as hosted MCP tools.
Find, vet, and run MCP tools through a secure audited gateway with prompt-injection risk scoring
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.17-
- AlicenseBqualityCmaintenanceProvides WeChat automation capabilities for AI development tools via the Model Context Protocol. It enables users to send messages, manage contacts, and handle file transfers through AI assistants like Claude and Cursor.2730MIT
- FlicenseAqualityDmaintenanceEnables AI agents to control WeChat through MCP protocol, including sending messages, managing contacts, and searching messages.10-
- 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.-