codebuddy-matrix-channel
codebuddy-matrix-channel
Un plugin de canal (servidor MCP) que conecta Matrix por chat con las sesiones locales de CodeBuddy Code.
El efecto es equivalente a los canales integrados de Telegram / Discord / WeChat de CodeBuddy:
Enviar un mensaje en una sala de Matrix → aparece en la sesión de CodeBuddy como
#matrix · @alice:matrix.org: holaLas respuestas de CodeBuddy se envían de vuelta a la sala de Matrix mediante la herramienta
replyOpcional: reenviar las solicitudes de permiso de CodeBuddy a la "sala de control" para aprobar/rechazar llamadas de herramientas desde el móvil
Este plugin se basa en el mecanismo de extensión Channel de CodeBuddy (ver docs/cn/cli/channels.md y channels-reference.md), sin necesidad de modificar CodeBuddy en sí.
1. Cómo funciona
Matrix 房间 ──(matrix-js-sdk 收消息)──▶ matrix-channel (本插件)
│ notifications/claude/channel
▼
CodeBuddy Code 会话
│ reply 工具 / 权限请求
▼
matrix-channel ──(sendText)──▶ Matrix 房间El plugin se inicia como subproceso por CodeBuddy mediante stdio y se comunica a través del protocolo MCP.
Related MCP server: mcacp
2. Instalación
cd matrix-channel
npm install
npm run build # 编译到 dist/(也可直接用 tsx 运行,无需构建)Se requiere Node >= 20 en tiempo de ejecución.
2.1 Inicio rápido (avatar digital)
Instalar / compilar
cd matrix-channel && npm install && npm run buildRellenar
.env(conjunto mínimo viable, ver sección 3)MATRIX_HOMESERVER=https://im.yiq.pub MATRIX_ACCESS_TOKEN=<从 Element:设置 → 帮助 → 高级 → 访问令牌 复制> MATRIX_USER_ID=@evlon-ai:im.yiq.pub MATRIX_ALLOWLIST=@evlon:im.yiq.pub # 防 prompt 注入,必填 MATRIX_OWNER_ID=@evlon:im.yiq.pub # 分身管理者=你,审批权只认此身份 MATRIX_CONTROL_ROOM_ID=!<控制室房间ID>:im.yiq.pub MATRIX_MENTION_REQUIRED=true # 群里只响应 @分身 # 可选:MATRIX_TRUSTED_SENDERS / MATRIX_TRUSTED_ROOMS / MATRIX_AUTHORIZED_WORKAutocomprobación (ejecutar cada vez que se modifique
.env)npm run doctor # 期望:连接 ✅、账号 ✅、E2EE ✅Conectar con CodeBuddy: registrar en el
.mcp.jsondel proyecto (ruta absoluta) y luego iniciarcodebuddy --channels server:matrix --dangerously-load-development-channelsUso diario
@mencionar al avatar en el grupo para asignar tareas → las fuentes de confianza/trabajos autorizados se ejecutan automáticamente; los trabajos desconocidos primero generan un plan y entran en la sala de control esperando tu
approve.Las herramientas de alto riesgo (Bash/escritura de archivos, etc.) siempre requieren tu aprobación en la sala de control.
Tú das órdenes en la sala de control (solo se reconoce
MATRIX_OWNER_ID):approve(run/go, puede ir seguido del ID de sala) → autoriza la tarea de esa salayes <id>/no <id>→ aprobar / rechazar las solicitudes de permiso de alto riesgo en espera
Para grupos cifrados se necesita
MATRIX_E2EE=true; siMATRIX_DEVICE_IDse deja vacío, se seleccionará automáticamente desde/devices; si da error, rellena el ID de dispositivo de «Configuración → Dispositivos».
3. Configuración
Copia .env.example como .env y rellénalo:
cp .env.example .envVariable | Descripción |
| Dirección del servidor doméstico, p. ej. |
| access_token de la cuenta (recomendado; copiar desde Element «Configuración → Ayuda») |
| Opcional, para identificar "los propios mensajes", p. ej. |
| Método de autenticación alternativo; al iniciar se usará |
| IDs de usuario remitentes permitidos para enviar mensajes, separados por comas (configurar obligatoriamente) |
| IDs de sala permitidos para escuchar, separados por comas (vacío = todas) |
| ID de la sala de control para el relevo de permisos (opcional, pero obligatorio en modo avatar digital) |
| ID de usuario de Matrix del administrador (owner) del avatar (obligatorio). El poder de aprobación solo reconoce esta identidad |
| IDs de usuario de colegas de confianza, separados por comas; los trabajos de ellos se ejecutan automáticamente (herramientas seguras) |
| IDs de grupos de confianza, separados por comas; todos los trabajos en estas salas se ejecutan automáticamente |
| Descripción de trabajos habituales autorizados (texto libre), para que el avatar juzgue «habitual vs desconocido» |
| Si en los grupos solo se responde a mensajes con @menciones (por defecto true; recomendado activarlo con múltiples avatares) |
| Lista de herramientas de alto riesgo, separadas por comas; por defecto |
| Si se descargan imágenes/archivos localmente y se inyectan como |
| Directorio de descarga de medios (por defecto |
| Si se habilita el cifrado de extremo a extremo (por defecto false, ver sección 6 más abajo) |
| No tiene efecto en matrix-js-sdk 42.x (ver sección 6): el crypto Rust usa wasm + el shim de memoria |
⚠️ Seguridad: configura obligatoriamente
MATRIX_ALLOWLIST(se valida por remitente, no por sala, para evitar que cualquier miembro del grupo inyecte contenido en la sesión). Dejarlo vacío permite a todos, solo para pruebas locales.
4. Conexión con CodeBuddy
Método A: período de desarrollo (omitiendo la lista blanca del mercado)
Registra este plugin en el .mcp.json de tu proyecto CodeBuddy:
{
"mcpServers": {
"matrix": {
"command": "npx",
"args": ["tsx", "/绝对路径/matrix-channel/src/index.ts"]
}
}
}Luego inicia CodeBuddy:
codebuddy --channels server:matrix --dangerously-load-development-channelsTras compilar, se puede ejecutar con
nodecambiando a:"args": ["node", "/绝对路径/matrix-channel/dist/index.js"]
Método B: empaquetar como plugin (tras enviarlo al mercado oficial)
npm run buildLuego publica codebuddy-matrix-channel como plugin y úsalo con:
codebuddy --channels plugin:matrix-channel@<你的市场>5. Uso
Tras iniciar, envía un mensaje en una sala de Matrix permitida y aparecerá
#matrix · @tú: ...en la sesión de CodeBuddyCuando CodeBuddy termine de procesar, la respuesta aparecerá en la sala de Matrix
Si se ha configurado
MATRIX_CONTROL_ROOM_ID: cuando CodeBuddy llame a herramientas que requieren aprobación (Bash / Write, etc.), la sala de control recibirá un aviso (enviado como notificación de sistemam.notice, sin activar no leídos/alertas); respondeyes <id>para permitir /no <id>para rechazar
Parámetros de la herramienta reply
Parámetro | Descripción |
| ID de la sala de Matrix (tomado del atributo |
| Texto a enviar |
| Opcional, cuerpo HTML (se envía junto con |
| Opcional, |
Por ejemplo, haz que CodeBuddy responda con una nota de estado usando
m.notice:reply({ chat_id: "!abc:server", text: "procesado", msgtype: "m.notice" }).
Herramienta health_check
Se puede invocar directamente en la sesión de CodeBuddy, o activarla en la comprobación de salud de /mcp; equivale a la parte de conectividad/E2EE de npm run doctor y devuelve JSON:
{ "ok": true, "userId": "@alice:matrix.org", "e2ee": true, "cryptoReady": true }Cuando ok=false se incluye el campo error explicando el motivo del fallo (conexión/autenticación/inicialización E2EE).
6. Limitaciones y notas
Salas con cifrado de extremo a extremo (E2EE): por defecto solo se admiten salas sin cifrar. Para conectar salas cifradas, pon
MATRIX_E2EE=true; el plugin reutiliza el crypto Rust integrado de matrix-js-sdk (initRustCrypto), y el SDK se encarga automáticamente de «descifrar al recibir, cifrar al enviar» — no es necesario implementar el protocolo de cifrado. Al activarlo:Los mensajes cifrados llegan como
m.room.encrypted; tras ser descifrados por el SDK (eventoEvent.decrypted), el tipo cambia al real y el plugin los envía a la sesión;Las respuestas enviadas a salas cifradas son cifradas automáticamente por el SDK;
Almacenamiento de claves (importante, depende de la versión): en matrix-js-sdk 42.x, el backend crypto Rust solo tiene una implementación wasm/IndexedDB (
@matrix-org/matrix-sdk-crypto-wasm), sin backend nativo de Node. Para que funcione en Node, el plugin inyecta un shim globalindexedDBen Node al iniciar usandofake-indexeddb/auto— este shim es puramente en memoria, por lo tanto:Las claves solo existen realmente en la memoria del proceso;
MATRIX_CRYPTO_DBno generará un archivo SQLite real en disco en esta versión; tras reiniciar el proceso, las claves deben renegociarse (no afecta al envío/recepción, solo requiere rehacer el reenvío de claves/verificación de dispositivos).La persistencia real en disco requiere actualizar a una versión de matrix-js-sdk que incluya el backend nativo
@matrix-org/matrix-sdk-crypto-nodejs, o una versión futura que admita la entrada nodejs (en ese caso, se elimina el shimfake-indexeddby se usa el backend nativo).Nota: el
@matrix-org/matrix-sdk-crypto-nodejsya instalado en las dependencias no es invocado por el SDK en la versión actual 42.2.0; solo sirve como alternativa para futuras actualizaciones; el núcleo de cifrado actual funciona con wasm + el shim de memoriafake-indexeddb.
Cuando un dispositivo nuevo entra por primera vez en una sala cifrada, se recomienda verificar el dispositivo de este bot en el cliente de Matrix (de lo contrario, la otra parte podría ver el aviso de "dispositivo no verificado", aunque los mensajes seguirán enviándose y recibiéndose con normalidad).
Medios: por defecto solo se conecta el texto del mensaje a la sesión; al activar
MATRIX_DOWNLOAD_MEDIA, las imágenes/archivos se descargan localmente y se inyectan como[file: ruta], para que el Agente pueda leerlos.Relevo de permisos: depende de la capacidad
claude/channel/permissionde CodeBuddy; si la versión de CodeBuddy no la admite, el puente de chat principal no se ve afectado.
7. Avatar digital: modelo de autorización del administrador (escenario principal)
Trata al avatar como un «colega en el grupo»: se le puede asignar trabajo con @ libremente, pero no modificará nada realmente sin el consentimiento del administrador.
Escenario
Los colegas crean varios grupos (p. ej.
#ProyectoA,#Atención al cliente), donde puede haber varios bots avatar simultáneamente. Los colegas @mencionan a tu avatar en el grupo para asignar trabajo; solo responde cuando es @mencionado (en mensajes directos siempre responde).Al recibir una asignación:
Trabajo habitual / autorizado (de
MATRIX_TRUSTED_SENDERS/MATRIX_TRUSTED_ROOMSpreconfigurados, o dentro del ámbito descrito enMATRIX_AUTHORIZED_WORK) → ejecución automática (herramientas seguras).Trabajo desconocido (fuera del ámbito autorizado) → el avatar primero genera un plan, llama a
request_approvalpara escalarlo a tu sala de control; solo se ejecuta cuando respondesapprove.Operaciones de alto riesgo (
MATRIX_HIGH_RISK_TOOLS, como Bash / escritura de archivos) → independientemente del origen, siempre requieren tu aprobación.
Arquitectura en capas
Plugin MCP = transporte seguro + compuerta dura (impuesta por código, no se confía en el modelo): el filtro de
@, la decisión de permisosallow/denyse basan únicamente en hechos verificables (si es owner, si es fuente de confianza, si es herramienta de alto riesgo), y la aprobación en la sala de control solo reconoceMATRIX_OWNER_ID.SKILL = cerebro de políticas (juicio semántico, delegado al Agente):
skills/matrix-avatar/SKILL.mdguía al avatar para juzgar «habitual vs desconocido»; cuando es desconocido, entra en modo plan y llama arequest_approval. El Agente solo solicita aprobación, nunca se autoautoriza; la autorización solo proviene de «los ajustes de fuentes de confianza del administrador» o delapprovedel administrador.
Las
instructionsdel canal integradas en el plugin ya incluyen esta política, por lo que funciona sin instalar el SKILL adicionalmente;skills/matrix-avatar/SKILL.mdestá disponible para que lo reutilices/ajustes en CodeBuddy.
Estados de tarea en tres niveles (por sala)
Estado | Significado | Herramientas seguras | Herramientas de alto riesgo |
| Fuente de confianza / ya | Ejecución automática | Consultar al administrador (sala de control |
| Escalado en espera de revisión ( | Bloqueado | Bloqueado |
| Fuente desconocida no autorizada | Bloqueado | Bloqueado (y avisar |
Comandos de la sala de control (solo válidos para el administrador MATRIX_OWNER_ID)
approve(orun/go, opcionalmente seguido del ID de sala, p. ej.approve !projectA:server) → autoriza la tarea actual de esa sala y el avatar comienza a ejecutarla.yes <id>/no <id>→ aprobar / rechazar las solicitudes de permiso de alto riesgo en espera.Las respuestas de otras personas en la sala de control se ignoran.
Ejemplo de configuración (.env)
MATRIX_OWNER_ID=@you:matrix.org
MATRIX_TRUSTED_SENDERS=@alice:matrix.org,@bob:matrix.org
MATRIX_TRUSTED_ROOMS=!projectA:server
MATRIX_AUTHORIZED_WORK=回答产品问题、总结会议纪要、起草文档
MATRIX_MENTION_REQUIRED=true
MATRIX_HIGH_RISK_TOOLS=Bash,Write,Edit,MultiEdit,NotebookEdit8. Autocomprobación (doctor)
Tras rellenar .env, puedes ejecutar la autocomprobación para confirmar la configuración, la conectividad y el estado E2EE antes de iniciar CodeBuddy:
npm run doctorLa autocomprobación imprime la configuración actual (token enmascarado), verifica que el homeserver sea accesible y que las credenciales sean válidas, e intenta inicializar el crypto Rust cuando MATRIX_E2EE=true. Si falla cualquier elemento, se indica claramente el motivo y se termina con código de salida distinto de 0.
9. Estructura de directorios
matrix-channel/
├── src/
│ ├── config.ts # 环境变量 / 白名单 / 授权配置读取与校验
│ ├── matrix.ts # Matrix 客户端封装(连接、@提及过滤、收/发、下载媒体、E2EE、自检)
│ ├── index.ts # MCP 服务:channel 通知、授权硬闸、reply / request_approval 工具、控制室审批
│ └── doctor.ts # `npm run doctor` 自检入口
├── skills/
│ └── matrix-avatar/
│ └── SKILL.md # 分身行为策略(语义判断:常用 vs 陌生)
├── package.json
├── tsconfig.json
├── .gitignore
├── .env.example
└── README.mdThis server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityBmaintenanceBridges OpenAI Codex CLI to any MCP client, allowing headless Codex sessions via tools like codex and codex-reply.229MIT
- AlicenseAqualityDmaintenanceBridges any MCP client (like Claude Code, Zed, VS Code) to any ACP coding agent, enabling multi-agent orchestration from a single chat interface.241309Apache 2.0
- AlicenseNot gradedqualityBmaintenanceBridges a Matrix room with Claude Code's claude/channel feature, enabling chat from Matrix to interact with a running Claude Code session.GPL 3.0
- AlicenseNot gradedqualityCmaintenanceMCP server for Matrix that lets Claude list rooms, search/read messages, send messages and files, react, create rooms, and invite users, with multi-homeserver support and safe-by-default writes; no end-to-end encryption.MIT
Related MCP Connectors
Telegram bridge for your MCP-compatible agent. Bidirectional, no LLM in our stack.
MCP server bridging holepunchto/keet-identity-key to the Hive agentic identity network
Official remote MCP server bridge for Muumuu Domain.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/evlon/matrix-channel'
If you have feedback or need assistance with the MCP directory API, please join our Discord server