MCP для ИИ— Model Context Protocol: полный гайд
📌 Что такое MCP
MCP (Model Context Protocol) — открытый стандарт который позволяет ИИ подключаться к внешним инструментам, сервисам и данным через единый протокол.
Аналогия: USB-C для ИИ. До USB-C у каждого устройства был свой кабель — зарядка отдельно, наушники отдельно, передача данных отдельно. USB-C сделал один разъём для всего. MCP делает то же самое — один стандарт подключения ИИ к чему угодно.
Без MCP: хочешь подключить Claude к Gmail — пишешь отдельный коннектор. К GitHub — ещё один. К базе данных — третий. 100 сервисов = 100 интеграций.
С MCP: каждый сервис делает один MCP-сервер. Любой ИИ который понимает MCP — подключается автоматически.
🧠 Зачем это нужно
ИИ сам по себе — это мозг без рук. Он может думать, анализировать, генерировать текст. Но не может:
- Прочитать твою почту
- Отправить сообщение в Telegram
- Запустить команду на сервере
- Посмотреть что в базе данных
- Создать файл на диске
MCP даёт ИИ "руки" — возможность взаимодействовать с реальным миром через стандартный протокол.
🏗 Как это устроено
Три компонента:
┌─────────────────┐
│ MCP Client │ ← ИИ-приложение (Claude, ChatGPT, VS Code)
│ (ИИ) │ Знает протокол MCP, умеет вызывать инструменты
└────────┬────────┘
│ MCP Protocol (JSON-RPC)
│
┌────────▼────────┐
│ MCP Server │ ← Программа-посредник (Node.js / Python скрипт)
│ (Мост) │ Описывает какие инструменты доступны
└────────┬────────┘
│ Любой способ (HTTP, файлы, команды, API)
│
┌────────▼────────┐
│ Сервис/Данные │ ← То к чему подключаемся
│ │ Gmail, GitHub, база данных, VPS, сайт...
└─────────────────┘
MCP Client (ИИ) — спрашивает "какие инструменты есть?" и вызывает их.
MCP Server (мост) — отвечает "у меня есть send_email, read_inbox, search_mail" и выполняет вызовы.
Сервис — конечная точка. Gmail, файловая система, API, что угодно.
🔑 Ключевое отличие от обычного API
Обычный API: Программист заранее пишет код: "вызови GET /users, получи JSON, распарси поле name". Всё жёстко прописано.
MCP: ИИ сам обнаруживает какие инструменты доступны, читает их описания, и решает когда и как вызвать. Динамически, без захардкоженного кода.
API: Программист → пишет код → вызывает endpoint
MCP: ИИ → видит список инструментов → сам решает что вызвать
Аналогия: API — это меню ресторана, ты сам выбираешь блюдо и делаешь заказ. MCP — ты говоришь "хочу что-то рыбное", а официант сам знает что есть на кухне и приносит подходящее.
📦 Что может быть MCP-сервером
MCP-сервер — это просто программа. Внутри она может делать что угодно:
Работа с API:
- Gmail — читать/отправлять письма
- GitHub — коммитить, создавать issues
- Telegram — отправлять сообщения
- Slack — писать в каналы
- Google Calendar — управлять событиями
Без API — прямая работа:
- Парсинг сайтов — скрейпить цены, новости через Puppeteer
- Файловая система — читать/писать файлы на диске
- Базы данных — SQL-запросы напрямую
- Командная строка — запускать bash-команды
- Docker — управлять контейнерами
- Мониторинг — проверять CPU, память, диск
MCP описывает только формат общения между ИИ и сервером. Что происходит внутри сервера — полная свобода.
💻 Где запускается MCP-сервер
Два варианта:
Локально (на твоём компьютере)
Claude Desktop / VS Code
│
│ stdin/stdout (прямое общение между процессами)
│
MCP-сервер (Python/Node.js скрипт на твоём маке)
│
└── делает что нужно (парсит, читает файлы, и т.д.)
Не нужен интернет. Два процесса на одном компе общаются напрямую. Самый простой вариант.
Удалённо (на VPS или в облаке)
Claude.ai (в браузере)
│
│ HTTPS (через интернет)
│
MCP-сервер (на VPS, доступен по URL)
│
└── делает что нужно
Нужен сервер с публичным URL. Зато доступен откуда угодно.
🛠 Как написать свой MCP-сервер
Простейший пример на Node.js
Создай файл my-server.js:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new McpServer({
name: "my-tools",
version: "1.0.0",
});
// Регистрируем инструмент
server.tool(
"hello", // имя инструмента
"Говорит привет пользователю", // описание (ИИ читает это)
{ name: { type: "string" } }, // параметры
async ({ name }) => {
return {
content: [{ type: "text", text: `Привет, ${name}!` }]
};
}
);
// Запускаем
const transport = new StdioServerTransport();
await server.connect(transport);
Установка:
npm init -y
npm install @modelcontextprotocol/sdk
Это всё. 20 строк — и у тебя рабочий MCP-сервер с одним инструментом.
Пример на Python
from mcp.server import Server
from mcp.server.stdio import stdio_server
server = Server("my-tools")
@server.tool()
async def hello(name: str) -> str:
"""Говорит привет пользователю"""
return f"Привет, {name}!"
async def main():
async with stdio_server() as (read, write):
await server.run(read, write)
import asyncio
asyncio.run(main())
pip install mcp
⚙️ Как подключить к Claude Desktop
После написания сервера, нужно сказать Claude Desktop где его найти.
Открой файл конфигурации:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Windows:
%APPDATA%\Claude\claude_desktop_config.json
Добавь свой сервер:
{
"mcpServers": {
"my-tools": {
"command": "node",
"args": ["/path/to/my-server.js"]
}
}
}
Перезапусти Claude Desktop — инструмент появится автоматически. Теперь можешь сказать Claude "скажи привет Артуру" и он вызовет твой инструмент.
🔧 Практические примеры MCP-серверов
Управление Docker-контейнерами
server.tool(
"docker_ps",
"Показать запущенные контейнеры",
{},
async () => {
const { execSync } = await import('child_process');
const output = execSync('docker ps --format "{{.Names}} {{.Status}}"').toString();
return { content: [{ type: "text", text: output }] };
}
);
server.tool(
"docker_restart",
"Перезапустить контейнер",
{ name: { type: "string", description: "Имя контейнера" } },
async ({ name }) => {
const { execSync } = await import('child_process');
execSync(`docker restart ${name}`);
return { content: [{ type: "text", text: `Контейнер ${name} перезапущен` }] };
}
);
Теперь можешь сказать Claude: "перезапусти контейнер pentestudy" → он вызовет docker_restart.
Парсинг сайта
server.tool(
"parse_page",
"Спарсить текст с веб-страницы",
{ url: { type: "string", description: "URL страницы" } },
async ({ url }) => {
const response = await fetch(url);
const html = await response.text();
// Простой парсинг — убираем теги
const text = html.replace(/<[^>]+>/g, ' ').replace(/\s+/g, ' ').trim();
return { content: [{ type: "text", text: text.slice(0, 5000) }] };
}
);
"Спарси главную страницу exploit-db.com" → получишь текст.
Работа с SQLite базой
import Database from 'better-sqlite3';
const db = new Database('/path/to/database.db');
server.tool(
"query_db",
"Выполнить SQL-запрос к базе данных",
{ sql: { type: "string", description: "SQL запрос (только SELECT)" } },
async ({ sql }) => {
if (!sql.trim().toUpperCase().startsWith('SELECT')) {
return { content: [{ type: "text", text: "Разрешены только SELECT запросы" }] };
}
const rows = db.prepare(sql).all();
return { content: [{ type: "text", text: JSON.stringify(rows, null, 2) }] };
}
);
"Покажи последние 10 записей из таблицы users" → Claude сам напишет SQL и вызовет инструмент.
Чтение логов сервера
import fs from 'fs';
server.tool(
"read_logs",
"Прочитать последние строки лог-файла",
{
file: { type: "string", description: "Путь к логу" },
lines: { type: "number", description: "Количество строк" }
},
async ({ file, lines = 50 }) => {
const content = fs.readFileSync(file, 'utf-8');
const lastLines = content.split('\n').slice(-lines).join('\n');
return { content: [{ type: "text", text: lastLines }] };
}
);
"Покажи последние 20 строк из /var/log/syslog" → готово.
🎯 Применение в твоём случае
MCP для PenteStudy
Можно написать MCP-сервер который:
"Создай шпаргалку про Wireshark"
→ MCP вызывает POST /api/save на твоём VPS
→ Шпаргалка появляется на сайте
"Покажи список шпаргалок"
→ MCP вызывает GET /api/sheets
→ Claude показывает список
"Удали шпаргалку 08-nmap"
→ MCP вызывает DELETE /api/save?slug=08-nmap
Ты будешь управлять сайтом прямо из чата с Claude. Без браузера, без админки.
MCP для VPS-менеджмента
"Статус всех контейнеров" → docker ps
"Перезапусти pentestudy" → docker restart pentestudy
"Покажи логи Caddy" → docker logs caddy --tail 50
"Сколько памяти свободно" → free -h
MCP для OSINT
"Найди информацию о домене example.com"
→ whois, dig, nslookup, проверка на Shodan
"Просканируй 10.0.0.1"
→ запуск nmap через MCP
→ Claude анализирует результат
→ предлагает следующие шаги
MCP для Telegram-бота
"Опубликуй пост в канал pentestudy"
→ MCP отправляет через Telegram Bot API
"Покажи последние сообщения из группы"
→ MCP читает через Telethon
🔌 Встроенные MCP в Claude.ai
В настройках Claude.ai уже есть готовые MCP-коннекторы:
- Gmail — читать и отправлять письма
- Google Calendar — управлять событиями
- Google Drive — работать с файлами
- GitHub — коммитить, issues, pull requests
- Slack — отправлять сообщения
Подключение: Settings → Connected Apps → Connect. Авторизация через OAuth — даёшь доступ к аккаунту.
Также есть Add Custom Connector — подключить свой MCP-сервер по URL.
🔒 Безопасность MCP
MCP-сервер имеет полный доступ к тому к чему ты его подключил. Если дал доступ к файловой системе — он может читать/писать любые файлы. Если к bash — выполнять любые команды.
Правила безопасности:
Ограничивай возможности — не давай MCP-серверу больше чем нужно. Нужен только SELECT к базе? Не разрешай DELETE.
Не ставь чужие MCP-серверы без проверки — MCP-сервер это код который выполняется на твоей машине. Вредоносный сервер может украсть данные.
Подтверждение действий — Claude всегда спрашивает разрешение перед выполнением действия через MCP. Не подтверждай вслепую.
Логирование — записывай что MCP-сервер делает. Особенно если он запускает команды или пишет файлы.
📋 Готовые MCP-серверы (open source)
Не нужно писать всё с нуля — много готового:
Официальные от Anthropic:
- filesystem — работа с файлами
- postgres — запросы к PostgreSQL
- github — полная интеграция с GitHub
- slack — отправка сообщений
- puppeteer — управление браузером
- google-drive — работа с документами
Репозиторий: github.com/modelcontextprotocol/servers
Сообщество: Тысячи MCP-серверов от разработчиков — для Notion, Jira, AWS, Docker, Kubernetes, и десятков других сервисов.
⚡ Быстрый старт (5 минут)
Если хочешь попробовать прямо сейчас:
Установи Claude Desktop (если ещё нет)
Склонируй готовый сервер:
git clone https://github.com/modelcontextprotocol/servers.git
cd servers/src/filesystem
npm install
- Добавь в конфиг Claude Desktop:
{
"mcpServers": {
"filesystem": {
"command": "node",
"args": ["/path/to/servers/src/filesystem/dist/index.js", "/Users/YOUR_USER/Documents]
}
}
}
Перезапусти Claude Desktop
Скажи: "Покажи файлы в моей папке Documents"
Claude покажет список файлов. Можешь просить читать, создавать, искать файлы — всё через MCP.
🔮 Куда движется MCP
MCP создан Anthropic в 2024 году. К 2026 году его приняли OpenAI, Google, Microsoft, Amazon. Это становится стандартом индустрии.
Что впереди:
- Удалённые MCP-серверы с масштабированием (сейчас в основном локальные)
- Маркетплейсы MCP-серверов (как магазины приложений)
- Стандартизация безопасности и аутентификации
- Агенты которые сами находят и подключают нужные MCP-серверы
Для разработчика и пентестера: умение писать MCP-серверы — это навык который будет только расти в цене. Ты создаёшь инструменты которыми ИИ пользуется как руками.
⚠️ Важные моменты
MCP ≠ магия — это просто протокол общения. Всю работу делает твой код внутри сервера.
MCP ≠ безопасность — протокол сам по себе не защищает. Безопасность — ответственность разработчика сервера.
MCP ≠ автономность — Claude всегда спрашивает подтверждение перед действиями. Он не будет удалять файлы без твоего "да".
MCP — это стандарт — как HTTP для веба. Знание MCP делает тебя разработчиком который может подключить ИИ к чему угодно.