A decorator, 3 imports,
and a runtime you didn't ask for.
zeromcp vs FastMCP — side by side.
This is a hello world
A decorator, a server class, and a run call. The official SDK wraps everything in ceremony before your tool does anything.
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("test")
@mcp.tool()
def hello(name: str) -> str:
return f"Hello, {name}!"
mcp.run() This is the whole server
No decorator. No server class. No run call.
Drop it in a folder and run zeromcp serve.
# tools/hello.py
tool = {
"description": "Say hello",
"input": {"name": "string"},
}
async def execute(args, ctx):
return f"Hello, {args['name']}!" HTTP Performance — Head to Head
Same hello tool. Same methodology. 5-minute sustained load in Docker. Starlette for ZeroMCP, stdio proxy for the official SDK.
ZeroMCP HTTP Frameworks
ZeroMCP embedded natively in Python frameworks. No proxy. No subprocess. 30-second sustained load.
What's different
- SandboxEnforced. Not advisory.
- CredentialsPer-directory. Not
os.environ. - 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 simplified input dict. If your team uses Pydantic for validation, the official SDK integrates it via FastMCP.
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).