Skip to main content

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.

CI PyPI Python License: MIT

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 as create-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 oauth scaffolds an RFC 9728 resource server (Protected Resource Metadata + 401/WWW-Authenticate discovery + 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.

Built on FastMCP + uv.

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 (for uvx and 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

create_mcp-0.1.0.tar.gz (21.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

create_mcp-0.1.0-py3-none-any.whl (31.6 kB view details)

Uploaded Python 3

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

Hashes for create_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 87dd1859ffe287804b0e4dfa76df975e205ea4177193e4bdff9e9bdb9e8d941c
MD5 df2e27a7984eabf54bcfb006fdc2c290
BLAKE2b-256 218b8e189c4e4233937a809dba2529dcf62ab8c8719393dc144954285e794805

See more details on using hashes here.

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

Hashes for create_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 65456cb4caa365b7de739a4d5c95e51d17b78fb98cd04169ac5819ab909c3eaa
MD5 42a07affd3acdb645fb6d16d64c0b031
BLAKE2b-256 45f6d13d07c613c915af2e287879e96e54f54ecf6f6aaf5228cb7b41231a0962

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page