A2A Agents
Delegate tasks to external AI agents that speak the Agent2Agent (A2A) protocol
A2A Agents
The A2A connector plugs an external Agent2Agent (A2A) agent into MCintelligentplus. It is a live tool, not an indexer: nothing is copied into the knowledge base. When you chat, the main assistant can delegate a task to a connected agent, and the agent's answer comes back inline in the same turn.
This is separate from the MC MCP Platform connector. MCP servers expose tools; an A2A connection delegates a whole task to another agent.
How it works
- Agent Card discovery — when you connect, MCintelligentplus fetches the agent's Agent Card from
/.well-known/agent-card.json(falling back to/.well-known/agent.json), reads its name, description, skills, capabilities, and input/output modes, and stores the card on the connector. - Protocol version probe — the connector supports A2A 1.0 and 0.3. The version is resolved empirically when you save or test: an agent that declares a version its handler rejects is detected at connect time instead of failing on your first chat turn.
- Two tools per agent — each connection produces exactly two tools the assistant can call:
ask_<name>— sends a message over the streaming JSON-RPC method (message/streamon 0.3,SendStreamingMessageon 1.0) and returns the accumulated result as text.check_task_<name>— polls a previously started task by ID (tasks/geton 0.3,GetTaskon 1.0) and returns its status and artifacts. A timed-outask_call returns a task ID so the assistant can poll later.
- Human-in-the-loop — if the remote agent replies
INPUT_REQUIRED, the turn is interrupted and an approval card asks you for the missing information before the task continues.
Connecting an agent
- Open the Connectors dialog in your workspace and choose A2A Agents (it appears under Tools & Live Sources).
- Enter the agent's base URL and click Test to discover its Agent Card and confirm the protocol version.
- Fill in the remaining fields and click Add.
| Field | Required | Description |
|---|---|---|
| Agent URL | Yes | Base URL of the A2A-compatible agent, e.g. https://agent.example.com |
| Name | Yes | A friendly name for the connector; also feeds the tool names (ask_<name>, check_task_<name>) |
| When to use this agent | No | Routing hint (up to 2 000 characters) that tells the assistant when it should delegate here on its own. Left blank, the agent's own card description is used. Your knowledge base and native connectors are always tried first |
| Authentication | No | None, API Key, or Bearer Token. Credentials are encrypted at rest and never returned by the API |
| Timeout (seconds) | No | Streaming timeout per call, 5–600 seconds (default 120), under Advanced |
| Protocol version | No | 1.0 or 0.3 (default 1.0), under Advanced. The probe may override the stored value to match what the agent actually serves |
After connecting, the connector card shows the discovered Agent Card — capabilities (Streaming, Push Notifications, Extended Card) and the agent's skills. Use Refresh Card on the card to re-discover it after the remote agent changes; a protocol-version change is picked up then too.
Approvals and trust
A2A calls run through the same human-in-the-loop approval system as other external tools. The first time an agent's tools are invoked you can approve once or choose Always Allow. To pre-trust an agent without a prompt, turn on Always allow this agent on the connector card — this trusts both of the agent's tools in one step (PUT /api/v1/connectors/a2a/{connector_id}/auto-approve). Turning it off removes the trust again.
Security
- Credentials are encrypted with the deployment's
SECRET_KEYbefore storage and are never exposed in read responses. - All outbound calls are SSRF-guarded. The A2A agent must be on a public address unless an administrator enables Admin → System → Network → Allow A2A agents on private addresses (
ALLOW_PRIVATE_A2A_AGENTS, DB-first with an env fallback). Deployments that setPRIVATE_EGRESS_OVERRIDE_LOCKEDcannot enable private egress at all. - Redirects during Agent Card discovery are bounded and re-validated on every hop; credentials are pinned to the agent's own origin.
API endpoints
A2A connectors are managed by authenticated routes under /api/v1:
| Method | Path | Purpose |
|---|---|---|
POST | /api/v1/connectors/a2a?workspace_id={id} | Create a connector (discovers the Agent Card) |
GET | /api/v1/connectors/a2a?workspace_id={id} | List A2A connectors in a workspace |
GET | /api/v1/connectors/a2a/{connector_id} | Read one connector |
PUT | /api/v1/connectors/a2a/{connector_id} | Update name, URL, auth, timeout, or routing hint |
DELETE | /api/v1/connectors/a2a/{connector_id} | Remove a connector |
POST | /api/v1/connectors/a2a/test | Read-only probe: discover the card and resolve the protocol version without saving |
POST | /api/v1/connectors/a2a/{connector_id}/refresh-card | Re-discover and persist the Agent Card |
PUT | /api/v1/connectors/a2a/{connector_id}/auto-approve | Pre-trust or un-trust both tools |
Access is governed by the workspace's connector permissions (connectors:create, connectors:update, connectors:delete), so every call is scoped to the authenticated user's workspace role.