Model Context Protocol (MCP): що це таке, як влаштований «USB-C для штучного інтелекту» та як підняти свій перший сервер
🇬🇧 Read this article in English
Згадайте комп’ютери кінця 1990-х років: щоб підключити мишу, потрібен був порт PS/2. Для клавіатури — інший DIN-роз’єм. Для принтера — важкий паралельний порт LPT, для модема — послідовний COM-порт, а для джойстика — гігантський Game Port. Кожен виробник заліза мав власні драйвери, кабелі та протоколи.
Справжня революція відбулася тоді, коли індустрія домовилася про єдиний універсальний стандарт — USB, який згодом еволюціонував у компактний USB-C.
До кінця 2024 року світ штучного інтелекту перебував у точнісінько такому ж первісному хаосі.
Уявіть ситуацію: у вас є десятки мовних моделей (Claude від Anthropic, GPT-4 від OpenAI, локальні LLM через Ollama/Llama.cpp) і сотні джерел даних та інструментів (бази даних PostgreSQL/MySQL, репозиторії GitHub, консольні утиліти, файлова система, Slack, Jira). Щоб подружити $M$ моделей з $N$ інструментами, інженерам доводилося створювати $M \times N$ індивідуальних інтеграцій! Кожен фреймворк (LangChain, LlamaIndex, AutoGen) винаходив свій власний формат опису функцій (Function Calling).
Усе змінилося, коли компанія Anthropic представила Model Context Protocol (MCP) — відкритий відкритий стандарт, який миттєво охрестили «USB-C для штучного інтелекту».
Сьогодні детально розберемося, як влаштований протокол MCP під капотом, чому його підтримали всі лідери ринку (від Cursor і Claude Desktop до локальних агентів), як він перетворює текстову нейромережу на повноцінного автономного інженера і як за 5 хвилин створити свій перший MCP-сервер на Python.
Мал. 1. Архітектура екосистеми MCP: клієнтський додаток взаємодіє з ізольованими серверами через уніфікований протокол JSON-RPC
Чому саме MCP? Концепція проблеми $M \times N$
До появи протоколу підключення інструментів виглядало як заплутаний клубок спагеті-коду:
flowchart TD
subgraph OldWay["Старий підхід: Хаос індивідуальних інтеграцій"]
LLM1[Claude] --> API1[PostgreSQL Connector]
LLM1 --> API2[GitHub API Script]
LLM2[OpenAI / GPT] --> API3[LangChain Tool]
LLM2 --> API4[Custom Slack Bot]
LLM3[Local Ollama] --> API5[Bash Execution Wrapper]
end
Якщо оновлювалося API бази даних чи змінювався формат виклику функцій у новій моделі — ламалися всі залежні проєкти.
З Model Context Protocol задача спрощується до $M + N$:
- Розробник інструменту (наприклад, PostgreSQL чи GitHub) пише один єдиний MCP-сервер.
- Розробник ШІ-додатка (наприклад, Cursor, Claude Desktop чи IDE) реалізує підтримку MCP-клієнта.
- Будь-який клієнт отримує можливість миттєво підключати будь-який сервер без зміни жодного рядка коду!
Архітектура: Як це працює зсередини
Протокол базується на перевіреному часом форматі повідомлень JSON-RPC 2.0 та ділиться на три основні компоненти:
- MCP Host (Хост / Клієнт):
Додаток, з яким взаємодіє користувач. Це може бути Claude Desktop, Cursor IDE, Zed, розширення для VS Code або ваш власний скрипт на базі локальної моделі. Хост відповідає за запуск MCP-серверів та координацію контексту. - MCP Client (Клієнтська бібліотека):
Внутрішній рушій всередині хоста, який встановлює пряме 1-до-1 з’єднання з кожним MCP-сервером. - MCP Server (Сервер інструментів):
Легковажний процес (на Node.js чи Python), який безпосередньо звертається до цільової системи (бази даних, Git, файлової системи) і надає клієнту чітко описані можливості.
Два типи транспорту (Transport Layer)
stdio(Стандартний ввід/вивід):
Клієнт запускає MCP-сервер як дочірній локальний процес і обмінюється JSON-повідомленнями через стандартні потокиstdin/stdout. Це максимально швидко, безпечно і не потребує відкриття мережевих портів (ідеально для десктопних програм).SSE(Server-Sent Events over HTTP):
Сервер працює як самостійний мережевий сервіс (наприклад, у Docker на віддаленому VPS), надсилаючи повідомлення через HTTP SSE. Ідеально для корпоративних серверів баз даних та хмарних сервісів.
Три кити MCP: Tools, Resources та Prompts
Будь-який MCP-сервер може надавати моделі три типи можливостей:
| Примітив | Що це таке? | Аналог у програмуванні | Приклад |
|---|---|---|---|
Tools (Дії) | Функції, які модель може викликати для виконання реальних дій. | POST / PUT методи або RPC-функції | Виконати SQL-запит SELECT, створити issue в GitHub, перезапустити Docker-контейнер |
Resources (Дані) | Контекстна інформація тільки для читання, схожа на файли. | GET методи або статика | Схема бази даних, системний лог /var/log/nginx/error.log, документація API |
Prompts (Шаблони) | Готові інтерактивні сценарії та інструкції, зашиті в сервер. | Шаблонізатор / Macros | Промпт «Проаналізуй інцидент за останню годину» з автоматичним підтягуванням логів |
Практика: Підключаємо готові MCP-сервери за 2 хвилини
Екосистема MCP вже налічує сотні готових офіційних та ком’юніті-серверів.
Покажемо, як підключити готові сервери до Claude Desktop або сумісного клієнта. Усі налаштування зберігаються в простому JSON-файлі:
- У Windows:
%APPDATA%\Claude\claude_desktop_config.json - У macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - У Linux:
~/.config/Claude/claude_desktop_config.json
Приклад конфігурації: Робота з файлами, Git та PostgreSQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"C:\\Users\\Username\\Projects"
]
},
"postgres": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-postgres",
"postgresql://postgres:secretpassword@localhost:5432/mydb"
]
},
"github": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-github"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_yourTokenHere"
}
}
}
}
Що відбувається після перезапуску клієнта?
У вікні чату з ШІ з’являється піктограма інструментів (молоточок). Тепер ви можете написати:
«Подивись на схему таблиці users у PostgreSQL, напиши міграцію для додавання колонки is_verified і створи під це пулреквест у моєму репозиторії GitHub».
Модель сама зробить SQL-запит до вашої локальної бази, створить гілку в Git і відправить PR, використовуючи стандартизовані виклики MCP!
Створюємо власний MCP-сервер на Python за 5 хвилин
Хочете дати нейромережі доступ до специфічної внутрішньої системи чи моніторингу вашого сервера? Завдяки бібліотеці FastMCP від команди mcp, написати свій сервер простіше, ніж Flask-додаток!
1. Встановлюємо SDK:
1
pip install mcp
2. Пишемо файл server.py:
Створимо сервер, який дозволить ШІ перевіряти навантаження сервера (RAM/CPU) та перевіряти статус інфраструктури:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import psutil
from mcp.server.fastmcp import FastMCP
# Ініціалізуємо MCP-сервер з назвою "system-monitor"
mcp = FastMCP("System Monitor")
@mcp.tool()
def get_system_metrics() -> str:
"""Повертає поточне завантаження процесора (CPU) та використання оперативної пам'яті (RAM)."""
cpu_percent = psutil.cpu_percent(interval=1)
ram = psutil.virtual_memory()
return (
f"CPU Load: {cpu_percent}%\n"
f"RAM Used: {ram.used / (1024**3):.2f} GB / {ram.total / (1024**3):.2f} GB ({ram.percent}%)"
)
@mcp.tool()
def check_disk_space(path: str = "/") -> str:
"""Перевіряє вільне та зайняте місце на вказаному диску."""
disk = psutil.disk_usage(path)
return (
f"Disk '{path}': Free {disk.free / (1024**3):.2f} GB of {disk.total / (1024**3):.2f} GB "
f"({disk.percent}% used)"
)
if __name__ == "__main__":
# Запускаємо через стандартний транспорт stdio
mcp.run(transport="stdio")
3. Додаємо свій сервер у конфігурацію клієнта:
1
2
3
4
5
6
7
8
{
"mcpServers": {
"my-system-monitor": {
"command": "python",
"args": ["/path/to/server.py"]
}
}
}
Усе! Завдяки декоратору @mcp.tool() FastMCP автоматично згенерував схему валідації JSON Schema з docstring функцій і типів Python. Модель розуміє, які параметри приймати і що саме повертає функція.
Безпека: Чому MCP безпечніший за прямий доступ до Bash?
Багато розробників запитують: «А хіба не можна було просто дати моделі доступ до виконання довільних команд у терміналі eval() / bash?».
Можна, але це величезна загроза безпеці. Надавши моделі сліпий доступ до терміналу, ви ризикуєте отримати виконану галюцинацію на кшталт rm -rf / або витік ключів через curl на підозрілі сайти.
Переваги безпеки моделі MCP:
- Принцип найменших привілеїв (PoLP): Сервер експонує лише чітко регламентовані функції. Якщо сервер вміє тільки
get_user_by_id, модель фізично не зможе дропнути таблицю чи вийти за межі контракту. - Контроль користувача (Human-in-the-Loop): Клієнт показує користувачеві спливаюче вікно з точними аргументами виклику і вимагає натиснути кнопку «Approve» перед кожною небезпечною дією (записом файлу чи відправкою транзакції).
- Ізоляція процесів: Сервер може крутитися всередині безпечного контейнера Docker або пісочниці, не маючи прямого доступу до вашої операційної системи.
Підсумки: нова ера агентного ШІ
Model Context Protocol — це не просто чергова модна бібліотека, це індустріальний стандарт, який вирішив фундаментальну проблему зв’язку між інтелектом нейромереж та реальними даними.
Завдяки MCP:
- ШІ-асистенти перестали бути ізольованими «чатами в браузері» і перетворилися на реальних цифрових колег, які бачать ваш код, бази даних та сервери.
- Інструменти пишуться один раз і працюють у будь-якому клієнті сьогодні, завтра і через 5 років.
Якщо ви плануєте інтегрувати ШІ у свої робочі процеси чи сервіси — створення власного MCP-сервера є найкращою і найбільш далекоглядною інвестицією в сучасний DevOps та бекенд.
