Production-ready FastAPI project scaffolding templates including directory structure, configuration files, settings management, dependency injection, MCP server integration, and...
Production-ready FastAPI project scaffolding templates and best practices for building scalable, maintainable backend applications with MCP integration support.
Select the appropriate project template based on your use case:
Use the setup script to scaffold a new FastAPI project:
cd /home/gotime2022/.claude/plugins/marketplaces/ai-dev-marketplace/plugins/fastapi-backend/skills/fastapi-project-structure
./scripts/setup-project.sh <project-name> <template-type>
Template types: minimal, standard, mcp-server, full-stack, microservice
Example:
./scripts/setup-project.sh my-api-service standard
What This Creates:
The skill uses Pydantic Settings for configuration management:
Settings Structure:
# app/core/config.py
from pydantic_settings import BaseSettings
class Settings(BaseSettings):
# App Configuration
PROJECT_NAME: str = "FastAPI App"
VERSION: str = "1.0.0"
DEBUG: bool = False
# Server Configuration
HOST: str = "0.0.0.0"
PORT: int = 8000
# Database Configuration (if needed)
DATABASE_URL: str
# Security
SECRET_KEY: str
ALLOWED_ORIGINS: list[str] = ["*"]
class Config:
env_file = ".env"
case_sensitive = True
Environment Variables:
Copy .env.example to .env and customize:
cp .env.example .env
# Edit .env with your configuration
my-api-service/
āāā app/
ā āāā __init__.py
ā āāā main.py # Application entry point
ā āāā core/
ā ā āāā __init__.py
ā ā āāā config.py # Settings management
ā ā āāā dependencies.py # Dependency injection
ā āāā api/
ā ā āāā __init__.py
ā ā āāā routes/ # API route handlers
ā ā ā āāā __init__.py
ā ā ā āāā health.py
ā ā ā āāā users.py
ā ā āāā deps.py # Route dependencies
ā āāā models/ # Pydantic models
ā ā āāā __init__.py
ā ā āāā user.py
ā āāā schemas/ # Request/Response schemas
ā ā āāā __init__.py
ā ā āāā user.py
ā āāā services/ # Business logic
ā āāā __init__.py
ā āāā user_service.py
āāā tests/
ā āāā __init__.py
ā āāā conftest.py
ā āāā test_api/
āāā .env.example
āāā .gitignore
āāā pyproject.toml
āāā README.md
āāā Dockerfile (optional)
my-mcp-api/
āāā app/
ā āāā main.py # FastAPI + MCP server
ā āāā core/
ā ā āāā config.py
ā ā āāā mcp_config.py # MCP-specific settings
ā āāā api/
ā ā āāā routes/
ā āāā mcp/
ā ā āāā __init__.py
ā ā āāā server.py # MCP server instance
ā ā āāā tools/ # MCP tools
ā ā āāā resources/ # MCP resources
ā ā āāā prompts/ # MCP prompts
ā āāā services/
āāā .mcp.json # MCP configuration
āāā pyproject.toml
āāā README.md
Run validation to ensure proper structure and dependencies:
./scripts/validate-structure.sh <project-directory>
Validation Checks:
Initialize the development environment:
# Navigate to project
cd <project-name>
# Create virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -e ".[dev]"
# Run development server
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
For projects with MCP server support:
# Configure MCP settings
cp templates/mcp-config-template.json .mcp.json
# Edit MCP configuration
# Add tools, resources, and prompts
# Run as MCP server (STDIO mode)
python -m app.main --mcp
# Run as HTTP server
uvicorn app.main:app --host 0.0.0.0 --port 8000
See the examples directory for:
minimal-api/: Simple FastAPI applicationcrud-api/: Complete CRUD API with databasemcp-integrated-api/: FastAPI + MCP servermicroservice-template/: Production microserviceauth-api/: API with JWT authentication[project]
name = "my-api-service"
version = "1.0.0"
description = "FastAPI application"
requires-python = ">=3.11"
dependencies = [
"fastapi>=0.115.0",
"uvicorn[standard]>=0.32.0",
"pydantic>=2.0.0",
"pydantic-settings>=2.0.0",
]
[project.optional-dependencies]
dev = [
"pytest>=8.0.0",
"pytest-asyncio>=0.24.0",
"httpx>=0.27.0",
"ruff>=0.6.0",
"mypy>=1.11.0",
]
mcp = [
"mcp>=1.0.0",
]
[tool.ruff]
line-length = 100
target-version = "py311"
[tool.mypy]
python_version = "3.11"
strict = true
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from app.core.config import settings
from app.api.routes import health, users
app = FastAPI(
title=settings.PROJECT_NAME,
version=settings.VERSION,
debug=settings.DEBUG,
)
# CORS
app.add_middleware(
CORSMiddleware,
allow_origins=settings.ALLOWED_ORIGINS,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Include routers
app.include_router(health.router, prefix="/health", tags=["health"])
app.include_router(users.router, prefix="/api/v1/users", tags=["users"])
@app.get("/")
async def root():
return {"message": f"Welcome to {settings.PROJECT_NAME}"}
FROM python:3.11-slim as builder
WORKDIR /app
COPY pyproject.toml .
RUN pip install --no-cache-dir build && \
python -m build --wheel
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /app/dist/*.whl .
RUN pip install --no-cache-dir *.whl && rm *.whl
COPY app/ ./app/
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
Project Structure:
Configuration:
Code Organization:
Testing:
Security:
Performance:
# 1. Generate project structure
./scripts/setup-project.sh my-api standard
# 2. Add new route file
# Create app/api/routes/items.py
# 3. Add schemas
# Create app/schemas/item.py
# 4. Add service logic
# Create app/services/item_service.py
# 5. Register router in main.py
# app.include_router(items.router, prefix="/api/v1/items")
# 1. Generate MCP-enabled project
./scripts/setup-project.sh my-mcp-api mcp-server
# 2. Configure .mcp.json
cp templates/mcp-config-template.json my-mcp-api/.mcp.json
# 3. Add MCP tools
# Copy from templates/mcp-tool-template.py to app/mcp/tools/
# 4. Run in MCP mode
cd my-mcp-api
python -m app.main --mcp
# 1. Build Docker image
docker build -t my-api:latest .
# 2. Run container
docker run -d -p 8000:8000 \
--env-file .env.prod \
--name my-api \
my-api:latest
# 3. Health check
curl http://localhost:8000/health
Import errors: Ensure virtual environment is activated and dependencies installed
Port already in use: Change PORT in .env or use different port with --port flag
Environment variables not loading: Check .env file location and syntax, ensure pydantic-settings installed
MCP server not starting: Verify .mcp.json configuration and mcp package installed
Type checking errors: Run mypy app/ to see detailed type errors, ensure all dependencies have type stubs
Plugin: fastapi-backend Version: 1.0.0 Category: Project Structure & Scaffolding Skill Type: Templates & Automation