A2A Servers
Expose project workflows as the skills of an A2A (Agent2Agent) server so external agents can discover and call them.
Coming soon
An A2A Server exposes workflows from your projects over the Agent2Agent (A2A) protocol so that external A2A clients - another agent or your own code - can discover them through an agent card and send them tasks. Where an MCP Server publishes your tools to an assistant, an A2A Server publishes an agent that other agents can delegate work to. Each exposed workflow becomes one skill of that agent.
Each server gives you a secret-key URL. The agent card lives at:
GET https://<your-host>/api/automation/a2a/<secretKey>/.well-known/agent-card.jsonand the JSON-RPC endpoint is:
POST https://<your-host>/api/automation/a2a/<secretKey>The endpoint supports the message/send, message/stream, tasks/get and tasks/cancel methods.
Create an A2A server
- In the Automation workspace, open A2A Servers from the sidebar.
- Click New A2A Server (or Create A2A Server while the list is empty).
- Give it a name and a description - both appear on the agent card that external clients read.
- Choose whether to Require authentication (see Authentication below). It is on by default.
A new server is enabled straight away; switch it off or on with the toggle on its card. The server belongs to the environment selected in the application sidebar when you create it (Development, Staging, or Production), and keeps it - so you can expose a different agent per environment. The list shows the servers of the selected environment.
Creating, editing and deleting servers, and changing their skills, requires the ADMIN role. The secret key - and so
the URLs on the server's Connect tab - is visible to tenant admins only.
A server exposes nothing until you add a project to it.
Expose workflows as skills
- Expand the server's card, open the Workflow Skills tab and click Add Workflows.
- On the Basic step, select a project and a published version, then click Next.
- On the Workflows step, switch on the workflows to expose. Only workflows with a New Workflow Call trigger
(
workflow/v1/newWorkflowCall) are listed - that trigger is what lets the workflow be invoked as a skill. A workflow whose trigger input schema requires any input other thanmessageis left out too: an A2A call only fillsmessage, with the text of the caller's message, so the other inputs could never be supplied. - For each switched-on workflow, pick its Connections and fill in its Inputs, then click Add. Every required connection must be set; a connection must belong to the server's environment.
Adding a project does not touch your own deployments. The server deploys the selected workflows itself, in a deployment of its own in the server's environment that does not appear in the Deployments list. Each selected workflow becomes a skill on the agent card; the skill id is the workflow id.
A server can hold one version of a project: adding a project the server already has is rejected, whichever version you pick. To expose more of its workflows, edit the workflows of the project already on the server; to switch to another version, choose Change Project Version from the project's menu.
Each project on the Workflow Skills tab expands to list its exposed workflows. From the project's menu:
- Edit Workflows changes the selection, and the connections and inputs of every exposed workflow.
- Change Project Version moves the server's deployment of the project to another published version.
- Delete removes the project and its skills from the server.
Each workflow row has a Configure button, a toggle and a menu:
- Configure gives the skill a Skill Name and a Skill Description. Left blank, they fall back to the workflow's own label and description.
- The toggle switches the skill off without removing it. A disabled workflow is left out of the agent card and cannot be run; switch it back on to expose it again.
- Edit changes the connections and inputs of that workflow only; Remove takes the workflow off the server. Removing the last workflow of a project removes the project.
Tags and filters
Tag servers with the Tags control on each card. The sidebar filters the list by Projects - the projects exposed by any server in the selected environment - and by Tags; the active filter is shown above the list.
How a task runs
When a client sends message/send:
- The skill is picked from
metadata.skillIdon the request params, or on the message. A server with exactly one skill uses it when noskillIdis given; a server with several skills rejects a message without askillId, and an unknownskillId, with an invalid-params error listing the valid ids. - The text parts of the message are joined and passed to the workflow's trigger as its
messageinput. A message without text is rejected. Continuing an existing task with a new message is not supported. - ByteChef starts the workflow and waits up to 300 seconds for it to finish. A finished run returns its response
output, or the run's outputs, as a
completedtask; a failed run returns afailedtask. A run that is still going returns aworkingtask to poll withtasks/get. - The reply text is the output itself when it is text, and the value when the output holds a single text value - such
as the
messageof a Response to Workflow Call step. Any other output is sent as JSON. - A run that pauses on an approval step returns an
input-requiredtask, with the approval form link when ByteChef's public URL is configured. Once the decision is made, polltasks/getfor the result.
The task id identifies the workflow run, so tasks/get works for any task of the server, not only recent ones.
tasks/cancel does not stop a run: it answers that the task cannot be canceled.
A message/stream call is answered over Server-Sent Events with a working status event followed by a final
status event. Streaming is event-level, not token-level: ByteChef runs the workflow and sends its result as the
final event. The agent card advertises streaming: true.
The agent card
The server's Connect tab shows the agent card URL and the JSON-RPC endpoint, each with a copy button, and whether requests need an API key.
The card carries the server's name and description, protocol version 0.3.0, the JSON-RPC transport, text input and
output, and one entry per skill. Its url is built from ByteChef's public URL when one is configured, and from the
request URL otherwise.
Authentication
The secret key in the URL identifies the server and the tenant that owns it. On top of that:
- Require authentication on (default): every request - the agent card included - must present a ByteChef
workspace API key as a
Bearertoken in theAuthorizationheader. The key must be an Automation key whose environment matches the server's environment, and its user must be active. Other requests are rejected with401. - Require authentication off: the secret-key URL is sufficient and no API key is needed; an API key that is sent is ignored. Use this only for low-risk agents or short-lived testing.
A disabled server, or an unknown secret key, answers every request with 401.
Call an A2A agent from an AI Agent
The A2A component lets an AI Agent delegate tasks to a remote A2A agent - an A2A Server of this or another ByteChef, or an agent built on another framework.
- Attach the A2A Agent Tool to the AI Agent's Tools slot.
- Set Agent URL to the remote agent's address - for a ByteChef A2A Server, the endpoint URL from the server's Connect tab. Pasting the agent card URL also works.
- When the agent requires authentication, pick an A2A connection - create one with the agent's Bearer Token,
for a ByteChef A2A Server with Require authentication on a workspace API key. It is sent as an
Authorization: Bearerheader on the agent card request and on every message. The connection is optional: leave it out for an agent that accepts unauthenticated requests.
The model sees the tool as sendTaskToRemoteAgent with a generic description. Give each A2A Agent Tool its own Tool
Name and Tool Description - for example askJavaReleaseExpert - so the model knows what the remote agent is for
and can tell several remote agents apart. The tool reads the agent card from <Agent URL>/.well-known/agent-card.json,
sends the task as an A2A message to the Agent URL, and returns the remote agent's text reply.
Deleting
- Deleting an A2A server removes its projects, their skills and the deployments the server created.
- Deleting a project from a server removes its skills and that project's deployment.
- Deleting a workflow removes the skill that exposed it.
How is this guide?
Last updated on