Что такое Model Context Protocol, зачем он нужен и какие проблемы решает. Основные концепции и терминология.
MCP — это USB для ИИ-агентов. Как USB стандартизировал подключение устройств к компьютеру, MCP стандартизирует подключение ИИ к данным и функциям.
Представьте, что вы разработчик и хотите дать вашей LLM (например, Claude) доступ к:
Без MCP вы бы делали так:
# Для каждой LLM — свой способ интеграции
class ClaudeIntegration:
def connect_to_db(self): ...
def read_files(self): ...
def call_api(self): ...
class GPTIntegration:
def connect_to_db(self): ... # Другой API!
def read_files(self): ... # Другие методы!
def call_api(self): ... # Другой формат!Проблемы:
MCP вводит стандартизированный слой между LLM и вашими системами:
┌─────────────────────────────────────────────────────────┐
│ LLM (Claude, GPT) │
└────────────────────────┬────────────────────────────────┘
│ MCP Protocol (единый стандарт)
┌────────────────────────▼────────────────────────────────┐
│ MCP Server (ваш код) │
│ ┌─────────────┬─────────────┬─────────────────────┐ │
│ │ Resources │ Tools │ Prompts │ │
│ │ (данные) │ (функции) │ (шаблоны) │ │
│ └─────────────┴─────────────┴─────────────────────┘ │
└────────────────────────┬────────────────────────────────┘
│
┌────────────────┼────────────────┐
▼ ▼ ▼
┌────────┐ ┌──────────┐ ┌─────────┐
│ Files │ │ Database │ │ API │
└────────┘ └──────────┘ └─────────┘
Преимущества:
Model Context Protocol (MCP) — это открытый протокол, который позволяет ИИ-моделям безопасно взаимодействовать с внешними системами через стандартизированный интерфейс.
MCP предоставляет три типа взаимодействия:
| Тип | Назначение | Пример |
|---|---|---|
| Resources | Доступ к данным (чтение) | Прочитать файл, получить запись из БД |
| Tools | Выполнение действий (запись/вычисления) | Отправить email, создать тикет, выполнить запрос |
| Prompts | Шаблоны взаимодействия | "Проверь код", "Напиши тест", "Сделай ревью" |
Ресурсы — это данные, к которым LLM может получить доступ.
# Пример: ресурс — файл в файловой системе
URI: file:///home/user/docs/report.md
MIME Type: text/markdown
Content: "# Отчёт\n\nСодержимое файла..."Ключевые концепции:
Инструменты — это функции, которые LLM может вызвать.
# Пример: инструмент для поиска в базе знаний
{
"name": "search_knowledge_base",
"description": "Поиск статей по ключевым словам",
"inputSchema": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "Поисковый запрос"},
"limit": {"type": "integer", "description": "Максимум результатов", "default": 5}
},
"required": ["query"]
}
}Ключевые концепции:
Промпты — это предопределённые шаблоны для взаимодействия с LLM.
# Пример: промпт для код-ревью
{
"name": "code_review",
"description": "Запросить проверку кода",
"arguments": {
"code": {"type": "string", "description": "Код для проверки"},
"language": {"type": "string", "description": "Язык программирования"}
}
}Ключевые концепции:
┌──────────────────────────────────────────────────────────────┐
│ MCP Host │
│ (приложение с LLM: Claude Desktop, IDE, кастомное приложение)│
│ ┌────────────────────────────────────────────────────────┐ │
│ │ MCP Client │ │
│ │ (устанавливает соединение, отправляет запросы) │ │
│ └────────────────────────────────────────────────────────┘ │
└──────────────────────────┬───────────────────────────────────┘
│ MCP Protocol
│ (stdio / SSE / WebSocket)
┌──────────────────────────▼───────────────────────────────────┐
│ MCP Server │
│ (ваш сервер с бизнес-логикой) │
│ ┌──────────────┬──────────────┬─────────────────────────┐ │
│ │ Resources │ Tools │ Prompts │ │
│ │ Provider │ Provider │ Provider │ │
│ └──────────────┴──────────────┴─────────────────────────┘ │
└──────────────────────────────────────────────────────────────┘
Host — это приложение, которое:
Примеры Host:
Client — компонент внутри Host, который:
Server — ваш код, который:
MCP поддерживает несколько транспортов для разных сценариев:
Как работает: MCP сервер запускается как процесс, общение через stdin/stdout.
# Запуск сервера
python mcp_server.py
# Сообщения передаются через stdin/stdout в формате JSON-RPCКогда использовать:
Преимущества:
Недостатки:
Как работает: HTTP-соединение, сервер отправляет события клиенту.
# FastAPI + SSE
@app.get("/sse")
async def sse_endpoint():
async def event_generator():
yield f"data: {message}\n\n"
return StreamingResponse(event_generator(), media_type="text/event-stream")Когда использовать:
Преимущества:
Недостатки:
Как работает: Двустороннее постоянное соединение.
# WebSocket сервер
@websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
response = await process(data)
await websocket.send_text(response)Когда использовать:
Преимущества:
Недостатки:
| Ресурс | Описание |
|---|---|
| spec.modelcontextprotocol.io | Спецификация протокола |
| github.com/modelcontextprotocol | Официальный репозиторий |
| glama.ai/mcp/servers | Каталог MCP серверов |
| Библиотека | Назначение |
|---|---|
mcp | Официальный SDK для создания MCP серверов |
mcp-python | Клиентская библиотека для подключения к серверам |
fastapi-mcp | Интеграция MCP с FastAPI |
Сообщество уже создало серверы для:
MCP проектировался с учётом безопасности:
# ❌ ПЛОХО: уязвимость SQL-инъекции
async def search_users(query: str):
cursor.execute(f"SELECT * FROM users WHERE name = '{query}'")
return cursor.fetchall()
# ✅ ХОРОШО: параметризированный запрос
async def search_users(query: str):
cursor.execute("SELECT * FROM users WHERE name = %s", (query,))
return cursor.fetchall()# ✅ Проверка прав перед выполнением инструмента
async def delete_user(user_id: int, current_user: User):
if not current_user.has_permission("users.delete"):
raise PermissionError("Недостаточно прав для удаления пользователей")
await db.users.delete(user_id)Проблема: Сотрудники тратят часы на поиск документации.
Решение: MCP сервер с доступом к Confluence/Notion.
Инструменты:
- search_docs(query, limit) — поиск статей
- get_doc(id) — получение статьи по ID
- suggest_related(query) — похожие статьи
Результат: Сотрудник спрашивает у Claude:
"Как оформить отпуск?" → Claude ищет в базе → даёт точный ответ.
Проблема: Поддержка отвечает на одинаковые вопросы.
Решение: MCP сервер с доступом к тикетам и базе знаний.
Инструменты:
- get_ticket(id) — информация о тикете
- search_solutions(query) — поиск решений
- create_response(template, data) — генерация ответа
Результат: ИИ предлагает готовые ответы операторам.
Проблема: Разработчики тратят время на рутинные DevOps-задачи.
Решение: MCP сервер с доступом к Kubernetes, логам, метрикам.
Инструменты:
- get_pod_status(namespace) — статус подов
- get_logs(pod_name, lines) — логи пода
- restart_deployment(name) — перезапуск деплоймента
Результат: Разработчик просит Claude:
"Почему упал сервис?" → Claude проверяет логи → находит ошибку.
Проблема: Менеджеры просят аналитиков делать простые выборки.
Решение: MCP сервер с безопасным доступом к PostgreSQL.
Инструменты:
- run_query(query) — выполнение SELECT-запросов (только чтение!)
- get_table_schema(table) — структура таблицы
- export_to_csv(query) — экспорт результатов
Результат: Менеджер спрашивает:
"Покажи продажи за последний квартал" → Claude формирует запрос → показывает данные.
Вы узнали основы MCP. В следующих темах курса вы:
| Концепция | Суть |
|---|---|
| MCP | Стандарт взаимодействия LLM с внешними системами |
| Resources | Доступ к данным (чтение) |
| Tools | Выполнение действий (функции) |
| Prompts | Шаблоны взаимодействия |
| Host | Приложение с LLM (Claude Desktop, IDE) |
| Server | Ваш код, предоставляющий данные/функции |
| Транспорты | stdio (локально), SSE/WebSocket (сеть) |
Следующая тема: Архитектура MCP — детальное устройство протокола, форматы сообщений, жизненный цикл сессии.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.