Claudegram
БесплатноНе проверенMCP server that enables Claude Code to interact with a personal Telegram account via MTProto, providing over 120 tools for messaging, media, chat management, an
Описание
MCP server that enables Claude Code to interact with a personal Telegram account via MTProto, providing over 120 tools for messaging, media, chat management, and more.
README
Claudegram
Личный Telegram-аккаунт как полноценный инструмент Claude Code — через MTProto, не Bot API.
120 MCP-tools · 9 resources · 6 templates · 7 prompts · 6 skills · 4 уровня PreToolUse-гейтов
TL;DR
Claudegram — production-grade плагин Claude Code, превращающий личный Telegram в управляемый AI-инструмент:
- MTProto, не Bot API — видит всю переписку, истории, поиск, медиа, статистику.
- 120 типизированных MCP-tools через FastMCP, разбиты на 9 доменов; покрыты
safe_toolmiddleware с FloodWait/RPCError handling и санитизацией секретов. - Channel-режим: входящие сообщения push-ятся в активную сессию Claude как
<channel>теги с permission relay (yes/no через<id>). - 4-слойная safety net: PreToolUse hooks (
guard-delete,guard-destructive,guard-confirm) +disable-model-invocationдля отправки сообщений + sensitive userConfig в системный keychain. - Skills + Prompts:
tg-digest,tg-search,tg-history,tg-send,tg-reply,telegram-workflow— готовые сценарии для рекрутерского тестового запуска.
Полный список возможностей — в таблице ниже.
Why this project
- Реальный production-ready MCP-сервер: типизированные tools, structured output, prompt templates, completions, resource templates.
- Безопасность спроектирована up-front: модель угроз, hook-гейты, allowlist, sanitize в логах. См. SECURITY.md.
- Чистая архитектура: 75 модулей, ~6.3k строк server-кода, ~900 строк тестов, ruff + mypy, CI на GitHub Actions, Codecov, CodeQL.
- Каждое решение объяснено docstring'ом и CHANGELOG'ом, без «магии».
Quick start
git clone https://github.com/sanjar-x/claudegram.git && cd claudegram
uv sync
cp .env.example .env # вставь api_id/api_hash/phone с https://my.telegram.org
uv run claudegram-auth
# затем в Claude Code: /plugin add . && /plugin install claudegram
Подробнее — в разделе «Установка» ниже.
В отличие от Bot API, Claudegram видит всю историю, все чаты и поддерживает поиск. Архитектура и компоненты выровнены под официальную спеку Claude Code Plugins.
Возможности
| Слой | Что внутри |
|---|---|
| MCP-сервер | 118 типизированных tool'ов через FastMCP + Telethon, разбиты по 9 доменам с подпакетами в server/tools/ |
| Production middleware | safe_tool decorator с graceful FloodWait/RPCError handling, latency logging, sensitive-sanitization |
| Health probe | health_check + get_server_version для readiness/liveness |
| Channel-режим | Push входящих Telegram-сообщений в активную сессию Claude как <channel source="claudegram"> теги + permission relay (yes/no <id>) |
| Skills | 6 skill'ов: tg-digest, tg-search, tg-history, tg-send, tg-reply + фоновые telegram-workflow и tg-channel-incoming |
| Hooks | SessionStart — авто-проверка авторизации; PreToolUse — гейт перед delete revoke=true (с jq/python3 fallback) |
| bin/ | claudegram-auth — попадает в PATH Bash tool Claude Code (не в shell хоста); снаружи — uv run claudegram-auth |
| userConfig | Креденшелы + sender-allowlist запрашиваются GUI-промптом плагина, сенситивные в системном keychain |
| Persistent data | *.session живёт в ${CLAUDE_PLUGIN_DATA} — не теряется при апдейте плагина |
| Marketplace | .claude-plugin/marketplace.json — каталог из одного плагина для /plugin install |
Структура
Claudegram/
├── .claude-plugin/
│ └── plugin.json # манифест с userConfig (api_id/hash/phone/2fa)
├── .mcp.json # MCP stdio-сервер, env через ${user_config.*}
├── hooks/
│ ├── hooks.json # SessionStart auth-check, PreToolUse delete-guard
│ └── scripts/
│ ├── check-auth.sh
│ └── guard-delete.sh
├── skills/ # каждая команда — отдельный каталог с SKILL.md
│ ├── telegram-workflow/SKILL.md # фоновые правила (user-invocable: false)
│ ├── tg-channel-incoming/SKILL.md # обработка <channel source="claudegram"> тегов
│ ├── tg-digest/SKILL.md # /claudegram:tg-digest [N]
│ ├── tg-search/SKILL.md # /claudegram:tg-search <запрос> [@chat]
│ ├── tg-history/SKILL.md # /claudegram:tg-history <@chat> [limit]
│ ├── tg-send/SKILL.md # /claudegram:tg-send <@chat> <текст> (disable-model-invocation)
│ └── tg-reply/SKILL.md # /claudegram:tg-reply <@chat> <id> <текст>
├── bin/
│ └── claudegram-auth # шелл-обёртка над server.auth
├── server/ # Python MCP-сервер (FastMCP + Telethon)
│ ├── __init__.py
│ ├── config.py # plugin-mode + standalone-mode env loading
│ ├── auth.py # одноразовый интерактивный логин
│ ├── client.py # singleton TelegramClient
│ ├── formatters.py # сериализация в JSON
│ ├── channel.py # channel-режим: push + permission relay
│ ├── main.py # FastMCP entry + custom stdio runner с experimental caps
│ └── tools/ # 92 tools в 8 доменах с подпакетами
│ ├── __init__.py # register_all(mcp) — диспатчит по доменам
│ ├── _common.py # shared utils (ParseMode, normalize_chat, clamp, to_jsonable)
│ ├── identity/ # account, sessions
│ │ ├── account.py # get_me, update_profile, set_online, update_username, get_full_user
│ │ └── sessions.py # get_authorizations, terminate_authorization
│ ├── peers/ # discovery + метаданные сущностей
│ │ ├── lookup.py # resolve_username, get_chat_info, search_global, get_top_peers, get_input_peer
│ │ ├── users.py # get_profile_photos, download_profile_photo, get_common_chats
│ │ └── contacts.py # CRUD + block/unblock + import + get_blocked
│ ├── messaging/ # send/edit/history/pins/reactions
│ │ ├── messages.py # send/edit/delete/forward
│ │ ├── history.py # get_history (+filter_type), search_messages
│ │ ├── pins.py # pin_message, unpin_message
│ │ └── reactions.py # react_message
│ ├── dialogs/ # список и состояния диалогов
│ │ ├── list_.py # list_chats, get_drafts
│ │ ├── folders.py # archive/unarchive/pin_dialog
│ │ └── notify.py # mark_read, mute, unmute, delete_dialog
│ ├── chats/ # управление группами/каналами
│ │ ├── create.py # create_group, create_channel
│ │ ├── settings.py # title/about/photo/forum_mode
│ │ ├── members.py # participants, kick, ban, unban, restrict, promote, demote
│ │ ├── invites.py # join, leave, export_invite
│ │ └── admin.py # admin_log, stats
│ ├── media/ # файлы и attachments
│ │ ├── files.py # send_file, send_album
│ │ ├── download.py # download_media, get_media_info
│ │ ├── attachments.py # send_location, send_contact, send_dice
│ │ └── stickers.py # все sticker-операции
│ ├── content/ # контент-фичи
│ │ ├── polls.py # send/vote/results
│ │ ├── stories.py # all stories operations
│ │ └── forums.py # forum-topics
│ └── advanced/
│ └── raw.py # invoke_raw — ANY MTProto method
├── pyproject.toml + uv.lock # uv-проект
├── .env.example # для standalone-режима
├── .gitignore # игнорит .env, *.session, .venv, кеши
└── README.md
Стек
Установка
1. Получить API-креденшелы
- Открой https://my.telegram.org → API development tools.
- Создай приложение (любые
App title/Short name). - Скопируй
api_idиapi_hash.
2. Установить зависимости (uv создаст .venv/)
cd ~/Desktop/Claudegram
uv sync
3. Подключить плагин в Claude Code
Самый быстрый способ для разработки — --plugin-dir (грузит как сессионный плагин,
без установки):
claude --plugin-dir ~/Desktop/Claudegram
Постоянная установка через локальный marketplace (marketplace.json уже включён
в .claude-plugin/):
/plugin marketplace add ~/Desktop/Claudegram
/plugin install claudegram@claudegram-local
claudegram-local — имя локального marketplace из .claude-plugin/marketplace.json.
При первом включении Claude Code откроет промпт и попросит ввести
tg_api_id, tg_api_hash, tg_phone (поля userConfig из манифеста).
Сенситивные значения уйдут в системный keychain, не в settings.json.
4. Авторизоваться (один раз)
⚠️ Важно: bin/claudegram-auth попадает в PATH только Bash tool внутри
Claude Code, не в обычный shell хоста (это ограничение Claude Code, см.
plugins-reference).
Вариант A (рекомендуемый, из активной Claude-сессии):
! claudegram-auth
Префикс ! запускает команду в shell сессии, и тогда bin/claudegram-auth
из плагина уже в PATH.
Вариант B (из обычного терминала, standalone):
cd ~/Desktop/Claudegram
uv run python -m server.auth
# или
uv run claudegram-auth # после `uv sync` появляется console-script
В обоих случаях — введи код из Telegram. Файл сессии создастся:
- Plugin-mode:
~/.claude/plugins/data/claudegram-claudegram-local/claudegram.session(переменная${CLAUDE_PLUGIN_DATA}) — не теряется при апдейте плагина. - Standalone: в корне проекта
~/Desktop/Claudegram/claudegram.session.
5. Проверить
/mcp # должен появиться сервер "claudegram"
/reload-plugins # после правок без рестарта
/hooks # увидишь SessionStart + PreToolUse гейт
Использование
Slash-skills (тип /claudegram:<skill>)
/claudegram:tg-digest [N]— сводка непрочитанных по N чатам./claudegram:tg-search <запрос> [@chat]— поиск./claudegram:tg-history <@chat> [N]— последние N сообщений чата./claudegram:tg-send <@chat> <текст>— отправка с подтверждением. Только пользователь вызывает (disable-model-invocation: true)./claudegram:tg-reply <@chat> <id> <текст>— ответ на конкретное сообщение. Только пользователь.
Авто-активация
Skill telegram-workflow (user-invocable: false) подгружается, когда ты пишешь
"что у меня в Telegram?", "найди в чатах", "напиши Пете". Claude по описанию
выбирает правильный MCP-tool и следует safety-правилам из этого skill.
Прямые MCP-инструменты (58 шт)
Полный namespace: mcp__plugin_claudegram_claudegram__<tool>. Wildcard для
permission-rule: mcp__plugin_claudegram_claudegram__*.
Полный каталог с описаниями и сигнатурами — в skill'е telegram-workflow/SKILL.md. Краткая сводка по категориям:
- Account (5):
get_me,get_authorizations,terminate_authorization,update_profile,set_online - Messages (11):
send_message,edit_message,delete_message,forward_message,get_history,search_messages,mark_read,pin_message,unpin_message,react_message,send_dice - Dialogs (7):
list_chats,get_drafts,archive_dialog,unarchive_dialog,delete_dialog,mute_dialog,unmute_dialog - Users (7):
get_chat_info,resolve_username,get_participants,get_profile_photos,block_user,unblock_user,get_common_chats - Chats (12):
create_group,create_channel,edit_chat_title,edit_chat_about,join_chat,leave_chat,kick_participant,ban_participant,unban_participant,promote_admin,demote_admin,get_admin_log,get_stats - Media (7):
download_media,download_profile_photo,send_file,send_album,send_location,send_contact,get_media_info - Contacts (4):
get_contacts,add_contact,delete_contact,search_global - Polls (2):
send_poll,vote_poll - Raw API (2):
invoke_raw,get_input_peer— escape hatch для любого MTProto-метода черезtelethon.tl.functions.<module>.<MethodNameRequest>. Покрывает Stories, Payments, Stickers, Channels admin, Folders, Themes — всё, что не обёрнуто high-level API.
Как работает безопасность
.envи*.sessionв.gitignore.- Sensitive userConfig (api_hash, phone, 2FA) уходят в системный keychain (или
~/.claude/.credentials.json), не вsettings.json. *.sessionлежит в${CLAUDE_PLUGIN_DATA}— не утекает с апдейтом, но даёт полный доступ к аккаунту, храни как пароль.PreToolUse-хук наdelete_messageпринудительно спрашивает, еслиrevoke=true.- Skill
telegram-workflowобязывает Claude получать явное подтверждение передsend_message/mark_read/delete_message. - Telegram может посчитать активность подозрительной → возможна блокировка. Для экспериментов используй отдельный аккаунт.
Standalone-режим (без плагина)
Можно запустить MCP-сервер вне Claude Code:
cp .env.example .env
$EDITOR .env # заполни TG_API_ID/HASH/PHONE
uv run python -m server.auth # логин, .session ляжет в корень
uv run python -m server.main # MCP stdio-сервер
server/config.py сначала читает TG_* (или .env), затем —
CLAUDE_PLUGIN_OPTION_TG_*, которые экспортируются плагином. Один и тот же код
работает в обоих режимах.
Расширение
- Новый MCP-tool → функция в
server/main.pyс@mcp.tool(). FastMCP сам сгенерирует JSON-схему по type-hints + docstring. - Новый skill → каталог
skills/<name>/сSKILL.md. Frontmatter:name,description, опциональноargument-hint,arguments,allowed-tools,disable-model-invocation,paths,model,effort. - Новый hook → редактируй
hooks/hooks.json. Доступные события см. hooks reference. - Бинарь → положи в
bin/<name>+ chmod +x. Автоматически попадёт в PATH.
После любых изменений: /reload-plugins в Claude Code (рестарт не нужен).
Channel-режим
Channels (research preview Claude Code v2.1.80+) —
двусторонний bridge: входящие Telegram-сообщения сами появляются в активной
Claude-сессии как XML-теги, Claude отвечает обратно через send_message.
Что под капотом
В
.mcp.jsonплагин выставляетCLAUDEGRAM_CHANNEL_MODE=1→server/main.pyобъявляет experimental capabilitiesclaude/channelиclaude/channel/permissionчерез кастомный stdio-runner (FastMCP сам не умеет — обходим через_mcp_server.create_initialization_options(experimental_capabilities=...)).server/channel.pyподписывается на Telethon@client.on(events.NewMessage(incoming=True)).Каждое входящее от ID из allowlist (
tg_allowed_sender_ids) пушится как rawJSONRPCNotification(method='notifications/claude/channel', ...)напрямую через write_stream stdio-сессии.Тег у Claude выглядит так:
<channel source="claudegram" chat_id="-1001234567890" message_id="42" sender_id="111222333" user="Pete"> привет, как дела? </channel>Skill
tg-channel-incoming(auto-active) объясняет Claude'у, что делать с такими тегами + правила безопасности (никакого автоответа без подтверждения).Permission relay: ответные сообщения вида
yes abcde/no abcde(5 строчных букв безl, regex case-insensitive) парсятся как verdict и шлются обратно какnotifications/claude/channel/permission— Claude Code применяет автоматически.
Включение
Channel-режим opt-in через userConfig поле enable_channel_mode:
В
/pluginинтерфейсе или при первой установке выставиenable_channel_mode = "1".Перезапусти Claude Code с обоими флагами:
claude \ --dangerously-load-development-channels plugin:claudegram@claudegram-local \ --channels plugin:claudegram@claudegram-localВ research preview кастомные плагины не входят в Anthropic allowlist (
--dangerously-load-development-channels), а--channelsявно регистрирует listener — оба флага нужны.
Если enable_channel_mode = "0" (default) — сервер работает только как tools-MCP,
push'и не отсылаются, Telegram-rate-limit не тратится.
Удобно завести алиас в ~/.zshrc:
alias claude-tg='claude --dangerously-load-development-channels plugin:claudegram@claudegram-local --channels plugin:claudegram@claudegram-local'
Безопасность
| Слой | Защита |
|---|---|
| Sender gate | parse_allowed_ids() в channel.py пушит только от ID из tg_allowed_sender_ids. Пустой allowlist = только себе (свой get_me().id). |
| Группы | Гейтим по event.sender_id, не chat_id — иначе любой в allowlisted-группе мог бы инжектить промпты. |
| Permission relay | Декларируем claude/channel/permission. Анonymously пушнувший в обход allowlist'а не получит право жать yes — verdict тоже гейтится по sender. |
Skill tg-channel-incoming |
Обязывает Claude показывать draft и ждать "отправляй" перед send_message. Запрещает реагировать на prompt-injection из тела сообщения. |
Hook guard-delete |
revoke=true для удаления требует явного approval даже из channel-сценария. |
Узнать свой sender_id для allowlist
После авторизации (claudegram-auth) — спроси у @userinfobot
или вызови в активной Claude-сессии mcp__plugin_claudegram_claudegram__get_me.
Roadmap
- Outbound permission_request handler — Claude Code шлёт
notifications/claude/channel/permission_requestкогда нужен approval; форвардить юзеру в Telegram. Сейчас inbound verdict работает, outbound forward — TODO (требует регистрации custom notification_handler в Server, не тривиально через FastMCP). - send media (фото/документ/голосовое) — Telethon
send_fileуже умеет, обернуть в tool. - pin / unpin / mute / archive / set_typing диалогов.
- Stories API (Telegram Stories через MTProto).
- Monitor на бэкап Saved Messages (
monitors/monitors.json). - Submit в Anthropic official marketplace — channel-плагины проходят security review, после чего работают без
--dangerously-load-development-channels. - Marketplace на GitHub + git-теги
claudegram--v0.1.0для version-constraints.
Установка Claudegram
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/sanjar-x/claudegramFAQ
Claudegram MCP бесплатный?
Да, Claudegram MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Claudegram?
Нет, Claudegram работает без API-ключей и переменных окружения.
Claudegram — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Claudegram в Claude Desktop, Claude Code или Cursor?
Открой Claudegram на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
Gmail
Read, send and search emails from Claude
автор: GoogleSlack
Send, search and summarize Slack messages
автор: SlackRunbear
No-code MCP client for team chat platforms, such as Slack, Microsoft Teams, and Discord.
Discord Server
A community discord server dedicated to MCP by [Frank Fiegel](https://github.com/punkpeye)
Compare Claudegram with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории communication
