WisdomChannel — WeChat Channel for Claude Code
A Claude Code channel plugin that
pushes WeChat desktop messages into your running Claude Code session, and lets
Claude reply back through the same chat — like the official Telegram, Discord,
and iMessage channels.
It is the client side of the Wisdom
WeChat automation service: Wisdom runs on the Windows host with WeChat desktop
and exposes an HTTP + WebSocket API; this MCP server runs locally next to
Claude Code and bridges the two.
┌──────────────────┐ ┌────────────────┐ ┌────────────────┐
│ WeChat desktop │ │ Wisdom API │ │ wisdom_channel │ ┌──────────────┐
│ (Windows host) │ ───► │ HTTP + WS │ ───► │ (this repo) │ ───► │ Claude Code │
│ + Frida hooks │ │ :8000 │ │ stdio MCP │ │ CLI session │
└──────────────────┘ └────────────────┘ └────────────────┘ └──────────────┘
Features
- Push every inbound WeChat message into the active Claude Code session
- Claude replies through the
reply tool — answer goes back into WeChat
- Works for both private DMs and group chats (only forwards
@you mentions in groups)
- Allowlist + admin trust levels (
access.json)
- Tools:
reply, list_contacts, list_conversations, get_messages,
get_status, manage_access
- Talks to a remote Wisdom server over HTTP/WebSocket — Wisdom does not have
to run on the same machine as Claude Code
Requirements
- Python 3.10+
- A running Wisdom server with WeChat
desktop logged in (any reachable host)
- Claude Code CLI v2.1.80+
Install
pip install wisdom-channel
This installs the wisdom-channel console script. To develop from source instead:
git clone https://github.com/AceDataCloud/WisdomChannel.git
cd WisdomChannel
pip install -e .
Configure
Create the channel state directory and an .env pointing at your Wisdom server:
mkdir "$env:USERPROFILE\.claude\channels\wechat" -Force
@"
WISDOM_API_URL=http://your-wisdom-host:8000
WISDOM_API_TOKEN=
WECHAT_BOT_NAME=
"@ | Set-Content "$env:USERPROFILE\.claude\channels\wechat\.env"
| Variable | Description |
|---|
WISDOM_API_URL | URL of the Wisdom REST API (default http://localhost:8000) |
WISDOM_API_TOKEN | Optional bearer token if Wisdom auth is enabled |
WECHAT_BOT_NAME | Your WeChat display name (auto-detected if empty) |
WECHAT_CONTEXT_MESSAGES | Recent messages pulled as conversation context per reply (default 8, 0 disables) |
Optional access control at ~/.claude/channels/wechat/access.json:
{
"version": 3,
"enabled": true,
"roles": {
"normal": {
"allow_tools": false,
"contexts": ["group", "private"],
"prompt": "Only answer public/basic/general questions. Do not inspect or modify internal projects, files, logs, servers, or databases."
},
"admin": {
"allow_tools": true,
"contexts": ["private"],
"prompt": "Trusted private-chat operator."
},
"super_admin": {
"allow_tools": true,
"contexts": ["group", "private"],
"prompt": "Trusted operator in approved groups and private chat."
}
},
"users": {
"CQCcqc": {"role": "super_admin"},
"sunbitty": {"role": "super_admin"}
},
"private": {"enabled": true, "default_role": "deny", "prompt": ""},
"groups": {
"Ace Data Cloud客户群1": {"enabled": true, "default_role": "normal", "prompt": "", "members": {}}
}
}
| Field | Behavior |
|---|
enabled | Global switch. false drops all inbound messages. |
roles | Named permission profiles. allow_tools=false is enforced in bridge mode with --tools "". |
users | Stable WeChat IDs mapped to roles. Display names are not trusted for privilege. |
private.default_role | Role for unmatched private chats. Use deny to ignore unknown private messages. |
groups | Exact group-name whitelist. Unlisted groups are ignored. |
groups.*.default_role | Role for ordinary members in that group, usually normal. |
groups.*.members | Optional per-group stable-ID overrides, including deny or promotion to another role. |
Normal users get polite, chat-only assistance. In wisdom-channel bridge, this
is enforced in code with claude -p --tools "". Super admins can perform
operator actions; use stable WeChat IDs for these entries.
For production safety, prefer wisdom-channel bridge: it enforces normal-user
chat-only mode in code. Interactive Claude Code channel mode receives the same
trust_level, allow_tools, and access_prompt metadata, but Claude Code owns
tool execution inside the live session.
Manage the policy locally: