Telegram Client API (MTProto)
Resumo
A API de cliente do Telegram opera sobre o protocolo MTProto e permite acesso total aos recursos da conta de usuÔrio de Yan (DMs, grupos privados, canais, histórico completo de mensagens e metadados de anexos sem necessidade de download prévio).
A integração roda localmente como um servidor FastMCP em transporte stdio, registrado no config.yaml do Hermes sob mcp_servers.telegram-user.
Relevância para Yan
- Busca em Grupos de Alto Fluxo: Executa buscas indexadas no servidor do Telegram por palavras-chave e termos especĆficos em milissegundos.
- Inspeção de Anexos: Lista nomes de arquivos, extensões, MIME types e tamanhos formatados (KB/MB) diretamente dos cabeçalhos das mensagens.
- Download Sob Demanda: Baixa documentos, imagens e mĆdias apenas quando solicitado explicitamente.
- Segurança: Sessão (
yan_telegram.session) e credenciais (.env) isoladas localmente emC:\Users\Yanbd\dev\telegram-user-mcpe protegidas pelo.gitignore.
Status e Validação
- Autenticação: Validada com sucesso para a conta local, sem registrar identificadores da conta.
- SuĆte de Testes: 11 testes automatizados em
pytestcobrindo parsers de mĆdia, filtros MTProto, resolução de IDs de chats e schemas do MCP. - Conectividade End-to-End: Validada via
stdiocom leitura de diÔlogos ao vivo, busca de mensagens e extração de anexos.
Diagnóstico e Resolução do Erro em my.telegram.org/apps
EvidĆŖncia local (2026-08-27)
Durante a criação de aplicação, foi observada uma requisição POST https://my.telegram.org/apps/create com resposta HTTP 200 OK e corpo text/html curto. O corpo da resposta e os campos enviados não foram preservados no registro; portanto, o status HTTP, por si só, não identifica se a aplicação foi criada nem explica uma eventual mensagem exibida pela pÔgina.
Procedimento de diagnóstico
- Em DevTools, registrar o conteĆŗdo da aba Response e os campos nĆ£o sensĆveis da aba Payload da requisição
POST /apps/create. - NĆ£o registrar nem compartilhar cookies, tokens CSRF (
hash/stel_token),api_hash, números de telefone ou códigos de autenticação. - Confrontar os campos obrigatórios com o formulÔrio atual do portal; a documentação oficial apenas orienta a entrar em
my.telegram.org, abrir API development tools e preencher o formulĆ”rio para obterapi_ideapi_hash. - Se o portal nĆ£o fornecer uma causa acionĆ”vel, registrar a mensagem literal exibida e buscar suporte/documentação oficial antes de atribuĆ-la a validação, reputação de IP ou antispam.
As alegaƧƵes sobre limites de campos, rejeição de domĆnios, invalidação de CSRF, filtros de IP e códigos especĆficos foram removidas desta nota por nĆ£o possuĆrem fonte oficial ou evidĆŖncia local suficiente.
Diagnóstico de ApiIdInvalidError no Telethon
EvidĆŖncia local (2026-08-27)
A chamada client.send_code_request(phone) do script local de autenticação terminou em ApiIdInvalidError, antes do envio do código de login. Não foram registrados nem devem ser registrados nesta nota o número de telefone, api_id, api_hash, código de login ou conteúdo do arquivo .session.
Interpretação confirmada
O Telegram documenta API_ID_INVALID como uma combinação invÔlida de api_id e api_hash. O método auth.sendCode recebe ambos os parâmetros; portanto, o diagnóstico deve começar pela combinação efetivamente carregada pelo cliente, e não por telefone, código de autenticação ou sessão.
Procedimento seguro
- Conferir no painel API development tools de
my.telegram.orgque a aplicação ainda exibe o par correspondente. - Conferir localmente, sem imprimir valores ou enviar capturas, que o carregamento da configuração preserva
API_IDcomo inteiro eAPI_HASHsem espaços ou aspas acidentais. - Copiar novamente o par do painel para o armazenamento local de segredos, se houver divergência, e repetir apenas a solicitação de código.
- Se o par conferido continuar a falhar, preservar a exceção completa sem dados sensĆveis e consultar a documentação/suporte oficial; nĆ£o atribuir a falha a ātempo de replicaçãoā ou Ć identificação de dispositivo sem evidĆŖncia oficial.
Concorrência no arquivo de sessão
Evidência operacional local (2026-09-03): uma tentativa de abrir a mesma sessão Telethon por script enquanto o servidor MCP jÔ a utilizava resultou em bloqueio SQLite. O nome do arquivo e os identificadores da conta não foram registrados.
O FAQ do Telethon confirma que sqlite3.OperationalError: database is locked ocorre quando dois ou mais clientes usam a mesma sessão. Em operação, manter um único processo proprietÔrio da sessão; para uma segunda conexão simultânea, criar e autenticar uma sessão separada. Antes de intervir, identificar o processo que mantém o arquivo aberto (em Linux, fuser é a alternativa indicada pela documentação). Não copiar, mover ou publicar arquivos .session como tentativa de contorno.
Isolamento entre ambiente local e VM
Decisão operacional (2026-09-05): arquivos *.session do Telethon não são sincronizados, copiados ou compartilhados entre o PC local e a VM. Cada ambiente usa seu próprio valor de SESSION_NAME e uma sessão autenticada de forma independente.
Isso evita que processos em hosts distintos reutilizem a mesma chave de autorização. O Telegram informa que sessƵes principais paralelas com a mesma chave podem disparar AUTH_KEY_DUPLICATED e invalidar a chave; a documentação do Telethon tambĆ©m orienta nĆ£o usar a mesma sessĆ£o em mais de um local. Se houver falha de autorização, revogar a sessĆ£o comprometida em um cliente oficial e autenticar novamente apenas no ambiente afetado ā nunca tentar corrigir o problema copiando o arquivo de sessĆ£o.
Arquitetura do MCP Server Local
telegram-user-mcp/
āāā .env # API_ID, API_HASH, SESSION_NAME (fora do git)
āāā auth.py # Script interativo 1-time para gerar .session
āāā server.py # Servidor FastMCP com ferramentas MTProto
āāā tests/
āāā conftest.py # Fixtures e mocks de mensagens Telethon
āāā test_parsers.py # Testes unitĆ”rios de extração de metadados de anexos
āāā test_search.py # Testes de paginação e filtros de busca em grupos
āāā test_server.py # Testes de contrato das ferramentas MCPFerramentas Expostas ao Hermes
telegram_list_dialogs(limit, dialog_type): Lista conversas, grupos e canais.telegram_get_group_messages(chat_id, limit, offset_id): Lê mensagens recentes estruturadas.telegram_search_messages(chat_id, query, limit, filter_type): Busca indexada no servidor do Telegram.telegram_list_attachments(chat_id, limit, extension): Lista arquivos sem baixÔ-los, extraindo nome, tamanho e MIME type.telegram_download_attachment(chat_id, message_id, destination_path): Download sob demanda com verificação de integridade.
Plano de Testes Automatizados (TDD)
Antes da execução operacional, a suĆte de testes em pytest valida:
- Parser de Anexos: Extração correta de
file_nameesizeparaDocumentAttributeFilename, fotos normais, Ôudios e mensagens de texto puro. - Sanitização de Chats: Resolução consistente de IDs de supergrupos (
-100...), grupos legados e usernames. - Tratamento de Rate Limit: Captura de
FloodWaitErrorsem queda do processo MCP. - Isolamento de Segurança: Garantia de que ferramentas de leitura não executem ações de escrita ou download não solicitado.
DecisƵes Tomadas e SeguranƧa
- Credenciais e arquivos
.sessionpermanecem restritos ao ambiente local (C:\Users\Yanbd\dev\telegram-user-mcp). - O servidor roda em transporte
stdiointegrado diretamente aoconfig.yamldo Hermes.
Implantação e compatibilidade
Confirmado (registro operacional local, 2026-08-27): a integração foi configurada tanto no ambiente local quanto na VM. Nos dois ambientes, o requisito do SDK foi limitado a mcp<2 para manter compatibilidade com o servidor baseado na API FastMCP então instalada.
Esse pin é uma decisão de compatibilidade, não uma recomendação permanente: antes de removê-lo, atualizar o servidor e validar a migração para a linha 2.x do SDK em ambiente controlado. O repositório oficial do SDK registra mcp<2 como alternativa temporÔria para instalações afetadas pela mudança maior da linha 2.
Fontes
- Telegram ā Creating your Telegram Application, consultado em 2026-08-27.
- Telegram ā User Authorization, consultado em 2026-08-27.
- Telegram ā Error handling: API_ID_INVALID, consultado em 2026-08-27.
- Telegram ā auth.sendCode, consultado em 2026-08-27.
- Telethon ā Signing In, consultado em 2026-08-27.
- Telethon ā FAQ: sqlite3.OperationalError: database is locked, consultado em 2026-09-03.
- Telegram ā Error handling: AUTH_KEY_DUPLICATED, consultado em 2026-09-05.
- Telethon ā FAQ: sessĆ£o usada de outro local, consultado em 2026-09-05.
- Model Context Protocol Python SDK ā Releases, consultado em 2026-08-27.
- Evidência local: captura de cabeçalhos da requisição
POST /apps/create, sem corpo da resposta ou payload completo (2026-08-27). - Evidência local: registro operacional da integração em ambiente local e VM, sem credenciais, identificadores de conta ou conteúdo de sessão (2026-08-27).
- Evidência local: bloqueio SQLite ao disputar uma sessão Telethon entre o servidor MCP e um script paralelo; sem nome de arquivo, identificadores de conta ou conteúdo de sessão (2026-09-03).
- Evidência local: decisão de manter sessões Telethon independentes no PC local e na VM, sem registrar nomes de sessão, credenciais, identificadores de conta ou conteúdo de arquivos (2026-09-05).