Roadmap
What's actually done vs. what's still open, across the protocol design and the reference SDK. RCP is v0.1, in active design.
Protocol (design)
GET <manifest-url>→{ rcpVersion, auth, tools[] }manifest format.- Two roles defined — Client and Server, no third “host” layer, no persistent connection.
- Auth — three modes specified:
none,header,oauth2(same RFC stack MCP’s own auth uses). - Resolvers — a client-side-only mechanism for values that must never reach the model.
- Client-injected headers — attaching headers with no manifest correspondence at all.
- Security & trust principles adapted from MCP’s.
oauth2— designed, not implemented by any SDK yet.- Per-tool auth overrides — specified in the schema, but no SDK actually executes it yet.
- A
skills/resources-equivalent primitive — deliberately out of scope for v0.1. - Open questions:
rcpVersionin the body vs. a header; the default when a resolver can’t produce a value; a naming convention for commonly-resolved params; whether a server ever needs to push a manifest-changed notification.
TypeScript SDK — Client
discover()— fetch, schema-validate, version-check, strip resolver-bound params.call()— template rendering, resolver filling, auth + header attachment, response mapping.- Auth:
none,header. - Resolvers.
- Client-injected headers.
- Pluggable logging (silent by default; never logs secrets, headers, bodies, or resolved values).
describeManifest()— human-readable printout of what a server is asking for.oauth2— throws a clear “not implemented” error rather than doing nothing.- Per-tool auth overrides — throws a clear “not implemented” error rather than using the wrong credentials.
TypeScript SDK — Server
defineTool()+t.arg()— build a manifest tool entry in code from a zod schema.- zod →
paramsderivation (type, required, description).
Tooling & quality
- 39 tests passing (schema, template engine, response mapper, client, server).
- Clean
tsc --noEmit,tsupbuild (ESM + CJS +.d.ts). - End-to-end example (
examples/basic) verified working live. - API docs for both entry points (
docs/client.md,docs/server.md). - Architecture diagrams (root README).
- Lint/formatting setup (eslint/prettier) — flat
eslint.config.js(typescript-eslint recommended) +.prettierrc.json, wired tolint/format/format:checkscripts. - Published to npm — rcp-sdk is live.
- Pushed to a GitHub remote — hasanraiyan/rcp.
Examples
examples/express— an Express REST API + one route serving an RCP manifest viadefineTool(). Server-only; no AI/model code.examples/openai-client— discovers a manifest and runs an OpenAI tool-calling loop against it. Client-only; no Express/FastAPI code. Installsrcp-sdkfrom the real npm package.- Framework adapters (
rcp-sdk/adapters/openai,/gemini,/langchain, ...) so the manifest-to-tool-schema conversion currently hand-rolled inexamples/openai-clientdoesn’t have to be re-derived by every consumer — tracked in issue #1. - A Python/FastAPI server example — would double as proof that an RCP server needs no SDK in any language.
Beyond v1 — not started, no commitment yet
- A second-language reference SDK (e.g.
python/) — the repo is structured to support this, but nothing has been written. - Any tooling around the
skills/resources idea, if it turns out to be needed. - A CLI (e.g.
rcp inspect <url>wrappingdescribeManifest()) — not planned, just a natural extension if it’d be useful.