The create-next-app for production MCP servers — scaffold a typed, tested, auth-ready Python MCP server in one command.
Project description
create-mcp
The create-next-app for production MCP servers.
One command scaffolds a typed, tested, auth-ready Python MCP server you can ship — not just run.
uvx create-mcp my-server
$ uvx create-mcp
Project name: pay-tools
Preset: minimal
Transport: streamable-http
Auth: oauth
✓ Scaffolded pay-tools (Minimal · streamable-http · auth: oauth)
cd pay-tools
uv sync # install dependencies
uv run pay_tools # start the server
uv run pytest # green ✓
Why
The official MCP SDK quickstart and create-mcp-server hand you a single
hello-world tool and stop. You still have to add tests, typing, linting, CI, a
Dockerfile, config, and — the hard one — spec-compliant OAuth 2.1. Most MCP
servers in the wild are hello-world demos that never reach production.
create-mcp generates the whole repo, green on the first run:
- ⚡
uvx create-mcp— zero install. Same ergonomics ascreate-next-app. - 🧱 Production defaults, not a toy. Tests, CI, Docker, ruff, mypy, pre-commit,
.env, a real README. - 🔐 OAuth 2.1 in one flag.
--auth oauthscaffolds an RFC 9728 resource server (Protected Resource Metadata +401/WWW-Authenticatediscovery + JWT validation). Timed for the 2026 MCP authorization spec. - 🌊 Streamable HTTP first. The modern transport (SSE is deprecated), plus a stdio preset for Claude Desktop / Cursor.
- 🧪 Tests pass out of the box. Generated tests use FastMCP's in-memory client — no network, milliseconds.
- 🎯 Presets, not questionnaires. Scaffold a use case:
minimal,api-wrapper,db,agent-tools. - 🐍 Typed end-to-end. Pydantic models for tool I/O; ruff- and mypy-clean.
Usage
# Interactive
uvx create-mcp
# Scripted / non-interactive
uvx create-mcp pay-tools --preset api-wrapper --auth oauth --yes
Then:
cd pay-tools
uv sync
uv run pay_tools # start the server
uv run pytest # green ✓
Options
| Flag | Values | Default | Description |
|---|---|---|---|
--preset -p |
minimal, api-wrapper, db, agent-tools |
minimal |
Starting set of tools/resources/prompts |
--transport -t |
streamable-http, stdio |
streamable-http |
MCP transport |
--auth -a |
none, oauth |
none |
OAuth 2.1 resource server (RFC 9728) |
--package-name |
identifier | derived | Override the Python package name |
--output-dir -o |
path | . |
Where to create the project |
--no-git / --git |
--git |
Initialise a git repo + first commit | |
--no-install / --install |
--install |
Run uv sync after scaffolding |
|
--no-precommit / --precommit |
--precommit |
Install pre-commit hooks | |
--force |
off | Overwrite a non-empty target directory | |
--yes -y |
off | Accept all defaults; never prompt (CI) |
Presets
| Preset | What you get |
|---|---|
| minimal | A clean typed server: one tool (structured output), a resource, a prompt. |
| api-wrapper | Wrap an HTTP/JSON API as MCP tools, with the network call isolated for easy mocking. |
| db | A SQLite-backed store exposed as CRUD tools (swap in your real DB). |
| agent-tools | A toolbox for agents: safe calculator, scratchpad memory, clock. |
What the generated project looks like
my-server/
├── src/my_server/
│ ├── server.py # FastMCP instance (+ /health, + auth when enabled)
│ ├── tools.py # your tools, resources, prompts
│ ├── settings.py # typed config (pydantic-settings)
│ ├── app.py # FastAPI host mounting MCP at /mcp
│ ├── auth.py # OAuth 2.1 resource server (only with --auth oauth)
│ └── __main__.py # `uv run my_server`
├── tests/ # in-memory tests, green out of the box
├── Dockerfile # uv-based image
├── .github/workflows/ci.yml
├── .pre-commit-config.yaml
├── .env.example
└── pyproject.toml
Requirements
uv(foruvxand the generated projects)- Python 3.11+
Contributing
See CONTRIBUTING.md. Every release runs the full matrix — generating a project for each preset × auth mode, then installing, linting, type-checking and testing it — so the templates can't rot silently.
License
MIT © Blaze
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file create_mcp-0.1.0.tar.gz.
File metadata
- Download URL: create_mcp-0.1.0.tar.gz
- Upload date:
- Size: 21.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
87dd1859ffe287804b0e4dfa76df975e205ea4177193e4bdff9e9bdb9e8d941c
|
|
| MD5 |
df2e27a7984eabf54bcfb006fdc2c290
|
|
| BLAKE2b-256 |
218b8e189c4e4233937a809dba2529dcf62ab8c8719393dc144954285e794805
|
File details
Details for the file create_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: create_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 31.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
65456cb4caa365b7de739a4d5c95e51d17b78fb98cd04169ac5819ab909c3eaa
|
|
| MD5 |
42a07affd3acdb645fb6d16d64c0b031
|
|
| BLAKE2b-256 |
45f6d13d07c613c915af2e287879e96e54f54ecf6f6aaf5228cb7b41231a0962
|