mcp-creator
Create, build, and publish Python MCP servers to PyPI — conversationally.
Install mcp-creator, add it to your AI assistant, and it walks you through the entire process: naming your package, scaffolding a complete project, building, and publishing to PyPI.
Install
pip install mcp-creator
Setup
Add to Claude Code (~/.claude/settings.json):
{
"mcpServers": {
"mcp-creator": {
"command": "mcp-creator",
"args": []
}
}
}
Or for Cursor (.cursor/mcp.json):
{
"mcpServers": {
"mcp-creator": {
"command": "mcp-creator",
"args": []
}
}
}
Tools
| Tool | What it does |
|---|---|
get_creator_profile |
Load your persistent profile — setup status, project history. Called first every session. |
update_creator_profile |
Save setup state, usernames, and project history across sessions |
check_setup |
Detect what's installed (uv, git, gh, PyPI token) — only walks through missing steps |
check_pypi_name |
Check if a package name is available on PyPI |
scaffold_server |
Create a complete MCP server project from a name + description + tool definitions |
add_tool |
Add a new tool to an existing scaffolded project |
build_package |
Run uv build on the project |
publish_package |
Run uv publish to PyPI |
setup_github |
Initialize git, create a private GitHub repo, and push the code. Never creates a public repo |
generate_launchguide |
Create LAUNCHGUIDE.md for marketplace submission |
Publish to MCP Marketplace
Once your server is on PyPI, list it on MCP Marketplace to reach thousands of AI users:
- Security scanning — every submission is automatically scanned, and the score is shown to users
- One-click install — users add your server to Claude, Cursor, or any MCP client in one click
- Built-in payments — set a price (one-time or subscription), connect Stripe, and keep 85% of every sale
- Creator dashboard — track installs, revenue, reviews, and license keys
Run generate_launchguide after publishing to create your submission file, then submit at mcp-marketplace.io/submit.
How It Works
- Tell your AI what you want to build: "I want an MCP server that checks the weather"
- It checks the name: calls
check_pypi_nameto verify availability on PyPI - It scaffolds the project: calls
scaffold_serverwith your tool definitions — generates a complete, runnable project - You fill in the logic: replace the TODO stubs in
services/with your real API calls - Build & publish:
build_package→publish_package→ live on PyPI Publishing from GitHub Actions with PyPI Trusted Publishing is the recommended route: it needs no token. A token passed topublish_packageis visible to the model. - Push to GitHub:
setup_githubcreates a private repo and pushes your code. It never creates a public one: when you are ready for a free marketplace listing (which needs a public repo), make it public yourself withgh repo edit OWNER/REPO --visibility public --accept-visibility-change-consequences. It refuses to push if a file that looks like a secret is in the folder, the index or the git history - Submit to marketplace:
generate_launchguidecreates the submission file with your repo URL
What Gets Generated
For a project named my-weather-mcp with a get_weather tool:
my-weather-mcp/
├── pyproject.toml ← hatchling build, mcp[cli] dep, CLI entry point
├── README.md ← install instructions + MCP config JSON
├── .gitignore
├── src/my_weather_mcp/
│ ├── __init__.py
│ ├── server.py ← FastMCP + @mcp.tool() for each tool
│ ├── transport.py
│ ├── tools/
│ │ ├── __init__.py
│ │ └── get_weather.py
│ └── services/
│ ├── __init__.py
│ └── get_weather_service.py ← TODO: your logic here
└── tests/
├── test_server.py
└── test_get_weather.py
The generated server runs immediately — stub services return placeholder data so you can test before implementing real logic.
Requirements
- Python 3.11+
- uv (for building and publishing)
Development
git clone https://github.com/gmoneyn/mcp-creator.git
cd mcp-creator
uv venv .venv && source .venv/bin/activate
uv pip install -e ".[dev]"
pytest -v
Metadata
Release files for mcp-creator-python 1.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mcp_creator_python-1.1.1.tar.gz | 70.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_creator_python-1.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 121.3 kB
Release files / mcp_creator_python-1.1.1.tar.gz
| Download URL | mcp_creator_python-1.1.1.tar.gz |
|---|---|
| Size | 70.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
386da461d8c8be1500396df2315d3a438441ee0793e9e5bd699f459d74282d73
|
|
BLAKE2b-256 checksum How to use checksums |
30f02a789855367d0277fe296b69640e0cd9c1a0d706cb1cdd7f888228cbff02
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.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}
|
Release files / mcp_creator_python-1.1.1-py3-none-any.whl
| Download URL | mcp_creator_python-1.1.1-py3-none-any.whl |
|---|---|
| Size | 50.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
796684a4a436c692b04f0703ea3dddb3d537fcf7c978f2f3b99d5875aa363065
|
|
BLAKE2b-256 checksum How to use checksums |
b13710b624870c504a802592b13b42298cb4150cb72744b7835aa34ded1067ae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.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}
|