AI Genel Çalışma Rehberi

Blog / Karşılaştırma

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

Ö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ı:

MCP'nin Üç Primitive'i

# 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ı:

ACP'nin Temel Kavramları

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

{
  "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:

# 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ü:

Keşif Mekanizması:

State Management:

Hata Yönetimi:

Güvenlik:

Ölçeklenebilirlik:

Kullanım Senaryosu:

Birlikte Kullanım Senaryosu

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

Mimari:

İş 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

# 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

ACP Gerekli

İkisi Birlikte

Sonuç

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

Ş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: