Разработчик научил Claude публиковать блоги автоматически — и рассказал, где всё пошло не так
Инженер собрал кастомный MCP-сервер, чтобы Claude читал черновики и публиковал их на Dev.to. Сам код — 20 строк, но путь до работающей системы пролёг через сломанные зависимости, захваченное имя пакета и коварный JSON.
Протокол 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, получил «успешно», но при попытке импорта fastmcp — ModuleNotFoundError. При этом 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 не упоминает, использовал ли он свой же инструмент для публикации самого этого поста. Но сама ирония напрашивается.