Status: Accepted Version: 1.0 Date: 2026-01-02 Supersedes: N/A Related ADRs: ADR-017 (MCP-LSP Integration), ADR-032 (NATS JetStream), ADR-033 (Kernel-Shell) Related PRDs: PRD-027
[!NOTE] Implementation Details: The technical specifications for this architecture are in:
- SDS-056: A2A Protocol Gateway — A2A server/client adapters
- SDS-057: Semantic Kernel Orchestration — Internal agent orchestration
This ADR remains the authoritative architectural decision; the SDS documents provide implementation details.
SEA-Forge™ agents currently communicate via:
However, there is no standardized way for SEA™ agents to:
Industry Context:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
┌─────────────────────────────────────────────────────────────┐
│ SEA™ Agent Runtime │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ MCP │ │ A2A │ │ Semantic │ │
│ │ (Tools) │ │ (Agents) │ │ Kernel │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └────────────┬────┴─────────────────┘ │
│ │ │
│ ┌────────▼────────┐ │
│ │ Kernel Core │ │
│ │ (SDS-031/055) │ │
│ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Protocol Purposes:
- MCP: Agent ↔ Tool (how agents use capabilities)
- A2A: Agent ↔ Agent (how agents collaborate)
- SK: Internal Orchestration (workflows, memory, plugins)
Integrate A2A Protocol and Microsoft Semantic Kernel to enable SEA™ agents to:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
External Agents SEA™ Agent Runtime
│ │
│ A2A Protocol │
│ (REST/JSON) │
▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ A2A Protocol Gateway │
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ A2A Server │ │ A2A Client │ │
│ │ (Receive Tasks) │ │ (Delegate Tasks) │ │
│ └──────────┬──────────┘ └──────────┬──────────┘ │
└─────────────┼────────────────────────┼──────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ Semantic Kernel Runtime │
│ ┌───────────────┐ ┌─────────────┐ ┌─────────────────┐ │
│ │ Plugins │ │ Filters │ │ Memory │ │
│ │ (Capabilities)│ │ (Governance)│ │ (pgvector) │ │
│ └───────────────┘ └─────────────┘ └─────────────────┘ │
│ │ │ │ │
│ └────────────────┼───────────────────┘ │
│ ▼ │
│ ┌────────────────┐ │
│ │ Kernel Core │ │
│ │ (Execution) │ │
│ └────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────────────────────────────┐
│ Existing Infrastructure │
│ ┌─────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
│ │ MCP Tools │ │ NATS JetStream │ │ Observability │ │
│ │ (SDS-052) │ │ (SDS-047) │ │ (SDS-030) │ │
│ └─────────────┘ └─────────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
| Component | Selection | Justification |
|---|---|---|
| A2A Protocol Binding | REST | User confirmed; matches FastAPI patterns |
| Agent Discovery | Auto-discovery | User confirmed |
| Semantic Kernel SDK | Python | User confirmed; matches existing stack |
| A2A Python SDK | a2a |
Official Linux Foundation SDK |
| Memory Backend | pgvector | Existing infrastructure |
SEA™ agents are discoverable via A2A Agent Card at /.well-known/agent.json:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
"name": "sea-forge-agent",
"version": "1.0.0",
"description": "SEA-Forge™ semantic engineering agent",
"url": "https://sea.example.com",
"capabilities": {
"streaming": true,
"pushNotifications": true
},
"skills": [
{
"id": "semantic-analysis",
"name": "Semantic Code Analysis",
"description": "Analyze code semantics using LSP intelligence"
},
{
"id": "artifact-generation",
"name": "Artifact Generation",
"description": "Generate CADSL diagrams and documentation"
}
],
"authentication": {
"schemes": ["bearer"]
}
}
All SK executions pass through governance filters per SDS-031:
1
2
3
4
5
6
7
8
# Filter execution flow
@kernel.filter(FilterTypes.FUNCTION_INVOCATION)
async def hitl_filter(context: FunctionInvocationContext, next):
if context.function.metadata.get("requires_approval"):
approval = await request_hitl_approval(context)
if not approval.granted:
raise HITLRejected(approval.reason)
return await next(context)
Rejected — Great for graph-based agents but lacks:
Rejected — NIH problem; requires significant development and maintenance.
Rejected — A2A handles communication but not internal orchestration.
/.well-known/agent.jsonSee P027: A2A Protocol & Semantic Kernel Integration
| Reference | URL |
|---|---|
| A2A Protocol Specification | https://a2a-protocol.org/latest/specification/ |
| A2A Python SDK | https://github.com/a2aproject/a2a-python |
| Semantic Kernel Python | https://github.com/microsoft/semantic-kernel |
| Semantic Kernel Docs | https://learn.microsoft.com/en-us/semantic-kernel/ |