← Documentation
@opencommerceprotocol/bridge-a2a
A2A Bridge
Convert an OCP manifest into a Google A2A (Agent-to-Agent) agent card. Each OCP tool becomes an A2A “skill,” enabling A2A-compatible agents to discover and invoke OCP store capabilities.
Installation
npm install @opencommerceprotocol/bridge-a2a
Usage
Two core functions: ocpToA2ACard() returns an agent card object, generateA2AWellKnown() returns a JSON string ready to serve.
convert.ts
import { ocpToA2ACard, generateA2AWellKnown } from '@opencommerceprotocol/bridge-a2a';
import type { OCPManifest } from '@opencommerceprotocol/spec';
const ocpManifest: OCPManifest = { /* your manifest */ };
// Convert to A2A agent card object
const card = ocpToA2ACard(ocpManifest);
// Or generate the JSON string for serving at /.well-known/agent.json
const agentJson = generateA2AWellKnown(ocpManifest);Serving the A2A Agent Card
Express
server.ts
import express from 'express';
import { generateA2AWellKnown } from '@opencommerceprotocol/bridge-a2a';
import manifest from './.well-known/ocp.json';
const app = express();
app.get('/.well-known/agent.json', (req, res) => {
res.setHeader('Content-Type', 'application/json');
res.send(generateA2AWellKnown(manifest));
});Hono
worker.ts
import { Hono } from 'hono';
import { ocpToA2ACard } from '@opencommerceprotocol/bridge-a2a';
import manifest from './.well-known/ocp.json';
const app = new Hono();
app.get('/.well-known/agent.json', (c) => c.json(ocpToA2ACard(manifest)));A2AAgentCard Type
types.ts
interface A2AAgentCard {
name: string; // '<merchant name> Shopping Agent'
description: string; // from merchant.description or auto-generated
url: string; // merchant.url
iconUrl?: string; // merchant.logo
version: string; // '1.0.0'
capabilities: {
streaming: boolean;
pushNotifications: boolean;
stateTransitionHistory: boolean;
};
authentication: {
schemes: string[]; // ['none'] by default
};
skills: A2ASkill[];
ocp_source?: string; // link back to /.well-known/ocp.json
}
interface A2ASkill {
id: string; // OCP tool name, e.g. 'search_products'
name: string; // Human-readable, e.g. 'Search Products'
description: string; // OCP tool description
tags?: string[]; // e.g. ['shopping', 'search', 'catalog']
examples?: string[]; // sample queries
inputModes?: string[]; // ['application/json']
outputModes?: string[];// ['application/json']
}Tool to Skill Mapping
Each OCP tool in manifest.interact.tools becomes an A2A skill with auto-generated tags and example queries:
search_productsshoppingsearchcatalog
“Find blue running shoes under $100”
get_productshoppingproductcatalog
“Get details for product ID 12345”
get_product_qashoppingproductqa
“Does product 123 fit a 6-foot person?”
compare_productsshoppingcomparison
“Compare products 123, 456, and 789”
add_to_cartshoppingcartpurchase
“Add 2 units of product 123 to cart”
get_cartshoppingcart
“What is in my cart?”
update_cartshoppingcart
“Update product 123 quantity to 3”
begin_checkoutshoppingcheckoutpurchase
“Start checkout”
check_availabilityshoppinginventory
“Is product 123 in stock?”
Example Output
A generated agent card for a store called “My Store”:
/.well-known/agent.json
{
"name": "My Store Shopping Agent",
"description": "AI shopping agent for My Store. Search products, manage cart, and begin checkout via OCP.",
"url": "https://mystore.com",
"version": "1.0.0",
"capabilities": {
"streaming": false,
"pushNotifications": false,
"stateTransitionHistory": false
},
"authentication": { "schemes": ["none"] },
"skills": [
{
"id": "search_products",
"name": "Search Products",
"description": "Search the product catalog by keyword, category, or price range",
"tags": ["shopping", "search", "catalog"],
"examples": ["Find blue running shoes under $100"],
"inputModes": ["application/json"],
"outputModes": ["application/json"]
}
],
"ocp_source": "https://mystore.com/.well-known/ocp.json"
}OCP Manifest Declaration
Declare the A2A endpoint in your OCP manifest so agents can discover it:
/.well-known/ocp.json (excerpt)
{
"bridge": {
"a2a": "https://mystore.com/.well-known/agent.json"
}
}CLI Alternative
Generate the A2A agent card without writing code:
npx @opencommerceprotocol/cli bridge --protocol a2a --manifest .well-known/ocp.json