Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Skeleton MCP Servershow me the available API endpoints"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Skeleton MCP Server
A template project for building Model Context Protocol (MCP) servers. This skeleton provides a solid foundation with best practices, Docker support, and example implementations.
Features
FastMCP framework for easy MCP server development
Docker and Docker Compose support for containerized deployment
VS Code Dev Container configuration for consistent development environments
Example CRUD API implementation to demonstrate patterns
Test suite with pytest
Claude Code integration with custom commands
Quick Start
Prerequisites
Python 3.10 or higher
uv package manager (recommended)
Docker (optional, for containerized deployment)
Installation
Clone this repository and rename it for your project:
git clone <this-repo> my-mcp-server
cd my-mcp-serverRename the package:
Rename
src/skeleton_mcptosrc/your_project_nameUpdate
pyproject.tomlwith your project name and metadataUpdate imports in all Python files
Install dependencies:
uv syncCreate your environment file:
cp .env.example .env
# Edit .env with your API credentialsRun the server:
uv run skeleton-mcpProject Structure
skeleton_mcp/
├── src/skeleton_mcp/
│ ├── __init__.py # Package initialization
│ ├── server.py # Main MCP server entry point
│ ├── client.py # API client for backend communication
│ ├── types.py # TypedDict definitions
│ ├── api/ # API modules
│ │ ├── __init__.py
│ │ └── example.py # Example CRUD operations
│ └── utils/ # Utility modules
│ └── __init__.py
├── tests/ # Test suite
│ ├── conftest.py # Pytest fixtures
│ ├── test_example_api.py # API tests
│ └── test_server.py # Server tests
├── docs/ # Documentation
├── .claude/ # Claude Code configuration
│ ├── commands/ # Custom slash commands
│ └── settings.local.json # Permission settings
├── .devcontainer/ # VS Code dev container
├── Dockerfile # Container image definition
├── docker-compose.yml # Production compose file
├── docker-compose.devcontainer.yml # Dev container compose
├── pyproject.toml # Project configuration
├── CLAUDE.md # Claude context documentation
└── README.md # This fileDevelopment
Running Tests
uv run pytest -vLinting
uv run ruff check src/ tests/
uv run ruff format src/ tests/Building
uv buildAdding Your Own Tools
Create a new module in
src/skeleton_mcp/api/:
# src/skeleton_mcp/api/my_api.py
async def my_tool(param1: str, param2: int = 10) -> dict:
"""
Description of what this tool does.
Args:
param1: Description of param1
param2: Description of param2
Returns:
Description of return value
"""
# Your implementation here
return {"result": "success"}Register the tool in
server.py:
from .api import my_api
mcp.tool()(my_api.my_tool)Add types in
types.pyif needed:
class MyDataType(TypedDict):
field1: str
field2: intHandling Large Files and Binary Data
For MCP servers that need to handle large file uploads, downloads, or binary blob storage, use the mcp-mapped-resource-lib library:
pip install mcp-mapped-resource-libThis library provides:
Blob management with unique identifiers
Automatic TTL-based expiration and cleanup
Content deduplication
Security features (path traversal prevention, MIME validation)
Docker volume integration for shared storage
See CLAUDE.md for detailed usage examples.
Docker Deployment
Build and run with Docker Compose:
docker compose up --buildFor development with VS Code Dev Containers:
Open the project in VS Code
Install the "Dev Containers" extension
Click "Reopen in Container" when prompted
Claude Desktop Integration
Add to your Claude Desktop configuration (claude_desktop_config.json):
{
"mcpServers": {
"skeleton-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--env-file",
"/path/to/your/.env",
"skeleton-mcp:latest"
]
}
}
}Or for local development:
{
"mcpServers": {
"skeleton-mcp": {
"command": "uv",
"args": ["--directory", "/path/to/skeleton_mcp", "run", "skeleton-mcp"]
}
}
}Available Tools
Tool | Description |
| Check server health and configuration status |
| List all items with filtering and pagination |
| Get a specific item by ID |
| Create a new item |
| Update an existing item |
| Delete an item |
Environment Variables
Variable | Description | Default |
| Your API key for authentication | (required) |
| Base URL for the backend API |
|
| Request timeout in seconds |
|
| Enable debug logging |
|
License
MIT License - See LICENSE file for details.
Contributing
Fork the repository
Create a feature branch
Make your changes
Run tests and linting
Submit a pull request
Resources
Looking for Admin?
Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.