- MCP standardizuje način na koji AI agenti otkrivaju i pozivaju alate, resurse i upite, odvajajući agente od konkretnih API-ja.
- A2A definira kako nezavisni agenti otkrivaju jedni druge, razmjenjuju zadatke i dijele artefakte putem HTTP-a i JSON-RPC-a.
- Kombinacija MCP-a za pristup alatima i A2A za saradnju agenata omogućava skalabilne višeagentske arhitekture za različite timove i dobavljače.
- Usvajanje u stvarnom svijetu postavlja nove izazove u brzom dizajnu, sigurnosti, federaciji identiteta i upravljanju kojima se okviri i mrežni pristupnici moraju pozabaviti.
AI agenti više nisu samo fensi chatbotovi koji odgovaraju na pitanja u jednom prozoru. Oni se pretvaraju u distribuirane sisteme koji mogu čitati i pisati kod, pozivati API-je, koordinirati s drugim servisima, pa čak i pregovarati s drugim agentima kako bi obavili posao. Čim se od "jednog pametnog asistenta" pređe na "mrežu agenata", pojavljuje se brutalan problem: kako svi ovi dijelovi međusobno komuniciraju, a da ne upadnu u haos?
To je upravo praznina koju MCP (Model Context Protocol - Protokol konteksta modela) i A2A (Agent-to-Agent Protocol - Protokol agent-agent) pokušavaju popuniti. MCP se fokusira na to kako se agent povezuje s alatima, podacima i kontekstom, dok se A2A fokusira na to kako agenti međusobno komuniciraju i sarađuju. Oni se preklapaju u duhu, ali djeluju na različitim slojevima. U ovom članku ćemo detaljno istražiti šta svaki od njih radi, kako se međusobno dopunjuju, kako se već koriste u stvarnim sistemima i šta to znači za budućnost alata za kodiranje i multiagentskih arhitektura.
Šta MCP zaista predstavlja u praksi
U svojoj suštini, MCP je standardni način izlaganja alata, resursa i uputa AI agentu tako da ih agent može pozivati sigurno i konzistentno. Umjesto direktnog povezivanja svakog alata sa svakim agentom pomoću prilagođenog koda za povezivanje, te alate izlažete iza MCP servera i omogućavate MCP klijentima (agentima) da ih otkriju i pozovu putem objedinjenog protokola.
MCP prati jasnu klijent-server arhitekturu: Host aplikacija (kao što je editor, CLI ili agent runtime) ugrađuje MCP klijenta, a taj klijent otvara veze jedan-na-jedan s jednim ili više MCP servera. Svaki server je samo lagani proces koji pruža skup mogućnosti - obično alate, resurse samo za čitanje i upite za višekratnu upotrebu.
Inspiracija je vrlo slična protokolu jezičkog servera (LSP). LSP je apstrahovao problem „editor ↔ jezičke funkcije“ tako da nismo morali pisati prilagođene integracije između svakog editora i svakog programskog jezika. Ako jednom implementirate jezički server, bilo koji LSP-kompatibilni editor može komunicirati s njim. MCP uzima istu ideju i primjenjuje je na alate i kontekst za LLM-ove: implementirajte alat jednom kao MCP server i svaki MCP-svjestan agent ga može koristiti.
Sa stanovišta transporta, MCP je fleksibilan, ali dovoljno svojeglav da bude praktičan. Koristi JSON-RPC 2.0 kao format poruke i podržava više transporta: stdio za lokalne procese (odlično za desktop aplikacije i lokalne razvojne programere) i HTTP ili SSE za udaljene servere (idealno za Cloud Run ili kontejnerizirane implementacije). Protokol također definira kako klijent otkriva mogućnosti i kako se alati opisuju pomoću JSON Schema tako da LLM može odlučiti kada i kako ih pozvati.
Ključno je da MCP ne pokušava orkestrirati razmišljanje vašeg agenta. To ne odlučuje kada alat treba pozvati ili kako alati trebaju biti povezani u lanac. MCP je sloj povezivanja: on omogućava alate, resurse i upute na strukturiran i lako vidljiv način, ostavljajući donošenje odluka vašem agentskom okviru, planeru ili inženjeringu uputa.
Osnovni MCP gradivni blokovi: alati, resursi i upute
MCP serveri se vrte oko tri glavna elementa: alata, resursa i promptova. Ova tri koncepta su dovoljna da pokriju većinu potreba agenata u stvarnom svijetu bez pretvaranja protokola u potpuni okvir za orkestraciju.
Alati su zasebne akcije koje agent može pokrenuti. razmisli "get_weather""search_inventory""book_flight""run_sql_query"Ili"get_exchange_rateSvaki alat je deklariran s imenom, opisom koji je čitljiv ljudima i ulaznom shemom. Ta shema omogućava LLM-u da razumije koje parametre treba proslijediti, a također štiti vaš backend validacijom argumenata prije izvršenja.
Resursi predstavljaju podatke samo za čitanje koje server može poslužiti na zahtjev. Datoteke, logovi, redovi baze podataka, isječci dokumentacije, konfiguracijske datoteke – bilo koja informacija koju je bolje modelirati kao „preuzmi ovo“ nego „pokreni ovu funkciju“. Resursi mogu biti veliki, pa MCP definira načine za njihovo podjeljivanje i strimovanje, što je ključno prilikom unošenja konteksta u model s ograničenim prozorom.
Promptovi su predlošci za višekratnu upotrebu koje serveri mogu prikazati klijentima. Umjesto da fiksno kodirate duge, osjetljive nizove promptova unutar vašeg agenta, možete ih centralizirati kao MCP prompte. Server ih izlaže s imenima, opisima i slotovima parametara, a klijent popunjava te slotove za vrijeme izvođenja. Ovo je iznenađujuće moćno kada više agenata treba dijeliti iste obrasce za komunikaciju s određenim alatom ili slijediti pravila sigurnosti i usklađenosti na nivou cijele kompanije.
Kada se klijent poveže sa serverom, on izvršava korak otkrivanja mogućnosti. Server odgovara katalogom alata, resursa i upita, svaki s detaljnim metapodacima. Taj katalog se zatim unosi u LLM (obično u sažetom obliku) tako da model može zaključiti: „Mogu koristiti get_exchange_rate da odgovorim na ovo pitanje o konverziji valuta, i ne bih trebao pokušavati izmisliti odgovor.”
Budući da je sve ovo deklarativno, nove mogućnosti se mogu dodavati ili uklanjati bez dodirivanja osnovne logike agenta. Dodajte novi alat na server, ponovo ga rasporedite i svaki MCP klijent koji se poveže vidjet će ga pri sljedećem pregovaranju o mogućnostima. Ovo je trenutak "priključite još jedan USB uređaj" za AI alate.
Konkretan primjer MCP-a: alat za konverziju valuta
Demo valutnog agenta iz Googleovog kompleta za razvoj agenata (ADK) savršena je ilustracija MCP-a u akciji. Počinje izgradnjom malog MCP servera koji pruža pristup jednom alatu, get_exchange_rate, podržan javnim Frankfurter API-jem. Na disku je to samo mala Python skripta koja koristi fastmcp.
Server definira alat s tipiziranim argumentima za currency_from, currency_to i currency_date, plus robusno evidentiranje i obrada grešaka. Kada agent pozove tu funkciju, server kontaktira Frankfurter putem HTTP-a, validira odgovor i vraća JSON sadržaj sa kursom ili objektom greške. Ništa u vezi s ovim nije specifično za AI; MCP samo standardizuje način na koji se ova funkcionalnost opisuje i poziva.
Lokalno, pokrećete server jednostavnom naredbom i on osluškuje http://localhost:8080. Odvojeni testni klijent, koji također koristi MCP, povezuje se i otkriva get_exchange_rate i pokreće poziv za USD → EUR. Zapis prikazuje pozivanje alata, odlazni HTTP zahtjev, uspješan odgovor i vraćeni JSON. Iz perspektive vašeg agenta, samo je pitao „koje alate imam?“, a zatim „molim vas, pozovite ovog“.
Implementacija istog servera u Cloud Run jedva da mijenja priču. Kontejnerizirate MCP server i implementirate ga sa --no-allow-unauthenticated pa zahtijeva IAM-podržanu autentifikaciju, a zatim otvoriti sigurni tunel s vašeg lokalnog računara pomoću naredbe Cloud Run proxy. Lokalno, vaš MCP klijent i dalje misli da komunicira s http://127.0.0.1:8080; proxy transparentno obrađuje autentifikaciju i mrežne skokove.
Ovaj obrazac je moćan u timovima: možete pokrenuti centralizovani MCP server za dijeljene alate poput deviznih kurseva, internih API-ja ili vlasničkih baza podataka. Svaki razvojni agent u organizaciji može se povezati s tim serverom putem sigurnog transporta umjesto da isporučuje vlastiti, malo drugačiji, poluodržavani omotač oko istog API-ja.
Izgradnja agenata na MCP-u: od pojedinačnih alata do kompletnih radnih procesa
MCP postaje zaista zanimljiv kada se ugradi u agentski okvir poput Googleovog ADK-a. U primjeru valutnog agenta, ADK se koristi za kreiranje specijaliziranog LLM agenta čiji je jedini zadatak odgovaranje na pitanja o deviznim kursevima pomoću MCP alata. Sistemska instrukcija agenta doslovno mu kaže: „vaša jedina svrha je da koristite get_exchange_rate alat“.
ADK povezuje ovu instrukciju, odabrani model (na primjer gemini-2.5-flash) i an MCPToolset instanca koja ukazuje na URL MCP servera. Od tada, kada korisnik pita „Koliko je 250 CAD u USD?“, agent razmatra da li mu je potreban poziv alata, popunjava parametre alata, šalje zahtjev putem MCP-a, a zatim piše korisniku prilagođen odgovor koristeći vraćeni JSON.
Isti obrazac se skalira i na mnogo složenije agente. Umjesto API-ja za jednu valutu, možete povezati više servera: jedan za interne baze podataka, drugi za SaaS treće strane, treći za pretraživanje dokumenata, plus server koji izlaže upite za višekratnu upotrebu ili RAG cjevovode. MCP-u nije važno da li ti serveri rade lokalno, na Cloud Runu, u Kubernetes-u ili iza VPN-a, sve dok je transport podržan i autentifikacija ispravno konfigurirana.
ADK također dodaje perspektivu koja agenta postavlja na prvo mjesto koju MCP namjerno izbjegava. Tretira agente kao kompozibilne softverske komponente: možete definirati agente zasnovane na LLM-u, agente s velikim brojem alata, agente za evaluaciju i orkestratore, a svi oni su sposobni izgovoriti MCP odmah po instalaciji. Rezultat je da "izgradi agenta" počinje mnogo više ličiti na "izgradi mikroservis", a mnogo manje na "podesi beskonačni prompt u bilježnici".
Šta je A2A – i zašto sam MCP nije dovoljan
Ako se MCP odnosi na povezivanje agenata s alatima, A2A se odnosi na povezivanje agenata s drugim agentima. Čim imate više agenata koji znaju kako nešto dobro uraditi, potreban vam je način da se međusobno pronađu, razmjenjuju zadatke i ostanu sinhronizovani dok je posao u toku. To je problem za koji je A2A dizajniran.
A2A, koji je pokrenuo Google Cloud, a sada je pod okriljem Linux Foundationa, otvoreni je standard za interoperabilnost između agenata. Koristi poznate tehnologije (HTTP(S), JSON‑RPC 2.0 i SSE za streaming), ali ih obavija modelom domene koji razumije agente, vještine, zadatke, artefakte i mogućnosti. Umjesto „poziva alata“, dobijate jezik višeg nivoa za saradnju.
Dvije osnovne ideje u A2A su kartice agenata i zadaci. Kartica agenta je JSON dokument – obično se može pronaći na /.well-known/agent.json – koji opisuje šta agent može da uradi, kako da mu pristupi, kakvu autentifikaciju očekuje i koje ulazno/izlazne načine rada podržava. Zadaci su jedinice rada koje jedan agent može poslati drugom, sa dobro definisanim životnim ciklusom i strukturiranim rezultatima.
U A2A interakciji, jedan agent preuzima ulogu "klijentskog agenta", a drugi djeluje kao "udaljeni agent". Klijent otkriva karticu udaljenog agenta, odlučuje da li je to pravi partner za posao, a zatim kreira zahtjev za zadatak. Udaljeni agent prima zadatak, koristi vlastiti LLM i interne alate (često putem MCP-a) da ga izvrši, a zatim šalje nazad ažuriranja napretka i konačne artefakte.
Ovaj dizajn čini A2A izvorno point-to-point komunikacijom, asinhronom i prilagođenom mreži. Ispod haube, Python implementacije se grade na ASGI okvirima poput Starlette (putem A2AStarletteApplication) i uvicorn, s artefaktima i ažuriranjima zadataka koji teku preko JSON-RPC-a i SSE-a. To znači da zadaci mogu raditi sekunde ili satima bez blokiranja ijednog HTTP zahtjeva, što je ključno za stvarne višeagentne tokove rada.
A2A primjer: otkrivanje agenta "Hello" i dalje
Kanonski A2A "HelloWorldAgent" prikazuje mehaniku u pojednostavljenom obliku. Vi definirate AgentExecutor podklasa koja implementira execute metoda. Unutra, kao rezultat zadatka, u red čekanja događaja stavljate jednu tekstualnu poruku – „Pozdrav iz A2A!“. Otkazivanje postaje nemoguće u ovom jednostavnom slučaju, ali za stvarna opterećenja postoji udica.
Zatim kreirate AgentSkill opisujući šta ovaj agent može da uradi. U primjeru, vještina hello nosi naziv, opis, skup oznaka i reprezentativne korisničke upite. Ta vještina se zatim objedinjuje u AgentCard zajedno s imenom agenta, verzijom, URL-om, mogućnostima i podržanim ulazno/izlaznim načinima rada.
Konačno, sve povežete u A2AStarletteApplication sa DefaultRequestHandler i pokrenite ga pod uvicornom. Što se tiče vanjskog svijeta, sada imate punopravnog A2A agenta koji vas sluša. http://localhost:9000Bilo koji klijent koji podržava A2A može dohvatiti /.well-known/agent.json, shvatite šta ovaj agent nudi i pošaljite mu zadatke.
U realističnijim implementacijama, isti obrazac se skalira na scenarije orkestracije poput rezervacije putovanja, uvođenja u posao ili automatizacije podrške. „Turistički agent“ može otkriti i komunicirati s „Agentom za letove“, „Agentom za hotele“ i „Agentom za iznajmljivanje automobila“, pri čemu svaki radi iza vlastite A2A krajnje tačke i skriva svoje interne alate i API ugovore specifične za dobavljače. Turistički agent vidi samo zadatke, vještine i artefakte.
Tu dolazi do izražaja A2A-ino razdvajanje briga. Svaki agent nizvodno može odabrati vlastite modele, okvire i alate – hotelski agent izgrađen s ADK-om i MCP-om, agent aviokompanije izgrađen s drugim paketom, agent za iznajmljivanje automobila koji se nalazi u partnerskoj infrastrukturi – i svi i dalje mogu čisto surađivati putem A2A površine.
Spajanje MCP-a i A2A u jednu arhitekturu
Na papiru, podjela zvuči uredno – MCP za alate, A2A za agente – ali u praksi se granice brzo zamagljuju. Pravi sistemi često žele sakriti A2A iza MCP-a, slojevito postaviti MCP unutar A2A ili kombinirati oboje u istom procesu. Zvanični A2A primjeri čak i obuhvataju A2A komunikaciju kao MCP alate izložene s jednog servera, tako da LLM vidi "jedan MCP skup alata" umjesto dva paralelna protokolna steka.
Jedan uobičajeni obrazac je tretiranje MCP-a kao interne veze svakog agenta, a A2A kao eksterne mreže između agenata. Unutar agenta, vaš LLM poziva MCP alate za pristup bazama podataka, API-jima ili skladištima dokumenata. Izvana, vaš orkestrator komunicira s tim agentom putem A2A, predajući zadatke i čitajući artefakte nazad. Iz perspektive orkestratora, agent je servis crne kutije s čistim, tipiziranim interfejsom.
Obrnuti obrazac – prikazivanje A2A kao MCP alata – atraktivan je sa stanovišta integracije. Mnogi LLM provajderi već imaju usavršene alate za MCP: devtools, UI demoe, SDK-ove i sigurnosne vodiče. Izlaganjem "kontakta udaljenog agenta X" kao jednog MCP alata, omogućavate LLM-u da pokrene A2A interakciju s minimalnim podešavanjem. Registrujete samo jedan MCP server, ali "ispod haube", taj server može posredovati u zadacima na cijeloj A2A mreži.
Upravo to pokazuju neki primjeri repozitorija: umjesto direktnog povezivanja svakog udaljenog A2A agenta u model, MCP server nudi kompaktan skup alata koji sami komuniciraju putem A2A protokola. To razbija naivni mentalni model („MCP i A2A moraju biti potpuno odvojeni“), ali znatno pojednostavljuje praktičnu integraciju i održava vašu LLM interfejs površinu malom i dobro uređenom.
Također vas ništa ne sprječava da koristite MCP i A2A izolovano tamo gdje to ima smisla. Mnogim projektima će biti potreban samo MCP za povezivanje jednog agenta s nekoliko alata. Drugi, posebno prilikom povezivanja dobavljača ili internih timova, uveliko će se oslanjati na A2A za međuorganizacijsku koordinaciju, koristeći vlastito interno ožičenje umjesto MCP-a. Važno je da se protokoli ne takmiče – oni se dopunjuju.
Interoperabilnost, okviri i nedostajuća „velika struktura“
Sami protokoli ne garantuju interoperabilnost ako ih svi ugrađuju u potpuno različite arhitekture višeg nivoa. Možete savršeno govoriti MCP i A2A, a ipak završiti sa gomilom međusobno nekompatibilnih obrazaca agenata koji svaki reinventiraju planiranje, pamćenje, rukovanje greškama i upravljanje.
Vjerovatni sljedeći korak u ekosistemu je sloj okvira izgrađenih na vrhu MCP-a i A2A-e koji standardiziraju ne samo žice, već i širu strukturu. Razmislite o tome kako su se web frameworkovi pojavili na vrhu HTTP-a ili kako su se ORM-ovi gradili na vrhu SQL-a. To počinjemo vidjeti s ADK-om, orkestratorima sličnim LangGraphu, upravljanim platformama kao što je Vertex AI Agent Engine i AI gateway-ima koji razumiju oba protokola.
Kada se industrija jednom usaglasi oko nekoliko pragmatičnih obrazaca – „ovako se strukturira višeagentski radni proces preko A2A i MCP“, „ovako se otkrivaju alati timova koji stoje iza MCP-a“ – prepirke oko toga da li nešto „treba biti iza MCP-a ili A2A“ će početi da nestaju. Većina kreatora će jednostavno odabrati framework, priključiti jedan ili dva servera i dobiti razumne zadane postavke.
Komplikovaniji i sporiji problem je brzo inženjerstvo i brza interoperabilnost. Čak i sa savršenim protokolima, kada povezujete sisteme putem MCP-a i A2A, efektivno dozvoljavate proizvoljnim uputama – sistemskim instrukcijama, opisima alata, sigurnosnim ogradama – da cure i međusobno djeluju preko granica. Ako su te upute neusklađene, redundantne ili potpuno kontradiktorne, vaše performanse pate mnogo prije nego što se pojave sigurnosni problemi.
U praksi, loše dizajnirani upiti i instrukcije unutar MCP + A2A steka mogu proizvesti ogromnu latenciju, halucinacije i nestabilnost. Svaki agent može biti lokalno „dobro informiran“, ali kada ih slojevito rasporedite, tokovi mogu postati krhki: alati imaju pogrešne prioritete, kontekstni prozori se rasipaju, a očekivanja na nivou korisnika su kršena. A2A može koordinirati zadatke, MCP može izložiti alate, ali nijedan vas ne prisiljava da upute budu koherentne.
Zbog toga timovi koji su zapravo isporučili LLM proizvode u velikim razmjerima imaju tendenciju da brzo inženjerstvo tretiraju kao prvorazrednu inženjersku brigu, a ne kao podešavanje u zadnji čas. Poslovni dionici često vide upute kao magičan način da se sve popravi; inženjeri ponekad odbacuju upute kao sekundarni detalj u odnosu na kod. Stvarnost je negdje u sredini: upute neće učiniti loš sistem dobrim, ali loše izrađene upute mogu apsolutno uništiti inače solidnu arhitekturu.
Sigurnost, identitet i upravljanje u MCP-u i A2A-i
Kada jednom počnete dozvoljavati agentima da djeluju u ime ljudi preko granica MCP-a i A2A-e, identitet i autorizacija brzo postaju centralni problemi. Jedan zahtjev može proći kroz nekoliko slojeva delegiranja: korisnik razgovara s orkestracijskim agentom, koji poziva alat preko MCP-a, koji interno poziva druge MCP servere ili A2A agente koji zahtijevaju zasebne akreditive.
Konkretni scenariji se pojavljuju svuda: SaaS aplikacija otkriva MCP server kojem su potrebni OAuth tokeni; interni HR agent iza A2A koristi korporativne LDAP identitete; alat za analitiku treće strane koristi vlastiti SSO. Korisnik očekuje „prijavi se jednom i obavi posao“, ali iza kulisa više sistema identiteta mora biti federirano.
Googleova A2A dokumentacija eksplicitno navodi federaciju više identiteta kao ključni izazov. Korisnik U može komunicirati s Agentom A kojem je potreban identitet sistema A (npr. LDAP za preduzeća), dok Agent A interno treba delegirati ovlaštenja Agentu B kojem je potreban identitet sistema B (npr. eksterni SaaS provajder). Protokoli moraju podržavati prenošenje i određivanje opsega ovih identiteta bez prisiljavanja korisnika na ručnu ponovnu autentifikaciju za svaki skok.
Pružatelji identiteta i OAuth/OIDC platforme se brzo prilagođavaju ovoj novoj stvarnosti. Infrastruktura poput Logto-a, Auth0-a ili internih pružatelja identiteta već može izdavati tokene koje agenti nose putem MCP i A2A poziva. Otvoreno pitanje nije je li to moguće – očito jeste – već kako standardizirati obrasce tako da alat izgrađen danas sutra ne postane sigurnosni ili upravljački problem.
Pored autorizacije, vidljivost i sprovođenje politika će se vjerovatno preseliti u zajedničke "agentske prolaze". Ti gateway-i mogu prekidati MCP i A2A promet, centralizirati evidentiranje, provoditi ograničenja brzine, povezivati identitete korisnika i agenata, pa čak i filtrirati kojim alatima ili agentima se može pristupiti u kojim kontekstima. Ovo počinje jako ličiti na API gateway-e - samo podešene za AI promet umjesto običnog HTTP-a.
Povlačeći se, MCP i A2A tiho mijenjaju način na koji razmišljamo o integraciji softvera i alatima za kodiranje. Za programere, asistent za kodiranje povezan s MCP-om i ACP-om (Agent Client Protocol za IDE-ove) može otkriti alate, pozvati jezičke servere, integrirati se s kontrolom verzija i komunicirati s agentima drugih programera – sve putem standardnih protokola. Za preduzeća, višeagentski sistemi mogu interoperabilno funkcionirati između timova i dobavljača bez ponovnog povezivanja svega za svaki novi slučaj upotrebe.
Dugoročni prelazak je od „hard-integriranih aplikacija“ ka „agentskim ekosistemima“. Baš kao što su USB i HTTP omogućili povezivanje proizvoljnih uređaja i usluga, MCP i A2A imaju za cilj da alate i agente učine priključnim. Pobjednici će biti timovi koji ove protokole tretiraju ne kao sjajne logotipe, već kao temeljnu infrastrukturu za način na koji njihovi sistemi komuniciraju, sarađuju i razvijaju se tokom vremena.