HTTP deploy example (Smithery URL listing)
Host a streamable HTTP MCP server so users connect through Smithery — no Docker required on their machine (unlike the stdio MCPB bundle in smithery.yaml).
| Path |
Purpose |
/ |
Streamable HTTP MCP (POST JSON-RPC) |
/health |
Platform health check |
/.well-known/mcp/server-card.json |
Static metadata for Smithery scan / listing |
Full Smithery guide: docs/SMITHERY.md.
Run locally
go run ./examples/http-deploy
# MCP: http://127.0.0.1:8080/
Optional public tunnel for Smithery testing:
ngrok http 8080
# Publish https://YOUR_SUBDOMAIN.ngrok-free.app (see below)
Deploy (no Docker for end users)
Build a single static binary (CGO_ENABLED=0 go build -o server . from this directory) or let a PaaS compile Go for you.
Render (native Go)
- New Web Service → connect this repo.
- Root directory:
examples/http-deploy
- Build:
go build -o server .
- Start:
./server
- Copy the
https://….onrender.com URL.
Or use render.yaml if deploying via Render Blueprint.
Railway
cd examples/http-deploy
railway init
railway up
Railway sets PORT automatically; this example reads it.
Fly.io
From the repository root (Dockerfile needs tinymcp/ and go.mod):
fly launch --config fly.http.toml
fly deploy --config fly.http.toml
Live example: https://tiny-go-mcp-http.fly.dev → Smithery https://smithery.ai/servers/kioie/tiny-go-mcp-http
Publish on Smithery (URL)
smithery auth login
- Ensure your deployment returns 200 on
/ for MCP initialize (and optionally serves the server card).
- Publish:
smithery mcp publish "https://YOUR_HOST" -n your-namespace/your-server
Use the exact public HTTPS origin Smithery should proxy (no trailing slash). MCP is served at /.
If scanning fails (WAF, auth wall), Smithery can use /.well-known/mcp/server-card.json — already included in this example.
Environment
| Variable |
Default |
Description |
PORT |
— |
Set by most PaaS (e.g. Render, Railway) |
TINY_GO_MCP_ADDR |
:8080 |
Listen address when PORT is unset |
TINY_GO_MCP_VERBOSE |
— |
Set to 1 for stderr startup logs |