Model Context Protocol (MCP) AI agentlərini xarici sistemlərə qoşmaq üçün açıq standartdır. Agentləri alətlərə və məlumatlara qoşmaq ənənəvi olaraq hər cüt üçün xüsusi inteqrasiya tələb edirdi ki, bu da parçalanma və təkrarlanan səylər yaradır və həqiqətən əlaqəli sistemlərin miqyaslanmasını çətinləşdirir. MCP universal protokol təqdim edir — tərtibatçılar MCP-ni öz agentlərində bir dəfə tətbiq edir və bu, bütöv bir inteqrasiya ekosistemini açır.
2024-cü ilin noyabrında MCP-ni buraxdığımızdan bəri qəbul sürətli olub: icma minlərlə MCP server qurub, SDK-lar bütün əsas proqramlaşdırma dilləri üçün mövcuddur və sənaye MCP-ni agentləri alətlərə və məlumatlara qoşmaq üçün de-fakto standart kimi qəbul edib.
Bu gün tərtibatçılar müntəzəm olaraq onlarla MCP serveri üzərində yüzlərlə və ya minlərlə alətə çıxışı olan agentlər qururlar. Lakin qoşulan alətlərin sayı artdıqca, bütün alət təriflərini əvvəlcədən yükləmək və aralıq nəticələri kontekst pəncərəsindən keçirmək agentləri yavaşladır və xərcləri artırır.
Bu bloqda kod icrasının agentlərə MCP serverləri ilə daha səmərəli qarşılıqlı əlaqə qurmağa, daha çox aləti idarə edərkən daha az token istifadə etməyə necə imkan verdiyini araşdıracağıq.
Alətlərdən həddindən artıq token istehlakı agentləri daha az səmərəli edir
MCP istifadəsi miqyaslandıqca, agent xərclərini və gecikmələrini artıra bilən iki ümumi nümunə var:
- Alət tərifləri kontekst pəncərəsini həddən artıq yükləyir;
- Aralıq alət nəticələri əlavə tokenlər istehlak edir.
1. Alət tərifləri kontekst pəncərəsini həddən artıq yükləyir
Əksər MCP müştəriləri bütün alət təriflərini birbaşa kontekstə əvvəlcədən yükləyir və onları birbaşa alət çağırma sintaksisi istifadə edərək modelə təqdim edir. Bu alət tərifləri belə görünə bilər:
gdrive.getDocument
Description: Google Drive-dan sənəd əldə edir
Parameters:
documentId (required, string): Əldə ediləcək sənədin ID-si
fields (optional, string): Qaytarılacaq xüsusi sahələr
Returns: Başlıq, mətn məzmunu, metadata, icazələr və s. olan sənəd obyekti
salesforce.updateRecord
Description: Salesforce-da qeydi yeniləyir
Parameters:
objectType (required, string): Salesforce obyektinin növü (Lead, Contact, Account və s.)
recordId (required, string): Yenilənəcək qeydin ID-si
data (required, object): Yeni dəyərləri ilə yenilənəcək sahələr
Returns: Təsdiq ilə yenilənmiş qeyd obyekti
Alət təsvirləri kontekst pəncərəsində daha çox yer tutur, cavab müddətini və xərcləri artırır. Agentlərin minlərlə alətə qoşulduğu hallarda, onlar sorğunu oxumadan əvvəl yüz minlərlə tokeni emal etməli olacaqlar.
2. Aralıq alət nəticələri əlavə tokenlər istehlak edir
Əksər MCP müştəriləri modellərə MCP alətlərini birbaşa çağırmağa imkan verir. Məsələn, agentinizdən soruşa bilərsiniz: "Google Drive-dan görüş transkriptimi yüklə və Salesforce lead-inə əlavə et."
Model belə çağırışlar edəcək:
TOOL CALL: gdrive.getDocument(documentId: "abc123")
→ "Q4 hədəfləri müzakirə edildi...\n[tam transkript mətni]" qaytarır
(modelin kontekstinə yüklənir)
TOOL CALL: salesforce.updateRecord(
objectType: "SalesMeeting",
recordId: "00Q5f000001abcXYZ",
data: { "Notes": "Q4 hədəfləri müzakirə edildi...\n[tam transkript mətni yenidən yazılır]" }
)
(model bütün transkripti yenidən kontekstə yazmalıdır)
Hər bir aralıq nəticə modeldən keçməlidir. Bu nümunədə tam zəng transkripti iki dəfə axır. 2 saatlıq satış görüşü üçün bu, əlavə 50.000 tokenin emalı demək ola bilər. Daha böyük sənədlər hətta kontekst pəncərəsi limitlərini aşa bilər və iş axınını poza bilər.
Böyük sənədlər və ya mürəkkəb məlumat strukturları ilə modellər alət çağırışları arasında məlumatları kopyalayarkən səhv etmə ehtimalı daha yüksək ola bilər.
MCP müştərisi alət təriflərini modelin kontekst pəncərəsinə yükləyir və hər alət çağırışı və nəticənin əməliyyatlar arasında modeldən keçdiyi mesaj dövrəsini idarə edir.
MCP ilə kod icrası kontekst səmərəliliyini artırır
Agentlər üçün kod icra mühitlərinin daha geniş yayılması ilə bir həll yolu MCP serverlərini birbaşa alət çağırışları deyil, kod API-ləri kimi təqdim etməkdir. Agent daha sonra MCP serverləri ilə qarşılıqlı əlaqə üçün kod yaza bilər. Bu yanaşma hər iki problemi həll edir: agentlər yalnız lazım olan alətləri yükləyə bilər və nəticələri modelə qaytarmadan əvvəl icra mühitində emal edə bilərlər.
Bunu etməyin bir neçə yolu var. Bir yanaşma qoşulmuş MCP serverlərindən bütün mövcud alətlərin fayl ağacını yaratmaqdır. Budur TypeScript istifadə edən bir tətbiq:
servers
├── google-drive
│ ├── getDocument.ts
│ ├── ... (digər alətlər)
│ └── index.ts
├── salesforce
│ ├── updateRecord.ts
│ ├── ... (digər alətlər)
│ └── index.ts
└── ... (digər serverlər)
Sonra hər bir alət bir fayla uyğun gəlir, təxminən belə:
// ./servers/google-drive/getDocument.ts
import { callMCPTool } from "../../../client.js";
interface GetDocumentInput {
documentId: string;
}
interface GetDocumentResponse {
content: string;
}
/* Google Drive-dan sənəd oxu */
export async function getDocument(input: GetDocumentInput): Promise<GetDocumentResponse> {
return callMCPTool<GetDocumentResponse>('google_drive__get_document', input);
}
Yuxarıdakı Google Drive-dan Salesforce-a nümunəmiz bu koda çevrilir:
// Google Docs-dan transkripti oxu və Salesforce prospektinə əlavə et
import * as gdrive from './servers/google-drive';
import * as salesforce from './servers/salesforce';
const transcript = (await gdrive.getDocument({ documentId: 'abc123' })).content;
await salesforce.updateRecord({
objectType: 'SalesMeeting',
recordId: '00Q5f000001abcXYZ',
data: { Notes: transcript }
});
Agent fayl sistemini araşdıraraq alətləri kəşf edir: mövcud serverləri tapmaq üçün ./servers/ qovluğunu siyahılayır (məsələn, google-drive və salesforce), sonra hər alətin interfeysini anlamaq üçün lazım olan xüsusi alət fayllarını oxuyur (məsələn, getDocument.ts və updateRecord.ts). Bu, agentə yalnız cari tapşırıq üçün lazım olan tərifləri yükləməyə imkan verir. Bu, token istifadəsini 150.000 tokendən 2.000 tokenə endirir — vaxt və xərc qənaəti 98,7%.
Cloudflare oxşar nəticələr dərc etdi, MCP ilə kod icrasını "Code Mode" adlandırdı. Əsas fikir eynidir: LLM-lər kod yazmaqda bacarıqlıdır və tərtibatçılar MCP serverləri ilə daha səmərəli qarşılıqlı əlaqə quran agentlər yaratmaq üçün bu güclü tərəfdən istifadə etməlidirlər.
MCP ilə kod icrasının faydaları
MCP ilə kod icrası agentlərə alətləri tələb üzrə yükləyərək, məlumatları modelə çatmadan əvvəl filtrləyərək və mürəkkəb məntiqi bir addımda icra edərək kontekstdən daha səmərəli istifadə etməyə imkan verir. Bu yanaşmanın istifadəsində təhlükəsizlik və vəziyyət idarəetməsi üstünlükləri də var.
Mərhələli açıqlama
Modellər fayl sistemlərində naviqasiya etməkdə əladırlar. Alətləri fayl sistemində kod kimi təqdim etmək modellərə alət təriflərini hamısını əvvəlcədən oxumaq əvəzinə tələb üzrə oxumağa imkan verir.
Alternativ olaraq, müvafiq tərifləri tapmaq üçün serverə search_tools aləti əlavə edilə bilər. Məsələn, yuxarıda istifadə edilən hipotetik Salesforce serveri ilə işləyərkən, agent "salesforce" axtarır və yalnız cari tapşırıq üçün lazım olan alətləri yükləyir. search_tools alətinə agentə tələb olunan detal səviyyəsini seçməyə imkan verən detal səviyyəsi parametrinin daxil edilməsi (məsələn, yalnız ad, ad və təsvir, və ya sxemlərlə tam tərif) də agentə konteksti qorumağa və alətləri səmərəli şəkildə tapmağa kömək edir.
Kontekst-səmərəli alət nəticələri
Böyük məlumat dəstləri ilə işləyərkən, agentlər nəticələri qaytarmadan əvvəl kodda filtrləyə və çevirə bilərlər. 10.000 sətirli cədvəlin əldə edilməsini nəzərdən keçirin:
// Kod icrası olmadan - bütün sətirlər kontekstdən axır
TOOL CALL: gdrive.getSheet(sheetId: 'abc123')
→ əl ilə filtrləmək üçün kontekstdə 10.000 sətir qaytarır
// Kod icrası ilə - icra mühitində filtrləyin
const allRows = await gdrive.getSheet({ sheetId: 'abc123' });
const pendingOrders = allRows.filter(row =>
row["Status"] === 'pending'
);
console.log(`${pendingOrders.length} gözləyən sifariş tapıldı`);
console.log(pendingOrders.slice(0, 5)); // Nəzərdən keçirmək üçün yalnız ilk 5-i göstər
Agent 10.000 əvəzinə beş sətir görür. Oxşar nümunələr aqreqasiyalar, çoxlu məlumat mənbələri arasında birləşmələr və ya xüsusi sahələrin çıxarılması üçün işləyir — hamısı kontekst pəncərəsini şişirtmədən.
Daha güclü və kontekst-səmərəli idarəetmə axını
Döngülər, şərtlər və xəta idarəetməsi fərdi alət çağırışlarını zəncirləmək əvəzinə tanış kod nümunələri ilə edilə bilər. Məsələn, əgər Slack-da yerləşdirmə bildirişi lazımdırsa, agent belə yaza bilər:
let found = false;
while (!found) {
const messages = await slack.getChannelHistory({ channel: 'C123456' });
found = messages.some(m => m.text.includes('deployment complete'));
if (!found) await new Promise(r => setTimeout(r, 5000));
}
console.log('Yerləşdirmə bildirişi alındı');
Bu yanaşma agent dövrəsi vasitəsilə MCP alət çağırışları və gözləmə əmrləri arasında növbələşməkdən daha səmərəlidir.
Bundan əlavə, icra olunan şərti ağac yaza bilmək "ilk tokenə qədər vaxt" gecikmələrini də azaldır: modelin if-ifadəsini qiymətləndirməsini gözləmək əvəzinə, agent kod icra mühitinin bunu etməsinə imkan verə bilər.
Məxfiliyi qoruyan əməliyyatlar
Agentlər MCP ilə kod icrasından istifadə edəndə, aralıq nəticələr standart olaraq icra mühitində qalır. Bu yolla, agent yalnız açıq şəkildə qeyd etdiyiniz və ya qaytardığınız şeyi görür, yəni modellə paylaşmaq istəmədiyiniz məlumatlar heç vaxt modelin kontekstinə daxil olmadan iş axınızdan keçə bilər.
Daha həssas iş yükləri üçün agent qurğusu həssas məlumatları avtomatik tokenləşdirə bilər. Məsələn, təsəvvür edin ki, müştəri əlaqə məlumatlarını cədvəldən Salesforce-a idxal etməlisiniz. Agent belə yazır:
const sheet = await gdrive.getSheet({ sheetId: 'abc123' });
for (const row of sheet.rows) {
await salesforce.updateRecord({
objectType: 'Lead',
recordId: row.salesforceId,
data: {
Email: row.email,
Phone: row.phone,
Name: row.name
}
});
}
console.log(`${sheet.rows.length} lead yeniləndi`);
MCP müştərisi məlumatları tutub modelin əlinə çatmadan əvvəl PII-ni tokenləşdirir:
// Əgər agent sheet.rows-u qeyd etsəydi, görəcəyi:
[
{ salesforceId: '00Q...', email: '[EMAIL_1]', phone: '[PHONE_1]', name: '[NAME_1]' },
{ salesforceId: '00Q...', email: '[EMAIL_2]', phone: '[PHONE_2]', name: '[NAME_2]' },
...
]
Sonra, məlumatlar başqa MCP alət çağırışında paylaşıldıqda, MCP müştərisində axtarış vasitəsilə tokenləşdirmə geri qaytarılır. Həqiqi e-poçt ünvanları, telefon nömrələri və adlar Google Sheets-dən Salesforce-a axır, lakin heç vaxt modeldən keçmir. Bu, agentin həssas məlumatları təsadüfən qeyd etməsinin və ya emal etməsinin qarşısını alır. Siz həmçinin bundan determinik təhlükəsizlik qaydalarını müəyyən etmək, məlumatların haradan haraya axacağını seçmək üçün istifadə edə bilərsiniz.
Vəziyyətin saxlanması və bacarıqlar
Fayl sisteminə çıxışı olan kod icrası agentlərə əməliyyatlar arasında vəziyyəti saxlamağa imkan verir. Agentlər aralıq nəticələri fayllara yaza bilər, bu da onlara işi davam etdirməyə və irəliləyişi izləməyə imkan verir:
const leads = await salesforce.query({
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);
// Sonrakı icra dayandığı yerdən davam edir
const saved = await fs.readFile('./workspace/leads.csv', 'utf-8');
Agentlər həmçinin öz kodlarını təkrar istifadə edilə bilən funksiyalar kimi saxlaya bilərlər. Agent bir tapşırıq üçün işləyən kod hazırladıqdan sonra, həmin tətbiqi gələcək istifadə üçün saxlaya bilər:
// ./skills/save-sheet-as-csv.ts faylında
import * as gdrive from './servers/google-drive';
export async function saveSheetAsCsv(sheetId: string) {
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`;
}
// Sonra, istənilən agent icrasında:
import { saveSheetAsCsv } from './skills/save-sheet-as-csv';
const csvPath = await saveSheetAsCsv('abc123');
Bu, Skills konsepsiyası ilə sıx bağlıdır — modellər üçün xüsusi tapşırıqlarda performansı artırmaq üçün təkrar istifadə edilə bilən təlimatlar, skriptlər və resurslar qovluqları. Bu saxlanmış funksiyalara SKILL.md faylı əlavə etmək modellərin istinad edə və istifadə edə biləcəyi strukturlaşdırılmış bacarıq yaradır. Zamanla bu, agentinizə daha yüksək səviyyəli imkanlardan ibarət alətlər dəsti qurmağa imkan verir və ən effektiv işləmək üçün lazım olan iskele quruluşunu inkişaf etdirir.
Qeyd etmək lazımdır ki, kod icrası öz mürəkkəbliyini gətirir. Agent tərəfindən yaradılmış kodun işlədilməsi müvafiq sandboxing, resurs limitləri və monitorinqə malik təhlükəsiz icra mühiti tələb edir. Bu infrastruktur tələbləri birbaşa alət çağırışlarının qarşısını aldığı əməliyyat yükü və təhlükəsizlik mülahizələri əlavə edir. Kod icrasının faydaları — azaldılmış token xərcləri, aşağı gecikmə və təkmilləşdirilmiş alət kompozisiyası — bu tətbiq xərcləri ilə müqayisədə qiymətləndirilməlidir.
Xülasə
MCP agentlərin çoxlu alətlərə və sistemlərə qoşulması üçün təməl protokol təqdim edir. Lakin çoxlu serverlər qoşulduqda, alət tərifləri və nəticələri həddindən artıq token istehlak edə bilər və agent səmərəliliyini azalda bilər.
Buradakı problemlərin bir çoxu yeni hiss olunsa da — kontekst idarəetməsi, alət kompozisiyası, vəziyyətin saxlanması — onların proqram mühəndisliyindən məlum həlləri var. Kod icrası bu qurulmuş nümunələri agentlərə tətbiq edir və onlara MCP serverləri ilə daha səmərəli qarşılıqlı əlaqə üçün tanış proqramlaşdırma konstruksiyalarından istifadə etməyə imkan verir. Bu yanaşmanı tətbiq etsəniz, tapıntılarınızı MCP icması ilə paylaşmağınızı tövsiyə edirik.
Təşəkkürlər
Bu məqalə Adam Jones və Conor Kelly tərəfindən yazılmışdır. Qaralamalar üzrə rəylərinə görə Jeremy Fox, Jerome Swannack, Stuart Ritchie, Molly Vorwerck, Matt Samuels və Maggie Vo-ya təşəkkür edirik.