niradler/mcp-template-py
If you are the rightful owner of mcp-template-py and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
This document provides a structured overview of a comprehensive template for creating Model Context Protocol (MCP) servers in Python using the FastMCP framework.
MCP Server Template
A clean, simple template for creating MCP (Model Context Protocol) servers in Python using FastMCP.
๐ Features
- โ FastMCP Framework - Simple decorator-based API
- โ Complete MCP Support - Prompts, Tools, and Resources
- โ Context Logging - Proper logging through MCP context
- โ Input Validation - Safe input handling and sanitization
- โ Comprehensive Testing - Unit tests with pytest
- โ Production Ready - Clean, maintainable code structure
๐ฏ What's Included
Tools
- echo - Basic tool demonstrating input validation and logging
- advanced_calculator - Advanced tool with progress tracking and structured logging
Prompts
- hello_world - Simple greeting prompt
- code_review - Code review prompt generator
Resources
- server://info - Server information and metadata
- server://status - Current server status and metrics
๐ Quick Start
-
Install dependencies:
uv sync
-
Run the server:
# stdio transport (default) uv run python -m mcp_template.main # SSE transport uv run python -m mcp_template.main --transport sse --port 8000 # HTTP transport uv run python -m mcp_template.main --transport http --port 8000
-
Test with MCP Inspector:
npx @modelcontextprotocol/inspector uv run python -m mcp_template.main
๐งช Testing
Run the test suite:
uv run pytest
Run with coverage:
uv run pytest --cov=src/mcp_template --cov-report=html
๐ Project Structure
src/mcp_template/
โโโ __init__.py # Package initialization
โโโ main.py # CLI entry point with transport options
โโโ server.py # FastMCP server setup
โโโ tools.py # Tool implementations (your main work area)
โโโ prompts.py # Prompt implementations
โโโ resources.py # Resource implementations
โโโ helpers/
โโโ __init__.py # Helper exports
โโโ logging.py # MCP context logger
โโโ validation.py # Input validation utilities
๐ ๏ธ Development
Adding New Tools
Edit src/mcp_template/tools.py
:
@mcp.tool()
async def my_tool(input_data: str, ctx: Context[ServerSession, Any] = None) -> str:
"""My custom tool."""
if ctx:
logger = Logger(ctx, "my_tool")
await logger.info("Tool started")
# Your logic here
result = f"Processed: {input_data}"
if ctx:
await logger.info("Tool completed")
return result
Adding New Prompts
Edit src/mcp_template/prompts.py
:
@mcp.prompt()
def my_prompt(topic: str, style: str = "professional") -> str:
"""Generate a prompt about a topic."""
return f"Write about {topic} in a {style} style..."
Adding New Resources
Edit src/mcp_template/resources.py
:
@mcp.resource("my://resource")
def my_resource() -> str:
"""My custom resource."""
return json.dumps({"message": "Hello from my resource"})
๐ง Configuration
The server uses FastMCP's automatic configuration. For custom settings, modify src/mcp_template/server.py
.
๐ Logging
The template includes a Logger class that sends messages to MCP clients using the official MCP logging approach:
from .helpers import Logger
# In your tool function
if ctx:
logger = Logger(ctx, "component_name")
await logger.info("Processing started", extra={"user_id": 123})
await logger.debug("Debug information")
await logger.warning("Warning message")
await logger.error("Error occurred", extra={"error_code": "E001"})
The Logger automatically formats messages with component names and handles structured logging with extra data. It gracefully handles test environments where context may not be available.
๐ Deployment
For production deployment:
-
Build with uv:
uv build
-
Install the built package:
pip install dist/mcp_template-*.whl
-
Run:
python -m mcp_template.main
๐ FastMCP Documentation
For more information about FastMCP features, visit:
๐ค Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Run the test suite
- Submit a pull request
๐ License
MIT License - see LICENSE file for details.