Skip to main content
RCP ships four native SDKs that speak the identical wire format. Any client drives any server across languages — proven by each SDK’s test suite and the shared conformance runner.

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 Client that connects over stdio or HTTP, runs the initialize handshake, 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 Server that owns the JSON-RPC framing, the handshake, capability gating, batching, and error mapping — you write handlers.
  • A Selector for registry-driven routing with lazy connect and priority fallback.
  • A filter module — 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 -32602 instead of a -32603 crash.
  • Reference algorithms as importable, tested code, byte-for-byte identical across all four SDKs: Reciprocal Rank Fusion (rrf_fuse / weighted_fuse) and the compact f32-base64 vector 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.