📌 Шпаргалка #37

MCP для ИИ— Model Context Protocol: полный гайд

✍️ pentestudy 📅 05.04.2026

📌 Что такое 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 минут)

Если хочешь попробовать прямо сейчас:

  1. Установи Claude Desktop (если ещё нет)

  2. Склонируй готовый сервер:

git clone https://github.com/modelcontextprotocol/servers.git
cd servers/src/filesystem
npm install
  1. Добавь в конфиг Claude Desktop:
{
  "mcpServers": {
    "filesystem": {
      "command": "node",
      "args": ["/path/to/servers/src/filesystem/dist/index.js", "/Users/YOUR_USER/Documents]
    }
  }
}
  1. Перезапусти Claude Desktop

  2. Скажи: "Покажи файлы в моей папке Documents"

Claude покажет список файлов. Можешь просить читать, создавать, искать файлы — всё через MCP.


🔮 Куда движется MCP

MCP создан Anthropic в 2024 году. К 2026 году его приняли OpenAI, Google, Microsoft, Amazon. Это становится стандартом индустрии.

Что впереди:

  • Удалённые MCP-серверы с масштабированием (сейчас в основном локальные)
  • Маркетплейсы MCP-серверов (как магазины приложений)
  • Стандартизация безопасности и аутентификации
  • Агенты которые сами находят и подключают нужные MCP-серверы

Для разработчика и пентестера: умение писать MCP-серверы — это навык который будет только расти в цене. Ты создаёшь инструменты которыми ИИ пользуется как руками.


⚠️ Важные моменты

MCP ≠ магия — это просто протокол общения. Всю работу делает твой код внутри сервера.

MCP ≠ безопасность — протокол сам по себе не защищает. Безопасность — ответственность разработчика сервера.

MCP ≠ автономность — Claude всегда спрашивает подтверждение перед действиями. Он не будет удалять файлы без твоего "да".

MCP — это стандарт — как HTTP для веба. Знание MCP делает тебя разработчиком который может подключить ИИ к чему угодно.

Содержание
📌 Что такое MCP 🧠 Зачем это нужно 🏗 Как это устроено 🔑 Ключевое отличие от обычного API 📦 Что может быть MCP-сервером 💻 Где запускается MCP-сервер Локально (на твоём компьютере) Удалённо (на VPS или в облаке) 🛠 Как написать свой MCP-сервер Простейший пример на Node.js Пример на Python ⚙️ Как подключить к Claude Desktop 🔧 Практические примеры MCP-серверов Управление Docker-контейнерами Парсинг сайта Работа с SQLite базой Чтение логов сервера 🎯 Применение в твоём случае MCP для PenteStudy MCP для VPS-менеджмента MCP для OSINT MCP для Telegram-бота 🔌 Встроенные MCP в Claude.ai 🔒 Безопасность MCP 📋 Готовые MCP-серверы (open source) ⚡ Быстрый старт (5 минут) 🔮 Куда движется MCP ⚠️ Важные моменты