C# Zero overhead.
Zero overhead.
20 of 21 chaos attacks survived.
zeromcp vs ModelContextProtocol — side by side.
Dependencies
0 ZeroMCP
vs. 41 Official SDK
Throughput
4.69K req/s ZeroMCP
vs. 2.36K req/s Official SDK
Memory
314 MB ZeroMCP
vs. 78 MB Official SDK
This is a hello world
A builder pattern, anonymous types for schema, and transport setup. 8 lines of ceremony before your tool does anything.
ModelContextProtocol 8 lines
var server = new McpServerBuilder()
.WithName("test")
.WithTool("hello", "Say hello",
new { name = new { type = "string" } },
async (args) =>
$"Hello, {args["name"]}!")
.Build();
await server.RunStdioAsync(); This is the whole server
No builder pattern. No anonymous types. No McpServerBuilder.
Register a lambda and serve.
ZeroMCP 8 lines
var server = new Server();
server.Tool("hello", new Tool {
Description = "Say hello",
Input = new Input()
.Required("name", "string"),
Execute = (args, ctx) =>
$"Hello, {args["name"]}!"
});
await server.ServeStdioAsync(); HTTP Performance — Head to Head
Mixed workload across all 7 MCP method types. 5-minute sustained load in Docker. ASP.NET for ZeroMCP, stdio proxy for the official SDK.
req/s CPU Memory Ratio
ZeroMCP (ASP.NET) 4.69K 1.47% 314 MB 2.0x
Official SDK 2.36K 0.05% 78 MB
ZeroMCP on ASP.NET uses more CPU (1.47% vs 0.05%) due to the .NET runtime. But it serves 2.0x more requests.
The tradeoff
Choose ModelContextProtocol
If you want the NuGet-native experience with static class patterns familiar to the .NET ecosystem.
- Attribute-based tools — typed parameter definitions via attributes
- Spec parity — tracks every spec change immediately
- Enterprise support — maintained by the MCP specification team at Anthropic
Choose ZeroMCP
If you want zero dependencies outside the runtime, 825 lines, and 2.0x the throughput on ASP.NET.
- 0 dependencies outside the runtime
- 825 lines — small enough to audit
- ASP.NET HTTP embedding
- Built-in sandbox with enforced permissions
- 4.69K req/s on ASP.NET