# MCP BMI Server Template (FastAPI + SSE)
A minimal **Model Context Protocol (MCP)** server exposing a single tool: `bmiCalculator`.
- Discovery endpoint (SSE): `GET /mcp`
- Invocation endpoint: `POST /invoke`
- Health check: `GET /healthz`
## Quick Start (local)
```bash
pip install -r requirements.txt
export API_KEY=changeme # optional
uvicorn main:app --host 0.0.0.0 --port 10000
```
Test:
```bash
# Discover tools (SSE)
curl -N -H "Accept: text/event-stream" -H "x-api-key: changeme" http://localhost:10000/mcp
# Invoke tool
curl -X POST http://localhost:10000/invoke \
-H "Content-Type: application/json" \
-H "x-api-key: changeme" \
-d '{"tool":"bmiCalculator","params":{"weight":70,"height":175,"unit":"cm"}}'
```
## Docker
```bash
docker build -t mcp-bmi .
docker run -p 10000:10000 -e API_KEY=changeme mcp-bmi
```
## Deploy to Render (example)
- Create a new **Web Service** from this repo
- Set environment variable `API_KEY` (optional but recommended)
- The service will start with the Dockerfile
Your base URL will look like:
```
https://<your-service>.onrender.com
```
Use the MCP SSE endpoint:
```
https://<your-service>.onrender.com/mcp
```
## MCP Host config example
```json
{
"mcpServers": {
"bmiAgent": {
"url": "https://<your-service>.onrender.com/mcp",
"headers": {
"x-api-key": "changeme"
}
}
}
}
```
## Project structure
```
.
├── main.py
├── requirements.txt
├── Dockerfile
├── .gitignore
└── README.md
```
## Notes
- SSE (`text/event-stream`) is used for discovery. If your host requires WebSocket, add a `/ws` endpoint.
- Extend by adding more tools in `MCPHello.tools` and dispatching in `/invoke`.