Виконання коду за допомогою MCP: створення більш ефективних агентів
Model Context Protocol (MCP) — це відкритий стандарт для підключення агентів AI до зовнішніх систем.Підключення агентів до інструментів і даних традиційно вимагає спеціальної інтеграції для кожної пари, створюючи фрагментацію та дублюючі зусилля, що ускладнює масштабування справді підключених систем.MCP надає універсальний протокол — розробники впроваджують MCP один раз у своїх агентах, і це відкриває цілу екосистему інтеграцій.
Quick read
4 bullets- Model Context Protocol (MCP) — це відкритий стандарт для підключення агентів AI до зовнішніх систем.Підключення агентів до інструментів і даних традиційно вимагає спеціальної інтеграції для кожної пари, створюючи фрагментацію та дублюючі зусилля, що ускладнює масштабування справді підключених систем.MCP надає універсальний протокол — розробники впроваджують MCP один раз у своїх агентах, і це відкриває цілу екосистему інтеграцій.
- З моменту запуску MCP у листопаді 2024 року впровадження було швидким: спільнота створила тисячі серверів MCP, SDK доступні для всіх основних мов програмування, а галузь прийняла MCP як фактичний стандарт для підключення агентів до інструментів і даних.
- Сьогодні розробники регулярно створюють агенти з доступом до сотень або тисяч інструментів на десятках серверів MCP.Однак, оскільки кількість підключених інструментів зростає, завантаження всіх визначень інструментів наперед і передача проміжних результатів через контекстне вікно сповільнюють роботу агентів і збільшують витрати.
- У цьому блозі ми дослідимо, як виконання коду може дозволити агентам ефективніше взаємодіяти з серверами MCP, обробляючи більше інструментів і використовуючи менше маркерів.
Чому це важливо
Model Context Protocol (MCP) — це відкритий стандарт для підключення агентів AI до зовнішніх систем.Підключення агентів до інструментів і даних традиційно вимагає спеціальної інтеграції для кожної пари, створюючи фрагментацію та дублюючі зусилля, що ускладнює масштабування справді підключених систем.MCP надає універсальний протокол — розробники впроваджують MCP один раз у своїх агентах, і це відкриває цілу екосистему інтеграцій.
Builder takeaway
Anthropic published this update in the MCP lane. Use the original source for details, then compare it with related briefings before changing a roadmap, workflow, or production system.
Model Context Protocol (MCP) — це відкритий стандарт для підключення агентів AI до зовнішніх систем.Підключення агентів до інструментів і даних традиційно вимагає спеціальної інтеграції для кожної пари, створюючи фрагментацію та дублюючі зусилля, що ускладнює масштабування справді підключених систем.MCP надає універсальний протокол — розробники впроваджують MCP один раз у своїх агентах, і це відкриває цілу екосистему інтеграцій.
З моменту запуску MCP у листопаді 2024 року впровадження було швидким: спільнота створила тисячі серверів MCP, SDK доступні для всіх основних мов програмування, а галузь прийняла MCP як фактичний стандарт для підключення агентів до інструментів і даних.
Сьогодні розробники регулярно створюють агенти з доступом до сотень або тисяч інструментів на десятках серверів MCP.Однак, оскільки кількість підключених інструментів зростає, завантаження всіх визначень інструментів наперед і передача проміжних результатів через контекстне вікно сповільнюють роботу агентів і збільшують витрати.
У цьому блозі ми дослідимо, як виконання коду може дозволити агентам ефективніше взаємодіяти з серверами MCP, обробляючи більше інструментів і використовуючи менше маркерів.
Надмірне споживання маркерів інструментами робить агентів менш ефективними
У зв’язку з масштабами використання MCP існують дві загальні моделі, які можуть збільшити вартість агента та затримку:
- Визначення інструментів перевантажують контекстне вікно;
- Проміжні результати інструменту споживають додаткові жетони.
1. Визначення інструментів перевантажують контекстне вікно
Більшість клієнтів MCP завантажують усі визначення інструментів безпосередньо в контекст, відкриваючи їх для моделі за допомогою синтаксису прямого виклику інструментів.Ці визначення інструментів можуть виглядати так:
```
gdrive.getDocument
Опис: отримує документ із Google Drive
Параметри:
documentId (обов’язково, рядок): ідентифікатор документа, який потрібно отримати
поля (необов’язкові, рядок): певні поля для повернення
Повертає: об’єкт документа із заголовком, основним вмістом, метаданими, дозволами тощо.
```
```
salesforce.updateRecord
Опис: оновлює запис у Salesforce
Параметри:
objectType (обов’язково, рядок): Тип об’єкта Salesforce (Lead, Contact, Account тощо)
recordId (обов’язково, рядок): ідентифікатор запису для оновлення
дані (обов’язково, об’єкт): поля для оновлення з новими значеннями
Повертає: оновлений об’єкт запису з підтвердженням
```
Описи інструментів займають більше контекстного вікна, збільшуючи час відповіді та витрати.У випадках, коли агенти підключені до тисяч інструментів, їм потрібно буде обробити сотні тисяч токенів, перш ніж прочитати запит.
2. Проміжні результати інструменту споживають додаткові токени
Більшість клієнтів MCP дозволяють моделям безпосередньо викликати інструменти MCP.Наприклад, ви можете попросити свого агента: «Завантажте стенограму моєї зустрічі з Диска Google і прикріпіть її до потенційного клієнта Salesforce».
Модель здійснюватиме такі дзвінки:
```
ВИКЛИК ІНСТРУМЕНТУ: gdrive.getDocument(documentId: "abc123")
→ повертає "Обговорювані цілі Q4...\n[повний текст стенограми]"
(завантажується в контекст моделі)
ВИКЛИК ІНСТРУМЕНТА: salesforce.updateRecord(
objectType: "SalesMeeting",
recordId: "00Q5f000001abcXYZ",
data: { "Примітки": "Обговорювані цілі Q4...\n[виписаний повний текст стенограми]" }
)
(моделі потрібно знову записати всю транскрипцію в контекст)
```
Кожен проміжний результат повинен пройти через модель.У цьому прикладі повна стенограма виклику проходить двічі.Для 2-годинної зустрічі з продажу це може означати обробку додаткових 50 000 токенів.Навіть більші документи можуть перевищувати межі вікон контексту, порушуючи робочий процес.
З великими документами або складними структурами даних моделі можуть частіше робити помилки під час копіювання даних між викликами інструментів.
Виконання коду за допомогою MCP покращує ефективність контексту
Оскільки середовища виконання коду стають все більш поширеними для агентів, рішенням є представлення серверів MCP як кодових API, а не прямих викликів інструментів.Потім агент може написати код для взаємодії з серверами MCP.Цей підхід вирішує обидві проблеми: агенти можуть завантажувати лише ті інструменти, які їм потрібні, і обробляти дані в середовищі виконання, перш ніж передати результати назад у модель. Для цього існує кілька способів.Одним із підходів є створення дерева файлів усіх доступних інструментів із підключених серверів MCP.Ось реалізація з використанням TypeScript:
```
серверів
├── гугл-диск
│ ├── getDocument.ts
│ ├── ... (інші інструменти)
│ └── індекс.ц
├── відділ продажів
│ ├── updateRecord.ts
│ ├── ... (інші інструменти)
│ └── індекс.ц
└── ... (інші сервери)
```
Тоді кожен інструмент відповідає файлу, приблизно так:
```
// ./servers/google-drive/getDocument.ts
імпорт { callMCPTool } із "../../../client.js";
інтерфейс GetDocumentInput {
documentId: рядок;
}
інтерфейс GetDocumentResponse {
вміст: рядок;
}
/* Читання документа з Google Drive */
експорт асинхронної функції getDocument(вхід: GetDocumentInput): Promise<GetDocumentResponse> {
return callMCPTool<GetDocumentResponse>('google_drive__get_document', введення);
}
```
Наш приклад Google Drive to Salesforce, наведений вище, стає кодом:
```
// Читання стенограми з Документів Google і додавання до перспективи Salesforce
імпорт * як gdrive з './servers/google-drive';
імпорт * як salesforce з './servers/salesforce';
const transcript = (очікуйте gdrive.getDocument({ documentId: 'abc123' })).content;
await salesforce.updateRecord({
objectType: 'SalesMeeting',
recordId: '00Q5f000001abcXYZ',
дані: {Примітки: розшифровка}
});
```
Агент знаходить інструменти, досліджуючи файлову систему: перераховуючи каталог ./servers/, щоб знайти доступні сервери (наприклад, google-drive і salesforce), а потім читаючи файли конкретних інструментів, які йому потрібні (наприклад, getDocument.ts і updateRecord.ts), щоб зрозуміти інтерфейс кожного інструменту.Це дозволяє агенту завантажувати лише визначення, необхідні для поточного завдання.Це зменшує використання токенів зі 150 000 до 2 000 токенів — економія часу та витрат становить 98,7%.
Cloudflare опублікував подібні висновки, називаючи виконання коду за допомогою MCP «режимом коду».Основне розуміння те ж саме: магістратури вміють писати код, і розробники повинні скористатися цією перевагою для створення агентів, які ефективніше взаємодіють із серверами MCP.
Переваги виконання коду за допомогою MCP
Виконання коду за допомогою MCP дозволяє агентам ефективніше використовувати контекст шляхом завантаження інструментів на вимогу, фільтрації даних до того, як вони потраплять до моделі, і виконання складної логіки за один крок.Використання цього підходу також має переваги для безпеки та управління станом.
Прогресивне розкриття
Моделі чудово підходять для навігації файловими системами.Представлення інструментів у вигляді коду у файловій системі дозволяє моделям читати визначення інструментів на вимогу, а не читати їх усі заздалегідь.
Крім того, на сервер можна додати інструмент search_tools для пошуку відповідних визначень.Наприклад, під час роботи з гіпотетичним сервером Salesforce, використаним вище, агент шукає "salesforce" і завантажує лише ті інструменти, які йому потрібні для поточного завдання.Включення параметра рівня деталізації в інструмент search_tools, який дозволяє агенту вибирати необхідний рівень деталізації (наприклад, лише ім’я, ім’я та опис або повне визначення зі схемами), також допомагає агенту зберегти контекст і ефективно знаходити інструменти.
Контекстно ефективний інструмент результати
Працюючи з великими наборами даних, агенти можуть фільтрувати та перетворювати результати в код, перш ніж повертати їх.Спробуйте отримати електронну таблицю на 10 000 рядків:
```
// Без виконання коду - усі рядки проходять через контекст
ВИКЛИК ІНСТРУМЕНТУ: gdrive.getSheet(sheetId: 'abc123')
→ повертає 10 000 рядків у контексті для ручного фільтрування
// З виконанням коду - фільтр у середовищі виконання
const allRows = await gdrive.getSheet({ sheetId: 'abc123' });
const pendingOrders = allRows.filter(row =>
row["Status"] === 'очікує на розгляд'
);
console.log(`Знайдено ${pendingOrders.length} відкладених ордерів`);
console.log(pendingOrders.slice(0, 5));// Зареєструйте лише перші 5 для перегляду
```
Агент бачить п'ять рядків замість 10 000.Подібні шаблони працюють для агрегацій, об’єднань у кількох джерелах даних або вилучення певних полів – і все це без роздування вікна контексту.
Більш потужний і контекстно-ефективний потік керування
Цикли, умови й обробку помилок можна виконати за допомогою знайомих шаблонів коду, а не згрупувати окремі виклики інструментів.Наприклад, якщо вам потрібно сповіщення про розгортання в Slack, агент може написати: ```
let found = false;
while (!знайдено) {
const messages = await slack.getChannelHistory({ канал: 'C123456' });
знайдено = messages.some(m => m.text.includes('розгортання завершено'));
if (!found) await new Promise(r => setTimeout(r, 5000));
}
console.log('Отримано сповіщення про розгортання');
```
Цей підхід більш ефективний, ніж чергування між викликами інструментів MCP і командами сну через цикл агента.
Крім того, можливість написати умовне дерево, яке виконується, також економить затримку «часу до першого маркера»: замість того, щоб чекати, поки модель оцінить інструкцію if, агент може дозволити середовищу виконання коду зробити це.
Операції збереження конфіденційності
Коли агенти використовують виконання коду з MCP, проміжні результати за замовчуванням залишаються в середовищі виконання.Таким чином, агент бачить лише те, що ви явно реєструєте або повертаєте, тобто дані, якими ви не бажаєте ділитися з моделлю, можуть проходити через ваш робочий процес без входження в контекст моделі.
Для ще більш конфіденційних робочих навантажень джгут агентів може автоматично токенізувати конфіденційні дані.Наприклад, уявіть, що вам потрібно імпортувати контактні дані клієнта з електронної таблиці в Salesforce.Агент пише:
```
const sheet = await gdrive.getSheet({ sheetId: 'abc123' });
for (const row of sheet.rows) {
await salesforce.updateRecord({
objectType: 'Lead',
recordId: row.salesforceId,
дані: {
Електронна пошта: row.email,
Телефон: row.phone,
Назва: row.name
}
});
}
console.log(`Оновлені потенційні клієнти ${sheet.rows.length}`);
```
Клієнт MCP перехоплює дані та токенізує ідентифікаційну інформацію, перш ніж вона досягне моделі:
```
// Що побачить агент, якщо він зареєструє sheet.rows:
[
{ salesforceId: '00Q...', електронна адреса: '[EMAIL_1]', телефон: '[PHONE_1]', ім'я: '[NAME_1]' },
{ salesforceId: '00Q...', електронна адреса: '[EMAIL_2]', телефон: '[PHONE_2]', ім'я: '[NAME_2]' },
...
]
```
Потім, коли дані передаються під час іншого виклику інструменту MCP, вони скасовуються через пошук у клієнті MCP.Справжні електронні адреси, номери телефонів та імена надходять із Google Таблиць до Salesforce, але не через модель.Це запобігає випадковому реєстрації чи обробці конфіденційних даних агентом.Ви також можете використовувати це для визначення детермінованих правил безпеки, вибираючи, куди і звідки можуть надходити дані.
Державна наполегливість і вміння
Виконання коду з доступом до файлової системи дозволяє агентам підтримувати стан між операціями.Агенти можуть записувати проміжні результати у файли, що дозволяє їм відновити роботу та відстежувати прогрес:
```
const leads = await salesforce.query({
запит: "SELECT Id, Email FROM Lead LIMIT 1000"
});
const csvData = leads.map(l => `${l.Id},${l.Email}`).join('\n');
await fs.writeFile('./workspace/leads.csv', csvData);
// Пізніше виконання продовжується з того місця, де воно зупинилося
const saved = await fs.readFile('./workspace/leads.csv', 'utf-8');
```
Агенти також можуть зберігати свій власний код як функції для повторного використання.Коли агент розробляє робочий код для завдання, він може зберегти цю реалізацію для майбутнього використання:
```
// У ./skills/save-sheet-as-csv.ts
імпорт * як gdrive з './servers/google-drive';
експорт асинхронної функції saveSheetAsCsv(sheetId: рядок) {
const data = await gdrive.getSheet({sheetId});
const csv = data.map(row => row.join(',')).join('\n');
await fs.writeFile(`./workspace/sheet-${sheetId}.csv`, csv);
return `./workspace/sheet-${sheetId}.csv`;
}
// Пізніше, у будь-якому виконанні агента:
імпорт { saveSheetAsCsv } із './skills/save-sheet-as-csv';
const csvPath = очікувати saveSheetAsCsv('abc123');
```
Це тісно пов’язане з концепцією навичок, папок багаторазових інструкцій, сценаріїв і ресурсів для моделей для підвищення ефективності виконання спеціалізованих завдань.Додавання файлу SKILL.md до цих збережених функцій створює структурований навик, на який моделі можуть посилатися та використовувати.Згодом це дозволить вашому агенту створити набір інструментів із можливостями вищого рівня, розвиваючи каркас, необхідний для найбільш ефективної роботи.
Зауважте, що виконання коду вносить власну складність.Для запуску створеного агентом коду потрібне безпечне середовище виконання з відповідним ізольованим програмним середовищем, обмеженнями ресурсів і моніторингом.Ці вимоги до інфраструктури додають додаткові робочі витрати та міркування щодо безпеки, яких уникають прямі виклики інструментів.Переваги виконання коду — зменшення витрат на токени, меншу затримку та покращену композицію інструментів — слід порівняти з цими витратами на впровадження.
Резюме MCP надає базовий протокол для підключення агентів до багатьох інструментів і систем.Однак, як тільки підключено занадто багато серверів, визначення інструментів і результати можуть споживати надмірну кількість маркерів, що знижує ефективність агента.
Хоча багато проблем тут здаються новими — керування контекстом, композиція інструментів, збереження стану — вони мають відомі рішення з інженерії програмного забезпечення.Виконання коду застосовує ці встановлені шаблони до агентів, дозволяючи їм використовувати знайомі конструкції програмування для більш ефективної взаємодії з серверами MCP.Якщо ви застосовуєте цей підхід, ми радимо вам поділитися своїми висновками зі спільнотою MCP.
Подяки
Цю статтю написали Адам Джонс і Конор Келлі.Дякуємо Джеремі Фоксу, Джерому Суоннеку, Стюарту Річі, Моллі Форверк, Метту Семюелсу та Меггі Во за відгуки про чернетки цієї публікації.
Stay ahead with daily AI briefings
Follow the feed, share the briefing, or jump back into the archive.