We built the same MCP server six times. Then we built 0-mcp.

0-mcp started life as a thin REST framework for Django โ€” born from the boredom of writing the same list view, the same auth check, the same cache wrapper on every project. Then agents arrived. Suddenly every team wanted to expose those same resources as MCP tools, and we found ourselves writing a second codebase to mirror the first. So we collapsed them. The MCP server became the headline. The REST API became the bonus. Same engine, sharper purpose.

Phase 1 โ€” The boring 90% of every Django API

We've built the same Django REST API ten times. List view, detail, create, update, delete, auth, rate limit, cache, tenant switch. Hundreds of lines per resource, copy-pasted across projects, drifting in slightly different ways every time. The original goal was simple: collapse that pattern into one class.

Every one of those is a few lines. Together they are hundreds of lines per resource. Across a SaaS with fifty resources, they are tens of thousands of lines that nobody owns and everybody is afraid to touch.

Phase 2 โ€” Agents changed the brief

When Claude Desktop, Cursor and the MCP ecosystem started showing up in production, every team had the same realization at the same time: the agent surface is just another view of the resources the REST API already exposes. Different protocol, same auth, same rate limit, same field whitelists, same ownership scoping. Writing it twice is insane.

We tried bolting an MCP layer on top of what we had. It worked. It also doubled the surface area: tool registrations had to mirror endpoint signatures, schemas drifted between OpenAPI and JSON Schema, auth wiring had to be re-implemented at the MCP boundary. The same problem we solved for REST was now back, in a new shape, on the agent side.

Phase 3 โ€” MCP became the headline

So we promoted MCP from a side feature to the main product. The framework's job is now: turn a Django model into an MCP server, with a REST API falling out of the same definition. Same engine. Different center of gravity. New name to match โ€” 0-mcp, because that's what you write to get one running.

We tried the alternatives

Goals we set

What we are not trying to be

๐ŸŽฏ

0-mcp is the framework we wished we had the day Claude Desktop shipped. It is not trying to be everything. It is trying to be the right thing for Django apps that need an agent surface โ€” and ruthlessly good at it.

0-mcp by Stamatios Stamou Jr โ€” github.com/ssjunior/0-mcp