Skip to content

Marketplace

The Marketplace is a public registry where you publish an agent, fork one someone else published, or invoke it without forking. A2A (Agent-to-Agent) is an open protocol for agents to find and call each other, and an agent card is the public description an agent publishes. A fork is your private copy of a published agent: the original author sees none of your data or runs. Other platforms can call your public agents through A2A without ever sharing your tenant.

MCP, A2A and the marketplaceHow an agent gets tools, how other agents find and call it, and how a published agent is bought and settled.
MCP registrymcp_serversAttachmentagent_mcp_attachmentsYour agentprivate by defaultAnother agentany tenantDirectory/.well-known/agent.jsonA2A card/v1/agents/{name}/cardMarketplace/v1/marketplaceForkinto your tenantInvokecross-tenant, by slugBuyer tenantSigned receiptverify at /proof
Swipe sideways to pan.

1. Pick a server

From the curated registry.

The dashboard Marketplace (/marketplace) fronts two registries.

Registry Endpoint What you do
Agent Marketplace /v1/marketplace Filter by category or search text; star, fork, or unpublish your own. Listings carry a description, tags, README, star and fork counts.
MCP Marketplace /v1/mcp/servers Browse a curated registry of Model Context Protocol servers. Attach one with POST /v1/agents/{name}/mcp-servers.

Publishing copies the agent’s manifest into the public registry under a slug. There is no review queue and no unlisted mode: the listing is live when the call returns.

POST /v1/marketplace/publish
{
"agentName": "research-agent",
"description": "Cited research reports",
"category": "research",
"tags": ["research", "web"],
"readme": "..."
}
DELETE /v1/marketplace/{slug} # unpublish

It returns { id, slug, url }. The slug is <your-tenant-slug>-<agent-name>.

GET /v1/marketplace?category=research&q=citations
GET /v1/marketplace/{slug} # manifest, card, README
POST /v1/marketplace/{slug}/fork { "newName": "my-copy" }
POST /v1/marketplace/{slug}/star

Fork returns { agentId, agentName }. A fork is a normal agent in your tenant: edit its prompt, swap models, add connectors, and the original is unaffected.

A buyer can invoke a published agent without forking it. The run executes in the seller’s tenant, with their LLM keys and budgets. The seller’s hard-fail budget applies (HTTP 402), and the buyer’s input is validated against the manifest’s inputSchema when one exists. The buyer gets the output and an HMAC-SHA256 signed receipt.

POST /v1/marketplace/{slug}/invoke
{ "input": { "topic": "..." } }
GET /v1/marketplace/invocations?role=buyer # buyer-side history
GET /v1/marketplace/invocations?role=seller # seller-side history

Invoke returns { invocationId, status, output, costUsd, signature, sellerTenantId, agentName, issuedAt, receipt }. The receipt object carries invocationId, buyerTenant, sellerTenant, marketplace, agentName, runId, costUsd, issuedAt, signature and algorithm.

Status When
400 Input fails the manifest’s inputSchema
402 Seller budget reached
404 Unknown slug
502 The seller run failed
503 Execution unavailable

Agents are private by default (agents.is_public = false). The card, the well-known directory and A2A invoke expose an agent to a non-owner only when it is public.

GET /v1/agents/{name}/card # own agent or is_public; else 404
GET /.well-known/agent.json # lists only public agents
POST /v1/agents/{name}/a2a/invoke # authenticated callers only; 401 without credentials
  • An authenticated caller always sees and can invoke their own agents, whatever the visibility.
  • A card or invoke for another tenant’s non-public agent returns 404, not 403, so the agent’s existence does not leak.
  • Other platforms discover agents through /.well-known/agent.json and /v1/agents/{name}/card.
  • Inside a running agent, ctx.a2a(agentCardUrl).submit({ input }) calls a remote A2A agent through the runtime sidecar, and ctx.subagent(name, input) calls another agent by name. The outbound A2A call works in the production runtime only; the Python AgentContext stub raises NotImplementedError.
  • No endpoint sets is_public. Today it is a column on agents that an operator flips.
  • No public verifier for invocation receipts. Verifying one needs the platform signing key.
  • No pal marketplace command. The Python SDK has client.marketplace.
  • No review queue and no unlisted mode for published agents.

Next: Accounts and teams.