← BlogKarşılaştırma1 Ocak 2026~10 dk okuma

ACP ve MCP

İki Protokolün Hikayesi: Agent Communication Protocol vs Model Context Protocol

ACP ve MCP: İki Protokolün Teknik Karşılaştırması

Geçen hafta bir meslektaşım sordu: "MCP öğrendim ama şimdi bir de ACP çıkmış, kafam karıştı. Bunlar aynı şey mi?" Bu yazıda her iki protokolü teknik detaylarıyla karşılaştıracağız.

TL;DR - Hızlı Özet

  • MCP (Model Context Protocol): Anthropic tarafından geliştirildi, Model-Araç iletişimi odaklı, Client-Server mimarisi, Production-ready
  • ACP (Agent Communication Protocol): IBM Research tarafından geliştirildi, Agent-Agent iletişimi odaklı, Peer-to-Peer mimarisi, Early stage

Önce Problemleri Anlayalım

AI sistemleri geliştirirken iki temel iletişim problemiyle karşılaşıyoruz:

Problem 1: Dikey İletişim Bir AI modeli veritabanına nasıl erişecek? API'ları nasıl çağıracak? Dosyaları nasıl okuyacak?

Problem 2: Yatay İletişim
Birden fazla AI agent birlikte çalışırken nasıl koordine olacak? Görevleri nasıl paylaşacak?

MCP birinci problemi, ACP ikinci problemi çözüyor.

MCP Mimarisi

MCP, client-server modelinde çalışır. Host (Claude Desktop, VS Code) bir MCP client'ı barındırır ve birden fazla MCP server'a bağlanabilir.

Mimari Yapı:

  • HOST (IDE/App) içinde MCP CLIENT bulunur
  • MCP CLIENT birden fazla server'a bağlanır: GitHub Server, Slack Server, Database Server
  • Her server bağımsız çalışır ve kendi tool'larını sunar

MCP'nin Üç Primitive'i

python
# 1. TOOLS - Model'in çağırabileceği fonksiyonlar
@server.tool()
async def query_database(query: str) -> str:
    """Veritabanında SQL sorgusu çalıştır"""
    result = await db.execute(query)
    return json.dumps(result)

# 2. RESOURCES - Model'in okuyabileceği veriler
@server.resource("config://app")
async def get_config() -> Resource:
    """Uygulama konfigürasyonunu döndür"""
    return Resource(
        uri="config://app",
        mimeType="application/json",
        text=json.dumps(config)
    )

# 3. PROMPTS - Önceden tanımlı şablonlar
@server.prompt()
async def code_review(code: str) -> Prompt:
    """Kod review promptu oluştur"""
    return Prompt(
        messages=[
            {"role": "user", "content": f"Review this code:\n{code}"}
        ]
    )

ACP Mimarisi

ACP, peer-to-peer modelinde çalışır. Her agent eşit statüdedir ve birbirleriyle doğrudan iletişim kurabilir.

Mimari Yapı:

  • Agent A (Planner) ↔ Agent B (Executor) ↔ Agent C (Reviewer)
  • Tüm agent'lar bir Message Bus üzerinden haberleşir
  • Çift yönlü iletişim mümkün

ACP'nin Temel Kavramları

1. Agent Card - Her agent'ın kimlik kartı:

json
{
  "name": "data-analyst-agent",
  "version": "1.0.0",
  "description": "Veri analizi yapan agent",
  "capabilities": {
    "canReceiveTasks": true,
    "canDelegateTasks": true,
    "supportedMessageTypes": ["task", "query", "notification"]
  },
  "skills": [
    {
      "id": "analyze-csv",
      "description": "CSV dosyalarını analiz eder",
      "inputSchema": {
        "type": "object",
        "properties": {
          "filePath": { "type": "string" },
          "analysisType": { "type": "string", "enum": ["summary", "correlation", "trend"] }
        }
      }
    }
  ],
  "endpoint": "https://agents.example.com/data-analyst"
}

2. Message Types - Agent'lar arası mesaj tipleri:

python
# Task Assignment
{
    "type": "task",
    "id": "task-123",
    "from": "orchestrator-agent",
    "to": "data-analyst-agent",
    "payload": {
        "action": "analyze-csv",
        "params": {"filePath": "/data/sales.csv", "analysisType": "trend"}
    },
    "deadline": "2026-01-02T10:00:00Z"
}

# Status Update
{
    "type": "status",
    "taskId": "task-123",
    "status": "in_progress",
    "progress": 45,
    "message": "Veri temizleme tamamlandı, analiz başlıyor"
}

# Task Result
{
    "type": "result",
    "taskId": "task-123",
    "status": "completed",
    "output": {
        "trend": "increasing",
        "growthRate": 12.5,
        "insights": ["Q4 satışları %15 arttı", "..."]
    }
}

Detaylı Karşılaştırma

İletişim Yönü:

  • MCP: Tek yönlü (Model → Tool)
  • ACP: Çift yönlü (Agent ↔ Agent)

Keşif Mekanizması:

  • MCP: Server capabilities listesi
  • ACP: Agent Card + Discovery Protocol

State Management:

  • MCP: Stateless
  • ACP: Stateful (task tracking)

Hata Yönetimi:

  • MCP: Try-catch, retry
  • ACP: Dead letter queue, compensation

Güvenlik:

  • MCP: API key, OAuth
  • ACP: mTLS, Agent attestation

Ölçeklenebilirlik:

  • MCP: Vertical (daha güçlü server)
  • ACP: Horizontal (daha fazla agent)

Kullanım Senaryosu:

  • MCP: Tool integration
  • ACP: Multi-agent orchestration

Birlikte Kullanım Senaryosu

E-ticaret sistemi örneği üzerinden görelim:

Mimari:

  • En üstte Orchestrator Agent bulunur
  • Orchestrator, ACP ile 3 alt agent'a bağlıdır: Order Agent, Stock Agent, Cargo Agent
  • Her alt agent, MCP ile kendi backend'ine bağlıdır:
    • Order Agent → Order DB (MCP Server)
    • Stock Agent → ERP API (MCP Server)
    • Cargo Agent → Cargo API (MCP Server)

İş Akışı:

  1. Müşteri sipariş verir
  2. Orchestrator Agent görevi dağıtır (ACP)
  3. Order Agent siparişi kaydeder (MCP → Order DB)
  4. Stock Agent stok kontrolü yapar (MCP → ERP)
  5. Cargo Agent kargo oluşturur (MCP → Cargo API)
  6. Agent'lar durumu Orchestrator'a bildirir (ACP)

Kod Örneği: Hibrit Sistem

python
# ACP Agent that uses MCP tools internally
from acp import Agent, Task
from mcp import Client as MCPClient

class DataAnalystAgent(Agent):
    def __init__(self):
        super().__init__(
            name="data-analyst",
            capabilities=["analyze", "visualize"]
        )
        # Internal MCP client for tool access
        self.mcp_client = MCPClient()
        self.mcp_client.connect("database-server")
    
    async def handle_task(self, task: Task):
        if task.action == "analyze-sales":
            # Use MCP to query database
            data = await self.mcp_client.call_tool(
                "query_database",
                {"query": "SELECT * FROM sales WHERE date > '2025-01-01'"}
            )
            
            # Process data
            analysis = self.analyze(data)
            
            # Return result via ACP
            return {
                "status": "completed",
                "output": analysis
            }
    
    async def delegate_subtask(self, subtask: Task, target_agent: str):
        # Use ACP to delegate to another agent
        await self.send_message(
            to=target_agent,
            message_type="task",
            payload=subtask
        )

Ne Zaman Hangisini Kullanmalı?

Sadece MCP Yeterli

  • Tek bir AI modeli + dış sistemler
  • Claude Desktop, Cursor, VS Code Copilot entegrasyonu
  • Basit otomasyon: "Veritabanından veri çek, API'ya gönder"
  • Tool-calling senaryoları

ACP Gerekli

  • Birden fazla bağımsız agent
  • Karmaşık iş akışları ve görev dağılımı
  • Farklı takımlar farklı agent'lar geliştiriyor
  • Enterprise seviye orchestration
  • Long-running tasks ve state management

İkisi Birlikte

  • Agent'lar arası koordinasyon (ACP) + Her agent'ın tool erişimi (MCP)
  • Microservices benzeri AI architecture
  • Complex workflows with external integrations

Sonuç

MCP ve ACP rakip değil, tamamlayıcı protokoller:

  • MCP: AI'ın "elleri" - dış dünyayla etkileşim
  • ACP: AI'ın "beyni" - agent koordinasyonu

Şu an için MCP öğrenmek daha pratik çünkü production-ready ve yaygın kullanımda. ACP'yi takip edin ama henüz erken - IBM'in bu protokolü nasıl geliştireceğini göreceğiz.


Kaynaklar:

Tartışma

0 yorum

Yorum yapmak için giriş yapın

GitHub ile Giriş Yap

Yorumlar yükleniyor...