# Kas MCP-st piisab AI-agentide ühiseks kontekstiks?

> Ei. Spetsifikatsiooni revisjonis 2025-11-25 deklareerib MCP Resource üheksa välja ja ükski neist ei ütle, milline allikas on autoriteetne, milline versioon kehtib või kumb võidab, kui kaks ressurssi on omavahel vastuolus. Üks sõidujagamise turuplats sai teada, mis selle puudumine maksab, kui agent filtreeris kehtiva sõna järgi ega tagastanud midagi.

_Vaated · 2026-07-13_

**MCP-st piisab, et jõuda sinu ettevõtte iga allikani, aga ei piisa, et panna neist kahte omavahel kokku leppima.** Ava Model Context Protocoli normatiivne skeem revisjonis 2025-11-25 ja loe Resource'i tüüpi: üheksa välja, kaks kohustuslikku, `uri` ja `name`, ning seitse valikulist, `title`, `description`, `icons`, `mimeType`, `annotations`, `size` ja `_meta`. Ükski neist ei talleta, kus see ressurss sinu ettevõtte hierarhias asub, mis versioon see on või kumb võidab, kui kaks ressurssi on omavahel vastuolus. Olin 2025. aasta lõpus ühe sõidujagamise turuplatsi sees, palgatud olema selle arendusorganisatsiooni igapäevatöö keskel ja leidma, mis investori due diligence'is välja tuleks, ja see, mille ma leidsin, ei olnud koodis. Agent filtreeris sõna järgi, mida iga inimene selles ettevõttes mõistis, andmebaas ei leidnud midagi, ühtki viga ei tekkinud, ja kasutajad lakkasid nägemast sõite, mille nad olid broneerinud.

Minu vaatepunkt seab piirid sellele, mida ma sulle rääkida saan. Ma ei olnud AI kasutuselevõtu juures ega kirjutanud ega vaadanud üle selle loo koodi. Tähelepanekute tegemine oligi kogu ülesanne, ja siin on see, mis välja tuli. Ettevõte jääb anonüümseks. Üks toote üksikasi kannab ülejäänut: sõit oli üks selle keskseid olemeid, ja tootetiim, turundus, tehnilised diagrammid ja kood nimetasid seda igaüks isemoodi.

## MCP Resource'i tüüp deklareerib üheksa välja ja ükski neist ei ütle, milline allikas on õige

See on kõik, mida Model Context Protocol agendile ühe ressursi kohta räägib. Spetsifikatsioon on [selgesõnaline](https://modelcontextprotocol.io/specification/2025-11-25/basic), et tema TypeScripti skeem, mitte tema tekstileheküljed, on „the source of truth for all protocol messages and structures“. Ja [selles skeemis revisjonis 2025-11-25](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/main/schema/2025-11-25/schema.ts) deklareerib `Resource` üheksa välja, kui pärimine lahti harutada: kuus tüübi enda peal, pluss `name` ja `title` `BaseMetadata`-st ning `icons` `Icons`-ist. Kaks on kohustuslikud, `uri` ja `name`. Seitse on valikulised: `title`, `description`, `icons`, `mimeType`, `annotations`, `size` ja `_meta`. Otsi nüüd sellest loetelust üles väli, mis ütleb agendile, kas `trip`, `offer` või `carona` on see sõna, mille andmebaas tegelikult ka leiab. Sellist välja ei ole, ja see puudumine ei ole möödalask. Spetsifikatsiooni enda [arhitektuuri ülevaade](https://modelcontextprotocol.io/docs/learn/architecture) ütleb, et MCP „focuses solely on the protocol for context exchange“ ja et see „does not dictate how AI applications use LLMs or manage the provided context“.

Kõige lähemale allika järjestamisele jõuab protokoll väljaga `priority`, mis on number 0.0 kuni 1.0 ja mille server deklareerib oma ressursi kohta ise, kusjuures spetsifikatsioon ütleb, et väärtus 1 tähendab „most important“. Kõige lähemale ajakohasusele jõuab ta väljaga `lastModified`, mis on ISO 8601 ajatempel selle kohta, millal ressurss viimati muutus, ja see on fakt baitide, mitte tõe kohta. Mõlemad elavad ressursi valikulises `annotations`-väljas, mille server kirjutab iseenda kohta ja mida miski üle ei kontrolli. Spetsifikatsiooni enda hoiak enesekirjelduse suhtes paistab kõige paremini välja üks tüüp kõrval. [Tool-i tüübi](https://modelcontextprotocol.io/specification/2025-11-25/server/tools) all kannab spetsifikatsioon hoiatust normatiivses keeles: kliendid „MUST consider tool annotations to be untrusted unless they come from trusted servers“. See hoiatus käib tööriistade kohta, nii et otseselt `priority` kohta ta midagi ei ütle. See, mida ta näitab, on protokolli hoiak tema enda normatiivses hääles: kui server ennast kirjeldab, on spetsifikatsiooni instinkt öelda kliendile, et ta seda ei usuks.

Miski sellest ei ole MCP viga. See on protokoll, mis teeb oma tööd ja keeldub ühest, mis ei olnud kunagi tema oma. Häda algab siis, kui ettevõte loeb kättesaadavust valmisolekuks, ühendab agendiga üheksa allikat ja eeldab, et miski torus otsustab, milline neist on õige. Tavaliselt langeb see eeldus otsingule, mis järjestab tekstilõike sarnasuse järgi ja jätab autoriteetsuse sinna, kust ta selle leidis: [MCP ja RAG asuvad eri kihtides ja kumbki neist ei ole see kiht, mis otsustab](/en/blog/comparisons/mcp-vs-rag-for-agent-context) (inglise keeles).

## Miks tagastab AI-agent tühja tulemuse ilma veateateta: sõna oli kehtiv, olem mitte

Tony Hoare'i nullil oli üks lunastav omadus. See jooksis kokku. Oma [QCon London 2009 ettekannet](https://www.infoq.com/presentations/Null-References-The-Billion-Dollar-Mistake-Tony-Hoare/) tutvustades nimetas Hoare 1965. aasta nullviidet oma suureks veaks, „billion-dollar mistake“: ta oli seadnud eesmärgiks teha iga viite kasutamine „absolutely safe, with checking performed automatically by the compiler“, ei suutnud sellegipoolest kiusatusele vastu panna ja lisas nulli, ning see hakkas põhjustama „innumerable errors, vulnerabilities, and system crashes“. Kokkujooksmine on kingitus. See peatab programmi, nimetab rea ja osutab iseendale. See, mille turuplats 2025. aasta detsembris välja saatis, tegi vastupidist. Nimeta seda semantiliseks nulliks: tulemus, mis on struktuurilt kehtiv ja tähenduselt tühi, kus päring käivitus, tüübid klappisid, tagasi tuli null rida, ja miski süsteemis ei teadnud, et sõna oli vale.

Sõnavara oli kasvanud valdkondade kaupa, nagu see kasvab igal pool:

| Artefakt või kiht | Kasutatud termin | Mida meeskond selle all mõtles |
| --- | --- | --- |
| Tehnilised diagrammid | `trip` | Registreeritud sõit |
| Tootetiimi sisekeel | `offer` | Sama sõiduolem, ainult sisekasutuses, mitte kunagi rakenduses ega veebisaidil |
| Turunduskampaaniad | `carona` | Sõna, mida klient tegelikult kasutas |
| Rakenduse kood | `trips` | Tabel, seosed, olemid, muutujad, meetodid |

Inimesed liikusid nende sõnade vahel vaevata. Vestluses oli samatähenduslikkus ilmne. Siis filtreeris üks meetod stringi `offer` järgi seal, kus käivitatav leping määratles `trips`. Filter võttis stringi vastu, töötas tavapäraselt, ei leidnud ühtki kirjet ega tagastanud midagi. Midagi ei jooksnud kokku. Ühtki viga ei tekkinud.

Suurem osa tootest töötas edasi, mis tegi selle ühtaegu talutavaks ja nähtamatuks. Kasutajad said endiselt sõite broneerida ja laiemad ekraanid pärisid endiselt `trips`. Viga peitus täpselt ühes filtris, selles, mis valis kasutaja planeeritud sõidud tema isikupärastatud vaate ja sellele ehitatud teavituste jaoks. Peaaegu täiesti korrektne väljalase peitis just need kirjed, mis olid neid otsivale inimesele kõige olulisemad. Klienditoe järjekord oli koht, kus see välja tuli: üleöö sai ettevõttes, mille tavaline põhikaebus oli sõidu tühistamine, põhikaebuseks see, et inimesed ei leia oma sõite üles.

Just seepärast elab semantiline intsident tavalised kontrollid üle. Ainult vastust vaatav test läheb läbi. Tüübikontroll võtab stringi vastu. Ainult vigu jälgiv seire liigitab päringu korrasolevaks, sest see oligi. Kui ükski test ei kinnita, et planeeritud `trips`-kirjetega kasutaja ei tohi saada tühja kogumit siis, kui mõni teine artefakt ütleb `offer`, ei otsi seda tõrget kogu konveieris üldse mitte miski.

## Uuem MCP revisjon ei hakka tähendust otsustama, sest tähendus on teadmine, mis asub otspunktides

Ilmne vastuväide väljade loendamisele on see, et väljade arv muutub. Keegi lisab mõnes hilisemas revisjonis autoriteetsuse välja, ja mis siis? Siis mitte midagi, ja põhjus on nelikümmend aastat vana. 1984. aastal andsid Saltzer, Reed ja Clark [ajakirjas ACM Transactions on Computer Systems](https://web.mit.edu/Saltzer/www/publications/endtoend/endtoend.pdf) sellele põhimõttele nime: „The function in question can completely and correctly be implemented only with the knowledge and help of the application standing at the end points of the communication system.“

Nad rääkisid töökindlusest. Veakontrollist, krüpteerimisest, korduvatest sõnumitest. Nad ei kirjutanud tähendusest sõnagi, ja see olen mina, kes nende argumenti laiendab, mitte neid tsiteerib. Aga vaata, millel nende endi duplikaatide näide püsib. Võrk ei suuda rakenduse korduvaid sõnumeid maha suruda, kirjutavad nad, sest need duplikaadid „look like different messages to the communication system“, nii et mahasurumine „must be accomplished by the application itself with knowledge of how to detect its own duplicates“. See, mida loetakse samaks sõnumiks, on määratlus, mida hoiab rakendus ja mida protokoll ei näe. Määratluse küsimus kannab nende töökindluse argumendi sees juba raskust. Selline on siin muster, ja see kehtib ka sõnavara kohta. See, kas `offer` ja `trips` on üks olem, on teadmine, mis elab sinu ettevõttes, nende inimeste peades, kes lasid sõnadel lahku minna. Liinil ei olnud seda kunagi, ja ükski revisjon ei pane seda sinna.

Ligipääs ei ole kokkulepe. Protokoll teeb iga volitatud allika kättesaadavaks, panemata neist kahte tähendama sama asja, ja see on protokolli tasandil sama seaduse sõnastus, mis teeb AI-virna [sünnist saati lõhestatud ajuga](/et/blog/vaated/miks-ai-muudab-tarkvaratarne-aeglasemaks).

## Autoriteetsus kuulub faktile, mitte tööriistale, ja päritolu ei ütle kunagi, kumb võidab

Päritolu talletab, kust fakt tuli ja kuidas see muutus; ta ei talleta kunagi, et fakt võidab. W3C [PROV ligipääsu ja päringute märkus (2013)](https://www.w3.org/TR/prov-aq/) tõmbab selle piiri oma hääles: „A provenance record is not of itself guaranteed to be authoritative or correct. Trust in provenance records must be determined separately from trust in the original resource.“ See eristus on kogu probleem kahes lauses, sest nelja allikani ulatuv agent vajab otsustust, mitte kirjet.

Turuplatsil ei olnud sellist otsustust kusagil kirjas. Miski ei öelnud, et kood on operatiivse identifikaatori omanik, et tootetiim on soovitud käitumise omanik, et turundus on kliendile nähtava sõna omanik ja et turundussõnavara ei tohi kunagi andmefiltrisse kopeerida. Nii ei protestinud miski, kui toote sisemine sõna just selleks sai. Sellist autoriteetsust ei saa anda tööriistale üks kord ja igaveseks, sest see ei asu tööriista granulaarsuse tasemel. Ühe sõidu puhul, ühel hetkel, juhib juurutatud skeem `trips`-i, heaks kiidetud tooteotsus juhib seda, mida funktsionaalsus tegema peaks, ja turundus juhib `carona`-t. Kolm allikat, kõik autoriteetsed, ükski neist ei ole kirjete süsteem, see system of record.

Andmehaldus on seda teadnud aastakümneid, ja seda tasub otse välja öelda, mitte teeselda, et me selle avastasime. Master data management määrab autoriteetsuse välja kaupa, mitte süsteemi kaupa, ja tema raske osa on alati olnud otsustada, millist välja millisest allikast usaldada; just seda teevad ellujäämisreeglid, survivorship rules. See, mida valdkond kunagi lahendama ei pidanud, on tekst. Ellujäämisreeglid arbitreerivad skeemi sees tüübitud väärtusi, ja ei ole olemas usaldusskoori, mida sa arvutaksid tootedokumendis oleva lause ja veeru määratluse vahel. Granulaarsus oli kogu aeg õige. Keegi lihtsalt ei ehitanud seda sõnade jaoks.

## Vea kirjutas agent, vaatas üle agent, ja see läks mööda inimesest, kes järele ei jõudnud

Filter ei olnud inimlik eksitus selles mõttes, nagu see väljend tavaliselt kõlab. Funktsionaalsuse, mis seda sisaldas, ehitas programmeerimisagent. Koodi ülevaatuse tegi teine AI. Inimese ülevaatus kukkus läbi nii, nagu inimese ülevaatus tänapäeval läbi kukub: uppudes koodimahtu, mida ükski inimene selles tempos läbi lugema ei hakanud. Kaks agenti, mõlemal ligipääs tootedokumentidele, disainidele ja koodibaasile, ja kummalgi ei olnud mingit kirjet selle kohta, milles ettevõte oli sõnade tähenduse osas kokku leppinud. Kumbki ei eksinud omaenda kontekstis. Kirjutav agent kasutas sõna, mis oli tootekeeles tõene. Ülevaatav agent nägi koodi, mis tegi seda, mida ta ütles. Tõrge elas nende vahel, kohas, mida kummalegi ei olnud antud.

See lõhe on mõõdetud osa. [Faros AI 2026. aasta telemeetria](https://pages.faros.ai/hubfs/AI_Engineering_Report_2026_The_Acceleration_Whiplash_Faros.pdf) 22 000 arendaja kohta näitab, et vigu arendaja kohta on 54% rohkem ja 31% võrra rohkem pull requeste läheb sisse ilma igasuguse ülevaatuseta. Inimene kui vahekohtunik lahkub teelt täpselt sel hetkel, mil protokoll keeldub arbitreerimast.

Ühel 2026. aasta preprintil on sellest kõige puhtam versioon, mida ma tean, ja sellega käib kaasas reservatsioon, mille ma pigem ütlen välja kui matan ära: [Dillon ja Varanasi](https://arxiv.org/abs/2605.08112) testisid programmeerimisagenti 41 tiimiotsuse peal ühes koodihoidlas, ja nad ise ehitavad kontekstitööriista, mida nad testisid. Jäta nende pealkirjanumber kõrvale ja loe nende tabelist üht rida. Koodihoidlas oli kaks auditifunktsiooni, ja SOC-2 reegel tegi neist täpselt ühe ekspordi puhul kohustuslikuks. Funktsioon oli seal, koodis. Reegel ei olnud kirjas üheski kohas, kuhu agent ligi pääses. Kui tal kästi tagada, et toiming logitakse, otsis ta, leidis auditifunktsiooni ja kasutas valet, ning autorite sõnul nõuab see vahetegemine teadmist, miks õige funktsioon üldse olemas on. Mõlemat funktsiooni suutis ta lugeda. Mida ta lugeda ei suutnud, oli see, kumma tiim oli valinud, ja ükskõik kui palju koodi lugeda, seda poleks välja tulnud, sest vastust ei olnud kunagi koodis. Autorite endi järeldus on selle aus vorm: otsing teeb vastavuse võimalikuks, ja usaldusväärseks teeb selle struktureeritud töövoog.

## Seo iga tunnustatud alias ühe hallatud olemiga, enne kui agent saab selle järgi filtreerida

Eric Evans kirjutas selle mustri valmis, ja enamik tiime mäletab sellest ainult poolt. Kuulus pool on läbiv keel: [Domain-Driven Design Reference'is (2015)](https://www.domainlanguage.com/wp-content/uploads/2016/05/DDD_Reference_2015-03.pdf) palub ta meeskonnal kasutada seda keelt järjekindlalt kogu suhtluses ja koodis ning kasutada piiritletud konteksti sees sama keelt diagrammides, tekstis ja eriti kõnes. Pool, mille tiimid unustavad, on see, mida ta palub piiridel endil. Seal, kus tõeliselt erinevad mudelid kohtuvad, muudab tema Context Map tõlke nende kokkupuutepunktides selgesõnaliseks, „outlining explicit translation for any communication“. Turuplatsil ei olnud selles töövoos kumbagi kaitset, nii et `offer` kõndis käivitatavasse `trips`-lepingusse ilma, et keegi oleks piiril seisnud.

Turundus ei peaks olema sunnitud kirjutama `trips`. Just see läheb kaotsi, kui keegi seda kuuleb ja haarab sõnastikuprojekti järele. Tootetiim peaks jätkama `offer`-i kirjeldamist, turundus peaks jätkama kliendi keeles rääkimist, ja arendus peaks hoidma stabiilset lepingut. Olemas peab olema kirje, mis on masinloetav ja mis ütleb, et need on üks ja seesama olem, et `trips` on see, millele andmebaas vastab, ja et ülejäänud ei tohi kunagi päringu lähedale sattuda. See kirje kuulub hallatud [kontekstikihti](/en/blog/guides/context-layer-for-ai-agents) (artikkel on inglise keeles) töösüsteemide ja agentide vahel, ja see ongi see, mis [LoomSignal](/et#pricing) on: ise majutatav, tiimidele, kelle sisemine info ei lähe pilveteenuse pakkuja kätte.

Siis on imelihtne kirjutada test, mis oleks selle kinni püüdnud: planeeritud `trips`-kirjetega kasutaja ei tohi kunagi saada tühja kogumit, ükskõik millist sõna kutsuv artefakt kasutas.

Turuplats leidis filtri ja saatis paranduse välja kolme tunniga. Selle juurde ma aina naasen. Kui keegi kord teadis, kust vaadata, kulus suurel ja paljude funktsionaalsustega platvormil ühe sõna vea taastootmiseks ja parandamiseks üks pärastlõuna. Need kolm tundi ei olnud kunagi hind. Hind oli kõik see, mis neile eelnes, kui kood töötas täpselt nii, nagu ta kirjutatud oli, seire oli roheline, ülevaatus oli läbitud, ja ainus süsteem selles ettevõttes, mis teadis, et midagi on valesti, oli järjekord inimestest, kes kirjutasid, et nad ei leia oma sõite üles.

Ava Resource'i tüüp oma tehnoloogiavirnas. Üheksa välja. Ükski neist ei ole see, mida sul vaja oli.

---
Source: https://loomsignal.io/et/blog/vaated/kas-mcp-st-piisab-uhiseks-kontekstiks
