01.08.2027 202 материалов

Разработчик научил Claude публиковать блоги автоматически — и рассказал, где всё пошло не так

Инженер собрал кастомный MCP-сервер, чтобы Claude читал черновики и публиковал их на Dev.to. Сам код — 20 строк, но путь до работающей системы пролёг через сломанные зависимости, захваченное имя пакета и коварный JSON.

Разработчик научил Claude публиковать блоги автоматически — и рассказал, где всё пошло не так

Протокол MCP обещает, что ИИ будет не просто генерировать текст, а реально выполнять действия — читать файлы, вызывать API, запускать скрипты. На практике же 80% усилий уходит на борьбу с окружением, а не с самим ИИ.

Зачем это вообще нужно

Разработчик, который плотно готовится к найму в сфере AI-инженерии, решил попробовать MCP (Model Context Protocol) на практике — не просто почитать документацию, а собрать рабочий инструмент. Идея: Claude читает черновик поста с локальной машины, редактирует его и публикует на Dev.to через API. Без копипасты, без открытия веб-редактора, без ручных телодвижений.

Именно для таких сценариев MCP и создавался. Это протокол, который позволяет языковой модели вызывать пользовательские «инструменты» — по сути, обычные Python-функции, обёрнутые в документацию. Подключил сервер к Claude Desktop — и модель получает возможность действовать в реальном мире.

Два сервера, одна задача

Автор собрал связку из двух MCP-серверов:

  • filesystem — официальный сервер от разработчиков протокола, даёт Claude доступ к чтению и записи файлов в разрешённой папке.
  • devto — кастомный сервер, который оборачивает API Dev.to и выставляет инструмент publish_blog_to_devto.

Схема работы после настройки выглядит почти тривиально: говоришь Claude «возьми черновик из папки, отредактируй и опубликуй как черновик на Dev.to с тегами» — и он сам цепочкой вызывает нужные инструменты. Сначала читает файл, потом правит текст, потом отправляет запрос к API. Никакой магии, чистая оркестрация.

Где всё поломалось

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

Ловушка с именем пакета на PyPI

Это, пожалуй, самый коварный баг. Автор установил пакет mcp через uv add mcp, получил «успешно», но при попытке импорта fastmcpModuleNotFoundError. При этом import mcp работал, папка server на месте.

Выяснилось, что на PyPI зарегистрирован пакет с именем mcp версии 2.0.0, который не имеет отношения к официальному SDK от Anthropic. Это совершенно другая библиотека с зависимостями вроде httpx2 и pywin32. Настоящий SDK называется modelcontextprotocol и на момент публикации был на версии 1.29.0.

Исправление: явно указать диапазон версий — uv add "mcp[cli]>=1.2.0,<2.0.0". Урок, который автор подчёркивает: если после установки пакета ничего не работает — проверяйте через uv pip show, что реально поставилось. Имя на PyPI не гарантирует, что это тот проект, который вы ищете.

Python 3.9 vs 3.10+

MCP SDK требует Python 3.10 или выше. Но в шаблоне проекта осталось requires-python = ">=3.9" от предыдущей итерации. Зависимости отказывались резолвиться, и без явного пинания версии Python (uv python pin 3.12) проблему было не решить.

Путь к uv в Claude Desktop на Windows

Claude Desktop не всегда наследует PATH системной оболочки. Поэтому команда "command": "uv" в конфиге может молча не сработать. Пришлось прописывать полный путь к исполняемому файлу — тот, который выдаёт where.exe uv.

Ошибка в JSON-конфиге

Файл claude_desktop_config.json содержит и другие настройки приложения. Если добавить свой MCP-сервер на том же уровне вложенности, что и ключ mcpServers, вместо того чтобы вложить внутрь — Claude Desktop молча проигнорирует конфигурацию. Сервер просто не появится в списке, и вы будете гадать почему.

Правильная структура:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "C:\\path\\to\\folder"]
    },
    "devto": {
      "command": "C:\\Users\\...\\.local\\bin\\uv.exe",
      "args": ["--directory", "C:\\...\\devto-mcp-server", "run", "dev-server.py"]
    }
  }
}

После правки — полный перезапуск Claude Desktop (не просто закрытие окна, а выход из трея), и оба сервера наконец отображаются как работающие.

MCP Inspector: отладка без Claude

Для тестирования сервера до подключения к Claude автор использовал MCP Inspector — локальный веб-интерфейс, который запускается одной командой и позволяет вызывать инструменты напрямую, видя сырой запрос и ответ. Это полезно для раннего вылавливания багов, не отлаживая через чат с моделью.

Что это на самом деле говорит об экосистеме

Сам код MCP-сервера — около 20 строк Python с докстрингом. Протокол прост, интерфейс чистый, документация адекватная. Но путь до работающей системы пролегает через стандартные боли Python-экосистемы: конфликты версий, мусор на PyPI, платформенные нюансы менеджеров пакетов.

Автор резюмирует это точно: инструменты для ИИ-агентов настолько надёжны, насколько надёжна скучная инфраструктура под ними. Получите venv, версии пакетов и структуру конфига — и «ИИ делает интересную часть» работает само собой.

В планах — добавить в тот же сервер инструмент для автоматического сбора истории коммитов из GitHub, чтобы Claude мог сам генерировать еженедельные посты вида «что я построил на этой неделе». Идея здравая: если протокол уже работает, расширять функциональность — дело нескольких новых функций.


Примечание: автор статьи на Dev.to не упоминает, использовал ли он свой же инструмент для публикации самого этого поста. Но сама ирония напрашивается.