A minimal Model Context Protocol server template for Render. Fork it, add your own tools, and deploy.
- A working MCP server using the MCP Python SDK with Streamable HTTP transport
- Bearer token authentication via
MCP_API_TOKEN(auto-generated on deploy) - One example tool (
hello) to show the pattern - A
/healthendpoint for Render's health checks - A
render.yamlBlueprint for one-click deployment - An
AGENTS.mdso AI coding assistants can scaffold new tools for you
Note: This template deploys on the free plan by default. Free services spin down after 15 minutes of inactivity, causing cold starts of 30-60 seconds on the next request. MCP clients may time out during this delay. For reliable use, upgrade to a paid plan in the Render Dashboard — the Starter plan keeps your service running continuously.
git clone https://github.com/render-examples/mcp-server-python.git
cd mcp-server-python
pip install -r requirements.txt
python server.pyThe server starts on http://localhost:10000. The MCP endpoint is at /mcp.
pip install -r requirements.txt
pytestThe server authenticates requests using a bearer token. Render's Blueprint auto-generates a random MCP_API_TOKEN on first deploy.
To find your token after deploying, go to Render Dashboard > your service > Environment and copy the MCP_API_TOKEN value.
Clients must include the token in the Authorization header:
Authorization: Bearer YOUR_TOKEN
When MCP_API_TOKEN is not set (e.g., during local development), authentication is disabled and all requests are allowed through.
After the initial deploy, the token is yours to manage:
- Rotate it by updating
MCP_API_TOKENin the Render Dashboard under Environment. The service restarts automatically with the new value. - Generate a new token with any of these:
openssl rand -base64 32python3 -c "import secrets; print(secrets.token_urlsafe(32))"- A password manager's generator (1Password, Bitwarden, etc.)
- Don't commit tokens to source control. Use environment variables or
.envfiles (which are in.gitignore). - For multi-user or production setups, consider upgrading to OAuth 2.1.
After deploying to Render, your MCP endpoint is available at:
https://your-service-name.onrender.com/mcp
Add to your project's .cursor/mcp.json:
{
"mcpServers": {
"my-mcp-server": {
"url": "https://your-service-name.onrender.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}Add to your Claude Desktop config:
{
"mcpServers": {
"my-mcp-server": {
"type": "streamable-http",
"url": "https://your-service-name.onrender.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}codex mcp add --transport streamable-http \
--url https://your-service-name.onrender.com/mcp \
--header "Authorization: Bearer YOUR_TOKEN" \
my-mcp-serverOr add to .codex/config.toml:
[mcp_servers.my-mcp-server]
url = "https://your-service-name.onrender.com/mcp"
http_headers = { Authorization = "Bearer YOUR_TOKEN" }Add tools to server.py by decorating a function with @mcp.tool():
@mcp.tool()
def fetch_weather(city: str, units: str = "celsius") -> str:
"""Get the current weather for a city."""
# your implementation here
return f"Weather for {city}"The docstring becomes the tool's description, which MCP clients show to LLMs. Always write a clear one.
This repo includes an
AGENTS.mdfile. If you use an AI coding assistant (Cursor, Copilot, Codex, Windsurf, etc.), you can ask it to "add a new tool" and it will follow the conventions inAGENTS.mdautomatically.
server.py MCP server with example tool and health check
requirements.txt Python dependencies
render.yaml Render Blueprint for deployment
.env.example Environment variable reference
tests/test_server.py Test suite (auth, health, tool calls)
pyproject.toml pytest configuration
AGENTS.md Instructions for AI coding assistants
CLAUDE.md Pointer to AGENTS.md for Claude Code