Skip to content

bankszach/fastapi-mcp

Repository files navigation

FastAPI MCP Server (Single Tool)

A minimal, production-ready MCP server implemented with FastAPI and deployable to Google Cloud Run. It exposes a single tool get_time via the OpenAI Model Context Protocol (MCP) using JSON‑RPC 2.0 over HTTP.

Features

  • tools/list and tools/call implemented exactly to spec
  • Returns content (text for humans) and structuredContent (JSON for machines)
  • Proper JSON‑RPC error codes and input validation with jsonschema
  • CORS enabled (dev) + optional API key auth via x-api-key
  • Health check (/healthz) and simple request logging
  • Dockerfile and one‑command Cloud Run deploy

Endpoints

  • POST / — JSON‑RPC 2.0 endpoint for tools/list and tools/call
  • GET /healthz — returns { "ok": true }

Tool

get_time

Description: Returns the current UTC timestamp, optionally formatted.

Input schema:

{
  "type": "object",
  "properties": {
    "format": {
      "type": "string",
      "description": "strftime format, e.g. %Y-%m-%dT%H:%M:%SZ"
    }
  },
  "required": []
}

Output structuredContent:

{
  "iso": "2025-01-01T00:00:00Z",
  "formatted": "optional if format passed"
}

Local Dev

python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
uvicorn app:app --reload --port 8000

Test:

curl -s localhost:8000/ -H 'content-type: application/json'   -d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | jq

curl -s localhost:8000/ -H 'content-type: application/json'   -d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"get_time","arguments":{"format":"%Y-%m-%dT%H:%M:%SZ"}}}' | jq

If you set API_KEY=secret, include a header: -H 'x-api-key: secret'

Deploy to Google Cloud Run

Option 1 — from source (simplest):

./deploy.sh
# Set PROJECT_ID, REGION, SERVICE (or export them)

Option 2 — via Cloud Build pipeline:

gcloud builds submit --project $PROJECT_ID --substitutions=_REGION=us-central1,_SERVICE=mcp-clock

Wire into OpenAI Agent Builder

  • Add a new MCP Server to your agent
  • Server URL: your Cloud Run URL (e.g. https://mcp-clock-xxxx-uc.a.run.app)
  • Label: clock
  • Allowed tools: get_time (or leave empty to allow all)

License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published