initialize; clients gate every call on the
matching capability and fail fast — client-side — before any I/O.
Presence ⇒ supported
A capability object’s presence means the method/feature is offered; its value carries metadata (which MAY be{}). Absence means unavailable,
and clients MUST NOT use it.
retrieve, rerank, and embed. It does not
support graph, index, or anything else — those keys are simply absent.
The capability set
A peer MUST treat an unknown capability key — or an unknown field inside a
known capability — as informational and ignore it. Capability negotiation is
the discovery mechanism; there is no runtime registry service.
The retrieve capability
Because retrieve is the workhorse, its metadata is richer:
string[]
The retrieval modes the server supports.
string[]
Fusion strategies available when
mode: "hybrid".boolean
Whether MMR diversification can be requested inline.
boolean
Whether the server can rerank inside
retrieve (vs a separate rerank call).string[]
The retrieval granularities the server can return
(chunk · document · node · triplet · path · subgraph · community · tree-node ·
page). Absent ⇒ chunk/passage only.
integer
Abstraction levels in a hierarchical corpus (RAPTOR tree depth, Leiden
levels). Absent ⇒ flat.
boolean
Whether
retrieve.tokenBudget packing is honoured.boolean
Whether hits carry a normalised
[0,1] confidence.string
The scale of
Hit.score — one of cosine, dot, bm25, probability
(already [0,1]), or unbounded (engine-relative, e.g. raw BM25F). This is
informational only: it lets a client label or bucket scores, but it does
not make scores from different servers comparable. Cross-server ranking and
fusion MUST key on rank position or the normalised confidence — never raw
score. See Retrieve.Gating in practice
Every SDK exposes asupports(...) check. A gated call to an unadvertised
capability raises CapabilityMissing (-32003) before any round-trip:
Growing without breaking
RCP grows additively. Names are partitioned into three spaces:- Core — the names in this spec. Reserved; only a future revision adds to it.
- Vendor extensions — anyone MAY add
x-<vendor>capability keys andx-<vendor>/<name>methods without coordination. Peers ignorex-names they don’t understand; extension methods are still gated on a matchingx-<vendor>capability. _meta— free-form side-band data that never affects core semantics.