aiogram-mcp

Servidor MCP para bots de Telegram construidos con aiogram. 30 herramientas, 7 recursos, 3 indicaciones: mensajería, contenido multimedia enriquecido, moderación, teclados interactivos, transmisión de eventos en tiempo real, limitación de velocidad, permisos y registro de auditoría.

Documentación

aiogram-mcp

CI Python 3.10+ License: MIT PyPI version MCP Registry

Conecta tu bot de Telegram a agentes de IA mediante el Protocolo de Contexto de Modelos.

aiogram-mcp convierte cualquier bot de aiogram en un servidor MCP. Clientes de IA como Claude Desktop pueden entonces enviar mensajes, leer el historial de chat, construir menús interactivos y reaccionar a eventos en tiempo real, todo a través de tu bot existente, sin reescribir ni un solo handler.

¿Por qué aiogram-mcp?

La mayoría de los servidores MCP de Telegram son envoltorios delgados con 3-5 herramientas. aiogram-mcp va más allá:

  • 30 herramientas — mensajería, medios enriquecidos, moderación, teclados interactivos, suscripciones a eventos, difusión
  • 7 recursos — información del bot, configuración, listas de chats, historial de mensajes, cola de eventos, metadatos de archivos, registro de auditoría
  • 3 prompts — flujos de trabajo listos para moderación, anuncios e informes de usuarios
  • Salida estructurada — cada herramienta devuelve modelos Pydantic tipados con outputSchema para análisis programático
  • Eventos en tiempo real — el bot envía eventos de Telegram a los clientes de IA mediante notificaciones MCP (sin polling)
  • Mensajes interactivos — los agentes de IA crean menús de teclado en línea, manejan pulsaciones de botones, editan mensajes
  • Límite de velocidad — el token bucket integrado previene errores 429 de Telegram
  • Niveles de permisos — restringe a los agentes de IA a solo lectura, mensajería, moderación o acceso completo de administrador
  • Registro de auditoría — rastrea cada invocación de herramienta con marcas de tiempo y argumentos
  • Cero reescrituras — añade 5 líneas a tu bot existente, conserva todos tus handlers

Cómo Funciona

Telegram users                Your aiogram bot              AI agent (Claude Desktop)
      |                             |                              |
      |  send messages, tap buttons |                              |
      | --------------------------> |                              |
      |                             |  MCP server (stdio or SSE)   |
      |                             | <------------------------->  |
      |                             |  tools / resources / events  |
      |                             |                              |
      |  bot replies, shows menus   |   send_message, edit, ban    |
      | <-------------------------- | <--------------------------- |

El bot funciona normalmente para los usuarios de Telegram. El servidor MCP funciona junto a él, dando a los agentes de IA acceso al mismo bot mediante herramientas y recursos.

Instalación

pip install aiogram-mcp

Requiere Python 3.10+ y aiogram 3.20+.

Inicio Rápido

1. Añade aiogram-mcp a tu bot

import asyncio
from aiogram import Bot, Dispatcher
from aiogram_mcp import AiogramMCP, EventManager, MCPMiddleware

bot = Bot(token="YOUR_BOT_TOKEN")
dp = Dispatcher()

# Middleware tracks chats, users, message history, and events
event_manager = EventManager()
middleware = MCPMiddleware(event_manager=event_manager)
dp.message.middleware(middleware)
dp.callback_query.middleware(middleware)  # for interactive buttons

# Register your normal handlers here
# @dp.message(...)
# async def my_handler(message): ...

# Create the MCP server
mcp = AiogramMCP(
    bot=bot,
    dp=dp,
    name="my-bot",
    middleware=middleware,
    event_manager=event_manager,
    allowed_chat_ids=[123456789],  # optional: restrict which chats AI can access
)

async def main():
    await mcp.run_alongside_bot(transport="stdio")

asyncio.run(main())

2. Conecta Claude Desktop

Añade a tu claude_desktop_config.json:

{
  "mcpServers": {
    "my-telegram-bot": {
      "command": "python",
      "args": ["path/to/your/bot.py"],
      "env": {
        "BOT_TOKEN": "123456:ABC-DEF..."
      }
    }
  }
}

Ahora Claude puede enviar mensajes, leer historiales, crear menús de botones y reaccionar a eventos en tu bot de Telegram.

Herramientas Integradas

Mensajería (5 herramientas)

HerramientaDescripción
send_messageEnvía texto con formato HTML/Markdown
send_photoEnvía una foto por URL con subtítulo opcional
forward_messageReenvía un mensaje entre chats
delete_messageElimina un mensaje
pin_messageFija un mensaje en un chat

Mensajes Interactivos (3 herramientas)

HerramientaDescripción
send_interactive_messageEnvía un mensaje con botones de teclado en línea (callback o URL)
edit_messageEdita texto y/o teclado de un mensaje existente
answer_callback_queryResponde a una pulsación de botón con un toast o alerta

Usuarios (3 herramientas)

HerramientaDescripción
get_bot_infoObtiene metadatos del bot (nombre de usuario, capacidades)
get_chat_member_infoObtiene el rol y perfil de un usuario en un chat
get_user_profile_photosObtiene las fotos de perfil de un usuario

Chats (6 herramientas)

HerramientaDescripción
get_chat_infoObtiene metadatos del chat (título, tipo, descripción)
get_chat_members_countObtiene el número de miembros en un chat
ban_userBloquea a un usuario (permanente o temporal)
unban_userDesbloquea a un usuario
set_chat_titleCambia el título del chat
set_chat_descriptionCambia la descripción del chat

Medios Enriquecidos (10 herramientas)

HerramientaDescripción
send_documentEnvía un archivo/documento por URL con subtítulo opcional
send_voiceEnvía un mensaje de voz por URL
send_videoEnvía un video por URL con subtítulo opcional
send_animationEnvía un GIF/animación por URL
send_audioEnvía audio/música por URL con intérprete y título
send_stickerEnvía un sticker por file_id o URL
send_video_noteEnvía una nota de video redonda por URL
send_contactEnvía un contacto con número de teléfono y nombre
send_locationEnvía una ubicación geográfica
send_pollCrea una encuesta con múltiples opciones

Eventos (2 herramientas)

HerramientaDescripción
subscribe_eventsSuscríbete a eventos en tiempo real con filtros de chat/tipo
unsubscribe_eventsElimina una suscripción

Difusión (1 herramienta, opcional)

HerramientaDescripción
broadcastEnvía un mensaje a múltiples chats (requiere enable_broadcast=True)

Recursos MCP

Datos de solo lectura que los agentes de IA pueden acceder sin llamar a herramientas:

URIDescripción
telegram://bot/infoNombre de usuario, ID y capacidades del bot
telegram://configNombre del servidor e IDs de chats permitidos
telegram://chatsLista de chats activos con metadatos
telegram://chats/{chat_id}/historyÚltimos 50 mensajes en un chat
telegram://events/queueCola de eventos con IDs autoincrementales
telegram://files/{file_id}Metadatos de archivos (tamaño, ruta, ID único)
telegram://audit/logRegistro de auditoría de invocaciones de herramientas (opcional)

Prompts MCP

Flujos de trabajo preconstruidos que dan a los agentes de IA contexto estructurado:

PromptArgumentosQué hace
moderation_promptchat_id, user_id, reasonObtiene información del usuario + historial de mensajes, sugiere advertir/silenciar/bloquear
announcement_prompttopic, audience?, tone?Redacta un anuncio de Telegram con formato
user_report_promptchat_id, user_idCompila un informe completo de actividad del usuario

Transmisión de Eventos en Tiempo Real

Los agentes de IA no necesitan hacer polling. El bot envía eventos automáticamente:

Telegram message arrives
    → MCPMiddleware captures it
        → EventManager stores it (type: "message", "command", or "callback_query")
            → MCP notification sent to subscribed clients
                → AI agent reads telegram://events/queue

El agente de IA llama a subscribe_events una vez, y luego recibe notificaciones push cada vez que nuevos eventos coinciden con sus filtros.

Mensajes Interactivos

Los agentes de IA pueden construir interfaces interactivas completas en Telegram — menús, confirmaciones, asistentes de múltiples pasos:

El agente de IA envía un mensaje con botones:

┌─────────────────────────┐
│ Confirm deployment?     │
│                         │
│  [✅ Yes]  [❌ No]      │
│  [📖 View docs]        │
└─────────────────────────┘

El usuario toca un botón → el evento aparece en la cola → el agente de IA reacciona:

┌─────────────────────────┐
│ ✅ Deployed!            │
│                         │
│  [📋 View logs]        │
└─────────────────────────┘

El bot necesita dp.callback_query.middleware(middleware) para capturar pulsaciones de botones.

Controles de Seguridad

mcp = AiogramMCP(
    bot=bot,
    dp=dp,
    allowed_chat_ids=[123456789, -1001234567890],  # restrict AI access
    enable_broadcast=True,            # opt-in for broadcast tool
    max_broadcast_recipients=500,     # safety limit
)
  • allowed_chat_ids — La IA solo puede interactuar con chats listados. Predeterminado: todos los chats.
  • enable_broadcast — La herramienta de difusión está deshabilitada por defecto como medida de seguridad.
  • max_broadcast_recipients — Limita el número de chats en una sola difusión.

Configuración Avanzada

Límite de Velocidad

mcp = AiogramMCP(
    bot=bot, dp=dp,
    rate_limit=30,  # requests/sec (default), 0 to disable
)

El limitador de velocidad token bucket integrado previene errores 429 de Telegram. Todas las llamadas API salientes se espacian automáticamente.

Niveles de Permisos

mcp = AiogramMCP(
    bot=bot, dp=dp,
    permission_level="messaging",  # read + messaging tools only
)
NivelAcceso
readInformación del bot, información del chat, perfiles de usuario
messagingLectura + envío de mensajes, fotos, medios, mensajes interactivos
moderationMensajería + eliminar, fijar, bloquear, desbloquear, configuraciones del chat
adminAcceso completo incluyendo difusión y suscripciones a eventos

Registro de Auditoría

mcp = AiogramMCP(
    bot=bot, dp=dp,
    enable_audit=True,
    audit_log_size=1000,
)

Cada invocación de herramienta se registra. Acceso mediante el recurso telegram://audit/log.

Ejemplos

EjemploTransporteCaracterísticas
basic_bot.pystdioConfiguración completa con middleware, eventos y seguimiento de callbacks
incident_alert_bot.pySSEBot de operaciones con difusión habilitada para notificaciones de incidentes

Desarrollo

git clone https://github.com/Py2755/aiogram-mcp.git
cd aiogram-mcp
pip install -e ".[dev]"

pytest -v          # ~228 tests
ruff check aiogram_mcp tests examples
mypy aiogram_mcp   # strict mode

Licencia

MIT. Ver LICENSE.