Personalize and rename this FastMCP-Blueprint template into a real project. Use when: bootstrapping a new MCP server from this template, renaming the package or CLI command, customizing the server name/description, choosing an auth mode, removing sample/placeholder code, or setting up a project for real use. Asks questions then updates pyproject.toml, package paths, config.py, server.py, __main__.py, .env.example, README, and AGENTS docs consistently.
Transforms this FastMCP-Blueprint template into a project-specific MCP server by asking a short set of questions and then updating every relevant file consistently.
hello_world sample tool once real tools existAsk the following questions. Wait for all answers before making any changes. Use the vscode_askQuestions tool if available.
| # | Question | Default |
|---|---|---|
| 1 | Project display name — shown in README, pyproject.toml, and MCP identity | FastMCP-Blueprint |
| 2 | Python package name — folder, imports, hatchling config (snake_case) |
src/<pkg>/fastmcp_blueprint |
| 3 | CLI command name — entry point in pyproject.toml (kebab-case) | fastmcp-blueprint |
| 4 | Short description — one sentence for pyproject.toml description field | current value |
| 5 | MCP server instructions — natural-language description the LLM sees at runtime | This server provides MCP tools and resources. |
| 6 | Auth mode — disabled, remote, or oauth_proxy | disabled |
| 7 | Remove hello_world sample tool? — yes or no | no |
Derive these automatically from the answers:
PACKAGE_NAME — snake_case version of the Python package nameCLI_NAME — kebab-case CLI commandCLASS_OR_IMPORT_PREFIX — matches the package name in all from fastmcp_blueprint... importsShow the user a summary table of every change that will be made. Ask for confirmation before proceeding.
Example summary:
Display name: FastMCP-Blueprint → My Weather MCP
Package name: fastmcp_blueprint → my_weather_mcp
CLI command: fastmcp-blueprint → my-weather-mcp
Description: A FastMCP blueprint… → Provides real-time weather data via MCP.
Instructions: This server provides… → You can ask me about weather conditions…
Auth: disabled → disabled
Remove sample: no → yes
Consult ./references/file-substitutions.md for the exact list of substitutions and which files to update.
Apply changes in this order to avoid import-before-rename problems:
Rename the package directory using the terminal:
mv src/CURRENT_PACKAGE_NAME src/NEW_PACKAGE_NAME
Only do this if the package name is actually changing.
Update pyproject.toml
Update src/<pkg>/__main__.py
Update src/<pkg>/config.py
Update src/<pkg>/server.py
Update src/<pkg>/tools/hello_world.py and its imports
Update src/<pkg>/routes/health.py and its imports
Update tests/conftest.py
Update all other test files
Update .env.example
Update Dockerfile — replace the CLI command in the CMD instruction
Update README.md
Update AGENTS.md
If the user asked to remove the sample tool:
src/<pkg>/tools/hello_world.pytests/test_hello_world.py__main__.pytests/conftest.py__main__.py where it was importedIf the user wants to keep it, leave it untouched.
If auth mode is disabled (the default), make no changes to server.py or config.py beyond normal renames.
If auth mode is remote or oauth_proxy:
AUTH_PROVIDER block in .env.exampleREADME.md pointing to the auth sectionserver.py as-is; it already handles both modesAfter applying all changes, run the following and confirm they pass:
ruff check .
ruff format --check .
pytest -v
Fix any import errors or test failures caused by the renames before declaring the workflow complete.
Tell the user:
add-tool)