v0.2.0

The full spec.
All 10 languages.

April 8, 2026

Resources. Prompts. Pagination. Logging. Completion. Icons.
Everything the official SDK does, with the same drop-a-file simplicity.

What's new

v0.1.x shipped tools. v0.2.0 ships the rest of the spec.

Resources

Drop a file, it's a resource. Static files, dynamic generators, and URI templates. Full resources/list, resources/read, resources/subscribe, and resources/templates/list.

Prompts

Drop a file, it's a prompt. Argument validation, dynamic content, and the same scanner-based discovery as tools. Full prompts/list and prompts/get.

Pagination

Stateless cursor-based pagination on every list method. No server-side state, no session affinity, works on Lambda and Workers.

Logging

Full logging/setLevel support. Clients can request log notifications at any RFC 5424 severity level.

Completion

Argument completion via completion/complete. Tools, prompts, and resources can suggest values for their parameters.

Icons

One config field. URL, file path, or data URI. Fetched at startup, cached, applied to every tool, resource, prompt, and template.

Hot reload notifications

Drop a new tool file and the server emits notifications/tools/list_changed. Clients refresh automatically.

Roots tracking

Track client-provided workspace roots. Resources can scope themselves to active roots.

Unified dispatch

One JSON-RPC dispatcher across stdio, HTTP, and Streamable HTTP. Same handler, every transport.


750+ unit tests

v0.1.x had 7 unit tests on Node.js. v0.2.0 ships with a baseline test suite across every language.

~750 Unit tests across 10 languages
140 Node.js (was 7)
10/10 v0.2.0 conformance suite passing

The conformance suite tests every method (resources, prompts, pagination, logging, completion) against every language. All 10 implementations pass identical behavior tests.


File-based or code-based. Your choice.

v0.2.0 keeps the same dual-API approach as v0.1.x.

File-based discovery Node.js · Python · Ruby · PHP

Drop a file in resources/ or prompts/. The scanner finds it. No registration code.

# resources/config.json
{ "version": "1.0", "env": "prod" }

# That's it. It's now a resource.
Code registration Go · Rust · Java · Kotlin · Swift · C#

Idiomatic builder/DSL API. Same shape, every language.

server.resource("config")
  .description("App config")
  .uri("file://config.json")
  .build();

Benchmarked at every duration

Mixed workload (7 method types) at 1m, 3m, 5m, and 10m sustained load. Every language. Every framework. Both ZeroMCP and the official SDK.

1 min Cold start window
3 min JIT warming up
5 min Steady state
10 min Sustained production

ZeroMCP is fast enough that Docker container warmup distorts sub-5-minute tests. The 5-minute and 10-minute numbers are the production-relevant ones. See the full benchmark data.


The "choose the official SDK" caveat is gone

Every comparison page on this site used to say: "Choose the official SDK if you need resources, prompts, or deep MCP spec extensions."

That's not true anymore. ZeroMCP v0.2.0 implements all of it.

The remaining tradeoffs: enterprise support contracts and same-day spec-update tracking. The official SDKs win there. Everything else now goes to ZeroMCP.

Upgrade

v0.2.0 is backward compatible with v0.1.x. Tools work unchanged. Add resources and prompts when you need them.