Что такое MCP
Model Context Protocol (MCP) — это протокол обмена контекстом между приложениями и крупномасштабными языковыми моделями, оптимизированный под управление состоянием, согласованностью и безопасностью. MCP формализует, как передаётся history, tools, resources и метаинформация (например, источник данных, ttl контекста, trust-level) между сервером приложения и моделью.
MCP появился как набор практик в 2024–2026 годах в ответ на потребность системных интеграторов иметь контролируемый, предсказуемый и наблюдаемый поток контекста для генеративных рабочих нагрузок; это облегчает audit, replay, partial-rollbacks и мульти-модальные сценарии.
Шаг 1: создание сервера
Запуск MVP MCP-сервера занимает от 2 до 8 часов, если у вас есть базовое окружение: Linux-сервер, Node.js 18+ или Python 3.11+, Docker и 1–2 виртуальных CPU. В примере ниже я покажу переход от нуля до рабочего протокола на Node.js с экспонированным REST-API и WebSocket для real-time обновлений.
1.1 Требования и инстанс
- Операционная система: Ubuntu 22.04 LTS или 24.04 (рекомендуется обновлённый образ в 2025–2026).
- Ресурсы: 2 vCPU, 4 GB RAM для тестовой среды; 4–8 vCPU и 8–32 GB RAM для продакшена с высокой нагрузкой.
- Порты: 8080 для HTTP, 8443 для HTTPS (если используете reverse-proxy как nginx), 9000 для WebSocket (можно использовать тот же 8080).
- Стоимость: минимальный VPS ~ $5–15/мес; управляемый экземпляр типа t4g.small или t3.small на AWS — примерно $10–20/мес при 24/7 (оценка на 2025 год).
1.2 Архитектура MCP-сервера
Минимальная логика сервера включает:
- Endpoint /mcp/v1/session — создание сессии с TTL и policy.
- Endpoint /mcp/v1/session/{id}/context — добавление или частичное обновление контекста (field-level patch).
- Endpoint /mcp/v1/session/{id}/dispatch — отправка запроса в модель с указанием layer routing и tool usage.
- WebSocket /mcp/ws — поток обновлений о состоянии обработки, tool outputs и прогрессе.
1.3 Пример: быстрый сервер на Node.js (Express + ws)
// Пример минимального MCP-сервера (Node.js 18+), файл server.js
import express from 'express';
import http from 'http';
import WebSocket from 'ws';
const app = express();
app.use(express.json());
const sessions = new Map(); // {id: {context: {...}, createdAt: ..., ttl: ...}}
app.post('/mcp/v1/session', (req, res) => {
const id = 's_' + Date.now().toString(36);
const ttl = req.body.ttl || 3600; // seconds
sessions.set(id, { context: req.body.context || {}, createdAt: Date.now(), ttl });
res.status(201).json({ id, ttl });
});
app.patch('/mcp/v1/session/:id/context', (req, res) => {
const s = sessions.get(req.params.id);
if (!s) return res.status(404).json({ error: 'session not found' });
Object.assign(s.context, req.body.patch || {});
res.json({ id: req.params.id, context: s.context });
});
app.post('/mcp/v1/session/:id/dispatch', async (req, res) => {
const s = sessions.get(req.params.id);
if (!s) return res.status(404).json({ error: 'session not found' });
// Простой flow: подготовить payload и отправить в интегратор модели (см. Шаг 3)
const payload = { session: req.params.id, context: s.context, instruction: req.body.instruction };
// Здесь мы просто эхо
res.json({ dispatched: true, payload });
});
const server = http.createServer(app);
const wss = new WebSocket.Server({ server });
wss.on('connection', (ws) => {
ws.send(JSON.stringify({ event: 'connected', ts: Date.now() }));
});
server.listen(8080, () => console.log('MCP server listening on 8080'));
Этот код — минимальный каркас. Для продакшена добавляй persistent storage (Postgres, Redis), audit-log и HTTPS через nginx или хостинг провайдер.
1.4 Хранение состояния и срок жизни (TTL)
Рекомендую хранить сессии в Redis с TTL: выставляй ttl на 3600 секунд по умолчанию для chat-сессии, 86_400 секунд (1 день) для асинхронных workflows и 30*24*3600 для audit-логов. Redis Stream или Postgres с partitioning под replay помогают хранить history для compliance до 90 дней.
MCP требует явных временных границ для каждого слоя контекста: session-ttl, turn-ttl, tool-ttl.
Шаг 2: tools и resources
В MCP «tools» — это внешние функции или API (поиск, калькулятор, база знаний), а «resources» — каналы, из которых модель может забирать факты (вики, внутренний KB, PDF-хранилище). На этом шаге мы конфигурируем, как tools объявляются, вызываются и как их результаты становятся частью model context.
2.1 Формализация tools
Определение tool включает: name, version, input-schema, output-schema, cost-estimate, cold-start-ms, access-policy. Пример JSON описание tool:
{
"name": "internal_search",
"version": "2026-01-15",
"input_schema": {"q": "string", "limit": "integer\
Комментарии (0)
Войдите или зарегистрируйтесь, чтобы оставить комментарий
Загрузка комментариев…