wechat-local-mcp

wechat-local-mcp

A read-only MCP server that enables searching and extracting to-dos from local macOS WeChat chat databases. It decrypts and queries local WeChat data without sending messages or modifying databases.

Category
访问服务器

README

wechat-local-mcp

一个只读的本地 MCP 服务,用来把你自己的 macOS 微信聊天变成可搜索、可提取待办的上下文。

它分成两层:

  1. 一次性准备层:从本机微信账号目录捕获每个数据库的 32 字节密钥,并把数据库解密成独立快照。
  2. MCP 查询层:只读取快照,不向微信发消息、不修改微信数据库、不联网。

这样微信升级时,只需要替换准备层;wechat_list_chatswechat_search_messageswechat_find_todos 等工具不需要跟着重写。

数据位置与版本兼容

wechat_status 会动态读取当前微信版本。聊天数据库通常位于:

~/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files/<账号>/db_storage/

较新的 macOS 微信可能为每个数据库使用独立密钥,旧版“一个 key 解所有库”的工具不能直接复用。微信升级后,数据库结构或密钥派生方式仍可能变化。工具不会覆盖 /Applications/WeChat.app,也不会对日常微信做重签名。

安全与隐私

  • 仓库不包含真实密钥、微信数据库、聊天导出、账号目录或本机虚拟环境。
  • MCP 服务自身不要求网络访问,只读取本机解密快照。
  • 当 MCP 客户端把查询结果交给模型分析时,被选中的聊天内容会进入该客户端的模型上下文;请按所用客户端的隐私策略判断是否使用。
  • 密钥捕获脚本只应当用于你有权访问的本机微信账号。
  • keys.json 和明文快照默认保存在项目目录之外的用户配置目录中,并限制为仅当前系统账户可读;不要提交或分享它们。

安装

在本目录执行:

uv sync --extra keys --extra ui --extra test --python /opt/homebrew/bin/python3.12

查看状态:

uv run --python /opt/homebrew/bin/python3.12 wechat-local-sync status

一次性准备密钥

如果你已有可用的 keys.json,放到:

~/.config/wechat-local-mcp/keys.json

格式是数据库相对路径(或文件名)到 64 位十六进制密钥的映射,例如:

{
  "contact/contact.db": "REPLACE_WITH_64_HEX_CHARACTERS",
  "message/message_0.db": "REPLACE_WITH_64_HEX_CHARACTERS"
}

如果没有 keys 文件,项目附带一个不改日常微信安装包的 Frida 辅助脚本。先安装可选依赖:

uv sync --extra keys --python /opt/homebrew/bin/python3.12

直接附加日常微信在部分 macOS 版本上会被系统拒绝。如果本机允许附加,可以退出并重新打开微信后运行:

uv run --python /opt/homebrew/bin/python3.12 python scripts/capture_keys.py \
  --pid "$(pgrep -x WeChat | head -1)" \
  --db-dir "$HOME/Library/Containers/com.tencent.xinWeChat/Data/Documents/xwechat_files/<账号>/db_storage"

这只把捕获到的派生 key 合并写入 ~/.config/wechat-local-mcp/keys.json,不会清除之前已捕获的有效 key。如果 macOS 报 task_for_pid 或权限错误,请使用专用副本:

zsh scripts/prepare_capture_copy.sh

退出日常微信后,用 --spawn "$HOME/Applications/WeChatKeyCapture.app/Contents/MacOS/WeChat" 运行捕获脚本。脚本会在微信启动时安装只读派生函数观察器;当前版本通常无需再次扫码。脚本不会替你修改系统设置,也不会对日常使用的 /Applications/WeChat.app 重签名。

密钥捕获是一次性环境准备,当前微信版本或下次升级后可能需要重新做。不要把 keys.json、明文数据库或聊天导出文件提交到 Git。

解密本地快照

建议先完全退出微信,再执行:

uv run --python /opt/homebrew/bin/python3.12 wechat-local-sync sync

默认输出到:

~/Library/Application Support/wechat-local-vault/decrypted/current/

也可以通过环境变量覆盖:

export WECHAT_CONTAINER_DIR="$HOME/Library/Containers/com.tencent.xinWeChat/Data/Documents"
export WECHAT_DECRYPTED_DIR="$HOME/Library/Application Support/wechat-local-vault/decrypted/current"
export WECHAT_KEYS_FILE="$HOME/.config/wechat-local-mcp/keys.json"

配置 MCP

以 stdio 方式添加到支持 MCP 的客户端:

{
  "mcpServers": {
    "wechat-local": {
      "command": "/绝对路径/outputs/wechat-local-mcp/.venv/bin/wechat-local-mcp",
      "args": ["--transport", "stdio"]
    }
  }
}

或直接运行:

uv run --python /opt/homebrew/bin/python3.12 wechat-local-mcp --transport stdio

Codex CLI 可直接注册:

codex mcp add wechat-local -- \
  "/绝对路径/outputs/wechat-local-mcp/.venv/bin/wechat-local-mcp" \
  --transport stdio

可用工具

  • wechat_status:检查微信版本、数据库、密钥与快照状态。
  • wechat_sync:按 keys.json 解密数据库到独立快照目录。
  • wechat_list_chats:列出联系人和群聊,支持分页。
  • wechat_read_chat:按昵称、备注、群名或微信 ID 读取消息。
  • wechat_search_messages:按关键词、聊天和时间范围搜索消息。
  • wechat_recent_messages:汇总最近消息。
  • wechat_find_todos:用可解释的中英文行动项启发式找待办候选。
  • wechat_chat_summary:返回参与者统计和待办候选,供模型进一步总结。
  • wechat_ui_diagnose:诊断屏幕录制/OCR 只读兜底。
  • wechat_list_recent_chats:数据库快照不可用时读取当前窗口可见会话。
  • wechat_read_chat_ui:数据库快照不可用时用本机 OCR 读取聊天。
  • wechat_find_todos_ui:对 OCR 结果做待办候选提取。

所有查询工具都是只读的;wechat_find_todos 只返回候选,不会替你创建任务、发消息或修改微信。

OCR 兜底需要:

uv sync --extra ui --python /opt/homebrew/bin/python3.12

并在系统设置中允许运行 MCP 的终端使用“屏幕与系统音频录制”。OCR 是当前屏幕的近似读取,长期历史、精确 sender 和全文搜索仍以数据库快照后端为准。

验证

uv run --python /opt/homebrew/bin/python3.12 pytest
uv run --python /opt/homebrew/bin/python3.12 wechat-local-sync status

若没有明文快照,MCP 会返回下一步提示,不会把加密数据库误当成可读内容。

许可证与声明

本项目采用 MIT License

本项目是社区开发的非官方工具,与腾讯或微信团队无隶属或背书关系。“微信”和“WeChat”及相关标识属于其各自权利人。

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选