Roman Kryvolapov Engineering Blog

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

Одна команда в терминале, затем проверка связи:

Terminal window
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 сервер подключается как свой коннектор — один раз для аккаунта, после чего работает и на сайте, и в приложении:

  1. Customize → Connectors → «+ Add» → «Add custom connector».
  2. Имя — любое, адрес — https://mcp.romankryvolapov.com/, затем «Continue».
  3. В разделе Authentication выбрать «No sign in» и нажать «Add».
  4. В чате: «+» слева внизу → 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

Terminal window
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

Terminal window
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-запросы, поэтому проверить его можно и без ассистента — одним запросом из терминала:

Terminal window
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: слово тем весомее, чем реже оно встречается на сайте в целом и чем чаще в конкретной статье. Отдельная поисковая библиотека для этого не нужна, а сервер отдаёт ровно то, что опубликовано на сайте, с теми же листингами.