WeChat Archive para DeepSeek Harness
Inglés | 简体中文
Un plugin de archivado de WeChat para macOS, local-first y fail-closed. Conecta cuatro operaciones acotadas a DeepSeek Harness—diagnosticar, inspeccionar el estado, sincronizar y verificar—e incluye una Agent Skill además de un LaunchAgent opcional de macOS para ejecuciones desatendidas.
La versión 0.1.0 puede escanear todas las tablas Msg_* de cada fragmento message_N.db descubierto a partir de una instantánea de base de datos de WeChat para Mac en reposo y con checkpoint. Almacena deltas JSONL reproducibles y verificables, y conserva los contenedores de imágenes disponibles localmente, los archivos MP4 y los BLOBs de voz como objetos privados direccionados por contenido.
Estado del lanzamiento: la implementación y las pruebas de seguridad sintéticas están completas, pero una sincronización real de chats no se ejecutó (
NOT_RUN) al producir este lanzamiento. La sincronización permanece deshabilitada por defecto y no se instala ningún LaunchAgent automáticamente.
Mac WeChat source
|
v
deterministic Python core ----> private state + JSONL deltas + media objects
| |
+---- stdio MCP ---- DeepSeek Harness +---- replay/hash verification
|
+---- one-shot scheduler ---- optional macOS LaunchAgentQué ofrece
Superficie | Operación | ¿Escribe datos de archivo? |
MCP |
| No—comprueba la aplicación, el origen, el WAL, el secreto y los permisos |
MCP |
| No—informa metadatos operativos acotados |
MCP |
| Sí—requiere tanto el opt-in del servidor como |
MCP |
| No—reproduce el historial de mensajes y verifica los hash y la cobertura |
Agent Skill |
| Guía al modelo a través del flujo de seguridad requerido |
Programador |
| Solo después de que una persona instale el LaunchAgent |
Los resultados MCP exponen estado, recuentos, cobertura e información de integridad. No exponen nombres de contacto, identificadores de cuenta, cuerpos de mensajes, secretos ni rutas privadas de bases de datos.
Related MCP server: message-container
Límites de integridad y privacidad
Los argumentos de las herramientas no pueden seleccionar una cuenta, una ruta del sistema de archivos, una sentencia SQL, un ejecutable o un secreto.
El plugin nunca captura una clave, se acopla a LLDB, vuelve a firmar o reemplaza WeChat, termina la aplicación ni ignora un WAL.
La sincronización falla sin publicar una nueva instantánea cuando WeChat está en ejecución, un WAL contiene marcos transaccionales o tiene una cabecera corta malformada, la aplicación carece de la firma oficial anclada, el secreto no es válido o el origen cambia durante la adquisición.
Cada base de datos cifrada usa una clave derivada de forma independiente y se verifica mediante HMAC. Los archivos provisionales descifrados son privados, se comprueban con SQLite
quick_checky se eliminan después de la ejecución.Los deltas JSONL inmutables se someten a fsync antes de que se confirme su transacción de índice. La verificación reproduce el historial completo y calcula el hash de cada objeto multimedia registrado, incluidos los objetos históricos.
Los secretos van en el llavero de macOS. Nunca deben estar en parámetros de herramientas, argumentos de comando, variables de entorno, registros, configuración confirmada en Git ni archivos de lanzamiento.
Qué significa SOURCE_FAITHFUL_V1
Las imágenes siempre conservan sus bytes .dat sin procesar. Una variante de imagen decodificada solo se escribe cuando la valida una firma de archivo sólida o una transformación XOR inequívoca de un solo byte. Los vídeos deben llevar una firma MP4 ftyp. Los BLOBs de voz se conservan sin afirmar compatibilidad de transcripción ni reproducción.
La extracción de emojis, los adjuntos generales, los medios no descargados en este Mac y algunos contenedores privados siguen sin resolverse. En consecuencia, el resultado público es deliberadamente media_complete=false. SOURCE_FAITHFUL_V1 significa que los bytes de origen disponibles localmente se conservaron y verificaron; no significa una exportación multimodal totalmente decodificada o reproducible.
Del mismo modo, «completa» solo puede describir una instantánea verificada y en reposo de la base de datos del Mac. Nunca incluye historial eliminado, historial solo en la nube o solo en el teléfono, ni contenido que WeChat nunca almacenó localmente.
Requisitos
macOS
Python 3.10 o superior
Node.js 24 o superior
pnpm 11
uvlibzstdpara decodificar cargas útiles de mensajes comprimidas con zstd; sin él, los bytes comprimidos originales se conservan como base64Una instalación oficial de WeChat y acceso a tus propios datos de cuenta locales
Usa este proyecto únicamente con datos que tengas autorización para archivar. Un archivo de chat contiene información privada de otras personas incluso cuando pertenece a tu propia cuenta; mantén el archivo local, con control de acceso y fuera de Git.
Instalar el núcleo y el servidor MCP
Desde una copia de trabajo de este repositorio:
cd /path/to/wechat-archive
PROJECT_DIR="$(pwd -P)"
CONFIG_PATH="${HOME}/Library/Application Support/WeChatArchive/config.json"
uv venv
uv pip install -e '.[test]'
pnpm --dir mcp-server install --frozen-lockfile
mkdir -p "$(dirname "$CONFIG_PATH")"
chmod 700 "$(dirname "$CONFIG_PATH")"
cp config.example.json "$CONFIG_PATH"
chmod 600 "$CONFIG_PATH"Edita la configuración privada usando config.example.json como esquema. Tanto source.root como archive.root deben ser rutas absolutas, canónicas y separadas. La raíz del archivo no debe estar dentro del árbol de origen. La configuración de producción debe usar el proveedor Keychain. El proveedor file existe únicamente para la migración desde un archivo regular existente, propiedad del usuario y con modo 0600; los enlaces simbólicos se rechazan.
La obtención de claves y la reparación de la aplicación están deliberadamente fuera de este plugin. Sigue el límite supervisado en docs/BOOTSTRAP.md en lugar de colocar una clave en el historial del shell o pedir a un agente que modifique WeChat.
Ejecuta primero la comprobación previa de solo lectura:
.venv/bin/wechat-archive --config "$CONFIG_PATH" doctorEl comando escribe exactamente un objeto JSON wechat-archive.command/v1 en stdout. Solo READY permite una sincronización confirmada por separado. Consulta Arquitectura e integridad para ver el modelo de estados.
Instalar en DeepSeek Harness
El instalador es una prueba en seco (dry-run) a menos que esté presente --install:
python3 scripts/install_dsh.py
python3 scripts/install_dsh.py --installGestiona únicamente un bloque marcado en el perfil de Harness y un enlace simbólico ~/.dsh/skills/wechat-archive a esta copia de trabajo. No modifica la copia de trabajo del código fuente de DeepSeek Harness ni sobrescribe una Skill no relacionada. Antes de una edición en vivo del perfil, crea una copia de seguridad con modo 0600.
Harness expone estos nombres:
mcp__wechat__wechat_doctormcp__wechat__wechat_statusmcp__wechat__wechat_syncmcp__wechat__wechat_verify
El overlay seguro incluido establece WECHAT_ARCHIVE_ALLOW_SYNC=0. Por lo tanto, la instalación habilita el diagnóstico de solo lectura y la inspección de estado, no la sincronización. Una vez superados todos los controles en máquina real, un operador debe establecer explícitamente el opt-in del servidor en 1, reiniciar el proceso MCP y aun así llamar a wechat_sync con confirm=true.
La eliminación también es una prueba en seco (dry-run) por defecto:
python3 scripts/uninstall_dsh.py
python3 scripts/uninstall_dsh.py --uninstallSincronización periódica opcional
La adquisición programada llama directamente al núcleo determinista; no depende de una pestaña del navegador, de un modelo de lenguaje ni de una conversación de Harness en ejecución. Los siguientes comandos solo generan e inspeccionan un LaunchAgent diario a las 03:15. No lo instalan:
REVIEW_DIR="${TMPDIR:-/tmp}/wechat-archive-review"
REVIEW_PLIST="${REVIEW_DIR}/local.wechat-archive.sync.plist"
mkdir -p "$REVIEW_DIR"
python3 scripts/render_launchagent.py \
--project-root "$PROJECT_DIR" \
--python "$PROJECT_DIR/.venv/bin/python" \
--config "$CONFIG_PATH" \
--hour 3 --minute 15 \
--sync-timeout-seconds 1800 \
--verify-timeout-seconds 7200 \
--output "$REVIEW_PLIST"
plutil -lint "$REVIEW_PLIST"
python3 scripts/install_launchagent.py --plist "$REVIEW_PLIST"El último comando sigue siendo una prueba en seco (dry-run). Solo la siguiente acción explícita instala e inicializa el trabajo:
python3 scripts/install_launchagent.py --plist "$REVIEW_PLIST" --installNo lo instales hasta que doctor informe READY y una sync confirmada manualmente seguida de verify tenga éxito. Cada ejecución programada realiza primero la sincronización y después la verificación completa. Si WeChat está activo o un WAL no está vacío, la ejecución finaliza de forma segura y puede volver a intentarlo en la próxima hora programada.
La sincronización y la verificación completa tienen tiempos de espera acotados separados: 30 minutos y dos horas por defecto, configurables hasta ocho horas. La verificación completa lee todos los objetos multimedia históricos, así que elige su tiempo de espera en función del tamaño del archivo.
Verificación y comprobaciones de lanzamiento
Todas las pruebas del repositorio usan datos de prueba sintéticos. No sustituyas datos reales de chat.
.venv/bin/python -m pytest -q
pnpm --dir mcp-server test
python3 scripts/check_manifest.py --scan-content
python3 scripts/build_release.py \
--output "${TMPDIR:-/tmp}/wechat-archive-0.1.0.tar.gz"Una salida exitosa del proceso no es evidencia suficiente de un archivo real. La condición de aceptación es SYNCED o NO_CHANGE, seguida inmediatamente de VERIFIED, con la cobertura de origen esperada. Consulta los criterios de aceptación completos.
Licencia y trabajo de terceros
El código del proyecto se publica bajo la Licencia MIT. Los proyectos upstream auditados o referenciados y sus licencias se enumeran en THIRD_PARTY_NOTICES.md. Los chats reales, las bases de datos, las claves, los medios, los registros, la configuración local y los archivos históricos de traspaso nunca forman parte del lanzamiento.
This server cannot be deployed
Maintenance
Related MCP Connectors
Mac & Windows: let ChatGPT, Claude & Cursor use your email, calendar, iMessage, Teams, files.
- DNS-DATA RemoteDeprecatedcom.dns-data
Connect AI assistants to authorized Windows and macOS devices for files, commands, and management.
Mail, Calendar, Messages, Notes, Contacts, Slack on your Mac for AI. Remote needs Pro or free trial.
Query 40 databases from Claude, ChatGPT, or Cursor — on any device. Read-only, encrypted, audited.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude to access and search local messages and contacts across multiple platforms (iMessage, Discord, Gmail, Slack) via a local-first datastore, ensuring data never leaves the Mac.MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI clients to read and search macOS Messages history through a read-only MCP interface.-
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to search and retrieve from your local macOS iMessage history using hybrid retrieval with context expansion, all processed locally without sending data off-device.-
- AlicenseAqualityAmaintenanceEnables AI agents on macOS to securely read and search the local Messages database, catch up on missed messages via a persistent inbox, and send texts or files to allowlisted chats, with optional voice note transcription and text-to-speech.109 npmMIT