Ajanlar Arası İletişim Çağı: Google A2A (Agent2Agent) Protokolü, ‘Agent Card’ Keşif Mimarisi ve Asenkron Görev Orkestrasyonu
Google tarafından başlatılan ve Linux Foundation (Agentic AI Foundation) çatısı altında evrilen açık kaynaklı Agent2Agent (A2A) protokolünün teknik mimarisi; /.well-known/agent-card.json yetenek keşfi, JSON-RPC 2.0 + SSE (tasks/sendSubscribe) akışları, a2a.proto (gRPC) taşıma eşliği ve MCP ile yatay-dikey tamamlayıcılığı üzerinden derinlemesine inceleniyor.

Otonom Yazılımlarda Silolardan Dağıtık Ajan Ağlarına Geçiş
Kurumsal yazılım mühendisliğinde üretken yapay zeka uygulamaları, tekil sohbet asistanlarından uzmanlaşmış otonom ajan kümelerine doğru hızla evrilmektedir. Ancak bir organizasyon içerisinde finansal risk analizi yapan Google ADK (Agent Development Kit) tabanlı bir ajan, tedarik zinciri optimizasyonu yürüten LangGraph tabanlı bir ajan ve altyapı telemetrisini denetleyen Spring AI tabanlı bir ajan aynı iş akışında buluştuğunda kritik bir birlikte çalışabilirlik (interoperability) duvarı ortaya çıkmaktadır. Her çerçevenin kendi bellek yapısını, durum makinesini ve özel JSON şemasını dayatması; ajanlar arası entegrasyonu kırılgan, noktadan noktaya (point-to-point) özel adaptörlere mahkûm etmektedir.
Google tarafından açık standart olarak başlatılan ve Linux Foundation / Agentic AI Foundation (AAIF) yönetişimi altında (IBM’in Agent Communication Protocol kavramlarıyla birleşerek v0.2.x aşamasından v1.0 olgunluğuna taşınan) Agent2Agent (A2A) Protokolü, tam olarak bu boşluğu doldurmak üzere tasarlanmıştır. A2A; farklı çerçeveler, farklı bulut sağlayıcıları ve farklı temel dil modelleri üzerinde çalışan bağımsız ajanların içsel belleklerini, sistem istemlerini (system prompts) veya özel araç zincirlerini ifşa etmeden (opak yürütme) birbirini keşfetmesini, görev devretmesini ve uzun süreli asenkron iş akışlarını koordine etmesini sağlayan evrensel ağ katmanıdır.
1. Kuzey-Güney (MCP) ve Doğu-Batı (A2A) Mimari Tamamlayıcılığı
Çoklu ajan mimarilerinde en sık karşılaşılan kavram yanılgısı, A2A Protokolü ile Anthropic tarafından geliştirilen Model Context Protocol (MCP) standardının birbirinin rakibi olarak konumlandırılmasıdır. Dağıtık sistem topolojisi açısından bu iki protokol birbirini dik açıyla kesen iki farklı iletişim eksenini standartlaştırır:
- Dikey / Kuzey-Güney İletişim (Model Context Protocol — MCP): Tek bir ajanın kendi altındaki deterministik kaynaklara, veritabanlarına, dosya sistemlerine ve harici REST API araçlarına (
@McpTool,@McpResource) nasıl bağlanacağını tanımlar. MCP dünyasında karşı taraf otonom bir karar verici değil; girdisi ve çıktısı kesin şemalarla belirlenmiş bir araç (tool) veya veri kaynağıdır. - Yatay / Doğu-Batı İletişim (Agent2Agent Protocol — A2A): İki veya daha fazla otonom, durum bilgisi tutan (stateful) ve akıl yürütebilen ajanın (peer-to-peer / client-remote agent) birbiriyle nasıl müzakere edeceğini tanımlar. A2A dünyasında karşı taraf basit bir fonksiyon çağrısı değil; kendi içinde çok adımlı planlama yapan, gerektiğinde karşı ajandan ek bilgi isteyen (
input-required) ve görevi saatler sonra tamamlayıp çıktı üretebilen opak bir uzman sistemdir.
Modern bir kurumsal mimaride; üst seviye bir orkestratör ajan, alt uzman ajanlarla A2A protokolü üzerinden yatay görev devri (task delegation) yaparken, her bir uzman ajan kendi sorumluluk alanındaki SQL veritabanlarına ve mikroservislere MCP protokolü üzerinden dikey erişim sağlar.
2. Merkeziyetsiz Yetenek Keşfi: ‘Agent Card’ (/.well-known/agent-card.json)
İki bağımsız ajanın önceden sabit kodlanmış (hardcoded) şemalara ihtiyaç duymadan iletişim kurabilmesi için istemci ajanın (Client Agent), uzak ajanın (Remote Agent) hangi yeteneklere sahip olduğunu, hangi veri modlarını (metin, ses, dosya, yapılandırılmış JSON) kabul ettiğini ve hangi kimlik doğrulama mekanizmasını zorunlu kıldığını çalışma zamanında keşfetmesi gerekir.
A2A protokolü bu sorunu RFC 8615 standartlarına uyumlu Agent Card manifestosu ile çözer. A2A uyumlu her sunucu, kendi kök dizini altında /.well-known/agent-card.json (veya geriye dönük uyumlulukla /.well-known/agent.json) uç noktasından makine tarafından okunabilir bir kimlik kartı yayınlar:
protocolVersionvesupportedInterfaces: Ajanın desteklediği A2A spesifikasyon sürümünü (0.2.6,1.0vb.) ve bağlanılabilecek taşıma protokollerini (JSON-RPC 2.0, gRPC /a2a.protoveya HTTP+JSON) bildirir.capabilities: Ajanın gerçek zamanlı Server-Sent Events (streaming: true), çevrimdışı webhook bildirimleri (pushNotifications: true) ve durum geçiş geçmişi (stateTransitionHistory: true) destekleyip desteklemediğini açıklar.securitySchemesvesecurity: OpenAPI 3.0 standardıyla uyumlu olarak OAuth 2.0 (clientCredentials,authorizationCode), OpenID Connect (OIDC), karşılıklı TLS (mTLS) veya kurumsal API anahtarı gereksinimlerini tanımlar.skillsDizisi: Ajanın yerine getirebileceği uzmanlık görevlerini (id,name,description,tags,examples, girdi/çıktı MIME tipleri) anlamsal yönlendirme (semantic routing) için listeler.
3. Çoklu Taşıma Eşliği ve Durumlu Görev Yaşam Döngüsü (Task Lifecycle)
Standart mikroservis çağrıları milisaniyeler içinde tamamlanan senkron istek-yanıt döngülerine dayanırken, otonom ajan görevleri (örneğin kapsamlı bir siber güvenlik taraması, tedarik sözleşmesi müzakeresi veya çok aşamalı kod üretimi) dakikalar hatta saatler sürebilir. Bu nedenle A2A protokolü “önce asenkron” (async-first) ve durum odaklı (stateful) bir mimari üzerine inşa edilmiştir.
Deterministik Görev Durum Makinesi (State Machine)
A2A üzerindeki her iş birimi benzersiz bir Task nesnesi olarak modellenir ve yaşam döngüsü boyunca şu deterministik durumlardan geçer:
submitted: Görev uzak ajan tarafından teslim alındı ve yürütme kuyruğuna eklendi.working: Uzak ajan kendi iç araçlarını (MCP vb.) ve akıl yürütme döngüsünü kullanarak görev üzerinde aktif olarak çalışıyor.input-required/auth-required: Görevin ilerleyebilmesi için istemci ajandan (veya son kullanıcıdan) ek parametre, onay ya da ikincil bir yetkilendirme jetonu (token) bekleniyor.completed/failed/canceled: Görevin nihai çıktıları (Artifactlistesi) üretilerek başarıyla sonlandığını, hata aldığını veya istemci tarafından iptal edildiğini gösteren uç (terminal) durumlar.
JSON-RPC 2.0, tasks/sendSubscribe (SSE) ve a2a.proto (gRPC)
A2A veri modeli Protocol Buffers (a2a.proto) ile soyutlandığından, aynı görev semantiği üç farklı taşıma katmanında birebir fonksiyonel eşlikle çalışır:
tasks/send(veyamessage/send): Görevi başlatır veyainput-requireddurumundaki mevcut bir göreve yeni bir mesaj turu göndererek senkron yanıt bekler.tasks/sendSubscribe(Gerçek Zamanlı SSE Akışı): İstemci tek bir JSON-RPC 2.0 isteğiyle görevi başlatır ve sunucu yanıt olarakContent-Type: text/event-stream(Server-Sent Events) kanalı açar. Uzak ajan çalıştıkça bu kanal üzerindenTaskStatusUpdateEvent(durum geçişleri) veTaskArtifactUpdateEvent(parçalı üretilen çıktı/kod/belge dilimleri) olaylarını gerçek zamanlı olarak akıtır.tasks/resubscribevetasks/pushNotification/set: Ağ kopmalarındatasks/resubscribeile devam eden akışa yeniden bağlanılır; saatler süren görevlerde isetasks/pushNotification/setile istemci ajanın güvenli webhook URL’si kaydedilerek tamamlanma bildirimlerinin asenkron olarak itilmesi (push) sağlanır.
import express, { Request, Response } from "express";
import crypto from "crypto";
/**
* Google A2A (Agent2Agent) Protokolü Uyumlu Kurumsal Uzman Ajan Sunucusu:
* 1) /.well-known/agent-card.json üzerinden dinamik yetenek ve güvenlik keşfi
* 2) JSON-RPC 2.0 üzerinden tasks/send ve tasks/sendSubscribe (SSE) görev orkestrasyonu
*/
export interface A2APart {
type: "text" | "file" | "data";
text?: string;
file?: { name: string; mimeType: string; uri?: string; bytes?: string };
data?: Record<string, unknown>;
}
export interface A2ATaskStatusEvent {
jsonrpc: "2.0";
id: string | number;
result: {
id: string;
status: {
state: "submitted" | "working" | "input-required" | "completed" | "failed" | "canceled";
timestamp: string;
message?: { role: "agent"; parts: A2APart[] };
};
final: boolean;
};
}
const app = express();
app.use(express.json());
// 1. A2A Merkeziyetsiz Keşif Uç Noktası (Agent Card Manifestosu)
app.get("/.well-known/agent-card.json", (_req: Request, res: Response) => {
res.json({
protocolVersion: "1.0.0",
name: "SecOps-Vulnerability-Auditor-Agent",
description: "Konteyner ve ağ topolojilerinde otonom CVE ve mTLS uyumluluk denetimi yürüten A2A uzmanı.",
url: "https://secops-agent.internal.tastutanlabs.com/a2a/v1",
supportedInterfaces: ["jsonrpc-http", "grpc-a2a-proto"],
capabilities: {
streaming: true,
pushNotifications: true,
stateTransitionHistory: true
},
defaultInputModes: ["text/plain", "application/json"],
defaultOutputModes: ["application/json", "text/markdown"],
securitySchemes: {
enterpriseOAuth2: {
type: "oauth2",
flows: {
clientCredentials: {
tokenUrl: "https://auth.tastutanlabs.com/oauth2/token",
scopes: { "a2a:audit:execute": "Otonom güvenlik denetimi görevlerini başlatma yetkisi" }
}
}
}
},
skills: [
{
id: "audit-mtls-topology",
name: "Kriptografik mTLS ve SNI Politikası Denetimi",
description: "Hedef kümedeki ağ geçitlerinin TLS 1.3 ve mTLS politikalarını analiz eder.",
tags: ["security", "mtls", "netty", "zero-trust"]
}
]
});
});
// 2. A2A JSON-RPC 2.0 + Server-Sent Events (tasks/sendSubscribe) İşleyicisi
app.post("/a2a/v1", async (req: Request, res: Response) => {
const { jsonrpc, id, method, params } = req.body;
if (jsonrpc !== "2.0" || !method) {
res.status(400).json({ jsonrpc: "2.0", id: id ?? null, error: { code: -32600, message: "Invalid Request" } });
return;
}
if (method === "tasks/sendSubscribe") {
const taskId: string = params?.id ?? crypto.randomUUID();
res.setHeader("Content-Type", "text/event-stream");
res.setHeader("Cache-Control", "no-cache, no-transform");
res.setHeader("Connection", "keep-alive");
const emitStatus = (state: A2ATaskStatusEvent["result"]["status"]["state"], text: string, isFinal: boolean) => {
const payload: A2ATaskStatusEvent = {
jsonrpc: "2.0",
id,
result: {
id: taskId,
status: {
state,
timestamp: new Date().toISOString(),
message: { role: "agent", parts: [{ type: "text", text }] }
},
final: isFinal
}
};
res.write(`data: ${JSON.stringify(payload)}\n\n`);
};
// Durum 1: Görev Teslim Alındı (submitted -> working)
emitStatus("working", "Ağ geçidi topolojisi ve TLS el sıkışma kayıtları taranıyor...", false);
// Durum 2: Parçalı Çıktı (TaskArtifactUpdateEvent) Üretimi
const artifactEvent = {
jsonrpc: "2.0",
id,
result: {
id: taskId,
artifact: {
name: "mtls-compliance-report",
index: 0,
parts: [
{
type: "data",
data: {
cluster: "eu-central-prod",
nettyVersion: "4.2.20.Final",
cve202675595Patched: true,
failClosedSniEnforced: true
}
}
],
lastChunk: true
}
}
};
res.write(`data: ${JSON.stringify(artifactEvent)}\n\n`);
// Durum 3: Terminal Durum (completed)
emitStatus("completed", "Kriptografik mTLS denetimi tamamlandı; yapılandırılmış rapor üretildi.", true);
res.end();
return;
}
res.status(404).json({ jsonrpc: "2.0", id, error: { code: -32601, message: "Method not found" } });
});
4. Çok Modlu Parça Soyutlaması (TextPart, FilePart, DataPart) ve Opak Güvenlik
Ajanlar arası iletişim yalnızca düz metin (natural language) üzerinden yürütüldüğünde, alıcı ajanın metni yeniden ayrıştırması (parsing) gerekir ve bu süreç hem gecikmeye hem de halüsinasyon riskine yol açar. A2A protokolü, hem konuşma mesajlarını (Message) hem de görev çıktılarını (Artifact) üç temel Part birleşimi (union type) olarak yapılandırır:
TextPart: Doğal dil açıklamaları, akıl yürütme özetleri veya insan-döngüde (human-in-the-loop) geri bildirim mesajları.FilePart: PDF raporları, ses kayıtları, mimari diyagramlar veya büyük veri kümeleri için MIME tipi belirtilmiş satır içi (base64) ya da imzalı nesne depolama URI (uri) referansları.DataPart: İki ajanın doğal dil belirsizliği olmadan doğrudan makine seviyesinde (deterministic schema) alışveriş yapmasını sağlayan yapılandırılmış JSON nesneleri (örneğin finansal işlem matrisleri, SQL sorgu planları veya güvenlik denetim çıktıları).
Kurumsal Sıfır Güven (Zero-Trust) İlkeleri
A2A protokolü, kurumsal güvenlik sınırlarını protokol seviyesinde zorunlu kılar. Bir ajanın içsel hafızası, kullandığı yerel MCP araçları ve sistem istemleri karşı ajana tamamen kapalıdır (opaque). Kimlik doğrulama ve yetkilendirme; HTTP başlıklarında taşınan OAuth 2.0 / OIDC JWT jetonları, karşılıklı TLS (mTLS) sertifikaları ve asenkron pushNotifications geri çağrılarında kullanılan HMAC-SHA256 / JWS webhook imzaları ile doğrulanır.
5. Mimari Karşılaştırma Matrisi: A2A vs. MCP vs. Klasik REST API
Dağıtık yapay zeka sistemlerinde hangi katmanda hangi protokolün seçilmesi gerektiğini belirleyen temel mühendislik kriterleri aşağıdaki tabloda karşılaştırılmıştır:
| Mimari Kriter | Google A2A (Agent2Agent) Protokolü | Anthropic MCP (Model Context Protocol) | Klasik REST / GraphQL Mikroservisleri |
|---|---|---|---|
| İletişim Yönü ve Topoloji | Yatay (Doğu-Batı): Otonom ajanlar arası eşler arası (peer-to-peer) işbirliği ve görev devri | Dikey (Kuzey-Güney): Tekil bir ajanın altındaki araçlara, veritabanlarına ve şemalara erişimi | Deterministik İstemci-Sunucu: Sabit uç noktalar arasında senkron veri ve işlem çağrıları |
| Karşı Tarafın Doğası | Opak, durum bilgisi tutan (stateful), kendi başına planlama yapan uzman yapay zeka ajanı | Durumsuz (stateless) veya deterministik fonksiyon (@McpTool) ve veri kaynağı (@McpResource) |
Sabit iş mantığı yürüten geleneksel uygulama sunucusu |
| Keşif (Discovery) Mekanizması | /.well-known/agent-card.json üzerinden dinamik yetenek, güvenlik ve beceri (skills) keşfi |
Bağlantı başlangıcında tools/list, resources/list ve prompts/list el sıkışması |
OpenAPI / Swagger veya GraphQL Introspection (çoğunlukla derleme zamanı entegrasyonu) |
| Görev Süresi ve Akış Modeli | Uzun süreli asenkron görevler (submitted -> working -> input-required -> completed), SSE ve Webhook |
Kısa süreli deterministik araç yürütme çağrıları (Stdio veya Streamable HTTP/SSE) | Milisaniye/saniye mertebesinde senkron HTTP istek-yanıt döngüsü |
| Taşıma ve Veri Soyutlaması | JSON-RPC 2.0, gRPC (a2a.proto) ve HTTP+JSON; TextPart, FilePart, DataPart çoklu modları |
JSON-RPC 2.0; metin, kaynak URI’leri ve gömülü arayüz (ui://) paketleri |
HTTP/1.1, HTTP/2 veya HTTP/3 üzerinde ham JSON / Protobuf yükleri |
Sonuç ve Kurumsal Mimari Öneriler
Yazılım sistemlerinin birbirleriyle yalnızca statik veritabanı satırları üzerinden değil, hedef odaklı görev devri ve dinamik müzakere üzerinden konuştuğu yeni dönemde mühendislik organizasyonlarının şu üç tasarım ilkesini benimsemesi kritik önem taşımaktadır:
- MCP ve A2A Katmanlarının Birlikte Kullanımı: Veritabanı sorguları, dosya okuma ve deterministik API çağrıları için MCP kullanılmalı; buna karşın farklı departmanların veya farklı çerçevelerin (Spring AI, Google ADK, LangGraph) geliştirdiği bağımsız ajanların işbirliği için A2A Protokolü standart sınır kapısı olarak konumlandırılmalıdır.
- Doğal Dil Yerine
DataPartile Deterministik Veri Değişimi: İki ajan arasındaki görev devirlerinde halüsinasyon ve ayrıştırma maliyetini sıfırlamak için yapılandırılmış veriler mutlaka A2ADataPartzarfları içinde JSON şemasıyla taşınmalıdır. - Sıfır Güven (Zero-Trust) Agent Card Yetkilendirmesi: Üretim ortamındaki hiçbir A2A sunucusu anonim erişime açık bırakılmamalı;
/.well-known/agent-card.jsoniçindekisecuritySchemestanımlarında OAuth 2.0clientCredentialskapsamları (scopes) ve mTLS doğrulaması zorunlu tutulmalıdır.
Yazılım mimarisi, mikroservis ekosistemleri ve üretken yapay zeka uygulamaları üzerine çalışıyorum. TastutanLabs çatısı altında geliştirici araçları ve SaaS ürünleri inşa ediyorum.
Bu analizin 6 kartlık görsel özetini Instagram'da inceleyin ve kaydedin
Her gün yazılım mimarisi, Java/JVM ve yapay zeka gelişmelerini kendi başına okunabilen 6 slaytlık Mini-Blog serileri halinde paylaşıyoruz.
Yorumlar (0)
Düşüncelerinizi Paylaşın
Henüz yorum yapılmamış. İlk yorumu siz yapın!
Bu Kategorideki Diğer İncelemeler
Yapay Zeka Çağında ‘İkinci Beyin’ (Second Brain) Kurulumu: PARA & Zettelkasten Yöntemleri, Popüler PKM Araçları ve Ajan Bellek Mimarileri
Kişisel ve kurumsal bilgi yönetiminde (PKM) ‘İkinci Beyin’ kurulumunun temel metodolojileri (PARA, CODE, Zettelkasten, Nesne Tabanlı Ontoloji), en popüler araç ekosistemleri (Obsidian, Notion AI, Tana, Capacities, Logseq, Khoj) ve yapay zeka ajanlarına uzun süreli hafıza kazandıran modern çerçeveler (MCP, Mem0, Letta/MemGPT, Zep/Graphiti, LightRAG) karşılaştırmalı olarak inceleniyor.
Google’ın ‘Yapay Zeka Paradoksu’, Anthropic’in 895,4 Milyar Dolarlık S-1 Altyapı Yükü ve OpenAI Lider Göçünün Anatomisi
Google'da yüz milyarlarca dolarlık CapEx ile 'AI Overviews' reklam aşınması arasındaki birim ekonomik paradoksun, ABD'de 41 yerel oylamanın 40'ında reddedilen veri merkezleriyle çarpışan 895,4 milyar dolarlık Anthropic S-1 taahhüdü ve elektrikleşme darboğazının, ayrıca Sam Altman'ın OpenAI lider göçü analizi ile sinemada yapay zeka dönüşümünün teknik incelemesi.
Kodlamada Paralel Ajan Dönemi: Meta’nın ‘Conductor’ Satın Alması, Git Worktree İzolasyonu ve Çoklu Ajan Orkestrasyon Mimarisi
Meta'nın paralel yapay zeka kodlama ajanlarını Git worktree ve microVM izolasyonuyla koordine eden Conductor girişimini satın alarak Meta Superintelligence Labs (MSL) bünyesine katmasının; Claude Code, Codex ve Cursor gibi heterojen ajanların eşzamanlı orkestrasyonu, anlamsal diff sentezi ve yazılım mühendisliğinin geleceği açısından teknik analizi.