988 lines.
No Spring. No Netty.
zeromcp vs mcp-java-sdk — side by side.
This is a hello world
A server builder, JsonSchema objects, CallToolResult wrapping, and transport setup. 13 lines of ceremony before your tool does anything.
var server = McpServer.sync("test")
.tool(new SyncToolSpecification(
new Tool("hello", "Say hello",
new JsonSchemaObject(Map.of("name",
new JsonSchemaString()))),
(exchange, args) -> new CallToolResult(
List.of(new TextContent(
"Hello, " + args.get("name") + "!"))
)
))
.build();
var transport = new StdioServerTransport();
server.connect(transport); This is the whole server
No builder chain. No JsonSchema objects. No CallToolResult wrapping.
Register a lambda and serve.
var server = new ZeroMcp();
server.tool("hello", Tool.builder()
.description("Say hello")
.input(new Input().required("name", "string"))
.execute((args, ctx) ->
"Hello, " + args.get("name") + "!")
.build());
server.serveStdio(); HTTP Performance — Head to Head
Same hello tool. Same methodology. 5-minute sustained load in Docker. Javalin for ZeroMCP, stdio proxy for the official SDK.
ZeroMCP HTTP Frameworks
ZeroMCP embedded natively in Java frameworks. No proxy. No subprocess. 300-second sustained load.
What's different
- SandboxEnforced. Not advisory.
- CredentialsPer-directory. Not
System.getenv. - ProcessesOne. Not N.
- Hot reloadBuilt-in. Not restart.
- ComposabilityConnect remote MCP servers. Official SDK can't.
- TransportStreamable HTTP by default. Stdio too.
When to use the official SDK
ZeroMCP makes trade-offs. Here's what you give up.
ZeroMCP implements tools only. If you need MCP resources, prompts, or sampling, use the official SDK.
ZeroMCP uses a simpler registration API. If you prefer the full builder pattern with typed schemas, use the official SDK.
The official SDK tracks every spec change immediately. ZeroMCP prioritizes stability over spec completeness.
The official SDK is maintained by the MCP specification team at Anthropic. ZeroMCP is maintained by the antidrift team (Reloop Labs, LLC).