Дата публикации
ai_products

MCP для разработчиков: как Model Context Protocol превращает ИИ‑агентов в полноценные приложения

Что нового

Microsoft обновила и расширила бесплатный курс MCP for Beginners по протоколу Model Context Protocol (MCP). Это не просто документация, а полноценная учебная программа с кодом на шести языках и акцентом на безопасность.

Ключевые изменения:

  1. Полное выравнивание с актуальной спецификацией MCP

    • Курс синхронизирован со спецификацией MCP Specification 2025-11-25.
    • Убрали все ссылки на старые версии спецификации (2025-03-26 и 2025-06-18) во всех модулях: безопасность, транспорт, real-time search, sampling, stdio‑server.
    • Провели gap‑анализ: курс покрывает все актуальные примитивы протокола:
      • Sampling — урок 3.14 и Advanced Topics.
      • Elicitation (включая URL‑режим) — Core Concepts и Protocol Features.
      • Roots — Introduction, Core Concepts и Root Contexts.
      • Tasks (экспериментальные, долгие операции) — Core Concepts и Protocol Features.
      • Tool Annotations (readOnlyHint / destructiveHint) — Core Concepts и Protocol Features.
  2. Актуальные SDK и рабочие примеры
    Авторы прошлись по всем образцам кода и проверили их на свежих версиях SDK:

    • TypeScript:
      • @modelcontextprotocol/sdk обновлён до 1.29.0.
      • tsc --noEmit проходит без ошибок — API McpServer и StdioServerTransport актуальны.
    • Python:
      • Проверка в отдельном виртуальном окружении с mcp[cli] версии 1.27.2.
      • FastMCP.list_tools() корректно возвращает примерные инструменты add и subtract.
    • Во всех лабораторных работах обновлены минимальные версии SDK, например: mcp>=1.26.0, заново сгенерированы lock‑файлы.
  3. Жёсткий проход по безопасности
    Разработчики прошли по всем зависимостям и коду и добились отчёта npm audit с 0 уязвимостей во всех проверенных директориях.

    Что конкретно сделали:

    • Закрыли транзитивные проблемы npm в MCP Inspector, OpenAI‑клиенте и SDK:
      • обновили @modelcontextprotocol/inspector до 0.22.0,
      • зафиксировали пропатченный shell-quote.
    • Исправили реальную уязвимость уровня OWASP A03 (command injection):
      • инструмент open_in_vscode раньше вызывал subprocess.run(..., shell=True),
      • теперь он запускает бинарник напрямую, без shell, что закрывает инъекцию через метасимволы.
    • В Python‑части аудит через pip-audit и фиксация уязвимой транзитивной werkzeug на версию >=3.1.6.
  4. Новые уроки и расширение программы
    Добавили несколько практических модулей:

    • 5.17 Adversarial Multi-Agent Reasoning — три агента: два спорят, один судит, все работают через общие MCP‑инструменты (web_search + run_python).
      • Есть диаграмма в Mermaid,
      • оркестраторы на Python, TypeScript и C#,
      • примеры задач: поиск галлюцинаций, threat modeling, ревью API‑дизайна.
    • 3.12 MCP Hosts — конфигурация MCP‑хостов для Claude Desktop, VS Code, Cursor, Cline, Windsurf. Включает JSON‑шаблоны и таблицу сравнения транспортов.
    • 3.13 MCP Inspector — как отлаживать инструменты, ресурсы и промпты через инспектор.
    • 4.1 Pagination — паттерны курсорной пагинации на Python, TypeScript и Java.
    • 5.16 Protocol Features — прогресс‑уведомления, отмена запросов, шаблоны ресурсов, управление жизненным циклом.
  5. Ребрендинг продуктов Microsoft

    • Azure AI Foundry теперь называется Microsoft Foundry.
    • AI Toolkit (AITK) переименован в Microsoft Foundry Toolkit Extension for VS Code.
      Курс уже использует новые названия, что важно, если вы ищете актуальные интерфейсы и меню.
  6. Полноценный капстоун из 13 лабораторных по PostgreSQL
    Финальный модуль — это последовательный путь от архитектуры и row‑level security до деплоя в Azure Container Apps и мониторинга через Application Insights.
    Внутри: проектирование схемы БД, сервер на FastMCP, векторный поиск через pgvector и Azure OpenAI, тесты, Docker‑сборка и продакшн‑мониторинг.

Как это работает

MCP как «USB‑C» для ИИ‑агентов

Model Context Protocol решает классическую проблему: LLM вроде GPT‑4o или Claude 3 умеют рассуждать, но ничего не знают о ваших БД, API и файлах. Обычно приходится писать кучу «клеевого» кода под каждую интеграцию.

MCP вводит единый протокол, через который любой MCP‑совместимый клиент (Claude Desktop, VS Code, Cursor, GitHub Copilot и другие) может подключаться к MCP‑серверу с вашими инструментами и данными.

До MCP:

  • у вас есть M ИИ‑приложений и N сервисов,
  • нужно писать M×N интеграций.

С MCP:

  • вы один раз оформляете сервис как MCP‑сервер,
  • любой MCP‑клиент сразу может его использовать.

Базовая архитектура MCP

Протокол строится на простой модели клиент–сервер и небольшом наборе примитивов:

  • Tools (инструменты) — функции, которые модель может вызывать:

    • запрос в БД,
    • отправка письма,
    • запуск кода,
    • вызов внутреннего API.
  • Resources (ресурсы) — данные, которые сервер отдаёт для контекста:

    • файлы,
    • записи в БД,
    • документы.
  • Prompts (промпты) — переиспользуемые шаблоны подсказок с параметрами.

  • Sampling — сервер может попросить LLM‑клиента сгенерировать ответ. Это нужно, чтобы строить сложные сценарии, где сервер и модель «сотрудничают».

  • Elicitation — сервер запрашивает у пользователя структурированный ввод в середине задачи. Например, форму с полями, а не свободный текст.

  • Roots — чёткие границы, где сервер имеет право работать:

    • какие директории доступные,
    • какие ресурсы можно трогать.
      Это основа для принципа наименьших привилегий.

Обмен идёт по JSON‑RPC. Поддерживаются два транспорта:

  • stdio — локальный процесс (например, когда MCP‑сервер запускается рядом с VS Code или Claude Desktop),
  • streamable HTTP — удалённые сервера.

Если вы пишете код по спецификации MCP, ваш сервер автоматически совместим со всем MCP‑экосистемой.

Пример минимального MCP‑сервера на Python (FastMCP)

# server.py — a minimal MCP server with two tools
from mcp.server.fastmcp import FastMCP

# Name your server; this identifies it to MCP clients
mcp = FastMCP("Calculator")

@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers and return the result."""
    return a + b

@mcp.tool()
def subtract(a: int, b: int) -> int:
    """Subtract b from a and return the result."""
    return a - b

if __name__ == "__main__":
    # Run over stdio so local hosts (VS Code, Claude Desktop) can connect
    mcp.run()

Ключевой момент: вы просто декорируете функции @mcp.tool(). Весь протокольный «транспорт» прячется внутрь FastMCP.

Docstring‑описания нужны не для красоты. MCP отдаёт их модели, и от качества описания зависит, поймёт ли LLM, когда и как вызывать инструмент.

Пример MCP‑сервера на TypeScript

// server.ts — minimal MCP server in TypeScript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({ name: "Calculator", version: "1.0.0" });

// Register a tool with a typed input schema
server.tool(
  "add",
  { a: z.number(), b: z.number() },
  async ({ a, b }) => ({
    content: [{ type: "text", text: String(a + b) }],
  })
);

// Connect over stdio and start listening
const transport = new StdioServerTransport();
await server.connect(transport);

Здесь zod задаёт строгую схему входных данных. Это помогает и модели, и вам: меньше ошибок, понятные контракты.

Подключение MCP‑сервера к VS Code

Когда сервер запущен, его подключает MCP‑хост. Типичный конфиг для VS Code выглядит так:

{
  "servers": {
    "calculator": {
      "command": "python",
      "args": ["server.py"]
    }
  }
}
``

Урок 3.12 показывает аналогичные JSON‑конфиги для **Claude Desktop, Cursor, Cline и Windsurf**, а 3.13 — как прогонять инструменты через **MCP Inspector** до подключения к хосту.

### Структура курса

Курс построен как пошаговое путешествие с кодом на **C#, Java, JavaScript, Python, Rust и TypeScript**.

- **Foundations (Модули 0–2)**:  
  - Introduction,  
  - Core Concepts,  
  - Security.  

- **Building (Модуль 3)** — Getting Started, 15 уроков:  
  - первый сервер и клиент,  
  - клиенты LLM,  
  - интеграция с VS Code,  
  - stdio и HTTP‑стриминг,  
  - тестирование, деплой, аутентификация,  
  - MCP‑хосты, Inspector, sampling, MCP‑приложения.

- **Growing (Модули 4–5)** — Practical Implementation и Advanced Topics, 17 уроков:  
  - интеграция с Azure,  
  - OAuth2,  
  - Microsoft Entra ID,  
  - масштабирование,  
  - мультимодальность,  
  - context engineering,  
  - кастомные транспорты,  
  - adversarial multi‑agent reasoning.

- **Mastery (Модули 6–11)**:  
  - Community Contributions,  
  - Lessons from Early Adoption,  
  - Best Practices,  
  - Case Studies,  
  - воркшоп по Microsoft Foundry Toolkit,  
  - 13‑лабораторный PostgreSQL‑капстоун.

## Что это значит для вас

### Для AI‑инженеров

Если вы строите агентов, MCP фактически превращается в **стандартный слой интеграции**.

Что вы получаете:

- Один протокол вместо зоопарка SDK.  
  - Вместо того чтобы по‑новой реализовывать вызов инструментов в каждом фреймворке, вы пишете MCP‑сервер.  
  - Дальше его могут использовать разные клиенты: от Claude Desktop до GitHub Copilot.

- Готовый набор приёмов для продакшна:  
  - **sampling** для сложных сценариев,  
  - **roots** для безопасных границ,  
  - **elicitation** для пошаговых форм,  
  - **routing и scaling** через отдельные модули,  
  - **multi‑agent паттерны** с конфликтующими агентами и арбитром.

- Практику по безопасности:  
  - примеры исправления command injection,  
  - аудит зависимостей,  
  - работа с OAuth2 и Entra ID.  

Если вы уже пишете агентов поверх GPT‑4o, Claude 3 или других крупных моделей, MCP помогает вынести всю логику инструментов в независимый слой. Это снижает риск vendor lock‑in и облегчает миграции.

Где MCP **особенно полезен**:

- внутренние ассистенты для команд разработки и DevOps,  
- сложные пайплайны с несколькими моделями и сервисами,  
- системы, где нужно жёсткое разграничение доступа по директориям и ресурсам,  
- сценарии, где ассистент должен работать с реальными БД и API, а не только с файлами.

Когда MCP **можно не трогать**:

- если вы делаете разовый прототип без интеграции с внешними системами,  
- если у вас один простой скрипт и одна модель, и вы не планируете масштабировать или переиспользовать инструменты,  
- если вы работаете только через готовый UI (например, просто чат в браузере) и не пишете код вокруг.

### Для разработчиков приложений

MCP уже встроен в инструменты, которыми вы пользуетесь каждый день:

- **VS Code**,  
- **GitHub Copilot**,  
- **Claude Desktop**,  
- **Cursor**,  
- другие редакторы и IDE.

Если вы научитесь писать MCP‑серверы, вы сможете:

- Подключить свои:
  - внутренние REST/GraphQL API,  
  - базы данных,  
  - CI/CD пайплайны,  
  - системы мониторинга  
  к ассистентам прямо в редакторе кода.

- Делать это **безопасно** с первого дня:  
  - использовать **roots**, чтобы ограничивать директории и ресурсы,  
  - помечать инструменты `readOnlyHint` или `destructiveHint`, чтобы клиенты могли предупреждать перед разрушительными действиями,  
  - не пропускать пользовательский ввод через shell,  
  - следить за зависимостями через `npm audit` и `pip-audit`,  
  - настраивать OAuth2 и Entra ID на примерах.

Где MCP особенно практичен для разработчика:

- Автоматизация рутинных задач в проекте: генерация кода, миграции, отчёты.  
- Интеграция Copilot/Claude с вашим CI/CD: запуск пайплайнов, просмотр логов, откаты.  
- Наблюдаемость: ассистент, который ходит в Prometheus, Grafana, Application Insights.

Где MCP может быть избыточен:

- маленькие скрипты и утилиты, которые не нужно подключать к ИИ‑ассистентам,  
- проекты, где политика безопасности не разрешает никакие внешние протоколы или LLM‑клиенты.

### Для студентов и начинающих инженеров

У MCP сейчас редкое окно возможностей:

- Технология ещё формируется, но уже есть **официальная спецификация** и **поддержка в популярных инструментах**.  
- Курс бесплатный, поддерживается **Microsoft**, и есть код на **шести языках**.  
- Финальный PostgreSQL‑капстоун из **13 лабораторных** — это полноценный проект для портфолио, а не «тудушка на React».  
- Контент переведён более чем на **50 языков**, порог входа низкий.

Если вы хотите показать работодателю что‑то более серьёзное, чем чат‑бот «для всего», MCP‑проект с БД, безопасностью и деплоем в Azure выглядит гораздо убедительнее.

### Доступность и ограничения

Курс лежит на GitHub и доступен по короткой ссылке:  
**https://aka.ms/mcp-for-beginners** (редиректит в репозиторий `microsoft/mcp-for-beginners`).

GitHub официально не блокирует Россию, но некоторые связанные сервисы Microsoft (Azure, отдельные AI‑сервисы) могут быть недоступны или работать нестабильно без VPN.  

Сам протокол MCP и примеры серверов (Python, TypeScript и т.д.) можно запускать локально без доступа к облаку. Для модулей с Azure, Entra ID и деплоем в Microsoft Foundry или Azure Container Apps, скорее всего, понадобится VPN и аккаунт в экосистеме Microsoft.

## Место на рынке

Прямых цифр по скорости или стоимости MCP по сравнению с другими подходами в материале нет, но можно чётко описать его позицию.

MCP — это **протокол интеграции**, а не модель вроде GPT‑4o или Claude 3. Его ближайшие аналоги — это:

- проприетарные схемы tool calling в конкретных LLM‑API,  
- кастомные RPC‑слои, которые команды пишут сами для своих агентов.

Чем MCP отличается от «каждый пишет свой протокол»:

- **Стандартизация**:  
  - один протокол, совместимый с несколькими клиентами (Claude Desktop, VS Code, Cursor, GitHub Copilot и т.д.),  
  - меньше кода под каждый конкретный продукт.

- **Языковая нейтральность**:  
  - официальный и поддерживаемый стек на **C#, Java, JavaScript, Python, Rust, TypeScript**,  
  - вы не привязаны к одному языку или фреймворку.

- **Встроенная модель безопасности**:  
  - `roots`,  
  - tool annotations (`readOnlyHint`, `destructiveHint`),  
  - чёткие рекомендации по работе с shell и зависимостями.

Если сравнивать с полностью кастомным решением:

- MCP, скорее всего, **быстрее в разработке**, потому что не нужно изобретать протокол и клиентскую сторону.  
- Производительность на уровне сети и JSON‑RPC будет зависеть от вашей реализации, но MCP не навязывает тяжёлых слоёв поверх.

Если вы уже глубоко завязаны на один вендор (например, только на OpenAI‑API или только на Anthropic‑стек), MCP даёт шанс вынести интеграции в отдельный слой и не переписывать всё при смене модели или клиента.

## Установка / Как запустить

### Получить курс и код

Репозиторий курса:  
**https://aka.ms/mcp-for-beginners** → `https://github.com/microsoft/mcp-for-beginners.git`

Рекомендуемый способ клонирования (чтобы не тянуть переводы):

```bash
git clone --filter=blob:none --sparse https://github.com/microsoft/mcp-for-beginners.git
cd mcp-for-beginners
git sparse-checkout set --no-cone "/*" "!translations" "!translated_images"

Дальше можно идти в урок 3.1 и поднимать свой первый сервер на любимом языке.

Пример: минимальный сервер на Python (FastMCP)

# server.py — a minimal MCP server with two tools
from mcp.server.fastmcp import FastMCP

# Name your server; this identifies it to MCP clients
mcp = FastMCP("Calculator")

@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers and return the result."""
    return a + b

@mcp.tool()
def subtract(a: int, b: int) -> int:
    """Subtract b from a and return the result."""
    return a - b

if __name__ == "__main__":
    # Run over stdio so local hosts (VS Code, Claude Desktop) can connect
    mcp.run()

Дальше настраиваете MCP‑хост, например, в VS Code:

{
  "servers": {
    "calculator": {
      "command": "python",
      "args": ["server.py"]
    }
  }
}

Пример: минимальный сервер на TypeScript

// server.ts — minimal MCP server in TypeScript
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";

const server = new McpServer({ name: "Calculator", version: "1.0.0" });

// Register a tool with a typed input schema
server.tool(
  "add",
  { a: z.number(), b: z.number() },
  async ({ a, b }) => ({
    content: [{ type: "text", text: String(a + b) }],
  })
);

// Connect over stdio and start listening
const transport = new StdioServerTransport();
await server.connect(transport);

SDK в курсе проверен на версии 1.29.0 для TypeScript и 1.27.2 для Python (mcp[cli]), в лабораторных работах стоят пины mcp>=1.26.0 и актуальные lock‑файлы.

Дальше по курсу

Рекомендованный маршрут:

  1. Пройти урок 3.1 и поднять минимальный сервер.
  2. Протестировать инструменты через MCP Inspector (урок 3.13).
  3. Подключить сервер к VS Code и/или Claude Desktop (урок 3.12).
  4. Перейти к продвинутым темам: пагинация (4.1), protocol features (5.16), multi‑agent reasoning (5.17).
  5. Взяться за 13‑лабораторный капстоун с PostgreSQL, pgvector и Azure OpenAI.

MCP уже становится связующей тканью между ИИ‑ассистентами и реальными системами. Чем раньше вы разберётесь с протоколом и его экосистемой, тем проще будет строить сложные агенты, которые действительно умеют работать с вашими данными и инфраструктурой.


Читайте также