Skip to content

best-mcp: events + manifest tools, and optional source - #6

Merged
riccardone merged 1 commit into
mainfrom
mcp-events-manifest-source
Aug 13, 2026
Merged

best-mcp: events + manifest tools, and optional source#6
riccardone merged 1 commit into
mainfrom
mcp-events-manifest-source

Conversation

@riccardone

Copy link
Copy Markdown
Contributor

What

Four new tools and one relaxation in best-mcp, closing the gap where tools-only LLM hosts (VS Code Copilot, Claude Desktop, …) could not see or consume the io.best.agents.events capability at all, and had to scrape a CloudEvent source value out of schema descriptions.

  • get_manifest — fetches /.well-known/best from the connection host (resolving the tenant manifest via the tenants.manifest template for /tenants/{id} connections). Agents finally discover declared capabilities and push channels.
  • get_eventsGET /events with filter/cursor parameter passthrough: the turn-based polling drain.
  • get_event_schemaGET /events/{schema}/{version}.
  • sample_event_stream — opens the SSE stream and collects until max_events/max_seconds, bounds enforced client-side so any conformant endpoint works; Last-Event-ID resume supported. A turn-based host cannot hold a stream open between turns — this gives it a bounded window, and the tool description points standing reactions at the service's own alerting commands.
  • source on send_command is now optional, defaulting to the client identity urn:best-mcp. The commands spec defines source as the command's origin and says servers MUST NOT route by it alone — requiring agents to read a routing value out of descriptions was legacy-dialect residue (and produced observable guesswork). Explicit source remains supported.

specs/transports/mcp.md (mapping table, flow, CloudEvent construction) and the repo instructions updated to match.

Verification

Built and driven end-to-end over stdio against a live BEST 0.9.1 endpoint (baas.dotquant.io): tenant manifest resolution, history drain with vendor cursor passthrough, bounded stream sample returning the opening frame + lastEventId, and a default-source command envelope accepted by the server edge (rejected only by payload schema validation, as intended).

🤖 Generated with Claude Code

Tools-only LLM hosts had no access to the events capability and were
forced to guess the CloudEvent source. Four new tools and one relaxation:

- get_manifest: /.well-known/best (tenant-scoped via the tenants.manifest
  template when the connection targets /tenants/{id}) — capability and
  push-channel discovery.
- get_events: the historical log with filter/cursor passthrough — the
  turn-based polling drain.
- get_event_schema: typed event payload documentation.
- sample_event_stream: bounded SSE sampling — collects until max_events/
  max_seconds enforced CLIENT-side, so any conformant endpoint works;
  Last-Event-ID resume supported. A turn-based host cannot hold a stream
  open; this gives it a window instead.
- send_command source is now optional, defaulting to the client identity
  urn:best-mcp: the commands spec defines source as the ORIGIN and forbids
  routing by it alone, so requiring agents to scrape a value from schema
  descriptions produced guesswork the server discards. Explicit source
  remains supported for legacy source-routing dialects.

specs/transports/mcp.md mapping table and flow updated to match.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@riccardone
riccardone merged commit f374c47 into main Aug 13, 2026
7 checks passed
@riccardone
riccardone deleted the mcp-events-manifest-source branch August 13, 2026 14:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant