惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
云风的 BLOG
云风的 BLOG
U
Unit 42
L
LangChain Blog
The GitHub Blog
The GitHub Blog
P
Palo Alto Networks Blog
博客园 - 【当耐特】
G
Google Developers Blog
Security Latest
Security Latest
P
Privacy International News Feed
A
About on SuperTechFans
K
Kaspersky official blog
V
V2EX
L
Lohrmann on Cybersecurity
I
Intezer
M
MIT News - Artificial intelligence
C
Cybersecurity and Infrastructure Security Agency CISA
人人都是产品经理
人人都是产品经理
博客园 - 聂微东
T
Tailwind CSS Blog
A
Arctic Wolf
Cyberwarzone
Cyberwarzone
博客园_首页
雷峰网
雷峰网
Know Your Adversary
Know Your Adversary
Scott Helme
Scott Helme
F
Full Disclosure
AWS News Blog
AWS News Blog
博客园 - 司徒正美
C
CERT Recently Published Vulnerability Notes
Blog — PlanetScale
Blog — PlanetScale
G
GRAHAM CLULEY
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
Security @ Cisco Blogs
Spread Privacy
Spread Privacy
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
J
Java Code Geeks
Webroot Blog
Webroot Blog
Y
Y Combinator Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
阮一峰的网络日志
阮一峰的网络日志
Google DeepMind News
Google DeepMind News
W
WeLiveSecurity
小众软件
小众软件

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Как я перестал бояться и полюбил MCP или Зачем я написал 4 MCP‑сервера и протокол для их связи
timonin · 2026-05-08 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение14 мин

Охват и читатели406

Кейс

Привет! Вы знаете как это бывает — начинаешь делать одну штуку, а потом просыпаешься через неделю и понимаешь, что написал четыре MCP‑сервера, подключил к ним шедулер, собрал автоматический конвеер для трёх Telegram‑каналов и изобрёл собственную спецификацию для связывания всего этого добра. Классика.

Для тех кто не в теме: MCP (Model Context Protocol) — это протокол, через который AI‑ассистенты типа Claude подключаются к внешним сервисам и работают с ними напрямую. Грубо говоря — «руки» для нейросетей. Подключил MCP — и ИИ сам ходит в Telegram, ищет лучшие картинки с промптами на Civitai, управляет рекламой в Яндекс.Директе и делает кучу всего полезного. Без костылей, без скриптов‑прослоек, напрямую.

Меня зовут Илья, я блогер, основатель сервиса для генерации изображений ArtGeneration.me и просто фанат нейросетей. Не являюсь программистом в классическом смысле — скорее энтузиаст, предпочитающий генерировать код с помощью нейросетей, а не писать его с нуля. Но за последний месяц я, кажется, немного увлёкся. «Немного» — это 250 инструментов в четырёх серверах, ежедневные автопайплайны и протокол, которого не существовало до того, как я понял что он мне нужен.

А началось всё с того, что мне нужно было регулярно тянуть контент с Civitai для трёх телеграм‑каналов. Руками это стабильные полтора часа в день. Рутина. Я подумал — ну щас подключу готовый MCP‑сервер и всё заработает. Ага, щас.

В этой статье расскажу почему готовые MCP‑серверы меня не устроили, какие задачи я сейчас решаю с помощью своих, и зачем мне пришлось изобрести целый протокол чтобы эти серверы начали видеть друг друга.

❯ Почему проще написать свой, чем допилить чужой

Тот MCP‑сервер для Civitai, что лежит на GitHub, был написан 7 месяцев назад. Открываю — и понимаю что он покрывает от силы треть API, поиск моделей работает через стандартный эндпоинт (который, кстати, сломан на Civitai с мая 2025, ага), а половина нужных мне параметров фильтраци просто захардкожена. Час пытался допилить — плюнул.

С Telegram была похожая история. Существующие MCP‑серверы покрывали десяток‑другой методов из 169 доступных в Bot API. Хочешь отправить сообщение — пожалуйста. Хочешь управлять форумами, сторис, подарками, бизнес‑аккаунтами? Удачи, допишите сами.

И вот тут я понял штуку, которая звучит контринтуитивно: в 2026-м проще написать MCP‑сервер с нуля, чем обновить версию API в том, что полгода не обновлялось. Серьёзно. Ты берёшь актуальную спеку с официального сайта, 2–3 чужих репозитория как референс, лучшие практики из MCP SDK — и даёшь всё это своему кодинг‑агенту. За день получаешь сервер, который покрывает 100% API и сделан по твоим правилам. А чужой полугодовалый — там свои архитектурные решения, свои баги, устаревший API, и ты тратишь столько же времени просто чтобы понять что он вообще делает или на обновление версий.

Это не значит что мы делаем велосипед с нуля — мы делаем велосипед по ГОСТ‑чертежам и из правильных запчастей. И это часто быстрее чем чинить чужой и ржавый.

❯ Что я написал

Короче, за месяц я собрал четыре MCP‑сервера. Два опенсорсных, два приватных. Но расскажу про все.

civitai‑mcp‑ultimate (Python + FastMCP, 14 инструментов) — самый полный MCP‑сервер для Civitai API из всех что есть. И я не побоюсь этого слова — я проверял. 100% покрытие публичного API, все 7 эндпоинтов, все параметры. Поиск моделей работает через Meilisearch (потому что родной поиск Civitai сломан с мая 2025), просмотр топовых картинок с промптами, скачивание LoRA и чекпоинтов, анализ трендов. NSFW‑фильтрация, кэш превьюшек, двуязычный вывод EN/RU. Ставится одной командой через pip install civitai-mcp-ultimate.

telegram‑api‑mcp (TypeScript, 169 инструментов) — тут я разошёлся. 169 из 169 методов Bot API 9.6 — полное покрытие. Сообщения, медиа, опросы, форумы, стикеры, платежи, бизнес‑аккаунты, истории, подарки, игры, инлайн, управляемые боты — всё. Есть мета‑режим (подсмотрел идею в одном из существующих серверов) — вместо 169 тулов выставляет всего 2: поиск метода и вызов с JSON‑параметрами. Экономит кучу токенов контекста, что немаловажно. Под капотом — rate limiting, circuit breaker, Zod‑валидация, всего 2 зависимости.

Генерация креативов (приватный, Python + FastMCP, 11 инструментов) — MCP‑сервер для генерации картинок и видео. Текст‑в-картинку, картинка‑в-видео, апскейл, удаление фона, подписи к изображениям. Использую и для генерации креативов к рекламе в Яндекс.Директе, и просто для иллюстраций — вот картинки к этой статье, например, тоже через него сгенерированы. Удобно делать это прямо из Claude не переключаясь никуда, к тому же он сам видит результат и может решить — ок получилось или надо перегенерить. Этот я вам не дам, мои коровки.

Автоматизация одной соцсети (приватный, Python + Playwright, 56 инструментов) — самый необычный из всех. Не все площадки дают нормальный API для публикации — некоторые в принципе предоставляют только веб‑интерфейс. И тут MCP заканчивается, начинается Playwright — движок для браузерной автоматизации. Нейросеть открывает мой браузер с живой сессией и работает с интерфейсом как обычный пользователь. Кликает кнопки, заполняет формы, загружает файлы. Какая конкретно соцсеть — не скажу, а то прочитают и забанят. Но работает отлично.

Итого: 250 инструментов в четырёх серверах. Плюс ещё MCP для Яндекс.Директа, но его я не писал — подключил готовый и он меня вполне устроил. Хотя я был шокирован процедурой получения доступа к API Директа — мало того что надо создать своё приложение, так ещё и подать заявку на подключение, в которой подробно описать что ты делаешь и зачем тебе это. И заявки рассматривают только по будням в рабочее время. В 2026 году. Ну ок.

❯ Какие задачи я решаю прямо сейчас

Ладно, хватит про серверы — давайте про то зачем это всё. У меня сеть телеграм‑каналов про нейросети и каждый день им нужен свежий контент. Раньше я, а потом мой СММщик, тратили на это полтора часа в день: зашёл на Civitai, полистал, нашёл что‑то интересное, скачал, оформил пост, опубликовал, потом то же самое для следующего канала. Конечно, что‑то можно было частями автоматизировать, но на то чтобы эти автоматизации запускать и поддерживать тоже уходило время.

Сейчас у меня крутятся три автоматических пайплайна. Каждый день:

12:06 — Claude Code просыпается по расписанию, идёт в Civitai MCP, находит самую популярную по реакциям на портале картинку за день, забирает промпт и метаданные генерации, оформляет пост и публикует в канал с промптами через Telegram MCP. Потом кросспостит в другие сети.

14:00 — для канала с нейро‑моделями. Находит популярную модель (LoRA или чекпоинт), собирает информацию о ней и 6 примеров картинок, переводит описание на русский и формиурет пост.

14:07 — для канала с AI‑видео. Ищет самое популярное по реакциям видео за день, скачивает несколько кандидатов, получает скриншоты из каждого, сравнивает что интереснее — и лучшее публикует в канал.

Три канала, ежедневный контент, ноль ручной работы. Причём Claude по‑настоящему смотрит на контент. Оценивает качество, проверяет что промпт интересный, при необходимости подредактирует подпись. Если картинка так себе — пропустит и возьмёт следующую.

Отдельная история — Яндекс.Директ. Связка из MCP для генерации креативов + MCP для Директа — это вообще другой уровень. Просто пишу вопрос по метрике — получаю ответ. Пишу что надо поменять ставки в объявлениях — получаю замену. Но вайбкодинг маркетинга — это совсем другая история, и её мы коснёмся как‑нибудь в следующий раз.

❯ Казалось бы, что может пойти не так?

Всё работает, контент летит, каналы живут. Красота. А потом ты открываешь один из каналов и видишь что одна и та же картинка опубликована дважды. Потому что вчерашний прогон упал на середине, сегодня перезапустился — и выбрал ту же самую заново. Приятно.

Или вот: утренний прогон нашёл крутую картинку и запостил в канал с промптами. Дневной проснулся, пошёл на Civitai — и нашёл её же, потому что она всё ещё в топе. И запостил в канал с моделями. Потому что откуда ему знать что утром её уже использовали? Это другой запуск Claude, другой промпт, другой контекст.

А теперь давайте разберёмся почему так происходит. MCP‑протокол специально сделан так, чтобы серверы были изолированы друг от друга. Каждый в своём процессе, каждый со своим состоянием. Civitai MCP знает что контент скачали. Telegram MCP знает что что‑то опубликовали. Соцсетный MCP вообще ничего не знает — он живёт в браузере. Между ними — пустота. Никакой общей базы данных, никакой шины сообщений, никакого общего состояния. Так задумано — изоляция серверов делает их надёжными и независимыми.

Но ты стоишь перед простым вопросом: «Это уже постили?» — а ответить нечем.

Можно конечно нагородить свою базу данных, запилить отдельный сервис, который будет принимать вебхуки от каждого сервера и хранить состояние… Но это же тот самый микросервис из задания внизу страницы букваря. Лишняя инфраструктура, лишняя точка отказа, и теперь тебе надо эту базу ещё и поддерживать.

Я перебрал все варианты которые смог найти — и убедился что ничего подходящего нет.

❯ Один лог чтоб всеми править

В жизни каждого 40-летнего мальчика наступает такой момент, когда хочется написать свой язык программирования, библиотеку, спецификацию. У меня этот момент наступил.

Но я начал не бездумно. Прежде чем изобретать своё — я провёл нормальное исследование. Потратил вечер чтобы перерыть всё что существует и убедиться что я не пропустил готовое решение.

Вот что я рассмотрел и почему отказался:

OpenTelemetry — первый кандидат, самый очевидный. Индустриальный стандрат трассировки. Проблема в том, что OTel трейсит вызовы — spans, traces, метрики. Он отвечает на вопрос «почему запрос шёл 3 секунды», а не «постили ли мы уже эту картинку». К тому же нужна инфраструктура: коллектор, экспортёр, бэкенд. Для моих трёх пайплайнов это как стрелять из пушки по воробьям.

Google A2A (Agent‑to‑Agent) — протокол коммуникации между агентами. Свежий, модный. Но он про то как агенты общаются друг с другом, а не про логирование того что каждый сервер делал. Другой уровень абстракции.

IETF AAT (Agent Audit Trail) — draft‑спецификация с фокусом на комплаенс. Хэш‑цепочки, ECDSA‑подписи, всё для SOC2 и HIPAA. Я тоже хочу быть enterprise, но мне надо просто узнать постили ли мы уже эту лору или нет.

Langfuse / LangSmith / Arize Phoenix — платформы LLM‑обсервабилити. Трейсят API‑вызовы к нейросетям, стоимость токенов, латенсию. Но не жизненный цикл контента. Плюс требуют облако или self‑host.

На этом моменте я уже начал подозревать что придётся писать своё. Но на всякий случай проверил ещё пару вариантов.

CA‑MCP (arXiv 2601.11595) — shared context для транзиентного стейта между MCP‑серверами. Интересная идея, но это про оперативный контекст, а не про персистентное логирование.

lokryn/mcp‑log — аудит‑лог операций MCP‑сервера. Ближе к теме, но заточен под SOC2/HIPAA аудит, не под трекинг контента.

Agent Protocol — определяет REST API для агентов. Не формат логов.

Итого: на апрель 2026 протокола кросс‑MCP трекинга контента не существует. Ни один из рассмотренных вариантов не совмещает три вещи которые мне нужны: семантику контента (что именно опубликовали), zero shared state (без общей базы) и легковесность (один файл, ноль зависимостей).

Ну раз нет — значит будет. Я изучил лучшие практики из каждого рассмотренного решения, подумал над архитектурой, и написал TRAIL — Tracking Records Across Isolated Logs.

Идея простая до безобразия. Каждый MCP‑сервер ведёт свой лог — обычный JSONL‑файл trail.jsonl. Одна строчка на каждое значимое действие. Никакой общей базы — каждый пишет в свой файл. А нейросеть‑оркестратор читает все логи и связывает записи через универсальный Content ID.

Вот как это выглядит. Civitai MCP выбрал картинку:

{"version":2,"timestamp":"2026-04-05T14:07:00Z","content_id":"civitai:image:12345","action":"selected","requester":"daily-post","trace_id":"run-001"}

Telegram MCP опубликовал ту же картинку:

{"version":2,"timestamp":"2026-04-05T14:07:05Z","content_id":"civitai:image:12345","action":"posted","requester":"daily-post","trace_id":"run-001","details":{"platform":"telegram","platform_id":"42"}}

Один и тот же content_id — civitai:image:12345. Оркестратор видит записи мгновенно и внутри одного контекста автоматически связывает их в единый трейс — эта картинка выбрана и опубликована в Telegram. Повторно постить не нужно. А если бы вторая запись была "action":"failed" — оркестратор понял бы что публикация упала и надо повторить.

trace_id связывает все записи одного прогона пайплайна. Упал пайплайн в 3 ночи? Смотришь записи по trace_id — и видишь на каком шаге сломалось и где продолжить.

TRAIL определяет 15 стандартных действийfetchedselectedpostedfailedskippedretryingtransformedmoderated и так далее.

И три уровня совместимости:

  • Basic — 5 обязательных полей + 2 инструмента (get_trailmark_trail). Хватит чтобы решить проблему дедупликации.

  • Standard — добавляет trace_id, автологирование, статистику. Для продакшн‑пайплайнов.

  • Full — цепочки причинности через caused_by, все 15 действий, экспорт в OpenTelemetry. Для мульти‑агентных систем.

Фишка в том, что нейросеть сама понимает контекст. Поля названы по‑человечески: content_idactionrequestertimestamp. AI сам видит что уже скачано, что опубликовано, а где произошёл сбой. Без единой строчки интеграционного кода между серверами. Ноль общего состояния, ноль зависимостей.

И раз уж всё это сделано агентами и для агентов — для интеграции TRAIL в свой MCP‑сервер вам зачастую достаточно просто показать вашему кодинг‑агенту ссылку на спеку и сказать «сделай». Серьёзно, попробуйте.

❯ Что я понял про MCP‑разработку

За месяц я прогнал каждый из своих серверов через 5–7 раундов code review. Не потому что я перфекционист — просто после каждого ревью вылезало что‑то новое. И постепенно у меня сложился набор правил, которые я теперь считаю обязательными. Все эти правила — как на уроках труда — написаны кровью и на собственных ошибках. До появления TRAIL я пару раз успел запостить свои тестовые посты туда, откуда их нельзя было удалить)))

Rate limiting и circuit breaker — не опционально. Telegram банит ботов которые шлют больше 30 запросов в секунду. Civitai отвечает 429-ми если частишь. Без встроенного rate limiter ваш MCP‑сервер ляжет на первом же реальном пайплайне. Circuit breaker тоже нужен — если API лёг, нет смысла долбить его запросами, лучше подождать и попробовать позже.

Валидация до отправки в API. Проще сделать правильную валидацию сразу, чем дебажить матерясь потом. Большинство существующих серверов этого не делают — отправляют сырые параметры в API и возвращают непонятный 400-й ответ. В telegram‑api‑mcp каждый из 169 методов проходит через Zod‑валидацию — если ты передал строку вместо числа, ты узнаешь об этом с понятным сообщением, а не с «Bad Request» от Telegram.

Минимум зависимостей. Это я усвоил ещё на Civitai‑сервере, когда одна из транзитивных зависимостей сломала билд после обновления. telegram‑api‑mcp — 169 методов, продакшн‑фичи, а зависимостей всего 2: SDK и Zod. Чем меньше зависимостей, тем меньше шансов что что‑то сломается при обновлении. И тем проще разобраться в проекте.

Tool annotations. Каждый инструмент помечен: readOnly, destructive, idempotent, openWorld. AI‑клиент видит эти аннотации и понимает какие тулы безопасно вызывать автоматически, а какие лучше подтвердить у человека. deleteMessage — destructive, getChat — readOnly. Мелочь, а автономные пайплайны работают надёжнее.

Маскирование токенов. Бот‑токен не должен появляться в ответах, логах и сообщениях об ошибках. Никогда. Казалось бы очевидно, но я видел репозитории с кучей звёздочек и форков, которые возвращают полный URL запроса вместе с токеном в тексте ошибки. Прямо в контекст LLM. Понятно что у них такая архитектура и свои причины, но блин — можно же было сделать утилиту и возвращать файл, а не светить токеном в ответе нейросети.

❯ Агентное управление — это новый компьютер

Вот что принципиально изменилось в подходе к автоматизации. Раньше оркестрация выглядела так: написал скрипт, прописал if‑else, запустил по крону. Скрипт тупой — делает ровно то, что написано. Если что‑то пошло не так — падает. Если API поменялся — падает. Если картинка плохая — пофиг, постит.

Сейчас оркестратор — это Claude Code, запущенный по расписанию. Он понимает что делает. Если Civitai API вернул ошибку — подождёт и попробует снова. Если картинка не подходит по качеству — пропустит и возьмёт следующую. Если Telegram вернул rate limit — замедлится. Если что‑то сломалось фундаментально — напишет в TRAIL‑лог "action":"failed" и остановится, вместо того чтобы запостить мусор.

И это не какой‑то сложный код с обработкой исключений на каждый случай. Это один промпт: «найди лучшую картинку за день, проверь что мы её ещё не постили, оформи пост, опубликуй». Всё остальное нейросеть решает сама — потому что она понимает контекст.

Но знаете что ещё круче? Это всё прекрасно работает и до того, как оно превращается в MCP. Потому что до MCP у вас просто есть токен и LLM, которая пишет на лету под него обёртку. Скормили токен от Vercel, Supabase и GitHub в одного агента — и он сам управляет этим как угодно. И скорее всего знает лучше вас, что можно сделать и что нельзя. Вам не надо помнить команды. Не надо помнить спеки. Можно задать вопрос про спеки — узнать отевт. Можно попросить загуглить лучшие практики и после этого настроить сервер. Это совсем другой подход к решению задач и к управлению процессами.

MCP — это уже следующий шаг, когда ты эти обёртки стандартизируешь и делаешь переиспользуемыми. Вместо того чтобы каждый раз объяснять агенту как ходить в Telegram API, ты один раз пишешь MCP‑сервер — и дальше он работает из любого проекта, любого агента, любого контекста.

Дженсен Хуанг сказал недавно, что агентные системы управления — это буквально новый компьютер. Полностью согласен. Это многоуровневые системы, которые корректируют сами себя за счёт умного оркестратора, справляются с ошибками и даже могут дорабатыать себя если внести это в цикл. Хотя хорошо это или плохо — пока не понятно, тут только время покажет.

С этим контент‑заводом из MCP‑серверов я наконец‑то смогу уволить СММщика освободить СММщика для более творческих задач, автоматизировав рутину.

❯ Что дальше

Все публичные проекты — опенсорс, MIT лицензия:

  • civitai‑mcp‑ultimate — MCP для Civitai. 14 инструментов, 100% API, Python. pip install civitai-mcp-ultimate

  • telegram‑api‑mcp — MCP для Telegram. 169/169 методов Bot API 9.6, TypeScript

  • trail‑spec — спецификация TRAIL для связывания MCP‑серверов между собой

Если делаете свой MCP‑сервер и у вас в системе несколько таких серверов — попробуйте TRAIL. Для интеграции достаточно дать кодинг‑агенту ссылку на спеку. А если хотите добавить что‑то своё и улучшить проекты — welcome контрибьютить. Звёздочки на GitHub тоже привествуются, мелочь а приятно.

Пишите в комментариях какие MCP используете вы и каких не хватает — может, мне тоже такой надо. Вообщем в классное время живём, товарищи.

Я рассказываю больше о нейросетях и автоматизации у себя в YouTube, в Телеграме и на Бусти. Всех обнял и удачных автоматизаций.