info/initialize via _meta.conformance ("L0", "L1", or "L2"); clients
use it as a coarse expectation, and capabilities as the precise contract.
Levels
L0 — Base (REQUIRED of every server)
L0 — Base (REQUIRED of every server)
Answer
initialize, info, and ping (the latter two at any time, echoing
a ping nonce); advertise at least one retrieval capability; reject
pre-initialize requests with -32001; reject unadvertised capability
methods (-32003), undefined methods (-32004), and unsupported options
(-32005); return well-formed JSON-RPC 2.0 echoing the request id; validate
params (-32602) instead of crashing; ignore unknown notifications; tolerate
unknown fields, capability keys, and _meta.L1 — Retrieval (RECOMMENDED)
L1 — Retrieval (RECOMMENDED)
L0 plus
retrieve with modes: ["dense","sparse","hybrid"], filter and
citations support, consistent Hit.score (higher = more relevant), and
k/minScore honoured. The target for a general-purpose RAG backend.L2 — SOTA (OPTIONAL)
L2 — SOTA (OPTIONAL)
L1 plus a selection of
rerank (cross-encoder and/or ColBERT),
multiVector / late interaction, graph, query/transform, streaming, and
pagination. The frontier profile — hybrid + rerank + graph + multimodal.Levels are a coarse signal. The precise, machine-checkable contract is always
the capability set a server advertises at
initialize. A client should gate on
supports(...), not on the level string.The test suite
A transport-agnostic conformance suite validates any server, in any language, over stdio or HTTP:_meta.conformance: "L2"
but only certifies L1 is flagged as OVERCLAIMED and the run exits non-zero —
even with zero failed checks — so a badge can’t lie. Pass --json for a
CI-consumable report; the non-zero exit gates a release pipeline.
The Python and C++ reference example servers both certify L2 (a real
dense + sparse → RRF → rerank hybrid pipeline), and every SDK’s client drives
every other SDK’s server over both stdio and HTTP.
Conforming clients
A conforming client must:1
Initialize first
Send
initialize before any gated method.2
Honour negotiation
Respect the negotiated protocol version.
3
Gate on capabilities
Never call an unadvertised method.
4
Correlate by id
Match responses to requests by
id, not order.5
Tolerate dropped notifications
Function correctly even if it drops every
notifications/progress and
notifications/log.