wx4py-mcp
by zhentong520
README.md
# WebChat AI — 微信智能自动化工具
> **版本:** 0.2.1
> **路径:** `E:/webchat-ai`
> **状态:** 已实测通过(2026-06-07)
基于 [wx4py](https://pypi.org/project/wx4py/) 的微信 PC 端自动化工具,无需 wxautox4 商业激活。支持 **私聊 / 群聊发消息**、**AI 自动回复监听**、**语音 / 视频通话**,可接入 WorkBuddy / Cursor MCP。
---
## 一、工具用途
| 场景 | 说明 |
|------|------|
| **自动回复** | 私聊或群聊有人发消息时,AI 自动回复(MiniMax 等) |
| **批量发消息** | 脚本或 MCP 给指定联系人 / 群发送文本 |
| **远程控制微信** | 通过 MCP 工具在 Cursor / WorkBuddy 中调用 |
| **通话触发** | 私聊收到「视频通话」「语音通话」指令时自动拨打 |
| **语音转文字** | 监听时自动识别对方语音消息,转写后交给 AI 回复 |
| **图片识别** | 监听时自动识别对方图片中的文字与内容,交给 AI 回复 |
| **群管理辅助** | 监听指定群,按规则回复(不含 @ 强制,与私聊相同逻辑) |
### 适用人群
- 需要用 AI 自动回微信私聊 / 群聊的开发者
- 已在 PC 上登录微信,希望用 Python 自动操作的用户
- 使用 WorkBuddy、Cursor MCP 的 Agent 工作流
### 不适用
- 手机微信(仅 PC 版)
- 未登录或频繁最小化到托盘且无法恢复的环境
- 需要 100% 实时(本工具为轮询,默认 15 秒间隔)
---
## 二、目录结构
```
E:/webchat-ai/
├── README.md ← 本文档(用途与使用说明)
├── start-all.bat ← 一键开启监听(输入联系人)
├── stop-all.bat ← 一键停止全部监听
├── docs/
│ ├── 操作手册.md ← ★ 日常操作详细步骤(推荐阅读)
│ ├── INTEGRATION.md ← WorkBuddy / OpenClaw 集成
│ └── 2026-06-07-功能整理.md ← 开发细节与测试记录
├── wx4py_mcp/ ← 核心 Python 包
│ ├── open_chat.py ← 打开会话(列表优先)
│ ├── last_message.py ← 读最后一条 + 左/右气泡判断
│ ├── voice_message.py ← 语音转文字
│ ├── image_message.py ← 图片截图 + 视觉识别
│ ├── vision_client.py ← MiniMax-M3 等多模态 API
│ ├── call_control.py ← 语音/视频通话
│ ├── listen_control.py ← 停止监听、通话指令
│ ├── state_store.py ← 监听状态持久化
│ ├── conversation_memory.py ← 每用户对话记忆(上下文)
│ └── ...
├── scripts/ ← 可执行脚本
│ ├── start_listen.py ← 启动监听(支持 --interactive / --welcome)
│ ├── stop_listen.py ← 停止监听
│ ├── listen-wechat.ps1 ← 单联系人私聊监听
│ ├── listen-wechat-group.ps1 ← 群聊监听
│ ├── stop-wechat.ps1 ← 停止私聊监听
│ ├── stop-wechat-group.ps1 ← 停止群聊监听
│ ├── poll_private_chat.py ← 私聊轮询核心
│ ├── poll_group_chat.py ← 群聊轮询核心
│ └── run_full_test.py ← 全面自动化测试
├── config/
│ ├── listen-defaults.json ← 默认监听对象(--all 时使用)
│ └── ai-config.json ← AI 模型配置
├── mcp-config.example.json ← MCP 配置示例
└── pyproject.toml
```
---
## 三、安装
### 环境要求
- Windows 10/11
- 微信 PC 版已登录
- Python 3.11(推荐):`C:/Users/Administrator/AppData/Local/Programs/Python/Python311/python.exe`
- AI:WorkBuddy / mmx 配置(`~/.mmx/config.json`)或环境变量 `WX4PY_AI_*`
### 安装步骤
```powershell
cd E:/webchat-ai
pip install -e .
pip install wx4py mcp Pillow
```
---
## 四、使用方法
> **日常操作请看详细步骤:** [docs/操作手册.md](docs/操作手册.md)
### 4.0 一键开启 / 停止(最推荐)
| 操作 | 文件 | 说明 |
|------|------|------|
| **开启监听** | 双击 `E:\webchat-ai\start-all.bat` | 输入联系人 → 自动发自我介绍 → 后台监听 |
| **停止监听** | 双击 `E:\webchat-ai\stop-all.bat` | 停止全部私聊 + 群聊监听 |
**开启示例:**
1. 双击 `start-all.bat`
2. 输入 `coco`(或多个:`Air,coco`)
3. 回车,可选输入群名或跳过
4. 完成 — 任务栏会出现 `WebChat-私聊-coco` 最小化窗口
**停止方式:** 双击 `stop-all.bat`,或让对方发送 **`停止监听`**。
### 4.1 私聊 AI 监听(命令行)
监听指定联系人,对方发消息后 AI 自动回复。
```powershell
# 监听 Air(默认 15 秒轮询,WorkBuddy AI)
powershell -File E:/webchat-ai/scripts/listen-wechat.ps1 Air
# 监听多人
powershell -File E:/webchat-ai/scripts/start_workbuddy_private_reply.ps1 -Contacts "Air,娟子"
# Echo 测试(不调用 AI,回复「收到:xxx」)
powershell -File E:/webchat-ai/scripts/listen-wechat.ps1 Air -Echo
```
**停止:** 让对方发送 **`停止监听`** → 工具回复确认后**进程退出**。
再次监听需重新运行上述命令(**启动时会自动检测最后一条对方消息**,含语音/图片识别,补回复后再进入轮询)。
**多媒体消息:** 对方发 **语音**、**图片** 或 **文件** 时:
- **图片/文档**:识别/解析后 **直接整理成文字发回**(不走闲聊 AI)
- **语音**:转文字后走 AI 回复
### 4.2 群聊 AI 监听
```powershell
# 监听测试群1
powershell -File E:/webchat-ai/scripts/listen-wechat-group.ps1 测试群1
# 多群
powershell -File E:/webchat-ai/scripts/start_workbuddy_group_reply.ps1 -Groups "测试群1,VIP群"
```
规则与私聊相同;**无**语音/视频通话。
停止方式:群里发 **`停止监听`**。
### 4.3 手动发消息(Python)
```python
import sys
sys.path.insert(0, r"E:/webchat-ai")
from wx4py import WeChatClient
from wx4py_mcp.open_chat import send_message_smart
with WeChatClient() as wx:
# 私聊
send_message_smart(wx.chat_window, "Air", "你好", "contact")
# 群聊
send_message_smart(wx.chat_window, "测试群1", "大家好", "group")
```
### 4.4 MCP 接入(Cursor / WorkBuddy)
1. 复制 `mcp-config.example.json` 到客户端 MCP 配置
2. 修改 `cwd` 为 `E:/webchat-ai`
3. 启动:`python -m wx4py_mcp`
| MCP 工具 | 功能 |
|----------|------|
| `wechat_send` | 发送文本 |
| `wechat_voice_call` | 发起语音通话 |
| `wechat_video_call` | 发起视频通话 |
| `wechat_get_history` | 读取聊天记录 |
| `wechat_send_file` | 发送文件 |
| `wechat_status` | 检查连接 |
### 4.5 私聊通话(指令触发)
监听运行中,对方发送:
| 指令 | 效果 |
|------|------|
| `视频通话` / `视频对话` | 自动点击标题栏 → 视频通话 |
| `语音通话` | 自动点击标题栏 → 语音通话 |
也可单独测试:
```powershell
python E:/webchat-ai/scripts/test_call.py Air --type video
```
---
## 五、模型 API 配置(供本工具及其他应用共用)
项目提供**统一配置文件**,填写一次即可被 WebChat AI 监听脚本及本机其他 Python 应用读取。
### 5.1 配置文件位置
```
E:/webchat-ai/config/
├── ai-config.example.json ← 模板(可提交 git)
├── ai-config.json ← 实际配置(含 api_key,勿提交)
└── README.md
```
### 5.2 首次配置
```powershell
# 1. 从模板生成 ai-config.json
python E:/webchat-ai/scripts/ai-config.py --init
# 2. 编辑 config/ai-config.json,填写 api_key
notepad E:/webchat-ai/config/ai-config.json
# 3. 查看是否生效
python E:/webchat-ai/scripts/ai-config.py --status
```
### 5.3 配置示例
```json
{
"base_url": "https://api.minimaxi.com/v1",
"model": "MiniMax-M2.5",
"api_key": "你的API密钥",
"api_format": "completions",
"active_profile": "",
"profiles": {
"glm": {
"base_url": "https://open.bigmodel.cn/api/paas/v4",
"model": "glm-4-flash",
"api_key": "智谱API密钥",
"api_format": "completions"
}
}
}
```
- 顶层字段为**默认**配置
- `profiles` 可预设多套(MiniMax / 智谱 / DeepSeek 等)
- `active_profile` 填 `"glm"` 即切换到对应 profile
### 5.4 读取优先级
1. 环境变量 `WX4PY_AI_*`(最高)
2. **`config/ai-config.json`**(项目配置,推荐)
3. 本机 mmx / OpenClaw / WorkBuddy models.json
### 5.5 视觉模型(图片识别)
监听脚本读到对方 **图片消息** 时会:
1. 先截取聊天气泡 **缩略图**
2. 若分辨率过低或检测到 **模糊** → **双击** 打开预览并再次双击放大,截高清图
3. 调用 **MiniMax-M3** 提取文字并描述内容
4. **解析完成后自动关闭预览**,再交给 AI 回复
`config/ai-config.json` 可选 `vision` 段(见 `ai-config.example.json`)。**`api_key` 留空** 时自动复用本机 MiniMax Key。
也可通过环境变量覆盖:
```powershell
$env:WX4PY_VISION_API_KEY = "你的密钥"
$env:WX4PY_VISION_MODEL = "MiniMax-M3"
$env:WX4PY_VISION_BASE_URL = "https://api.minimaxi.com/v1"
```
### 5.6 其他应用如何调用
```python
import sys
sys.path.insert(0, r"E:/webchat-ai")
from wx4py_mcp.ai_config import load_ai_config, AI_CONFIG_FILE, config_status
# 读取配置
cfg = load_ai_config()
if cfg:
print(cfg.base_url, cfg.model, cfg.source)
# 指定 profile
cfg_glm = load_ai_config(profile="glm")
# 自定义路径
cfg2 = load_ai_config(config_path=r"D:/my-app/ai-config.json")
# 状态检查(密钥脱敏)
print(config_status())
```
环境变量 `WEBCHAT_AI_CONFIG` 可指向任意 JSON 路径,便于多项目共用同一份配置。
---
## 六、工作原理
### 6.1 打开会话(不反复开关微信)
```
当前聊天已是目标? → 是 → 直接操作
↓ 否
左侧会话列表有目标? → 是 → 点击切换
↓ 否
Ctrl+F 搜索一次
```
### 6.2 监听回复
```
每 15 秒轮询
↓
打开目标会话,读最后一条消息
↓
左侧灰色(对方)? → 否 → 跳过
↓ 是
已回复过 / 是自己发的? → 是 → 跳过
↓ 否
AI 生成回复(带最近对话上下文)→ 发送 → 记录状态 + 写入对话记忆
```
### 6.3 防循环
- `__last_replied__`:同一条消息只回一次
- `__outgoing__`:记录自己发出的内容,避免误当成对方消息
### 6.4 对话记忆(上下文)
每个联系人 / 群 **单独一个本地 JSON 文件**,默认保留最近 **10 条**消息(用户 + AI 回复合计,约 5 轮对话),供 AI 回复时带入上下文。
| 路径 | 说明 |
|------|------|
| `~/.wx4py-mcp/memory/private/Air.json` | 私聊 Air 的对话记忆 |
| `~/.wx4py-mcp/memory/group/测试群1.json` | 群聊记忆 |
- 自动写入:每次成功回复后追加「用户消息 + AI 回复」
- 自动读取:下次回复时把历史 messages 传给模型
- 关闭记忆:`WX4PY_MEMORY_SIZE=0`
- 调整条数:`WX4PY_MEMORY_SIZE=20`(默认 10)
---
## 七、状态与变量
### 状态文件(自动生成)
| 文件 | 说明 |
|------|------|
| `~/.wx4py-mcp/private_seen.json` | 私聊监听状态 |
| `~/.wx4py-mcp/group_seen.json` | 群聊监听状态 |
| `~/.wx4py-mcp/wechat.ui.lock` | UI 操作互斥锁 |
### 环境变量(可选)
| 变量 | 说明 |
|------|------|
| `WX4PY_AI_BASE_URL` | AI API 地址 |
| `WX4PY_AI_API_KEY` | API Key |
| `WX4PY_AI_MODEL` | 模型名 |
| `WX4PY_STATE_DIR` | 状态目录 |
| `WX4PY_MEMORY_SIZE` | 每用户对话记忆条数(默认 10,0=关闭) |
默认使用本机 WorkBuddy / mmx 的 MiniMax 配置,一般无需设置。
---
## 八、测试
```powershell
# 全面自动化测试(约 2 分钟)
python E:/webchat-ai/scripts/run_full_test.py
# 会话切换压力测试
python E:/webchat-ai/scripts/stress_test_session.py --case all
```
结果输出:`~/.wx4py-mcp/full-test-results.json`
---
## 九、注意事项
1. **名称必须完全一致**:联系人备注、群名大小写敏感(`Air` ≠ `air`)
2. **微信保持可见**:最小化可能导致识别变慢,但不应反复开关窗口
3. **不要同时跑两个监听进程**(私聊 + 群聊也建议分开测)
4. **停止监听后需重新启动脚本**才能继续轮询
5. 本工具基于 UI 自动化,微信大版本更新后可能需要适配
---
## 十、常见问题
**Q:监听没反应?**
A:检查是否已因「停止监听」退出;重新运行 `listen-wechat.ps1`。确认最后一条是对方发的(左侧灰色)。
**Q:一直走搜索、不开列表?**
A:确保微信主窗口可见,目标在左侧列表中;见 `open_chat.py` 日志 `[session]`。
**Q:AI 回复失败?**
A:检查 `~/.mmx/config.json` 或 `WX4PY_AI_*` 环境变量。
**Q:群聊和私聊区别?**
A:群聊无通话功能,其余规则相同。
---
## 十一、更新记录
| 版本 | 日期 | 说明 |
|------|------|------|
| 0.2.1 | 2026-06-09 | 一键启停 bat、输入联系人、启动自我介绍、图片/文档直回、对话记忆 |
| 0.2.1 | 2026-06-07 | 新增 config/ai-config.json 统一模型 API 配置 |
| 0.1.0 | 2026-06-07 | 私聊轮询、MCP 基础工具 |
---
## 十二、相关路径
- **E 盘记忆库:** `E:/agent-hub/memory/projects/wx4py-mcp.md`
- **原开发目录:** `E:/SKILLS/wx4py-mcp/`(与本文档同步)
如有问题,先看日志中的 `[session]`、`[Air]`、`[测试群1]` 前缀行。
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues