Što zapisati za svaki poziv MCP alata

Klijent vidi udaljeni MCP poslužitelj kao jedan neproziran span, a nadzorna ploča direktorija vidi zbrojeve. Samo je poslužitelj vidio poziv. Redak koji Tajo MCP poslužitelji zapisuju za svaki poziv, polje po polje, što se iz njega uklanja i što nije izgrađeno.

zapisivanje MCP poslužitelja

Što MCP poslužitelj treba zapisati za svaki poziv alata?

Zapišite jedan redak po pozivu alata, na poslužitelju, jer je poslužitelj jedino mjesto koje je taj poziv vidjelo. Tajo MCP poslužitelji bilježe tko je pozvao (ID ključa, nikad njegovu tajnu), koji poslužitelj i konektor, alat ako postoji, njegovu klasu učinka, ok ili kratak kod pogreške, trajanje, veličinu rezultata, ID traga, zapise koje je poziv dotaknuo te argumente i odgovor očišćene od tajni i osobnih podataka. Retci se čitaju pomoću logs.list i logs.get i brišu se nakon 30 dana. Čuvaju se odvojeno od revizijskog zapisnika s hash lancem, u kojem se čuvaju odobrenja i hashevi njihovih ulaza. Nije izgrađeno: ocjena zdravlja, upozorenje na stopu pogrešaka, pretraživanje po alatu ili ID-u traga te izvoz u vaš vlastiti sustav za praćenje.

Saznajte više
Na ovoj stranici

Anthropic je 8. lipnja 2026. vlasnicima konektora u Claudeovu direktoriju dao nadzornu ploču. Ona prikazuje aktivne korisnike, ukupan broj poziva alata i poredak u direktoriju. Prikazuje „ocjenu zdravlja, stope pogrešaka i latenciju na prvi pogled, s raščlambom pogrešaka po alatu kako biste točno utvrdili što ne radi“.

Godinu dana ranije Alex Volkov iz tvrtke Weights & Biases opisao je isti problem s druge strane. Kada je njegov agent počeo pozivati alate preko MCP-a, „sva ta opservabilnost na koju sam navikao dok se moj vlastiti kod izvršava od početka do kraja pomalo je potamnjela“. Njegov sugovornik na predavanju, Benjamin Eckel iz tvrtke Dylibso, pokazao je zašto. Udaljeni MCP poslužitelj „pojavljuje nam se u tragu kao jedan servisni span“ jer radi izvan kontrole pozivatelja.

Oba pogleda stoje izvan poslužitelja. Klijent vidi jedan neproziran span. Direktorij vidi zbrojeve. Nijedan nije vidio što je poslužitelj upitan, što je odbio i što je dotaknuo. Vidio je samo poslužitelj, pa samo poslužitelj to može zapisati.

Ovo je ono što Tajo MCP poslužitelji zapisuju, pročitano iz koda koji ih pokreće i navedeno u dokumentaciji. Što je MCP poslužitelj objašnjava protokol. Ovaj tekst objašnjava redak.

Jedan redak po pozivu

Nadzorna ploča je pogled lučkog kapetana: brodovi ulaze, brodovi izlaze, koji su kasnili. Zapisnik zahtjeva je brodski dnevnik, pisan na samom brodu, u trenutku kada se nešto događa.

Svaki tools/call na Tajo poslužitelju radnog prostora i na svakom poslužitelju konektora završava jednim retkom. Redak se zapisuje nakon što je odgovor sastavljen, kakav god odgovor bio. Poziv odbijen zato što ključ ne smije pisati, ili zato što je krajnja točka samo za čitanje, dobiva redak kao i svaki drugi. Isto vrijedi i za poziv alata koji ne postoji.

Evo što redak sadrži i što odbija sadržavati.

PoljeČuva seNe čuva se
TkoID API ključa koji je pozvao. Token iz OAuth prijave također je ključ.Tajna ključa ili njegov prefiks.
GdjePoslužitelj radnog prostora ili poslužitelj konektora, s njegovim konektorom i profilom.
AlatNaziv, kada poslužitelj ima alat tog naziva.Svaki drugi naziv koji klijent pošalje: sprema se kao (unknown).
Učinakread, write, send ili destructive: najteži učinak koji poziv može imati.
Ishodok, ili kratak kod pogreške u snake_case obliku, kao što je unknown_tool.Opis pogreške u slobodnom tekstu: sve što nije kod sprema se kao tool_error.
Trajanje i veličinaMilisekunde od dolaska do odgovora i bajtovi koje je pozivatelj primio.
ID tragaID zahtjeva, iz zaglavlja x-request-id, x-trace-id ili W3C traceparent, a inače novi.Vrijednost zaglavlja koja nije heksadecimalna ni UUID.
ZapisiDo 20 ID-ova zapisa koje je poziv imenovao ili proizveo: kontakt, poruka, odobrenje.Sami zapisi.
TijelaArgumenti i odgovor, očišćeni, najviše 4 KB svaki.Tajne, slobodni tekst i osobni podaci navedeni u nastavku.

Tri od tih odbijanja odnose se na klijenta, a ne na podatke. Naziv alata, kod pogreške i ID traga stižu izvana. Svaki se čuva samo u obliku za koji poslužitelj može jamčiti. Zapisnik koji sprema što god je pozivatelj poslao može se napuniti bilo čime, uključujući i adresu e-pošte kupca u stupcu za naziv alata.

Otvoreno pitanje Benjamina Eckela na kraju predavanja bilo je kako sakupljač zna „da je to poziv MCP alata koji ima pogrešku“. Na jednom poslužitelju odgovor je stupac. ok je false, a kod kaže koja je pogreška.

Argumenti: pravilo koje smo preokrenuli

Prigovor je opravdan, i naš je. Ako zapisujete argumente, napravili ste drugu kopiju podataka svojih kupaca, izvan dosega svakog zahtjeva za brisanje. Do 18. listopada 2026. to je bilo naše vlastito pravilo. Zapisnik nije čuvao ni argumente ni tijelo rezultata, jer i jedno i drugo mogu sadržavati osobne podatke.

Bila je to pogrešna razmjena. Zapisnik zahtjeva koji ne može pokazati što je poslano i što se vratilo ne može odgovoriti na jedino pitanje zbog kojeg postoji: zašto poziv mog agenta nije uspio?

Zato se tijela čuvaju, a razlog zbog kojeg se nisu čuvala rješava se na drugi način. Svako tijelo prolazi kroz jedan deterministički prolaz prije nego što uđe u red čekanja.

  • Nijedna tajna ne preživljava. Polje čiji naziv upućuje na token, lozinku, tajnu, potpis, kolačić, sesiju ili dvadesetak sličnih riječi zadržava samo [secret]. Isto vrijedi i za vrijednost u poznatom obliku vjerodajnice, gdje god se pojavi. To obuhvaća bearer tokene, JWT-ove, privatne ključeve, URL-ove s lozinkom i svaki neproziran niz od 40 ili više znakova ključa.
  • Slobodni tekst uopće se ne čuva. Polje nazvano html, text, body, markdown ili content zadržava samo [redacted]. Slobodni tekst sadrži imena i ulične adrese koje nijedan uzorak ne pronalazi.
  • Osobni podaci maskiraju se zauvijek. Polje čiji naziv označava osobne podatke, kao što su e-pošta, telefon, ime, adresa ili bilješka, zadržava samo [redacted]. Adresa e-pošte, broj telefona, kartica ili IBAN unutar bilo kojeg drugog niza znakova maskira se.
  • Tijela ostaju mala. Nizovi znakova režu se na 512 znakova, popisi na 20 stavki, objekti na 50 ključeva, a ugniježđivanje na 6 razina. Cijelo se tijelo reže na 4 KB i označava kao skraćeno.

Dvije vrste poziva čuvaju manje. Kontakti koje je razgovor neke osobe donio iz druge aplikacije zapisuju se kao oznaka i broj, nikad kao tijelo. Poziv koji čita zapisnik ne čuva odgovor, jer bi odgovor bili samo drugi retci zapisnika.

Sada cijena. Maskiranje je trajno, a ne šifriranje ključem koji netko drži. Zapisnik vam ne može pokazati adresu e-pošte na koju poruka nije isporučena. Pokazuje vam ID kontakta, a kontakt je, prema vlastitim pravilima, udaljen jedan poziv. Zapisnik je izvan periodičkog brisanja podataka radnog prostora, i zato maskiranje ne može čekati na to brisanje.

Zašto zapisnik nije revizijski trag

Tajo već ima revizijski zapisnik u koji se samo dodaje. Svaki redak nosi hash prethodnog retka, pa izmjena bilo gdje prekida lanac. Zašto onda ne zapisivati pozive alata ondje?

Zato što lanac ima cijenu. Svako dodavanje uzima zaključavanje po radnom prostoru i čita prethodni redak kako bi produžilo lanac. Zapisivanje svakog čitanja kroz njega postavilo bi pozive radnog prostora u red iza jednog zaključavanja. Također bi promjene stanja, zbog kojih revizijski zapisnik postoji, zatrpalo tisućama čitanja.

Zato se dva zapisa dijele prema pitanju. Zapisnik zahtjeva kaže što je agent tražio i što se dogodilo, tijekom 30 dana. Revizijski zapisnik kaže što se promijenilo, tko je to dopustio i je li itko od tada mijenjao zapis.

Odobrenja su na strani revizije. Na Tajo profilima konektora alat za prijedlog priprema deklariranu radnju, a alat za primjenu je izvršava nakon što bude odobrena. Ništa ne stiže do pružatelja usluge dok prijedlog ne bude odobren, od strane osobe ili pravila koje je radni prostor uključio. Redak poziva prijedloga među svojim zapisima navodi odobrenje koje je stvorio. Samo odobrenje vezano je uz SHA-256 hash točnog ulaza. Odobrenje pokriva točno onaj ulaz koji ste vidjeli: promijenite jedno polje i više se ne podudara. Kada pisanje stigne, njegov revizijski redak čuva hash ulaza i hash odgovora pružatelja usluge, nikad vrijednosti iz odgovora.

Koliko redak košta

Redak je pisanje u bazu podataka, a pisanje ima commit. Do 8. listopada 2026. svaki je poziv čekao vlastiti commit prije odgovora, oko 2,6 ms na našem hostu. Za jednog klijenta to je bila četvrtina malog poziva alata.

Sada se redak sastavlja kada poziv završi i stavlja u red čekanja. Pražnjenje zapisuje red čekanja najviše 100 ms kasnije, u jednoj transakciji po radnom prostoru, pa mnogo poziva dijeli jedan commit. Ništa se u retku ne mijenja, uključujući i njegovu vremensku oznaku. Ako čeka 5.000 redaka, sljedeći poziv čeka pražnjenje umjesto da se redak odbaci.

Bilježenje nikad ne ruši poziv. Pisanje koje ne uspije ponavlja se redak po redak, a zatim se bilježi i odbacuje. Ono što prisilno gašenje procesa izgubi jest sve što je stajalo u redu čekanja: najviše posljednjih 100 ms poziva.

Ponovno čitanje

logs.list vraća pozive radnog prostora, od najnovijeg, bez tijela. Filtrira po vremenu, po ishodu ili HTTP statusu, po izvoru (MCP ili REST API, koji dijeli istu tablicu) i po API ključu. Zadano vraća 50 po stranici, najviše 100. logs.get vraća jedan poziv s trenutačnim nazivom ključa, njegovim statusom, trajanjem, očišćenim zahtjevom i odgovorom te zapisima koje je dotaknuo.

Oba čitaju samo radni prostor pozivatelja. ID retka iz drugog radnog prostora ne pronalazi se.

Pogreška alata nosi ID zahtjeva. Kada je taj ID stvorio poslužitelj, ili je stigao kao heksadecimalna vrijednost ili UUID, on je ID traga tog retka. Agent koji je dobio pogrešku može osobi predati jedinu vrijednost koja imenuje poziv.

Što je izgrađeno, a što nije

Izgrađeno, u trenutku pisanja:

Nije izgrađeno, a vrijedi znati prije nego što se na ovo oslonite:

  • Nema ocjene zdravlja, nema grafikona po alatu i nema upozorenja na rastuću stopu pogrešaka. Pregled poziva, pogrešaka i najsporijih trajanja po alatu postoji za Tajo operatere, ali ni na jednoj površini koju vi možete otvoriti.
  • logs.list ne može filtrirati po nazivu alata ni po ID-u traga. Da biste pronašli redak iza ID-a zahtjeva, suzite pretragu po vremenu i ključu.
  • Retci se ne izvoze u sustav za praćenje kojim vi upravljate. ID traga čita se samo iz HTTP zaglavlja, a ne iz MCP polja _meta koje je predavanje koristilo kako bi prenijelo kontekst traga.
  • Nakon 30 dana redak se briše. Nema arhive ni izvoza.
  • Ono što je maskirano ne može se vratiti iz zapisnika.
  • Prisilno gašenje može izgubiti posljednjih 100 ms redaka.

Predavanje je završilo konstatacijom da opservabilnost u MCP-u „nije ravnomjerno raspoređena“. Nadzorna ploča nizvodno to ne može popraviti, a ne može ni trag koji se zaustavlja na vratima poslužitelja. Sinkronizaciji koja ne uspije potreban je vlastiti zapis; isto vrijedi i za svaki poziv koji ga je tražio.

Poslužitelj je vidio poziv. Nitko drugi nije. Zapišite ga ondje.

Često postavljana pitanja

Što MCP poslužitelj treba zapisivati za svaki poziv alata?

Jedan redak po pozivu, koji zapisuje poslužitelj: koji je API ključ pozvao, koji poslužitelj i konektor, naziv alata ako alat postoji, njegova klasa učinka, ok ili kratak kod pogreške, trajanje, veličina rezultata, ID traga zahtjeva, ID-ovi zapisa koje je poziv imenovao ili proizveo te argumenti i odgovor iz kojih su uklonjene tajne i osobni podaci. Tajo MCP poslužitelji zapisuju taj redak za svaki tools/call, uključujući i odbijene pozive, i čuvaju ga 30 dana.

Treba li MCP zapisnik zahtjeva čuvati argumente alata?

Da, očišćene. Zapisnik bez argumenata ne može reći zašto poziv nije uspio. Tajo do 18. listopada 2026. nije čuvao tijela, a sada čuva oba, nakon jednog determinističkog prolaza: tajne postaju [secret], slobodni tekst i osobna polja postaju [redacted], adrese e-pošte, telefoni, kartice i IBAN-ovi maskiraju se, a svako se tijelo reže na 4 KB. Maskiranje je trajno, pa zapisnik upućuje na zapis prema ID-u umjesto da ga kopira.

Zašto držati zapisnik poziva MCP alata odvojeno od revizijskog zapisnika?

Zato što odgovaraju na različita pitanja uz različitu cijenu. Tajo revizijski zapisnik je hash lanac promjena stanja, a svako dodavanje uzima zaključavanje po radnom prostoru kako bi produžilo lanac. Zapisivanje svakog čitanja kroz njega postavilo bi pozive radnog prostora u red iza tog zaključavanja i zatrpalo promjene među čitanjima. Pozivi alata idu u zasebnu tablicu bez lanca koja se čuva 30 dana; pisanja koja poziv pripremi i dalje ostavljaju vlastite revizijske retke.

Zatražite rani pristup

Unesite ime i adresu e-pošte. Poslat ćemo vam poveznicu za potvrdu zahtjeva za pristup Taju.

Nabavi Brevo

Ova stranica kao Markdown: what-to-log-for-every-mcp-tool-call.md

Učitavanje Markdowna…
Otvori u Claude Otvori u ChatGPT