Labsco
daviddrummond95 logo

Cookiecutter MCP UV Container

โ˜… 25

from daviddrummond95

A Cookiecutter template for creating MCP servers with Apple container support and configurable transport methods.

๐Ÿ”ฅ๐Ÿ”ฅโœ“ VerifiedFreeQuick setup

Cookiecutter MCP UV Container

A cookiecutter template for quickly creating MCP (Model Context Protocol) servers with Apple container support.

Why Apple Containers?

Apple containers provide VM-level isolation with Docker-like simplicity:

  • Superior Security: Each container runs in its own lightweight VM
  • macOS Native: Deep integration with macOS frameworks
  • On-Demand: Start/stop servers as needed (not constantly running)
  • Resource Efficient: Less overhead than traditional VMs
  • OCI Compatible: Works with existing container registries

Features

  • ๐Ÿš€ FastMCP server setup with example tools
  • ๐Ÿณ Multi-stage Dockerfile for optimized containers
  • ๐Ÿ“ฆ UV package management
  • ๐Ÿ”’ VM-level isolation with non-root container user
  • ๐ŸŒ Multiple transport methods (stdio, streamable-http, sse)
  • ๐ŸŽ Optimized for Apple Silicon
  • ๐Ÿ“ Example calculator tools with typed parameters

Project Structure

After generation, your project will have:

my-mcp-server/
โ”œโ”€โ”€ Dockerfile          # Multi-stage build for containers
โ”œโ”€โ”€ pyproject.toml      # UV project configuration
โ”œโ”€โ”€ hello.py            # MCP server implementation
โ”œโ”€โ”€ QUICKSTART.md       # Quick start guide
โ””โ”€โ”€ .env.example        # Environment configuration

Next Steps

After creating your project:

  1. Navigate to your project:

    cd my-mcp-server # or whatever you put as project-slug
  2. Start Container System (first time only):

    container system start
  3. Build Container:

    container build --tag my-mcp . # Replace my-mcp with whatever you want to name the container
  4. Run MCP Server:

    # Interactive stdio mode
    container run --interactive my-mcp
  5. Customize: Edit hello.py to add your own MCP tools

Claude Desktop Integration

For Claude Desktop, you have two options:

{
  "mcpServers": {
    "My MCP Server (Local)": {
      "command": "uv",
      "args": ["run", "fastmcp", "/path/to/my-mcp-server/hello.py"]
    }
  }
}

Option 2: Use HTTP transport with container

Then configure Claude Desktop to connect via STDIO:

{
  "mcpServers": {
    "My MCP Server (Container)": {
      "command": "container",
   	 "args": ["run",  "--interactive", "my-mcp-container"]
    }
  }
}

Transport Options

The template supports multiple transport methods via environment variables:

  • stdio: Default
  • More in progress for flow from local-> cloud

Set via: MCP_TRANSPORT=<transport-type>