{
  "title": "MCP vs A2A — Master Comparison",
  "schemaVersion": "1.0",
  "researchFreeze": "2026-08-26",
  "protocolRevision": "MCP 2026-07-28 / A2A 1.0",
  "mcpRevision": "2026-07-28",
  "a2aCompatibilityLine": "1.0",
  "a2aWebsiteSpecificationLabel": "1.0.0",
  "a2aRepositoryPatchTag": "v1.0.1",
  "a2aVersionSemantics": "A2A negotiates major.minor 1.0; patch tags identify specification releases and are not negotiated.",
  "count": 28,
  "records": [
    {
      "Property": "Full name",
      "MCP": "Model Context Protocol",
      "A2A": "Agent2Agent Protocol",
      "id": "R8-CMP01",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Primary boundary",
      "MCP": "AI application or agent to capability provider",
      "A2A": "Client agent to remote agent",
      "id": "R8-CMP02",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Typical remote component",
      "MCP": "Focused server wrapping tools, data, APIs or local code",
      "A2A": "Opaque agent application that may plan and use its own tools",
      "id": "R8-CMP03",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Caller intent",
      "MCP": "Invoke or retrieve a bounded capability",
      "A2A": "Delegate a goal, request or collaborative unit of work",
      "id": "R8-CMP04",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Core discovery",
      "MCP": "server/discover plus tools/resources/prompts list methods",
      "A2A": "Agent Card, usually at /.well-known/agent-card.json or through registry/configuration",
      "id": "R8-CMP05",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Capability unit",
      "MCP": "Tool, resource, prompt or extension",
      "A2A": "Agent skill advertised in an Agent Card",
      "id": "R8-CMP06",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Execution abstraction",
      "MCP": "tools/call or other concrete protocol request",
      "A2A": "Message that may yield direct Message or durable Task",
      "id": "R8-CMP07",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Long-running work",
      "MCP": "Optional Tasks extension",
      "A2A": "Task is a core protocol object",
      "id": "R8-CMP08",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Immediate response",
      "MCP": "Synchronous result or input_required/task result where supported",
      "A2A": "Direct Message or Task",
      "id": "R8-CMP09",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Durable output",
      "MCP": "Tool/resource result; task result under extension",
      "A2A": "Artifacts attached to a Task",
      "id": "R8-CMP10",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Multi-turn grouping",
      "MCP": "Host/application conversation; explicit handles; MRTR",
      "A2A": "contextId and Task history",
      "id": "R8-CMP11",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Reasoning ownership",
      "MCP": "Usually host/model; server may perform internal logic",
      "A2A": "Remote agent may own planning and reasoning",
      "id": "R8-CMP12",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Implementation opacity",
      "MCP": "Server internals can be hidden but interface is capability-shaped",
      "A2A": "Opaque execution is an explicit design principle",
      "id": "R8-CMP13",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Local deployment",
      "MCP": "Common through stdio",
      "A2A": "Can connect local agents, but A2A does not define MCP's standardized subprocess/stdio binding.",
      "id": "R8-CMP14",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ],
      "editorialCorrection": "Removed the implication that A2A is inherently remote."
    },
    {
      "Property": "Network bindings",
      "MCP": "stdio and Streamable HTTP in current core",
      "A2A": "JSON-RPC, HTTP+JSON/REST and gRPC; custom bindings permitted",
      "id": "R8-CMP15",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Streaming",
      "MCP": "Request-scoped SSE, subscriptions/listen and progress patterns",
      "A2A": "SSE streaming, task subscription, polling and push notifications",
      "id": "R8-CMP16",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Push/webhooks",
      "MCP": "Roadmap/extension territory, not a general core webhook model",
      "A2A": "Core push-notification configuration operations",
      "id": "R8-CMP17",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Identity advertisement",
      "MCP": "Server info and capabilities; remote OAuth metadata",
      "A2A": "Agent Card provider, interfaces, security schemes and optional signatures",
      "id": "R8-CMP18",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Authorization model",
      "MCP": "Detailed OAuth resource-server profile for remote MCP",
      "A2A": "Web-security schemes declared in Agent Card; credentials out of message body",
      "id": "R8-CMP19",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Version form",
      "MCP": "Date-based core revisions such as 2026-07-28",
      "A2A": "Major.minor compatibility such as 1.0; patch tags identify specification releases but are not negotiated.",
      "id": "R8-CMP20",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ],
      "editorialCorrection": "Qualified A2A wire-version semantics."
    },
    {
      "Property": "Core data model",
      "MCP": "JSON-RPC types and JSON Schema-described capabilities",
      "A2A": "Normative Protocol Buffers data model mapped across bindings",
      "id": "R8-CMP21",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Model required",
      "MCP": "No",
      "A2A": "No, although remote party is defined as an agent application",
      "id": "R8-CMP22",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Agent required",
      "MCP": "No",
      "A2A": "Yes in the protocol role sense",
      "id": "R8-CMP23",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Can wrap APIs",
      "MCP": "Commonly",
      "A2A": "An agent can use APIs internally, often through MCP or framework tools",
      "id": "R8-CMP24",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Can be used together",
      "MCP": "Yes: MCP inside agents and A2A between agents",
      "A2A": "Yes: A2A delegates to agents that use MCP",
      "id": "R8-CMP25",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Best fit",
      "MCP": "Reusable bounded tools, data and interaction surfaces",
      "A2A": "Cross-agent delegation, collaboration and long-running agent work",
      "id": "R8-CMP26",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Weak fit",
      "MCP": "Treating every autonomous agent as one oversized tool",
      "A2A": "Using a remote agent for a deterministic low-level function",
      "id": "R8-CMP27",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    },
    {
      "Property": "Governance in August 2026",
      "MCP": "AAIF founding project with MCP-specific maintainers and SEPs",
      "A2A": "AAIF hosted project with its own eight-seat TSC and repositories",
      "id": "R8-CMP28",
      "packageSourceIds": [
        "S003",
        "S004",
        "S038"
      ],
      "sourceIds": [
        "S339",
        "S340",
        "S054"
      ]
    }
  ]
}