How A2A is wired into this repo
This repo exposes an Agent2Agent (A2A) agent on two different surfaces, each depending on a different SDK cataloged on this site:
- CF Worker (
workers/web): servesGET /.well-known/agent-card.jsonandPOST /a2a(tasks/send, HTTP+JSON transport). No gRPC -- Cloudflare Workers is not Node.js, so the gRPC bindings in@a2a-js/sdk(which require@grpc/grpc-js, a Node.js-only package) cannot be used here; JSON-RPC / HTTP+JSON is used instead. - Rust bridge (
crates/a2a-bridge): a long-running axum HTTP server that wraps the MCP binary via stdio, using theA2A_ADDR+MCP_BINARYenv vars. Its agent card is also served at/.well-known/agent-card.json.
The SDK-naming gotcha this repo documents
a2a-server-lf / a2a-client-lf / a2a-lf are the published crate names for a2aproject/a2a-rs -- the "-lf" suffix is Linux Foundation naming. As of this session they are not on crates.io yet, so crates/a2a-bridge/Cargo.toml pulls them as git dependencies directly from https://github.com/a2aproject/a2a-rs rather than a published version string.
On the TypeScript side, @a2a-js/sdk is pinned at ^0.3.13 in workers/web/package.json -- a real, published npm package (unlike its Rust counterpart).
Source: this repo's own CLAUDE.md "A2A integration" section, plus a live read of crates/a2a-bridge/Cargo.toml and workers/web/package.json this session.