MCP или API: когда использовать MCP, а когда прямой HTTP для AI-инструментов

Jakub Swistak
Опубликовано Обновлено Время чтения: 6 мин
Схема сравнения архитектур, показывающая паттерны интеграции MCP и HTTP

При подключении AI-агента к внешним инструментам и API есть два основных подхода: использовать Model Context Protocol (MCP) как слой абстракции или вызывать API напрямую по HTTP. Оба подхода работают. Они предполагают разные компромиссы в плане гибкости, сложности, производительности и переносимости.

В этой статье сравниваются два подхода на конкретных примерах кода, с анализом задержки и схемой принятия решения.

Для практической проверки уровня прав см. тестирование аутентификации и доступа MCP. Руководство сравнивает реальные ответы 401 и 403 с успешным вызовом приватного агента, а затем проверяет удаление роли.

Два подхода

Прямая интеграция по HTTP

AI-приложение (или его бэкенд) напрямую вызывает внешние API с помощью стандартных HTTP-запросов. Разработчик пишет код для формирования запросов, обработки аутентификации, разбора ответов и передачи результатов обратно в LLM.

┌──────┐     ┌────────┐                        ┌─────────────┐
│ User │────▶│ AI App │──── HTTP request ─────▶│ Weather API │
└──────┘     │        │◀─── JSON response ─────│             │
             │        │                        └─────────────┘
             │        │── result as context ──▶ LLM
             │        │◀── formatted answer ───
             └───┬────┘
                 │
                 ▼
           User gets answer

Интеграция через MCP

AI-приложение подключается к MCP-серверу, который оборачивает внешний API. Приложение использует протокол MCP, чтобы обнаруживать доступные инструменты, вызывать их по имени и получать результаты. MCP-сервер выполняет фактические HTTP-вызовы к внешнему API.

┌──────┐     ┌───────────────────┐              ┌────────────┐     ┌──────────┐
│ User │────▶│ AI App/MCP Client │── JSON-RPC ─▶│ MCP Server │────▶│ HTTP API │
└──────┘     │                   │◀─ JSON-RPC ──│            │◀────│          │
             │                   │              └────────────┘     └──────────┘
             │                   │── result as context ──▶ LLM
             │                   │◀── formatted answer ───
             └─────────┬─────────┘
                       │
                       ▼
                 User gets answer

Ключевое отличие: при прямом HTTP код интеграции с API принадлежит AI-приложению. При MCP он принадлежит MCP-серверу, а AI-приложение просто вызывает инструменты по имени.

MCP-часть этой схемы можно получить, не создавая сервер: Quickchat AI размещает streamable-HTTP MCP-сервер для каждого AI Agent, а превращение вашего агента в MCP-сервер сводится к вставке одного URL в AI-приложение.

Для настройки в Claude создайте собственный коннектор знаний и сверьте его ответы с исходными материалами.

Сравнение кода

Сравним оба подхода на практическом примере: получение репозиториев пользователя GitHub.

Прямая интеграция по HTTP

import httpx

async def get_user_repos(username: str, token: str) -> list[dict]:
    """Получить репозитории пользователя GitHub."""
    async with httpx.AsyncClient() as client:
        response = await client.get(
            f"https://api.github.com/users/{username}/repos",
            headers={
                "Authorization": f"Bearer {token}",
                "Accept": "application/vnd.github.v3+json",
                "X-GitHub-Api-Version": "2022-11-28"
            },
            params={"sort": "updated", "per_page": 10}
        )
        response.raise_for_status()
        repos = response.json()
        return [
            {
                "name": r["name"],
                "description": r["description"],
                "stars": r["stargazers_count"],
                "language": r["language"],
                "url": r["html_url"]
            }
            for r in repos
        ]

Чтобы интегрировать это с LLM, вам также нужны:

  • Определение инструмента в формате, который ожидает LLM (схема OpenAI function calling, схема Claude tool use и т. д.)
  • Код для разбора вызова инструмента от LLM, вызова get_user_repos и вставки результата обратно в диалог
  • Обработка ошибок для HTTP-сбоев, лимитов запросов и истечения срока действия аутентификации

MCP-сервер

from mcp.server.fastmcp import FastMCP
import httpx

mcp = FastMCP("github-server")

GITHUB_TOKEN = os.environ["GITHUB_TOKEN"]

@mcp.tool()
async def get_user_repos(username: str) -> str:
    """Получить 10 недавно обновленных репозиториев пользователя GitHub.

    Args:
        username: имя пользователя GitHub для поиска
    """
    async with httpx.AsyncClient() as client:
        response = await client.get(
            f"https://api.github.com/users/{username}/repos",
            headers={
                "Authorization": f"Bearer {GITHUB_TOKEN}",
                "Accept": "application/vnd.github.v3+json",
                "X-GitHub-Api-Version": "2022-11-28"
            },
            params={"sort": "updated", "per_page": 10}
        )
        response.raise_for_status()
        repos = response.json()
        lines = []
        for r in repos:
            stars = r["stargazers_count"]
            lang = r["language"] or "неизвестно"
            lines.append(f"- {r['name']} ({lang}, {stars} звезд): {r['description'] or 'Нет описания'}")
        return "\n".join(lines)

if __name__ == "__main__":
    mcp.run(transport="stdio")

Версия с MCP инкапсулирует вызов API, аутентификацию и форматирование ответа внутри сервера. Любой MCP-совместимый клиент может использовать этот инструмент, ничего не зная о GitHub API.

Что меняется для AI-приложения

АспектПрямой HTTPMCP
Определение инструментаПишется в нативном формате LLM (схема OpenAI и т. д.)Автоматически генерируется из MCP-сервера
АутентификацияУправляется AI-приложениемУправляется MCP-сервером
Разбор ответаAI-приложение извлекает и форматирует данныеMCP-сервер возвращает заранее отформатированный результат
Обработка ошибокAI-приложение обрабатывает HTTP-ошибкиMCP-сервер обрабатывает ошибки, возвращает структурированные сообщения об ошибках
Добавление нового инструментаНаписать новый код в AI-приложенииПодключиться к новому MCP-серверу (или добавить инструмент в существующий сервер)
Смена LLMПереписать определения инструментов под новый формат LLMИзменения не нужны

Сравнение производительности

MCP добавляет слой между AI-приложением и внешним API. У этого слоя есть своя цена.

Задержка

Для транспорта stdio (локальных MCP-серверов) накладные расходы минимальны: запуск процесса при старте (однократно, обычно менее 100ms) и межпроцессное взаимодействие на сообщение (менее миллисекунды на современных системах). На практике вызов внешнего API определяет основную часть общей задержки.

Для удаленных MCP-серверов (Streamable HTTP или SSE) добавляется один HTTP round-trip между клиентом и MCP-сервером, а также HTTP round-trip от MCP-сервера к внешнему API. Если MCP-сервер и внешний API находятся рядом, накладные расходы малы (единицы миллисекунд). Если они находятся в разных регионах, задержка суммируется. Однако пользователь редко замечает именно транспорт: при создании агента для справочного центра на размещенном MCP-сервере Notion 248 вызовов инструментов в среднем занимали 2.7 секунды каждый, и почти все это время уходило на поиск в Notion и рендеринг страниц, а не на промежуточный hop.

КонфигурацияПримерная добавленная задержка
Локальный MCP-сервер (stdio)< 1ms на вызов инструмента
Удаленный MCP-сервер (тот же регион, что и API)1-5ms на вызов инструмента
Удаленный MCP-сервер (другой регион относительно API)10-50ms на вызов инструмента

Для большинства сценариев AI-агентов, где инференс LLM занимает 500ms-5s, накладные расходы MCP несущественны.

Управление соединениями

Прямой HTTP: ваше приложение управляет соединениями с каждым внешним API. Это означает обработку пулов соединений, логики повторных попыток и лимитов запросов для каждого API.

MCP: ваше приложение управляет одним соединением на MCP-сервер. Сервер управляет соединением с внешним API. Если у вас 10 инструментов, распределенных по 3 MCP-серверам, вы управляете 3 соединениями вместо 10.

Когда использовать MCP

Несколько интеграций с инструментами

Если вашему AI-приложению нужно подключаться к 5+ внешним сервисам, MCP снижает нагрузку на интеграцию. Вместо того чтобы писать и поддерживать кастомные API-клиенты для каждого сервиса, вы подключаетесь к MCP-серверам (многие из них доступны как open-source-проекты).

Переносимость между AI-платформами

Если вы создаете MCP-серверы для своих инструментов, эти серверы работают с любым MCP-клиентом: Claude Desktop, Cursor, Windsurf, кастомными приложениями и платформами вроде Quickchat AI. При прямом HTTP вам пришлось бы заново реализовывать определения инструментов для формата каждой платформы.

Динамическое обнаружение инструментов

MCP поддерживает обнаружение инструментов во время выполнения через tools/list. AI-приложение может подключиться к серверу и узнать, какие инструменты доступны, без какой-либо жестко заданной конфигурации. Это полезно в сценариях, где инструменты часто меняются или настраиваются пользователем.

Разделение ответственности

Если разные команды отвечают за разные инструменты, MCP дает четкую границу. Команда, которая владеет интеграцией с Salesforce, создает и поддерживает MCP-сервер Salesforce. Команда AI-приложения подключается к нему, не разбираясь в API Salesforce. Изменения в API Salesforce обрабатываются в MCP-сервере без изменений в AI-приложении.

Когда использовать прямой HTTP

Одна или две интеграции

Если вашему AI-агенту нужно вызывать только один API (например, запрос к базе данных), накладные расходы на запуск MCP-сервера не нужны. Прямой HTTP-вызов проще и состоит из меньшего числа компонентов.

Вам также не нужно писать запрос вручную. Конструктор API Action по описанию на естественном языке читает документированный REST API, генерирует метод, URL, параметры и описание, а затем позволяет протестировать реальный ответ перед включением.

Максимальный контроль над запросами

MCP-серверы скрывают HTTP-детали. Если вам нужен точный контроль над построением запроса (конкретные заголовки, параметры строки запроса, подписание запросов или нестандартная аутентификация), прямой HTTP дает этот контроль без борьбы со слоем абстракции.

Операции, чувствительные к задержке

Если важна каждая миллисекунда (например, голосовые агенты реального времени, где вызовы инструментов должны завершаться в рамках строгих временных бюджетов), удаление слоя MCP убирает один hop.

HTTP-вызовы вне AI

Если HTTP-вызов не инициируется AI-агентом (например, cron-задача на бэкенде, которая синхронизирует данные), MCP не имеет отношения к задаче. MCP специально спроектирован для коммуникации AI с инструментами. Обычные бэкенд-сервисы должны использовать обычные HTTP-клиенты.

Гибридный подход

Многие production-системы используют оба подхода. Паттерн:

  • MCP для интеграций с инструментами, которые AI-агент вызывает во время диалогов (поиск в CRM, создание тикетов, запросы к knowledge base)
  • Прямой HTTP для внутренних операций бэкенда, вебхуков и взаимодействия между системами

Так Quickchat AI работает внутри. Платформа поддерживает как HTTP Request Actions (прямые API-вызовы с шаблонизацией параметров), так и Remote MCP Actions (подключения к внешним MCP-серверам). Вы выбираете подходящий способ для каждой интеграции:

Тип интеграцииРекомендуемый подход
Простой API-вызов с известными параметрамиHTTP Request Action
Сложная интеграция с несколькими связанными инструментамиRemote MCP Action
Сторонний сервис с существующим MCP-серверомRemote MCP Action
Внутренний API с кастомной аутентификациейHTTP Request Action
Настраиваемый пользователем инструментRemote MCP Action

Подробное сравнение того, как это работает на практике, включая различия между OpenAI GPT Actions и MCP, см. в статье GPT Actions vs MCP.

Схема принятия решения

Используйте эту блок-схему для выбора:

  1. Инструмент вызывает AI-агент? Если нет (это операция бэкенда), используйте прямой HTTP.
  2. Сколько внешних инструментов вам нужно? Если 1-2, прямой HTTP проще. Если 3+, рассмотрите MCP.
  3. Существует ли готовый MCP-сервер для сервиса? Если да, его использование экономит время разработки.
  4. Нужно ли, чтобы интеграция работала на нескольких AI-платформах? Если да, MCP обеспечивает переносимость.
  5. Критична ли задержка (бюджет менее 100ms на вызовы инструментов)? Если да, измерьте накладные расходы MCP и примите решение по результатам.
  6. Разные команды отвечают за разные интеграции? Если да, модель MCP «один сервер на интеграцию» помогает четко разграничить ответственность.

На практике, если вы создаете AI-агента, которому нужно взаимодействовать с внешними сервисами, MCP все чаще становится выбором по умолчанию. Экосистема готовых серверов уже достаточно велика, чтобы часто можно было начать без написания серверного кода.

Дополнительные материалы

Quickchat AI Quickchat AI Ask Quickchat AI a question