subagentsdk

.com sdk primitive
grounding: CLAUDE.md "A2A integration"

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): serves GET /.well-known/agent-card.json and POST /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 the A2A_ADDR + MCP_BINARY env 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.