C++
Header-only, C++23, type-theoretic. Protocol invariants proved at compile
time.
Python
Pure standard library — no compiler, no dependencies, nothing to build.
Node.js
Pure standard library, ESM, async. Zero dependencies.
Rust
Zero dependencies, synchronous,
Result-typed. Vendors its own JSON.What every SDK gives you
- A
Clientthat connects over stdio or HTTP, runs theinitializehandshake, and exposes typed, capability-gated calls (retrieve,embed,rerank,graph, …). A gated call to an unadvertised capability fails client-side before any I/O. - A
Serverthat owns the JSON-RPC framing, the handshake, capability gating, batching, and error mapping — you write handlers. - A
Selectorfor registry-driven routing with lazy connect and priority fallback. - A
filtermodule — a typed builder + server-side validator for metadata filters, so clients never hand-write filter JSON and servers turn a malformed tree into a clean-32602instead of a-32603crash. - Reference algorithms as importable, tested code, byte-for-byte identical
across all four SDKs: Reciprocal Rank Fusion
(
rrf_fuse/weighted_fuse) and the compactf32-base64vector codec — so no adopter re-derives the spec’s fusion or encoding rules. - Uniform errors surfaced as a typed error whose message is
"[RCP <code>] <message>", exposing.code,.data,retryable().
The shared shape
The four SDKs deliberately mirror each other (idiomatic per language):Cross-language interop is not aspirational: the Python and Node test suites each
include a case where their client drives the C++ example server, the Rust
suite drives both the C++ and Python servers, and the conformance suite runs
against all four servers over stdio and HTTP.