07-03-01 — OpenAPI vs MCP vs A2A: Decision Matrix

⏱ 12 minFontes validadas em: 2026-04-29

TL;DR

Três padrões, três camadas. OpenAPI é para integração humano-para-sistema e sistema-para-sistema tradicional — ainda relevante para legado e sistemas externos. MCP é para agente-para-ferramenta — substitui function calling ad-hoc e é o padrão de integração quando há um LLM no client. A2A é para agente-para-agente — orquestração de workflows que cruzam domínios e vendors. Use a matrix deste tópico para decidir qual usar em cada cenário da sua empresa.

Os três padrões no contexto de 2026

Em 2026, uma empresa .NET enterprise normalmente precisa dos três padrões simultaneamente — em camadas diferentes. Entender qual usar onde é a habilidade central para arquitetar sistemas de IA que funcionam de verdade.

Decision Matrix por cenário

Cenário Use OpenAPI Use MCP Use A2A
App web consome uma API REST ✅ Sim
Sistema B2B entre empresas sem IA ✅ Sim
LLM precisa acessar banco de dados ⚠️ Possível mas trabalhoso ✅ Melhor opção
LLM precisa chamar API de terceiros ⚠️ Via function calling manual ✅ MCP server wrappando a API
Agente de análise delega para agente jurídico ✅ Sim
Orquestrar agentes Salesforce + SAP + Azure ✅ Sim
Copilot que acessa SharePoint ✅ MCP server SharePoint
Workflow de aprovação multi-etapa com IA ⚠️ Parcialmente ✅ Melhor opção
Migrar API REST legada para IA ✅ Manter existente ✅ Adicionar MCP wrapper
Dev usando VS Code precisa de contexto do projeto ✅ MCP server local
💡 OpenAPI e MCP não são excludentes

O padrão mais comum em empresas maduras: você tem uma REST API com OpenAPI spec → cria um MCP server que wrappa essa API → o LLM usa o MCP server. Você mantém a API existente sem mudanças e adiciona capacidade de IA por cima.

Comparativo técnico detalhado

Critério OpenAPI MCP A2A
Quem consomeHumanos, apps, sistemasLLMs / agentes IAAgentes IA
EstiloREST (stateless)JSON-RPC (session)REST + SSE (stateful)
DiscoveryOpenAPI spec (Swagger)tools/list/.well-known/agent.json
StreamingParcial (SSE/WebSocket custom)Nativo (Streamable HTTP)Nativo (SSE)
EstadoStatelessPor sessãoPor task (persistente)
Autonomia no serverNenhuma (executa lógica)Nenhuma (executa tools)Total (tem LLM próprio)
Tooling MicrosoftAzure API ManagementAzure Functions, Copilot StudioFoundry Agent Service
Curva de adoçãoBaixa (familiar)Baixa-médiaMédia-alta
MaturidadeAlta (padrão há 10+ anos)Média (1+ ano)Baixa-média (1 ano)

Fluxo de decisão

flowchart TD Start["Preciso integrar sistemas"] Q1{"Há um LLM\nenvolvido?"} Q2{"Quem está\ndo outro lado?"} Q3{"A operação\né síncrona\n(< 30s)?"} Q4{"Precisa de\ndiscovery\ndinâmico?"} OpenAPI["✅ OpenAPI / REST"] MCP["✅ MCP"] A2A["✅ A2A"] Both["✅ MCP + A2A\n(agente usa MCP\npara suas tools)"] Start --> Q1 Q1 -->|"Não"| OpenAPI Q1 -->|"Sim"| Q2 Q2 -->|"Sistema/API/DB\nsem autonomia"| MCP Q2 -->|"Outro agente\ncom LLM"| Q3 Q3 -->|"Sim, simples"| MCP Q3 -->|"Não, longa\nou multi-turn"| Q4 Q4 -->|"Sim, múltiplos\nvendors/domínios"| Both Q4 -->|"Não, agente\ninterno simples"| A2A

Pattern: OpenAPI → MCP wrapper

Para times que já têm APIs REST existentes, o padrão mais pragmático é criar um MCP server wrapper — sem mexer na API original:

from mcp.server import Server
from mcp.types import Tool, TextContent
import httpx

server = Server("erp-api-wrapper")

@server.call_tool()
async def call_tool(name: str, arguments: dict) -> list[TextContent]:
    """Wrappa chamadas MCP em chamadas REST para a API legada."""
    
    api_base = "https://erp.suaempresa.com/api/v2"
    
    if name == "get_project_status":
        async with httpx.AsyncClient() as client:
            resp = await client.get(
                f"{api_base}/projects/{arguments['project_id']}",
                headers={"Authorization": f"Bearer {get_token()}"}
            )
            return [TextContent(type="text", text=resp.text)]
    
    if name == "list_open_tickets":
        async with httpx.AsyncClient() as client:
            resp = await client.get(
                f"{api_base}/tickets",
                params={"status": "open", "limit": 20},
                headers={"Authorization": f"Bearer {get_token()}"}
            )
            return [TextContent(type="text", text=resp.text)]
🔗 Recomendação para a Impar

Como consultoria .NET, o path mais rápido para valor: (1) identificar 3-5 APIs internas mais usadas pelos devs; (2) criar MCP servers para cada uma; (3) configurar no VS Code dos devs. Isso transforma APIs que ninguém lembrava de usar em context automático para o Copilot. ROI em semanas, não meses.

Quando A2A vai ser necessário na Impar

A2A se torna relevante quando você precisa orquestrar workflows que cruzam os sistemas dos clientes. Exemplos reais:

  • Vale: agente de análise ambiental (Azure) colaborando com agente de planejamento de mina (SAP) — A2A entre vendors
  • TIM: agente de atendimento escalando para agente especialista de billing — A2A interno
  • Axia: agente de triagem coordenando com agente de análise de risco — A2A no workflow de crédito

Como isso se conecta

  • 07-01-01: MCP em detalhe
  • 07-02-01: A2A em detalhe
  • 07-03-02: aplique a matrix — desafio SharePoint com MCP
  • → Módulo 08 — Stack Microsoft: como o Semantic Kernel une essas três camadas

Fontes

  1. MCP Introduction — modelcontextprotocol.io
  2. A2A Protocol — A2A and MCP Comparison (a2aprotocol.ai)
  3. OpenAPI Specification 3.1 — swagger.io
  4. Azure API Management — learn.microsoft.com