Model Context Protocol: подключаем веб-скрапинг к Claude и LLM-агентам
Как MCP-сервер даёт LLM-ассистенту прямой доступ к парсингу сайтов — архитектура, пример сервера и типичные сценарии использования.

Model Context Protocol (MCP) — открытый протокол от Anthropic, который решает конкретную проблему: как дать LLM-ассистенту (Claude, любому MCP-совместимому клиенту) доступ к внешним данным и инструментам без написания кастомной интеграции под каждую пару «модель + сервис».
Применительно к веб-скрапингу это означает: вместо того чтобы копировать результаты парсинга вручную в чат, ассистент может сам запросить данные напрямую.
Зачем скрапингу MCP-сервер
Без MCP типичный процесс выглядит так: вы заходите в дашборд парсера, смотрите результаты, копируете нужные строки в чат с LLM, просите проанализировать. С MCP-сервером ассистент сам:
- получает список активных проектов парсинга и их статус;
- запрашивает последние собранные данные;
- при необходимости запускает новый скрапинг и получает результат напрямую.
Анатомия MCP-сервера
MCP-сервер — это процесс, который объявляет набор инструментов (tools) с именем, описанием и схемой параметров, и отвечает на вызовы по stdio или HTTP.
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({ name: "scraper", version: "1.0.0" });
server.registerTool(
"get_latest_results",
{
title: "Получить последние результаты парсинга",
description: "Возвращает последние собранные строки данных по проекту",
inputSchema: { projectId: z.string() },
},
async ({ projectId }) => {
const rows = await fetchLatestRows(projectId);
return { content: [{ type: "text", text: JSON.stringify(rows) }] };
},
);
const transport = new StdioServerTransport();
server.connect(transport);Ключевая часть — description. LLM-клиент решает, когда и как вызвать инструмент, основываясь именно на текстовом описании — чем точнее оно объясняет, что делает инструмент и какие у него последствия, тем корректнее агент им пользуется.
Разделение read-only и side-effect инструментов
Хорошая практика — явно помечать в описании, запускает ли инструмент реальное действие:
server.registerTool(
"run_scrape_now",
{
title: "Запустить скрапинг прямо сейчас",
description:
"Запускает реальный сбор данных по проекту немедленно (тратит кредиты API, " +
"может занять несколько минут). Не вызывать для простого просмотра статуса — " +
"для этого есть get_project_status.",
inputSchema: { projectId: z.string() },
},
async ({ projectId }) => {
const result = await triggerScrape(projectId);
return { content: [{ type: "text", text: JSON.stringify(result) }] };
},
);Совет
Обрезайте большие ответы (тысячи строк данных) до разумного объёма прямо в инструменте — например, возвращайте первые 20 записей с пометкой "усечено", а не всю таблицу. Иначе один вызов инструмента может занять весь контекст модели.
Подключение сервера к Claude Code
claude mcp add scraper -- node ./mcp-server/index.jsПосле этого ассистент видит все зарегистрированные инструменты сервера и может вызывать их в рамках диалога — без ручного копирования данных между интерфейсами.
Типичные сценарии применения
| Сценарий | Инструмент MCP |
|---|---|
| "Покажи, что изменилось на сайте конкурента за неделю" | get_diff по SEO-трекеру |
| "Запусти парсинг всех активных проектов" | run_scrape_now в цикле |
| "Сколько новых отзывов появилось за месяц?" | get_review_stats |
| "Найди тендеры дороже 5 млн по ключевому слову" | search_tenders с фильтром |
Заключение
MCP превращает скрапинг-платформу из «инструмента, которым управляют через UI» в «инструмент, которым может управлять LLM-агент напрямую». Для команд, которые уже используют Claude Code или похожих ассистентов в рабочем процессе, это убирает целый слой ручного копирования данных между системами.
Частые вопросы
MCP — это то же самое, что function calling?+
Нет. Function calling — способ, которым конкретная модель вызывает функции внутри одного запроса. MCP — открытый протокол для подключения LLM-приложения (например, Claude Code) к внешним серверам с инструментами и данными, независимо от конкретного провайдера модели.
Нужен ли отдельный сервер для каждого источника данных?+
Не обязательно — один MCP-сервер может объединять несколько связанных инструментов (например, весь функционал скрапинг-платформы). Разделение на несколько серверов имеет смысл, если источники логически не связаны или требуют разных прав доступа.
Безопасно ли давать LLM-агенту доступ к запуску скрапинга?+
Как и с любым инструментом, который выполняет реальные действия — стоит явно разделять read-only операции (посмотреть статус, список проектов) и операции с побочным эффектом (запустить скрапинг, потратить кредиты). Хороший MCP-сервер описывает это в description каждого инструмента.
Похожие материалы

AI-агенты для парсинга данных: как LLM меняет извлечение информации
Разбираем, чем агентный подход к скрапингу отличается от селекторов, и когда LLM-агент действительно экономит время инженеров.

AI Sales Radar: автоматизация поиска и квалификации лидов
Как AI-агент находит компании с сигналами покупательского намерения — вакансии, новости, технологии на сайте — и оценивает готовность к покупке.

RAG-пайплайны на основе веб-данных: от парсинга до векторной базы
Как собрать end-to-end RAG-систему на данных, извлечённых со внешних сайтов — от очистки текста до chunking-стратегии.