telegram-mcp-bridge es una interfaz remota y segura para usar un subconjunto de mcp-dev-core desde Telegram. No es un agente autonomo, no expone shell arbitraria y no aprueba ni aplica cambios sensibles desde el celular.
Telegram Bot
-> telegram-mcp-bridge
-> MCP client (stdio)
-> mcp-dev-core
-> tools seguras
Objetivo de esta fase:
- acceso remoto controlado a tools de lectura y diagnostico
- sesiones por chat para continuidad operativa
- policy local adicional antes de invocar MCP
- respuestas breves, truncadas y entendibles
telegram-mcp-bridge/
├─ src/
│ ├─ bot/
│ │ ├─ telegram-bot.ts
│ │ ├─ command-router.ts
│ │ └─ handlers/
│ │ ├─ command-handlers.ts
│ │ └─ index.ts
│ ├─ config/
│ │ └─ env.ts
│ ├─ mcp/
│ │ ├─ mcp-client.ts
│ │ └─ tool-runner.ts
│ ├─ security/
│ │ └─ access-control.ts
│ ├─ sessions/
│ │ └─ chat-session-store.ts
│ ├─ utils/
│ │ └─ text.ts
│ └─ index.ts
├─ tests/
├─ package.json
├─ tsconfig.json
├─ vitest.config.ts
├─ eslint.config.js
├─ .env.example
└─ README.md
Se validan con Zod al arrancar:
TELEGRAM_BOT_TOKENTELEGRAM_ALLOWED_CHAT_IDSMCP_SERVER_COMMANDMCP_SERVER_ARGSMCP_EXECUTION_MODE_DEFAULTBRIDGE_PERSISTENCE_ENABLEDBRIDGE_STATE_DIR
Notas:
TELEGRAM_ALLOWED_CHAT_IDSusa formato CSV:123,456MCP_SERVER_ARGSusa JSON array de strings para evitar parsing ambiguo de shellMCP_EXECUTION_MODE_DEFAULTdefine policy local adicional del bridge
/start/help/status->read_system_status/snapshot->read_state_snapshot/sessions->list_sessions/newsession <titulo>->create_session/setsession <sessionId>-> asocia una sesion existente al chat/artifacts->list_artifacts/readfile <ruta>->read_file/search <texto>->search_codebase/runtests->run_testssi la policy local lo permite/runlint->run_lintersi la policy local lo permite
Controles implementados en esta fase:
- allowlist explicita de chat IDs autorizados
- allowlist explicita de tools expuestas por el bridge
- bloqueo local de
run_testsyrun_lintercuandoMCP_EXECUTION_MODE_DEFAULT=safe - sin chat libre estilo GPT
- sin
run_command - sin
write_file_patch apply - sin
approve_proposal - sin commits
- sin acceso a WhatsApp
La idea es que el bridge agregue una capa de policy propia encima de las restricciones ya existentes en mcp-dev-core.
- Instala dependencias:
npm install-
Compila
mcp-dev-corey asegurate de conocer el entrypoint del servidor MCP porstdio. -
Crea
.enva partir de.env.example.
Ejemplo:
TELEGRAM_BOT_TOKEN=123456:replace-me
TELEGRAM_ALLOWED_CHAT_IDS=123456789
MCP_SERVER_COMMAND=node
MCP_SERVER_ARGS=["/home/elorro/mcp-dev-core/dist/src/server/main.js"]
MCP_EXECUTION_MODE_DEFAULT=safe
BRIDGE_PERSISTENCE_ENABLED=true
BRIDGE_STATE_DIR=.bridge-state- Inicia el bridge:
npm run devPara build de produccion:
npm run build
npm start/status
/snapshot
/newsession revisar smoke tests
/sessions
/setsession 550e8400-e29b-41d4-a716-446655440000
/readfile src/server/main.ts
/search write_file_patch
/runtests
La suite no usa Telegram real. Cubre:
- access control
- parseo de comandos
- store de sesiones
- tool runner con cliente MCP mockeado
- handlers principales
Ejecutar:
npm test- no hay conversacion libre ni enrutamiento semantico
- no hay streaming de respuestas
- no hay aprobacion remota de proposals
- no hay cambios de archivos ni git write
- no hay multi-tenant real ni RBAC avanzado
- el mapping chat -> session es simple y local
- Agregar
read_sessionyset_active_sessionde forma controlada. - Incorporar auditoria local del bridge con correlation IDs.
- Soportar respuestas chunked cuando Telegram exceda el limite.
- Añadir health checks y reconexion con backoff para el proceso MCP.
- Introducir vistas resumidas por tool para mejorar UX movil.