MCP-сервер блога: как подключить статьи к Claude Code, Cursor и другим ассистентам
Привет!
У этого блога есть свой MCP-сервер. MCP (Model Context Protocol) — общий протокол, по которому ИИ-ассистент подключает внешние инструменты и данные; его понимают почти все современные ассистенты и агенты для программирования (сравнение ИИ-агентов). Подключив сервер, ассистент сам находит статью под ваш вопрос и читает её целиком вместе с листингами кода — без поиска ссылки, копирования текста и вставки его в чат.
Адрес и что умеет сервер
- Адрес:
https://mcp.romankryvolapov.com/ - Транспорт: Streamable HTTP. Авторизации нет — ни регистрации, ни ключа.
- Только чтение: сервер отдаёт опубликованные статьи и больше ничего не умеет; к вашим файлам и данным доступа у него нет.
| Инструмент | Что делает |
|---|---|
search | ищет по всем статьям на английском, русском и украинском, запрос можно писать на любом из трёх языков; возвращает до 20 статей с заголовком, адресом и фрагментом текста |
get_page | возвращает статью целиком в markdown по её адресу, например https://romankryvolapov.com/ru/ktor-manual/; листинги кода совпадают с сайтом байт в байт |
Сервер берёт текст с самого сайта и обновляет свой индекс примерно раз в час, поэтому новая статья находится через час-другой после публикации.
Как подключить
Имя сервера в примерах ниже — romankryvolapov; оно может быть любым, ассистент видит его в списке инструментов.
Claude Code
Одна команда в терминале, затем проверка связи:
claude mcp add --transport http --scope user romankryvolapov https://mcp.romankryvolapov.com/claude mcp listС --scope user сервер доступен во всех проектах; без этого флага — только в текущем. В выводе claude mcp list у сервера должно стоять «✔ Connected», внутри сессии то же показывает команда /mcp. Подробнее о командах и настройках — в справочнике по Claude Code.
Claude (сайт и приложение)
В Claude сервер подключается как свой коннектор — один раз для аккаунта, после чего работает и на сайте, и в приложении:
- Customize → Connectors → «+ Add» → «Add custom connector».
- Имя — любое, адрес —
https://mcp.romankryvolapov.com/, затем «Continue». - В разделе Authentication выбрать «No sign in» и нажать «Add».
- В чате: «+» слева внизу → Connectors → включить коннектор.
На бесплатном тарифе можно добавить один свой коннектор. Обращается к серверу облако Anthropic, а не ваш компьютер, — этому серверу так и нужно: он публичный.
Cursor
Файл ~/.cursor/mcp.json подключает сервер ко всем проектам, .cursor/mcp.json в корне проекта — только к нему:
{ "mcpServers": { "romankryvolapov": { "url": "https://mcp.romankryvolapov.com/" } }}Транспорт указывать не нужно: запись с полем url Cursor сам считает удалённым сервером.
VS Code (GitHub Copilot)
Проще всего — командой MCP: Add Server из палитры команд: тип HTTP, затем адрес и имя. Вручную — в файле .vscode/mcp.json проекта:
{ "servers": { "romankryvolapov": { "type": "http", "url": "https://mcp.romankryvolapov.com/" } }}Здесь поле type обязательно, а корневой ключ называется servers, а не mcpServers, как у Cursor и Gemini CLI.
Codex
codex mcp add romankryvolapov --url https://mcp.romankryvolapov.com/Та же запись вручную, в ~/.codex/config.toml:
[mcp_servers.romankryvolapov]url = "https://mcp.romankryvolapov.com/"Проверка — codex mcp list в терминале или /mcp внутри сессии.
Gemini CLI
gemini mcp add --transport http --scope user romankryvolapov https://mcp.romankryvolapov.com/Без --scope user сервер запишется в настройки текущего проекта, .gemini/settings.json. Вручную это выглядит так:
{ "mcpServers": { "romankryvolapov": { "httpUrl": "https://mcp.romankryvolapov.com/" } }}Ключ именно httpUrl: поле url в Gemini CLI означает старый транспорт SSE, и с ним сервер не подключится.
Другие клиенты
Подойдёт любой клиент, который умеет подключать удалённые MCP-серверы. Нужны три вещи: адрес https://mcp.romankryvolapov.com/, транспорт Streamable HTTP (в настройках его называют HTTP или streamable-http) и отсутствие авторизации. Та же информация в машиночитаемом виде лежит в карточке сервера: https://romankryvolapov.com/.well-known/mcp.json.
Как пользоваться
Когда вызывать инструмент, ассистент решает сам — по тому, о чём вы спрашиваете. Надёжнее всего назвать блог прямо:
- «Найди в блоге romankryvolapov.com, как в Ktor подключить Exposed и Koin».
- «Прочитай статью про хуки Claude Code и составь по ней чек-лист для моего проекта».
- «Что в блоге написано про LoRA и чем дообучение отличается от RAG?»
Ассистент сначала вызовет search, получит список статей с адресами, а потом заберёт нужную через get_page — целиком, а не пересказ из выдачи поисковика.
Проверить сервер без клиента
Сервер отвечает на обычные JSON-RPC-запросы, поэтому проверить его можно и без ассистента — одним запросом из терминала:
curl -s https://mcp.romankryvolapov.com/ \ -H 'content-type: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search","arguments":{"query":"Project Loom","limit":3}}}'В ответ придёт JSON с найденными статьями: заголовок, адрес и фрагмент текста вокруг совпадения.
Как он устроен
Сервер — небольшой Cloudflare Worker без базы данных. При первом обращении он скачивает с сайта llms-full.txt — полный текст всех статей в markdown, — делит его на статьи и строит в памяти поисковый индекс BM25: слово тем весомее, чем реже оно встречается на сайте в целом и чем чаще в конкретной статье. Отдельная поисковая библиотека для этого не нужна, а сервер отдаёт ровно то, что опубликовано на сайте, с теми же листингами.