What RCP shares
JSON-RPC 2.0 framing
Requests with
id, notifications without.initialize + capabilities
A server advertises exactly what it supports; clients gate calls on
capabilities.
_meta extensibility
Additive fields ride in
_meta without breaking the wire.Cursor pagination
The same opaque-cursor model, plus Markdown-first human text and reused MCP
JSON representations where sensible.
Why retrieval needs its own protocol
The honest challenge: MCP already lets a server expose asearch(query) → documents tool — why a second protocol? If retrieval were a single opaque
function call, it would not deserve one. It is not. An MCP tool is a typed
function (opaque name, one argument blob in, one content blob out); RCP is a
domain contract over the retrieval pipeline. Six things a flat tool call
cannot express — and that every client/server would otherwise re-invent as
bespoke glue:
A negotiated pipeline, not a fixed signature
A negotiated pipeline, not a fixed signature
Transform → recall → fuse → rerank → diversify → cite, with each stage
independently negotiated at
initialize and driven either as one
server-run retrieve or stage-by-stage in an agentic loop. A tool.call
cannot expose candidateK ≥ topN ≥ k, MMR lambda, fusion strategy, or
per-stage scores, and gives a client no way to discover that a tool even
supports reranking.The funnel is a protocol invariant
The funnel is a protocol invariant
candidateK ≥ rerank.topN ≥ k is a checkable constraint the wire enforces.
In a tool call these are three undocumented integers whose relationship
lives only in prose a model has to guess at.Structured, comparable results — not a text blob
Structured, comparable results — not a text blob
A
Hit carries a stable id, a score on a declared scale, confidence ∈ [0,1], granularity (unit/level), provenance, citation, and trust.
Standard IR metrics (nDCG, Recall@k, MRR) apply directly and portably
across engines. An MCP tool flattens all of this into rendered text,
discarding the ranking structure fusion and offline evaluation depend on.Rank-fusion across engines
Rank-fusion across engines
Dense and BM25 scores are not comparable; merging them correctly needs
rank-level RRF. RCP defines this so a federating gateway can fan out and
fuse. Independent MCP
search tools return incomparable prose a client
cannot fuse without knowing each tool’s internal scoring.Streaming partial hits and staged progress
Streaming partial hits and staged progress
Recall-then-rerank is latency-shaped; RCP streams
notifications/progress
with stage labels and can emit incremental hits. A tool call is
request/response — the caller waits for the whole pipeline blind.A distinct threat model
A distinct threat model
Retrieved content is untrusted data moving toward an LLM’s context,
dominated by indirect prompt injection. RCP carries
trust.injectionSuspected/sanitized per hit; a generic tool’s text output
has no place to put a per-passage trust signal. See
Security.query → text call — no
reranking, no fusion, no citations, no evaluation, no per-hit trust — then an MCP
tool is the right tool; use it. RCP is for when retrieval is a system rather
than a function, which is what production RAG has become. The two compose
rather than compete: a gateway can even expose an RCP retrieve as an MCP tool
for one-shot consumers — the structured protocol degrades gracefully to the flat
one, but not the reverse. RCP gives the retrieval layer the same first-class,
vendor-neutral contract that MCP gave tools and ACP gave agents.
See the whole stack
Where RCP, MCP, and ACP sit in a modern agent architecture.