redhat-data-and-ai
template-mcp-server
Python

Production-ready Python template for building MCP servers with FastMCP, FastAPI, OAuth, and OpenShift deployment.

Last updated Jul 1, 2026
64
Stars
69
Forks
34
Issues
0
Stars/day
Attention Score
70
Language breakdown
No language data available.
Files click to expand
README

Template MCP Server

Python 3.12+ Tests Coverage License: Apache 2.0 Open in GitHub Codespaces

A production-ready template for developing Model Context Protocol (MCP) servers using Python and FastMCP. This server provides a foundation for creating MCP-compliant servers with comprehensive examples of tools, structured logging, configuration management, and containerized deployment.

The template includes three example MCP tools: a multiply calculator, a code review prompt generator, and a Red Hat logo tool. It demonstrates best practices for MCP server development including proper error handling, health checks, multiple transport protocols (HTTP, SSE, streamable-HTTP), SSL support, and comprehensive development tooling.

Features

  • FastMCP + FastAPI with multiple transport protocols (HTTP, SSE, streamable-HTTP)
  • Three example tools: multiply calculator, code review prompt, Red Hat logo
  • Pydantic configuration via environment variables
  • Structured JSON logging with structlog
  • SSL/TLS support for secure deployments
  • Container-ready with Red Hat UBI base image
  • OpenShift deployment manifests included
  • Full CI/CD with GitHub Actions (tests, linting, security, releases)
  • OAuth integration with PostgreSQL token storage

Quick Start

git clone https://github.com/redhat-data-and-ai/template-mcp-server
cd template-mcp-server
make install        # creates venv, installs deps + pre-commit hooks
make local          # starts server on localhost:5001

Verify in another terminal:

curl http://localhost:5001/health

Manual setup (without Make)

# Create venv and install
uv venv && source .venv/bin/activate
uv pip install -e ".[dev]"
pre-commit install

Configure and run

cp .env.example .env template-mcp-server

Verify

curl http://localhost:5001/health

How to Use This Template

Option 1: GitHub Template (Recommended)

  • Click the "Use this template" button at the top of the repository page.
  • Name your new repository (e.g., my-mcp-server).
  • Clone your new repository and follow the rename checklist below.

Option 2: Manual Clone

git clone https://github.com/redhat-data-and-ai/template-mcp-server.git my-mcp-server
cd my-mcp-server
rm -rf .git
git init

Rename Checklist

After creating your project, replace all references to template-mcp-server and templatemcpserver with your project name. The following files require updates:

| File / Directory | What to Change | | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | | templatemcpserver/ | Rename the package directory (e.g.,mymcpserver/) | | pyproject.toml | name, project.scripts entry, [project.urls], [tool.coverage.run] source | | Makefile | References in lint, local, and deployment targets | | Containerfile | COPY source path and CMD module path | | compose.yaml | container_name, service name, healthcheck URL | | deployment/openshift/ | App labels, image names, route hostnames in all manifests (deployment.yaml, route.yaml, kustomization.yaml, etc.) | | .github/workflows/ | Workflow names and paths | | README.md | Title, description, clone URL, and all badge URLs (tests, coverage, Codespaces) | | .env.example | Adjust defaults if your server uses a different port or protocol |

Verify Rename

Run this to catch any leftover references:

grep -rn "template.mcp" --include=".py" --include=".yaml" --include=".yml" --include=".toml" --include="*.md" .

The output should be empty (or only match this README section itself).

Configuration

| Variable | Default | Description | | ----------------------------- | ------------- | -------------------------------------------------------------------- | | MCP_HOST | localhost | Server bind address | | MCP_PORT | 5001 | Server port (1024-65535) | | MCPTRANSPORTPROTOCOL | http | Transport protocol (http, sse, streamable-http) | | MCPSSLKEYFILE | None | SSL private key file path | | MCPSSLCERTFILE | None | SSL certificate file path | | ENABLEAUTH | False* | Enable OAuth authentication (see Auth Guide) | | USEEXTERNALBROWSER_AUTH | False | Browser-based OAuth for local dev | | PYTHONLOGLEVEL | INFO | Logging level |

\ ENABLE_AUTH defaults to False in .env.example but True in code. Always copy .env.example to .env to start with auth disabled.*

Documentation

| Guide | Description | | ------------------------------------- | ---------------------------------------------------------- | | Architecture | System diagrams, code structure, key components, MCP tools | | Development | Setup, running locally, testing, code quality | | Deployment | Podman, OpenShift, container configuration | | CI/CD | Workflows, pipeline features, running CI locally | | Contributing | Development workflow, commit conventions, PR process | | Security | Vulnerability reporting policy | | Changelog | Release history | | Authentication | OAuth setup, auth modes, troubleshooting | | Tutorial | Your First Tool in 5 Minutes | | Examples | FastMCP and LangGraph client examples |

Contributing

See CONTRIBUTING.md for detailed guidelines.

# Fork, clone, and set up
git clone https://github.com/<your-username>/template-mcp-server.git
cd template-mcp-server
make install

Create a branch, make changes, verify

git checkout -b feat/your-feature make lint && make test && make pre-commit

Commit and open a PR

git commit -m "feat: your descriptive message" git push origin feat/your-feature

License

Apache 2.0

🔗 More in this category

© 2026 GitRepoTrend · redhat-data-and-ai/template-mcp-server · Updated daily from GitHub