Anthropic Engineering Blog Перевод на русский

Выполнение кода с Model Context Protocol

Как AI-агенты могут эффективно взаимодействовать с тысячами инструментов, используя меньше токенов через выполнение кода

98.7%
Экономия токенов
1000+
Инструментов MCP
Возможностей

Рекомендуем оригинал

Эта статья представляет собой подробный перевод и анализ оригинального блога Anthropic. Мы настоятельно рекомендуем ознакомиться с оригинальной публикацией.

Почему это важно?

  • Революционный подход к взаимодействию AI-агентов с инструментами
  • Решение критической проблемы масштабирования агентных систем
  • Открытый стандарт MCP меняет индустрию AI-разработки
  • Практические примеры из реального опыта команды Anthropic

Что такое Model Context Protocol?

Model Context Protocol (MCP) MCP — открытый протокол для подключения AI-агентов к внешним системам. Позволяет агентам взаимодействовать с любыми инструментами через единый интерфейс. — это открытый стандарт для подключения AI-агентов к внешним системам. Традиционно для подключения агентов к инструментам и данным требовалась индивидуальная интеграция для каждой пары, что создавало фрагментацию и дублирование усилий.

Эволюция подключения агентов

Без MCP

Каждый агент требует отдельной интеграции с каждым инструментом

N агентов × M инструментов = N×M интеграций

С MCP

Единый протокол открывает доступ ко всей экосистеме

N агентов + M инструментов = N+M интеграций

Стремительное принятие MCP

  • Тысячи MCP-серверов созданы сообществом с момента запуска в ноябре 2024
  • SDK доступны для всех основных языков программирования
  • Индустрия приняла MCP как де-факто стандарт для подключения агентов

Проблемы избыточного потребления токенов

По мере масштабирования использования MCP возникают два типичных паттерна, которые увеличивают стоимость и задержку агентов:

1 Определения инструментов перегружают контекстное окно

Большинство MCP-клиентов загружают все определения инструментов заранее непосредственно в контекст, представляя их модели через прямой синтаксис вызова инструментов.

Примеры определений
// Пример: Определение инструмента Google Drive
gdrive.getDocument
    Описание: Извлекает документ из Google Drive
    Параметры:
        documentId (обязательный, string): ID документа для извлечения
        fields (опциональный, string): Конкретные поля для возврата
    Возвращает: Объект документа с заголовком, содержимым, метаданными, правами доступа и т.д.

// Пример: Определение инструмента Salesforce
salesforce.updateRecord
    Описание: Обновляет запись в Salesforce
    Параметры:
        objectType (обязательный, string): Тип объекта Salesforce (Lead, Contact, Account и т.д.)
        recordId (обязательный, string): ID записи для обновления
        data (обязательный, object): Поля для обновления с новыми значениями
    Возвращает: Обновленный объект записи с подтверждением

Проблема

Описания инструментов занимают больше места в контекстном окне, увеличивая время отклика и затраты. В случаях, когда агенты подключены к тысячам инструментов, им нужно обработать сотни тысяч токенов еще до чтения запроса.

2 Промежуточные результаты инструментов потребляют дополнительные токены

Большинство MCP-клиентов позволяют моделям напрямую вызывать MCP-инструменты. Например, запрос: "Загрузи транскрипт моей встречи из Google Drive и прикрепи его к лиду в Salesforce"

Поток вызовов
// Модель делает вызовы:

// Шаг 1: Получить документ
ВЫЗОВ ИНСТРУМЕНТА: gdrive.getDocument(documentId: "abc123")
    возвращает "Обсуждали цели Q4...\n[полный текст транскрипта]"
    (загружается в контекст модели)

// Шаг 2: Обновить запись (транскрипт проходит через контекст СНОВА)
ВЫЗОВ ИНСТРУМЕНТА: salesforce.updateRecord(
    objectType: "SalesMeeting",
    recordId: "00Q5f000001abcXYZ",
    data: { 
        "Notes": "Обсуждали цели Q4...\n[полный текст транскрипта снова]" 
    }
)
(модель должна записать весь транскрипт в контекст еще раз)

Проблема

Каждый промежуточный результат должен проходить через модель. В этом примере полный транскрипт встречи проходит через контекст дважды.

Для 2-часовой встречи это может означать обработку дополнительных 50,000 токенов. Еще большие документы могут превысить лимиты контекстного окна, нарушая рабочий процесс.

При работе с большими документами или сложными структурами данных модели чаще допускают ошибки при копировании данных между вызовами инструментов.

Традиционный поток работы MCP-клиента

MCP Сервер

Предоставляет инструменты

MCP Клиент

Загружает все определения

LLM

Обрабатывает все через контекст

Все определения инструментов и промежуточные результаты проходят через контекстное окно модели

Решение: Выполнение кода с MCP

С учетом того, что среды выполнения кода становятся все более распространенными для агентов, решением является представление MCP-серверов как API-кодов, а не прямых вызовов инструментов. Агент может затем писать код для взаимодействия с MCP-серверами.

Ключевые преимущества

  • Агенты загружают только нужные инструменты
  • Данные обрабатываются в среде выполнения перед передачей модели
  • Сокращение использования токенов на 98.7%

Подход с файловым деревом

Один из способов реализации — генерация файлового дерева всех доступных инструментов из подключенных MCP-серверов:

Структура
servers/
├── google-drive/
│   ├── getDocument.ts
│   ├── ... (другие инструменты)
│   └── index.ts
├── salesforce/
│   ├── updateRecord.ts
│   ├── ... (другие инструменты)
│   └── index.ts
└── ... (другие серверы)

Каждый инструмент соответствует файлу с типизированным интерфейсом:

getDocument.ts
// ./servers/google-drive/getDocument.ts
import { callMCPTool } from "../../../client.js";

interface GetDocumentInput {
  documentId: string;
}

interface GetDocumentResponse {
  content: string;
}

/* Читает документ из Google Drive */
export async function getDocument(
  input: GetDocumentInput
): Promise {
  return callMCPTool(
    'google_drive__get_document', 
    input
  );
}

Пример: Google Drive → Salesforce

Теперь наш пример "Google Drive → Salesforce" становится простым кодом:

С выполнением кода
// Читаем транскрипт из Google Docs и добавляем в Salesforce
import * as gdrive from './servers/google-drive';
import * as salesforce from './servers/salesforce';

// Получаем транскрипт (данные остаются в среде выполнения)
const transcript = (
  await gdrive.getDocument({ documentId: 'abc123' })
).content;

// Обновляем Salesforce (транскрипт проходит через контекст только раз)
await salesforce.updateRecord({
  objectType: 'SalesMeeting',
  recordId: '00Q5f000001abcXYZ',
  data: { Notes: transcript }
});

Без выполнения кода

Токенов: ~150,000

Транскрипт проходит: 2 раза через контекст

Определений загружено: Все (~1000 инструментов)

С выполнением кода

Токенов: ~2,000

Транскрипт проходит: 0 раз (в среде выполнения)

Определений загружено: Только нужные (2 инструмента)

Экономия: 98.7% токенов

Агент обнаруживает инструменты, исследуя файловую систему: перечисляет директорию ./servers/, находит доступные серверы (например, google-drive и salesforce), затем читает конкретные файлы инструментов, которые ему нужны.

Cloudflare опубликовала аналогичные выводы, называя выполнение кода с MCP "Code Mode". Основная идея та же: LLM отлично справляются с написанием кода, и разработчики должны использовать это преимущество для создания агентов, которые взаимодействуют с MCP-серверами более эффективно.

Преимущества выполнения кода с MCP

Прогрессивное раскрытие

Модели отлично справляются с навигацией по файловым системам. Представление инструментов как кода позволяет моделям читать определения инструментов по требованию.

// Поиск инструментов
const tools = await searchTools({
  query: "salesforce",
  detail: "name_and_description"
});

// Загрузка только нужных
import * as salesforce from './servers/salesforce';

Контекстно-эффективные результаты

При работе с большими наборами данных агенты могут фильтровать и преобразовывать результаты в коде перед возвратом.

// Фильтрация в среде выполнения
const allRows = await gdrive.getSheet({ 
  sheetId: 'abc123' 
});
const pending = allRows.filter(
  row => row["Status"] === 'pending'
);
console.log(`Найдено ${pending.length} заказов`);

Мощное управление потоком

Циклы, условия и обработка ошибок выполняются с помощью привычных паттернов кода.

// Ожидание события с циклом
let found = false;
while (!found) {
  const messages = await slack.getChannelHistory({ 
    channel: 'C123456' 
  });
  found = messages.some(
    m => m.text.includes('deployment complete')
  );
  if (!found) await sleep(5000);
}

Операции с сохранением приватности

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

// PII токенизируется автоматически
const sheet = await gdrive.getSheet({ 
  sheetId: 'abc123' 
});
for (const row of sheet.rows) {
  await salesforce.updateRecord({
    data: { 
      Email: row.email,  // [EMAIL_1] в модели
      Phone: row.phone   // [PHONE_1] в модели
    }
  });
}

Персистентность состояния и навыки

Выполнение кода с доступом к файловой системе позволяет агентам сохранять состояние между операциями.

// Сохранение промежуточных результатов
const leads = await salesforce.query({ 
  query: 'SELECT Id, Email FROM Lead' 
});
await fs.writeFile(
  './workspace/leads.csv', 
  leads.map(l => `${l.Id},${l.Email}`).join('\n')
);

// Сохранение навыков для переиспользования
// В ./skills/save-sheet-as-csv.ts
export async function saveSheetAsCsv(id) { ... }

Важные компромиссы

Выполнение кода добавляет собственную сложность, которую следует учитывать.

  • Требуется безопасная среда с песочницей
  • Необходимы ограничения ресурсов
  • Требуется мониторинг выполнения
  • Дополнительные операционные затраты

Ключевой вывод

Преимущества выполнения кода — снижение затрат на токены, меньшая задержка и улучшенная композиция инструментов — следует взвешивать относительно затрат на реализацию.

Сравнение подходов: Anthropic MCP vs Cloudflare Code Mode

Характеристика Anthropic MCP с выполнением кода Cloudflare Code Mode
Основная концепция Универсальный протокол для подключения агентов к инструментам через открытый стандарт Режим работы агентов, где код становится основным интерфейсом взаимодействия
Представление инструментов Файловое дерево с TypeScript-модулями для каждого инструмента API-интерфейсы, доступные через код в среде выполнения Workers
Загрузка определений Прогрессивная
Агент читает только нужные инструменты из файловой системы
По требованию
Загружаются при обращении к API
Обработка данных В песочнице выполнения кода, промежуточные результаты не проходят через модель В среде Cloudflare Workers, данные обрабатываются на edge
Экономия токенов До 98.7%
150,000 → 2,000 токенов в примере
Сопоставимо
Аналогичные показатели экономии
Среда выполнения Требуется безопасная песочница с изоляцией процессов Cloudflare Workers (V8 Isolates) с встроенной изоляцией
Персистентность Файловая система
Сохранение состояния и навыков в файлах
Durable Objects / KV
Распределенное хранилище состояния
Приватность данных Токенизация PII
Автоматическая замена чувствительных данных токенами
Edge изоляция
Данные остаются на edge, не проходят через модель
Поиск инструментов searchTools() с параметром уровня детализации Навигация по доступным API через документацию
Управление потоком Полный контроль
Циклы, условия, async/await в TypeScript
Полный контроль
JavaScript/TypeScript в Workers
Экосистема Открытая
Тысячи MCP-серверов, SDK для всех языков
Платформенная
Интеграция с экосистемой Cloudflare
Развертывание Гибкое: локально, облако, on-premise Cloudflare Workers (edge computing)
Навыки (Skills) Встроенные
Сохранение функций с SKILL.md для переиспользования
Ручные
Требуется самостоятельная организация
Масштабируемость Зависит от инфраструктуры песочницы Глобальная
Автоматическое масштабирование на edge
Стоимость Инфраструктура песочницы + вызовы модели (значительно снижены) Cloudflare Workers pricing + вызовы модели
Сложность реализации Средняя-высокая
Требуется настройка песочницы, безопасности, мониторинга
Средняя
Использует существующую платформу Workers
Лучше для Максимальная гибкость, разнообразие инструментов, открытая экосистема Edge-приложения, глобальная латентность, интеграция с Cloudflare

Общие преимущества обоих подходов

  • Радикальное снижение потребления токенов
  • Уменьшение латентности и стоимости
  • Обработка данных в среде выполнения
  • Мощное управление потоком через код
  • Улучшенная композиция инструментов

Ключевые различия

  • MCP: Открытый протокол, независим от платформы
  • Code Mode: Специфичен для Cloudflare Workers
  • MCP: Файловая система для навыков
  • Code Mode: Edge-native хранилище
  • MCP: Тысячи существующих серверов
  • Code Mode: Глобальное развертывание на edge

Заключение

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

Применение проверенных паттернов

Хотя многие проблемы здесь кажутся новыми — управление контекстом, композиция инструментов, персистентность состояния — у них есть известные решения из разработки программного обеспечения.

Выполнение кода применяет эти устоявшиеся паттерны к агентам, позволяя им использовать привычные конструкции программирования для более эффективного взаимодействия с MCP-серверами.

Присоединяйтесь к сообществу

Если вы реализуете этот подход, мы призываем вас делиться своими находками с сообществом MCP.

Благодарности

Оригинальная статья написана Adam Jones и Conor Kelly. Благодарности Jeremy Fox, Jerome Swannack, Stuart Ritchie, Molly Vorwerck, Matt Samuels и Maggie Vo за обратную связь по черновикам статьи.


Перевод на русский язык выполнен для образовательных целей. Все права на оригинальный материал принадлежат Anthropic.