Back

Как подключить вашу существующую API к LLM через MCP: подробное руководство

Как подключить вашу существующую API к LLM через MCP: подробное руководство

Интеграция больших языковых моделей (LLM) с вашим существующим API может быть сложной задачей. Традиционно вам потребовались бы пользовательские коннекторы или плагины для конкретных платформ, чтобы обеспечить доступ ИИ к вашему сервису. Model Context Protocol (MCP) предлагает лучший способ.

Что такое протокол контекста модели (MCP)?

MCP — это открытый стандарт от Anthropic (теперь проект с открытым исходным кодом), который стандартизирует способ подключения ИИ-ассистентов к внешним данным и инструментам. Представьте MCP как универсальный адаптер — “порт USB-C” для ИИ-приложений. Вместо создания одноразовых интеграций для каждой модели или платформы, вы один раз предоставляете доступ к своему API через MCP, и любая LLM с поддержкой MCP может его использовать.

Ключевые преимущества MCP

  • Стандартизация: Замена фрагментированных интеграций единым, последовательным протоколом
  • Повторное использование: Создайте коннектор для вашего API один раз в виде MCP-сервера, и несколько ИИ-клиентов смогут его использовать
  • Контроль: MCP-сервер работает в вашей среде, поэтому вы можете обеспечить безопасность и управлять тем, к чему модель имеет доступ

MCP действует как универсальная система плагинов для LLM, предоставляя структурированный способ для ИИ вызывать функции или получать данные из внешних источников.

Понимание примитивов MCP

MCP использует три основных концепции для предоставления функциональности:

  1. Ресурсы (Resources): Это подобно конечным точкам данных только для чтения. Ресурс идентифицируется URI (например, todo://list) и предоставляет данные модели. Ресурсы предназначены для загрузки контекста в модель (например, получение документа, записи базы данных или списка задач). Они похожи на GET-запросы и обычно не изменяют состояние.
  2. Инструменты (Tools): Это действия или операции, которые модель может вызывать — по сути, функции с параметрами и возвращаемыми значениями, которые LLM может вызвать. Инструменты могут иметь побочные эффекты или выполнять вычисления. Думайте об инструментах как о “функциях, которые ИИ может вызывать”.
  3. Подсказки (Prompts): MCP позволяет определять многоразовые шаблоны разговоров или рабочие процессы. Подсказки подобны предопределенным фрагментам разговора, которые сервер может предоставить клиенту.

В итоге: ресурсы загружают данные для модели, инструменты выполняют действия, а подсказки направляют взаимодействие.

Реализация: пошаговое руководство

Давайте рассмотрим, как предоставить доступ к простому REST API для ИИ-ассистента с использованием MCP.

Шаг 1: Настройка примера простого REST API

Мы будем использовать базовый API списка задач в качестве примера. Вот минимальная реализация с использованием Flask:

from flask import Flask, request, jsonify

app = Flask(__name__)
tasks = [ {"id": 1, "title": "Sample Task", "done": False} ]

@app.route('/tasks', methods=['GET'])
def get_tasks():
    # Return the full list of tasks
    return jsonify(tasks)

@app.route('/tasks', methods=['POST'])
def create_task():
    # Add a new task from the JSON request body
    data = request.get_json()
    new_task = {
        "id": len(tasks) + 1,
        "title": data.get("title"),
        "done": False
    }
    tasks.append(new_task)
    return jsonify(new_task), 201

# Run with: flask run

Этот API имеет две конечные точки:

  • GET /tasks - Получить все задачи
  • POST /tasks - Добавить новую задачу

В реальном сценарии это может быть любой существующий API с базой данных.

Шаг 2: Создание MCP-сервера для обертывания API

Теперь мы создадим MCP-сервер на Python, который предоставит доступ к нашему API задач для LLM:

Сначала установите пакет MCP:

pip install "mcp[cli]"

Затем создайте файл todo_mcp_server.py:

from mcp.server.fastmcp import FastMCP
import requests  # we'll use requests to call our REST API

# Initialize an MCP server with a descriptive name
mcp = FastMCP("To-Do API MCP Server")

# Define a Resource for reading tasks (like a GET endpoint)
@mcp.resource("todo://list")
def list_tasks() -> list:
    """Fetch all to-do tasks from the API."""
    response = requests.get("http://localhost:5000/tasks")
    response.raise_for_status()
    return response.json()  # return the list of tasks

# Define a Tool for adding a new task (like a POST operation)
@mcp.tool()
def add_task(title: str) -> dict:
    """Add a new task via the API and return the created task."""
    payload = {"title": title}
    response = requests.post("http://localhost:5000/tasks", json=payload)
    response.raise_for_status()
    return response.json()  # return the new task data

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

Давайте разберем, что происходит:

  • Мы создаем экземпляр FastMCP с именем "To-Do API MCP Server", который настраивает сервер и регистрирует наши инструменты/ресурсы.
  • Мы используем @mcp.resource("todo://list") для предоставления ресурса, который возвращает список задач. Это соответствует нашей конечной точке GET API.
  • Мы используем @mcp.tool() для предоставления инструмента, который добавляет новую задачу. Это соответствует нашей конечной точке POST API.
  • Строки документации для каждой функции важны - LLM увидит эти описания при принятии решения о том, как использовать инструменты.
  • Мы запускаем сервер с помощью mcp.run(transport="stdio"), который взаимодействует через стандартный ввод-вывод (хорошо для локальной разработки).

На данный момент у нас есть MCP-сервер с двумя возможностями: ресурс todo://list (для получения задач) и инструмент add_task (для создания задачи). Они соответствуют функциональности нашего API. По сути, мы обернули REST API с помощью MCP.

Шаг 3: Запуск и тестирование MCP-сервера локально

Перед запуском MCP-сервера убедитесь, что ваш Flask API работает (например, с помощью flask run).

Теперь запустите MCP-сервер в режиме разработки:

mcp dev ./todo_mcp_server.py

Команда mcp dev запускает интерактивную панель разработки в вашем браузере. Эта панель позволяет:

  1. Увидеть имя вашего MCP-сервера и доступные инструменты/ресурсы
  2. Протестировать ресурс todo://list - он должен вернуть текущий список задач
  3. Протестировать инструмент add_task - введите заголовок задачи и выполните его
  4. Проверить результаты и увидеть логи в панели истории

Эта панель неоценима для разработки и отладки. Она использует тот же протокол MCP, который использовал бы реальный LLM-клиент, но с графическим интерфейсом для тестирования.

Шаг 4: Подключение MCP-сервера к LLM-клиенту

Теперь давайте подключим живую LLM к нашему MCP-серверу. Несколько ИИ-ассистентов и инструментов поддерживают MCP, включая:

Подключение с помощью Claude Desktop

Приложение Claude Desktop от Anthropic имеет встроенную поддержку локальных MCP-серверов. Для интеграции:

mcp install ./todo_mcp_server.py

Это регистрирует ваш сервер в Claude. В интерфейсе Claude вы должны увидеть доступный “To-Do API MCP Server”. Теперь, когда вы ведете разговор с Claude, вы можете:

  • Спросить: “Перечисли мои задачи” - Claude будет использовать ресурс todo://list
  • Запросить: “Добавь в список задач покупку молока” - Claude будет использовать инструмент add_task

Claude будет управлять запуском MCP-сервера и маршрутизацией запросов, когда ИИ решит его использовать.

Подключение с помощью IDE Cursor

Cursor - это редактор кода с ИИ-ассистентом, который поддерживает MCP. Для подключения:

  1. Перейдите в настройки Cursor в разделе “Model Context Protocol”
  2. Добавьте ваш MCP-сервер, указав путь к todo_mcp_server.py
  3. Укажите транспорт (stdIo)

После подключения Cursor обнаружит инструменты и ресурсы вашего сервера. Затем вы можете задавать ассистенту Cursor вопросы, например “Какие задачи в моем списке дел?” или “Добавь ‘написать статью в блог’ в мои задачи.”

Общие замечания о LLM-клиентах

Точные шаги подключения различаются в зависимости от клиента:

  • Для Claude Desktop используйте mcp install или пользовательский интерфейс приложения
  • Для Cursor настройте сервер в настройках
  • Другие среды могут иметь различные подходы

После подключения проверьте, задав ИИ запрос, который поощряет использование инструментов. Многие MCP-клиенты визуально указывают, когда ИИ использует инструмент.

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

Сравнение MCP с традиционными подходами

Давайте сравним, чем отличается использование MCP для предоставления доступа к API от других методов интеграции:

Прямые вызовы API LLM (без MCP)

Без MCP вы могли бы:

  • Использовать вызов функций или плагины, которые специфичны для платформы (привязаны к OpenAI или конкретной среде)
  • Встраивать детали API в промпты, что подвержено ошибкам - модель может галлюцинировать конечные точки или отправлять неправильные форматы

GraphQL или другие языки запросов

С GraphQL вы могли бы заставить LLM создавать запросы, но:

  • Модель все равно должна знать схему и синтаксис запросов
  • Вам, вероятно, потребуется пользовательский интеграционный слой для проверки запросов модели

Преимущество MCP

Использование MCP абстрагирует эти детали в стандартизированный интерфейс:

  • LLM не нужно знать HTTP-методы или синтаксис запросов
  • Она запрашивает у MCP-сервера доступные инструменты и ресурсы, которые имеют понятные для человека имена и описания
  • Процесс фокусируется на возможностях, а не на низкоуровневых вызовах
  • Один и тот же MCP-сервер работает для любого клиента, поддерживающего протокол

Вот подробное сравнение:

Аспект Традиционная интеграция API Интеграция с использованием MCP Стандартизация Нет единого стандарта - у каждой платформы свой метод интеграции или формат плагина Один открытый стандарт для всех платформ - создайте один раз, используйте везде Обнаружение действий LLM должна быть проинформирована о доступных конечных точках/запросах, или они жестко закодированы LLM-клиенты могут программно перечислять доступные инструменты/ресурсы из MCP-сервера Доступ к данным Ответы API часто отправляются через промпты, достигая ограничений контекста Ресурсы MCP загружают данные непосредственно в контекст LLM управляемым образом Усилия по кодированию Высокие - пользовательские HTTP-вызовы, парсинг и обработка ошибок для каждой модели Упрощенные - SDK MCP обрабатывает детали протокола; вы пишете функции на Python Безопасность и контроль Модель может генерировать произвольные HTTP-вызовы, если не ограничена MCP-сервер действует как привратник - вы решаете, что именно предоставляется Гибкость Трудно адаптировать к новым LLM или случаям использования Очень гибкий - модели могут оркестрировать несколько вызовов MCP; легко добавлять новые инструменты

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

Заключение

Предоставление доступа к вашему существующему REST API для LLM через MCP может значительно упростить интеграцию. Вместо создания одноразовых подключений для каждой платформы ИИ, вы реализуете протокол контекста модели один раз и получаете совместимость с любым поддерживающим клиентом.

MCP предоставляет стандартизированный, безопасный и гибкий способ соединения ИИ и ваших данных. Он превращает ваш API в модульный компонент, который любой продвинутый ИИ может использовать ответственно и интеллектуально. Это открывает новые возможности: ваш ассистент на базе LLM может комбинировать ваш API с другими MCP-коннекторами, все в рамках одной унифицированной структуры.

Часто задаваемые вопросы

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

Сама LLM не «говорит» на MCP – это комбинация модели и MCP-клиента, которая обеспечивает эту возможность. По состоянию на 2025 год, Claude, Cursor, Zed, Replit и другие интегрируют MCP-клиенты. Также существует официальная клиентская библиотека Python, если вы хотите создать скрипт для взаимодействия между LLM и MCP-сервером без полноценного UI-клиента.

Они решают схожие задачи – позволяют ИИ вызывать внешние API – но MCP является открытым стандартом и работает с различными системами ИИ. Плагины ChatGPT являются проприетарными для интерфейса ChatGPT от OpenAI, а вызов функций в GPT-4 специфичен для API OpenAI. Один MCP-сервер может обслуживать множество различных моделей/клиентов.

MCP все еще относительно новый, но быстро развивающийся. С точки зрения безопасности: поскольку MCP позволяет ИИ выполнять код или получать данные, относитесь к вашему MCP-серверу с той же осторожностью, что и к API. Предоставляйте доступ только к необходимому. ИИ может вызывать только те инструменты, которые вы определили, и ничего больше. Одно из преимуществ MCP в том, что вы можете запускать сервер внутри вашего брандмауэра или локально, уменьшая уязвимость.

Python в настоящее время имеет наиболее зрелый SDK, но MCP не зависит от языка. Сам протокол (который обычно использует JSON-RPC через stdio или SSE) может быть реализован на любом языке. Существуют SDK и примеры на других языках, включая C# и JavaScript.

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