diff --git a/a2a/README.md b/a2a/README.md index 393b18b3e..1f2fbf863 100644 --- a/a2a/README.md +++ b/a2a/README.md @@ -42,15 +42,25 @@ For the use case the old `engine::*` hard floor hid, use the `introspect` worker ### CLI flags ```text ---engine-url WebSocket URL of the iii engine (default ws://localhost:49134) ---base-url Public origin advertised in the agent card. The card is served - at /a2a. Default: http://localhost:3111 ---rbac-tag Forward an `x-iii-rbac-tag` header on the worker WebSocket - upgrade. iii-worker-manager's `auth_function_id` reads - this tag to apply policy. ---debug Verbose logging +--engine-url WebSocket URL of the iii engine (default ws://localhost:49134) +--base-url Public origin advertised in the agent card. The card is served + at /a2a. Default: http://localhost:3111 +--agent-name Agent card `name` (default: iii-engine) +--agent-description Agent card `description` +--provider-org AgentProvider.organization (default: iii) +--provider-url AgentProvider.url (default: https://github.com/iii-hq/iii) +--docs-url AgentCard.documentationUrl + (default: https://github.com/iii-hq/workers/tree/main/a2a) +--rbac-tag Forward an `x-iii-rbac-tag` header on the worker WebSocket + upgrade. iii-worker-manager's `auth_function_id` reads + this tag to apply policy. +--debug Verbose logging ``` +Empty `--provider-org` or `--provider-url` omits the `provider` object +from the card (A2A v0.3 requires both fields when the object is present). +Empty `--docs-url` omits `documentationUrl`. + ## Local testing A2A has no standard client inspector like MCP does. Use curl. Full smoke diff --git a/mcp/README.md b/mcp/README.md index d085dd081..aecaf0f20 100644 --- a/mcp/README.md +++ b/mcp/README.md @@ -225,3 +225,31 @@ your `auth_function_id` can scope policy on it. Result is wrapped as `{ content: [{ type: "text", text: ... }] }` per MCP spec. Errors surface as `isError: true`. + +## MCP 2025-06-18 spec coverage + +Beyond the core `tools/list` + `tools/call` path, this worker speaks: + +- **Pagination** on `tools/list`, `resources/list`, `prompts/list` — + opaque `cursor` round-trip per spec. +- **`completion/complete`** — argument autocomplete for prompt args + (e.g. language enum on `register-function`). +- **`logging/setLevel`** + **`notifications/message`** — per-session + level bridged into `tracing`. +- **`resources/subscribe`** + **`resources/unsubscribe`** + + **`notifications/resources/updated`** — change notifications when + `iii.list_functions()` / `list_workers()` / `list_triggers()` shift + for a subscribed URI. +- **`resources/templates/list`** — templates for `iii://functions/{id}`, + `iii://workers/{id}`, `iii://triggers/{id}`. +- **Tool annotations + outputSchema + structured content** — tools + surface `title`, `annotations` (`readOnlyHint`, `destructiveHint`, + `idempotentHint`, `openWorldHint`), and `outputSchema` from + `FunctionInfo.metadata.mcp.*`. +- **Progress + cancellation** — `_meta.progressToken` on `tools/call` + emits `notifications/progress`; `notifications/cancelled` flips a + per-request cancel channel and short-circuits the in-flight trigger. + +Server-to-client requests (`sampling/createMessage`, +`elicitation/create`) and Streamable HTTP SSE remain on the Phase 2b/2c +roadmap.