Model Context Protocol (MCP): AI-агент на Python с RAG и инструментами | 2026 | AiManual
AiManual Logo Ai / Manual.
20 Апр 2026 Инструмент

MCP от Anthropic: Собираем умного AI-агента на Python с RAG и инструментами без хаоса интеграций

Полное руководство по созданию AI-агента на Python с RAG и внешними инструментами через MCP от Anthropic. Код, сравнение с LangChain, практические примеры.

Достало уже это шаманство с интеграциями?

Помните тот момент, когда вы в десятый раз переписываете обертку для работы с базой данных, потому что Claude не понимает ваш самописный API? Или когда пытаетесь подключить поиск по документам, но модель внезапно забывает, как вызывать функцию? Знакомо? Добро пожаловать в "зоопарк интеграций" - адское место, где каждый инструмент требует свою магию, а агенты ведут себя как капризные дети.

💡
Если вы до сих пор пишете промпты с инструкциями по использованию API, остановитесь. Это 2026 год. Есть способ лучше.

Model Context Protocol: не просто протокол, а спасение

Anthropic в конце 2024 выпустила MCP - Model Context Protocol. К 2026-му это уже стандарт де-факто для подключения инструментов к AI-агентам. Представьте USB для нейросетей. Один раз описываете инструмент, и он работает с любым агентом, который поддерживает MCP.

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

Чем MCP лучше того же LangChain?

LangChain был революцией в 2023. Сейчас? Монстр с 300+ зависимостями, который ломается при каждом обновлении. Попробуйте обновить LangChain с 0.1.15 на 0.1.16 - получите 5 часов дебага.

КритерийLangChain (2026)MCP (2026)
Сложность интеграции нового инструментаОт 2 часов до 2 дней15-30 минут
Зависимости~300 прямых и косвенных1 (mcp-sdk)
Поддержка разных моделейТребует адаптеровНативный для Claude, совместим со всеми через адаптеры
Hot-reload инструментовНет (перезапуск агента)Да, в реальном времени

LangChain пытается быть всем для всех. MCP делает одну вещь: стандартизирует общение между агентом и инструментами. И делает это идеально.

Собираем агента: от нуля до работающей системы

Забудьте про тонны промптов. В 2026 году архитектура агента выглядит так: ядро (Claude 3.7 Sonnet или ваш локальный аналог), MCP-серверы с инструментами, и тонкий слой логики на Python.

1Ставим базовые компоненты

Первое - устанавливаем mcp-sdk. Не путайте с mcp-client или mcp-server - это разные пакеты. Актуальная версия на апрель 2026 - 2.1.3.

pip install mcp-sdk==2.1.3
pip install anthropic  # для Claude API
# или для локальных моделей:
# pip install openai  # для совместимого API

2Пишем первый MCP-сервер

Допустим, нам нужен доступ к базе данных. Раньше вы бы писали промпт с инструкциями по SQL. Теперь - создаем сервер:

from mcp.server import Server
from mcp.server.models import Tool
import sqlite3
import json

app = Server("database-server")

@app.list_tools()
async def list_tools() -> list[Tool]:
    return [
        Tool(
            name="query_database",
            description="Выполняет SQL-запрос к базе данных",
            input_schema={
                "type": "object",
                "properties": {
                    "query": {"type": "string", "description": "SQL-запрос"}
                },
                "required": ["query"]
            }
        )
    ]

@app.call_tool()
async def call_tool(name: str, arguments: dict) -> str:
    if name == "query_database":
        conn = sqlite3.connect("data.db")
        cursor = conn.cursor()
        cursor.execute(arguments["query"])
        result = cursor.fetchall()
        conn.close()
        return json.dumps(result)
    
    raise ValueError(f"Unknown tool: {name}")

Видите? Никаких промптов про "как работать с SQLite". Только чистый интерфейс.

3Добавляем RAG - но не как все

RAG через MCP - это не просто поиск по векторной базе. Это полноценный контекстный менеджер. Забудьте про naive RAG с кучей ложных срабатываний.

В статье "Как настроить локальный семантический поиск по коду" я подробно разбирал srag - но сегодня есть лучше.

Используем mcp-rag-server от Anthropic (обновлен в марте 2026):

# Устанавливаем готовый сервер
pip install mcp-rag-server
mcp-rag-server --directory ./docs --port 8081

Теперь агент сам решает, когда искать в документах. Не нужно писать "сначала поищи в базе знаний". MCP-сервер предоставляет инструмент `search_documents`, и модель использует его когда нужно.

4Собираем агента-оркестратора

Вот где проявляется мощь MCP. Ваш Python-код становится простым и понятным:

from mcp import Client
from anthropic import Anthropic
import asyncio

class AIAgent:
    def __init__(self, api_key):
        self.client = Anthropic(api_key=api_key)
        self.mcp_clients = []
        
    async def connect_tool(self, server_url: str):
        """Подключаем MCP-сервер с инструментами"""
        client = Client()
        await client.connect(server_url)
        self.mcp_clients.append(client)
        return client
    
    async def run(self, prompt: str):
        """Основной цикл агента"""
        # 1. Собираем все доступные инструменты
        tools = []
        for client in self.mcp_clients:
            tools.extend(await client.list_tools())
        
        # 2. Отправляем запрос к Claude с описанием инструментов
        response = self.client.messages.create(
            model="claude-3-7-sonnet-20250226",  # актуальная версия
            max_tokens=2000,
            tools=tools,
            messages=[{"role": "user", "content": prompt}]
        )
        
        # 3. Обрабатываем вызовы инструментов
        for content in response.content:
            if content.type == "tool_use":
                tool_name = content.name
                tool_args = content.input
                
                # Находим нужный MCP-клиент и выполняем
                for client in self.mcp_clients:
                    available_tools = await client.list_tools()
                    if any(t.name == tool_name for t in available_tools):
                        result = await client.call_tool(tool_name, tool_args)
                        # Отправляем результат обратно модели
                        # ...
                        break
        
        return response.content

# Использование
async def main():
    agent = AIAgent(api_key="your-key")
    await agent.connect_tool("http://localhost:8080")  # наш SQL сервер
    await agent.connect_tool("http://localhost:8081")  # RAG сервер
    
    result = await agent.run(
        "Найди в документах информацию о пользователе John и покажи его последние заказы из БД"
    )
    print(result)

Реальный пример: агент для поддержки клиентов

Представьте: пользователь пишет "мой заказ #12345 не пришел". Что делает агент?

  1. Использует RAG-сервер для поиска в FAQ и документах по доставке
  2. Через SQL-сервер запрашивает статус заказа 12345
  3. Если нужно - через email-сервер отправляет запрос в службу доставки
  4. Формирует ответ на основе всех данных

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

Важный нюанс: MCP 2.1 поддерживает "двустороннюю связь". Сервер может сам отправлять контекст агенту. Например, RAG-сервер может сказать: "Вот 3 релевантных документа по доставке", и они автоматически попадут в контекст.

А что с локальными моделями?

Claude дорог? Используйте локальные модели. MCP не привязан к Anthropic. В статье "LM Studio MCP: Запускаем AI-агента для автоматизации новостей" мы разбирали, как подключить MCP к локальным моделям.

Актуальный вариант на 2026 - использовать OpenRouter с совместимым API:

from openai import OpenAI

client = OpenAI(
    base_url="https://openrouter.ai/api/v1",
    api_key="ваш-ключ"
)

# Теперь используем с теми же MCP-серверами
# Модель Llama 3.3 70B отлично работает с MCP

Кому НЕ подходит MCP?

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

Но для 95% случаев - стартапов, внутренних инструментов, поддержки клиентов - MCP экономит сотни часов разработки.

Ошибки, которые все допускают

  • Смешивание логики в промптах: Не пишите "используй инструмент X если Y". MCP сам предоставляет инструменты, модель сама решит.
  • Игнорирование безопасности: MCP-серверы имеют доступ к вашим данным. Не забывайте про аутентификацию и ограничения прав.
  • Попытка запихнуть все в один сервер: Создавайте отдельные серверы для разных доменов. База данных - один сервер, email - другой, RAG - третий.

Хотите готовое решение? Посмотрите ai-sidekick - фреймворк с уже настроенными MCP-серверами.

Что дальше? Skills поверх MCP

MCP решает проблему "как подключить инструмент". Но есть уровень выше - Skills. В статье "Skills, MCP и сабагенты" я рассказывал, как упаковывать сложную логику в переиспользуемые компоненты.

Представьте: Skill "обработка жалобы клиента" использует 3 MCP-сервера (БД, документы, email) и имеет свою внутреннюю логику. Вы просто подключаете Skill к агенту.

Прогноз: к концу 2026 появится Marketplace для MCP-серверов и Skills. Будете покупать готовые интеграции как плагины в WordPress.

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

Начните с простого: один MCP-сервер с доступом к вашим документам. Подключите к Claude через Python. Увидите, как модель внезапно "понимает" вашу документацию без тонн примеров в промпте. Потом добавьте второй инструмент. Третий.

Через неделю у вас будет агент, о котором в 2023 году можно было только мечтать.

Подписаться на канал