Skip to main content
Glama
CheserEri

WeChat MCP Server

by CheserEri

灵语(LingYu)

把 Windows 微信桌面客户端的自动化能力封装为 MCP Server,供通用 AI Agent (Codex、Claude Code 等支持 MCP 的客户端)通过标准工具调用。

  • Agent 负责理解任务、规划步骤、选择工具。

  • 本服务只提供稳定、可控、可测试的微信操作工具。

  • 不内置大模型,不带固定人设与自动回复循环。

前置条件:微信 PC 客户端已登录,且主窗口可见(最小化 / 锁屏 / 被遮挡会导致操作失败)。

功能

P0(MVP)

工具

说明

get_wechat_status

检查连接状态、窗口可见性与自动化后端

get_chat_list

返回监听期间可读取的会话列表

get_chat_history

读取指定会话缓冲区内最近的消息

send_message

向明确指定的联系人或群聊发送文本

P1(扩展)

工具

说明

search_contact

按名称搜索联系人/群聊,同名时返回候选不猜测

get_chat_info

返回会话名称、类型、消息数与是否在关注列表

send_file

发送本地文件(受目录白名单、确认策略约束)

get_recent_messages

基于游标增量读取新消息

set_monitored_chats

白名单/黑名单过滤读取结果(不改动底层监听)

参数、返回结构与错误码见 docs/TECHNICAL.md。

Related MCP server: wechat-mcp

安装

方式零:Windows 安装包(推荐给普通用户)

下载 lingyu-setup-x64.exe 双击安装即可。向导支持中文/英文,会创建开始菜单 (以及可选桌面)快捷方式,并在控制面板「应用」里登记卸载项。

  • 按用户安装到 %LOCALAPPDATA%\Programs\lingyu,不弹 UAC; 安装目录可写(程序会在 exe 同级写 logs\)。

  • 安装程序自己写文件,不会带「Internet 区域」标记,不会遇到解压 zip 才有的「打开黑屏」问题。

方式一:预编译独立包(无需 Python)

下载 lingyu-win32-x64.zip,解压后把 lingyu.exe 配到 MCP 客户端即可:

解压前请先对压缩包右键 → 属性 → 勾选「解除锁定」,否则解压出来的程序集 会被标记为「来自 Internet」,.NET 拒绝加载,界面会黑屏(新版启动时会自动修复, 但提前解除更省事)。

{
  "mcpServers": {
    "lingyu": {
      "command": "D:\\path\\to\\lingyu\\lingyu.exe",
      "args": []
    }
  }
}

该包已内置微信桥接模块,不依赖任何外部目录。

桌面版(实时自动回复助手):同一个 exe 加 --gui 启动原生窗口, 无需 Agent 轮询:消息到达即处理,群里有人 @我 / 引用回复我(私聊每条)时, 取最近 N 条上下文 + 人设发给大模型并自动回复;人设、模型、群范围均可在界面修改。 拟人化(回复概率、长回复分条发送、口语化措辞)默认开启,可在「拟人化」页调整或关闭。 「静默与水群」页可设置静默时段、群级回复节流,以及可选的「偶发主动参与」(默认关闭)。

.\lingyu.exe --gui

链接解析:「链接解析」页开启后,消息里的链接会被自动解析并附到上下文, 让机器人能就链接内容回应;还可选把音视频下下来发回当前聊天(默认关闭)。

  • 抖音走「浏览器桥」:解析时用本机 Chrome/Edge 打开一次作品页,签名由页面完成, 无需登录、无需 Cookie(要求系统装有 Edge 或 Chrome,Windows 10/11 自带 Edge)。

  • B 站 / YouTube 等由内置 yt-dlp 取标题、作者、时长、简介。

  • X(Twitter) 会把推文本地渲染成卡片图发回(头像/昵称/认证/正文/配图/时间/点赞), 含视频时再下载视频一并回发。

  • 微博 / 小红书要求带 Cookie,需在同一页填一份 Netscape 格式的 cookies.txt。

  • 群里不必 @ 机器人,只要消息里有链接就会先回一句固定提示(默认「正在解析链接」, 不经过大模型,文案可改),再把解析结果发回。

  • 下载目录有总占用上限(默认 1 GB),超出后每次下载完自动删掉最旧的文件。

自检与链接解析诊断(都不启动微信):

.\lingyu.exe --selfcheck                                    # 版本 / 内置 yt-dlp / ffmpeg / webui
.\lingyu.exe --resolve <url> [--download] [--outdir <目录>]  # 直接解析(可选下载)一个链接
.\lingyu.exe --tweet <推文链接> [--outdir <目录>]             # 抓取推文并渲染出卡片图

--selfcheck 里 yt_dlp_version 与 ffmpeg 应显示具体版本/路径;--resolve 会打印 标题、作者、时长、来源、简介;--tweet 会打印作者、时间、是否含视频、点赞数与卡片 PNG 路径。

方式二:DSH 插件(输入名称即安装)

dsh plugin --profile web add dsh-lingyu

插件包见 dsh-plugin/,运行时随 npm 包分发,微信工具以 mcp__lingyu__* 暴露给模型。

方式三:源码运行(开发用)

环境要求:Windows 10/11 x64、Python 3.10+。

python -m venv .venv
.venv\Scripts\python.exe -m pip install -e ".[wechat]"

[wechat] 会安装微信自动化所需的运行时依赖(wechatauto-replica、wxauto4、 uiautomation、loguru)。源码模式与冻结包走同一条桥接路径, 不需要额外配置外部目录。

桌面窗口(API Key 在界面中填写,无需环境变量):

.venv\Scripts\python.exe -m lingyu.desktop

配置

复制 .env.example 为 .env,或在 MCP 客户端配置的 env 中设置。 常用变量:

变量

默认

说明

WECHAT_BACKEND

auto

auto / wechatauto / wxauto4 / wxauto

WECHAT_SEND_TIMEOUT

20

单次发送最长等待秒数

WECHAT_SEND_DIRS

空

允许发送文件的目录;空 = 拒绝发送文件

WECHAT_REQUIRE_CONFIRM

0

发送前是否需 confirm=true

WECHAT_AUDIT_ENABLED

1

是否记录操作审计

完整列表见 docs/TECHNICAL.md。

桌面端配置(模型、人设、链接解析、静默时段等)存在 %APPDATA%\lingyu\bot.json, 在界面里改即可;改文件后需重启程序。

在 Agent 中接入

在 MCP 客户端配置中加入本地 stdio 服务,示例见 mcp.config.example.json:

{
  "mcpServers": {
    "lingyu": {
      "command": "F:\\Code\\lingyu\\.venv\\Scripts\\python.exe",
      "args": ["-m", "lingyu.server"],
      "env": { "WECHAT_SEND_DIRS": "F:\\Code\\shared" }
    }
  }
}

安全设计

  • 不隐式指定目标:发送必须给出明确对象;同名或多个候选时拒绝发送并返回候选列表。

  • 不虚报成功:发送结果无法确认时返回 failed,不自动重试,避免重复消息。

  • 文件白名单:send_file 默认拒绝所有路径,需通过 WECHAT_SEND_DIRS 显式放宽; 含 .. 路径穿越会被拒绝。

  • 可配置确认:WECHAT_REQUIRE_CONFIRM=1 时,未带 confirm=true 的发送只返回预览。

  • 操作审计:记录工具名、目标、时间与结果,默认不记录聊天正文。

  • 关注列表:可只关注/忽略指定会话,仅过滤本服务读取结果,不改变底层监听。

隐私提示:聊天内容可能包含敏感信息。若 Agent 使用在线模型,被读取的内容可能 发送给相应服务商,请自行评估并选择模型服务。

已知限制

  • 依赖 Windows 微信桌面客户端,需已登录且窗口可见。

  • 底层库不提供「按需拉取完整会话列表 / 历史消息」接口;get_chat_list 与 get_chat_history 返回的是运行期间被动接收到的消息,不是微信完整历史。

  • search_contact 的本地联系人库查询依赖 wechatauto 后端;其他后端退回为 「观察到的会话名称」。

  • 自动化可能触发微信风控或受版本变化影响,不保证账号不受限制。

测试

.venv\Scripts\python.exe -m unittest discover -s tests -t .

真实环境端到端与联调脚本位于 scripts/,详见 docs/TECHNICAL.md。

构建与发布

# 1. 生成独立运行时(onedir + zip + 安装包),产物在 dist\
#    安装包需要本机装有 Inno Setup 6(未装则自动跳过,只出 onedir + zip)
.venv\Scripts\python.exe packaging\build.py

# 2. 把运行时内置进 DSH 插件包
node dsh-plugin\scripts\stage-runtime.mjs

# 3. 发布 GitHub Release(需已登录 gh)
gh release create v0.8.13 dist\lingyu-win32-x64.zip dist\lingyu-setup-x64.exe --title "v0.8.13" --notes "…"

# 4. 发布 npm 插件(prepack 会自动执行第 2 步)
cd dsh-plugin
npm publish --access public

打包会把仓库内的 packaging/wechat_bridge.py 内置进 exe, 构建不依赖任何外部目录,CI 可自动构建。

发布 npm 后,在 GitHub 仓库的 About → Topics 中添加 dsh-plugin, 插件即会被 DSH 社区索引收录。

文档

风险提示

本项目通过 UI 自动化操作微信桌面客户端,属于第三方自动化手段。使用时请遵守 微信及所在平台的服务条款;自动化操作可能导致账号被限制。建议使用独立的测试账号 或在可控测试会话中验证,避免对真实联系人开展未经确认的自动发送。

Available Tools

9 tools
get_chat_historyB

读取指定会话在缓冲区内最近的消息。需明确指定会话名称;返回数量受缓冲区容量限制。

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
chat_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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

The description states a specific verb and resource (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.

Usage Guidelines3/5

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

返回指定会话已确认可获取的信息:名称、类型、观察到的消息数与最后时间,以及该会话当前是否在关注列表中。

ParametersJSON Schema
NameRequiredDescriptionDefault
chat_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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

The description states a specific verb+resource: 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.

Usage Guidelines2/5

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

返回当前可读取的会话列表。基于监听期间被动接收到的消息,不是微信完整会话列表。

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
keywordNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 限定单个会话。

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
after_seqNo
chat_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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

The description states a specific verb+resource: 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.

Usage Guidelines4/5

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

检查微信客户端连接状态、窗口可见性与自动化后端是否可用。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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

The tool takes zero parameters, so there is 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.

Purpose5/5

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.

Usage Guidelines3/5

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

按名称搜索联系人/群聊,返回候选列表。同名时原样返回多个候选,不自行猜测,需由调用方进一步指定。

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
keywordYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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

The description implies usage (look up an 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

向明确指定的联系人或群聊发送本地文件。文件必须存在且位于允许目录内;未配置可发送目录时拒绝发送。结果无法确认时返回失败,不自动重试。

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
dry_runNo
file_pathYes
recipientYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full 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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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

The description states a specific verb and resource: 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.

Usage Guidelines4/5

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

向明确指定的联系人或群聊发送文本消息。目标不唯一时拒绝发送并返回候选列表;无法确认发送成功时返回失败状态,不自动重试。

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmNo
dry_runNo
messageYes
recipientYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior4/5

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

With no annotations, the description carries the full 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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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

The description states a specific verb+resource (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.

Usage Guidelines3/5

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(黑名单,优先级更高)。仅过滤本服务返回的读取结果,不改变底层监听行为。

ParametersJSON Schema
NameRequiredDescriptionDefault
addNo
modeNo
removeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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

The description states a specific verb+resource ('设置会话关注列表' / 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.

Usage Guidelines3/5

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.

  1. 9 tool updatesv0.3.0
    • First observedget_chat_history
    • First observedget_chat_info
    • First observedget_chat_list
    • First observedget_recent_messages
    • First observedget_wechat_status
    • First observedsearch_contact
    • First observedsend_file
    • First observedsend_message
    • First observedset_monitored_chats

TDQS

A3.6/5.0

Scored across 9 tools

Disambiguation4/5

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.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern (get_*, send_*, search_*, set_*). No mixed conventions or ambiguous verb styles are present.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
    -
  • F
    license
    A
    quality
    D
    maintenance
    Enables AI agents to control WeChat through MCP protocol, including sending messages, managing contacts, and searching messages.
    10
    -
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to control the Windows WeChat desktop app, including reading conversations, sending messages, searching contacts, and monitoring new messages via UI automation.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    An unofficial experimental local MCP server that lets AI clients work with an already logged-in Windows Weixin desktop client, providing bounded conversation and message reads, group and message search, polling of up to 16 selected chats, guarded text and attachment submission, and image/file viewing handoffs. It also exposes hybrid Computer Use prompts for native mention handoffs, while remeasuring the window, DPI, and target controls on each action and failing closed when evidence is insufficient.
    1
    Apache 2.0