aiogram-mcp

Servidor MCP para bots do Telegram construídos com aiogram. 30 ferramentas, 7 recursos, 3 prompts — mensagens, mídia rica, moderação, teclados interativos, streaming de eventos em tempo real, limitação de taxa, permissões e registro de auditoria.

Documentação

aiogram-mcp

CI Python 3.10+ License: MIT PyPI version MCP Registry

Conecte seu bot do Telegram a agentes de IA por meio do Model Context Protocol.

aiogram-mcp transforma qualquer bot aiogram em um servidor MCP. Clientes de IA como o Claude Desktop podem então enviar mensagens, ler o histórico de conversas, criar menus interativos e reagir a eventos em tempo real — tudo por meio do seu bot existente, sem reescrever nenhum handler.

Por que aiogram-mcp?

A maioria dos servidores MCP para Telegram são wrappers simples com 3-5 ferramentas. aiogram-mcp vai além:

  • 30 ferramentas — mensagens, mídia rica, moderação, teclados interativos, assinaturas de eventos, transmissão
  • 7 recursos — informações do bot, configuração, listas de chats, histórico de mensagens, fila de eventos, metadados de arquivos, log de auditoria
  • 3 prompts — fluxos de trabalho prontos para moderação, anúncios e relatórios de usuários
  • Saída estruturada — cada ferramenta retorna modelos Pydantic tipados com outputSchema para análise programática
  • Eventos em tempo real — o bot envia eventos do Telegram para clientes de IA via notificações MCP (sem polling)
  • Mensagens interativas — agentes de IA criam menus de teclado inline, lidam com pressionamentos de botões, editam mensagens
  • Limitação de taxa — token bucket integrado evita erros 429 do Telegram
  • Níveis de permissão — restrinja agentes de IA a somente leitura, mensagens, moderação ou acesso total de administrador
  • Log de auditoria — rastreie cada invocação de ferramenta com timestamps e argumentos
  • Zero reescrita — adicione 5 linhas ao seu bot existente, mantenha todos os seus handlers

Como 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    |
      | <-------------------------- | <--------------------------- |

O bot funciona normalmente para usuários do Telegram. O servidor MCP roda ao lado dele, dando aos agentes de IA acesso ao mesmo bot por meio de ferramentas e recursos.

Instalação

pip install aiogram-mcp

Requer Python 3.10+ e aiogram 3.20+.

Início Rápido

1. Adicione aiogram-mcp ao seu 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. Conecte o Claude Desktop

Adicione ao seu claude_desktop_config.json:

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

Agora o Claude pode enviar mensagens, ler histórico, criar menus de botões e reagir a eventos no seu bot do Telegram.

Ferramentas Integradas

Mensagens (5 ferramentas)

FerramentaDescrição
send_messageEnviar texto com formatação HTML/Markdown
send_photoEnviar uma foto por URL com legenda opcional
forward_messageEncaminhar uma mensagem entre chats
delete_messageExcluir uma mensagem
pin_messageFixar uma mensagem em um chat

Mensagens Interativas (3 ferramentas)

FerramentaDescrição
send_interactive_messageEnviar uma mensagem com botões de teclado inline (callback ou URL)
edit_messageEditar texto e/ou teclado de uma mensagem existente
answer_callback_queryResponder a um pressionamento de botão com um toast ou alerta

Usuários (3 ferramentas)

FerramentaDescrição
get_bot_infoObter metadados do bot (nome de usuário, capacidades)
get_chat_member_infoObter o papel e o perfil de um usuário em um chat
get_user_profile_photosObter fotos de perfil de um usuário

Chats (6 ferramentas)

FerramentaDescrição
get_chat_infoObter metadados do chat (título, tipo, descrição)
get_chat_members_countObter o número de membros em um chat
ban_userBanir um usuário (permanente ou temporário)
unban_userDesbanir um usuário
set_chat_titleAlterar o título do chat
set_chat_descriptionAlterar a descrição do chat

Mídia Rica (10 ferramentas)

FerramentaDescrição
send_documentEnviar um arquivo/documento por URL com legenda opcional
send_voiceEnviar uma mensagem de voz por URL
send_videoEnviar um vídeo por URL com legenda opcional
send_animationEnviar um GIF/animação por URL
send_audioEnviar áudio/música por URL com artista e título
send_stickerEnviar um sticker por file_id ou URL
send_video_noteEnviar uma nota de vídeo redonda por URL
send_contactEnviar um contato com número de telefone e nome
send_locationEnviar um pin de geolocalização
send_pollCriar uma enquete com múltiplas opções

Eventos (2 ferramentas)

FerramentaDescrição
subscribe_eventsAssinar eventos em tempo real com filtros de chat/tipo
unsubscribe_eventsRemover uma assinatura

Transmissão (1 ferramenta, opt-in)

FerramentaDescrição
broadcastEnviar uma mensagem para múltiplos chats (requer enable_broadcast=True)

Recursos MCP

Dados somente leitura que agentes de IA podem acessar sem chamar ferramentas:

URIDescrição
telegram://bot/infoNome de usuário, ID e capacidades do bot
telegram://configNome do servidor e IDs de chat permitidos
telegram://chatsLista de chats ativos com metadados
telegram://chats/{chat_id}/historyÚltimas 50 mensagens em um chat
telegram://events/queueFila de eventos com IDs autoincrementais
telegram://files/{file_id}Metadados de arquivo (tamanho, caminho, ID único)
telegram://audit/logLog de auditoria de invocações de ferramentas (opt-in)

Prompts MCP

Fluxos de trabalho pré-construídos que dão aos agentes de IA contexto estruturado:

PromptArgumentosO que faz
moderation_promptchat_id, user_id, reasonBusca informações do usuário + histórico de mensagens, sugere aviso/mute/ban
announcement_prompttopic, audience?, tone?Redige um anúncio formatado do Telegram
user_report_promptchat_id, user_idCompila um relatório completo de atividade do usuário

Streaming de Eventos em Tempo Real

Agentes de IA não precisam fazer polling. O bot envia eventos automaticamente:

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

O agente de IA chama subscribe_events uma vez e depois recebe notificações push sempre que novos eventos correspondem aos seus filtros.

Mensagens Interativas

Agentes de IA podem construir UIs interativas completas no Telegram — menus, confirmações, assistentes de múltiplas etapas:

O agente de IA envia uma mensagem com botões:

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

O usuário toca em um botão → o evento aparece na fila → o agente de IA reage:

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

O bot precisa de dp.callback_query.middleware(middleware) para capturar pressionamentos de botões.

Controles de Segurança

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 — a IA só pode interagir com chats listados. Padrão: todos os chats.
  • enable_broadcast — a ferramenta de transmissão está desabilitada por padrão como medida de segurança.
  • max_broadcast_recipients — limita o número de chats em uma única transmissão.

Configuração Avançada

Limitação de Taxa

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

O limitador de taxa token bucket integrado evita erros 429 do Telegram. Todas as chamadas de API de saída são automaticamente ritmadas.

Níveis de Permissão

mcp = AiogramMCP(
    bot=bot, dp=dp,
    permission_level="messaging",  # read + messaging tools only
)
NívelAcesso
readInformações do bot, informações do chat, perfis de usuário
messagingLeitura + envio de mensagens, fotos, mídia, mensagens interativas
moderationMensagens + excluir, fixar, banir, desbanir, configurações do chat
adminAcesso total incluindo transmissão e assinaturas de eventos

Log de Auditoria

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

Cada invocação de ferramenta é registrada. Acesso via recurso telegram://audit/log.

Exemplos

ExemploTransporteRecursos
basic_bot.pystdioConfiguração completa com middleware, eventos e rastreamento de callbacks
incident_alert_bot.pySSEBot de operações habilitado para transmissão para notificações de incidentes

Desenvolvimento

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

Licença

MIT. Veja LICENSE.