For DevOps¶
kartoza-mcp is built to be boring to deploy. One static binary,
stdio-only, no shared libraries, no database, no network listener — that
last point matters: MCP servers attach to a client process, they don't
listen on a port.
-
Deployment
Distribute the binary to engineers, the org, or end-user laptops. Pick from package, image or release-artifact patterns.
-
Docker & containers
Build a
FROM scratchimage under 10 MB. Run it from Claude Desktop, Gemini CLI or your own bridge. -
Systemd
Long-running bridges and supervisors when you fan a single MCP server out to many clients via socket activation.
-
Observability
Logs over stderr. Wiring those into your logging stack. What to measure.
-
Security
Threat model: stdio MCP servers are post-trust. What the boundary is, and how to harden it.
Deployment shapes at a glance¶
flowchart LR
subgraph laptop["Engineer laptop"]
L1[Claude Desktop] -->|stdio| L2[kartoza-mcp]
end
subgraph server["Shared bridge host"]
S1[mcp-bridge.service] -->|stdio| S2[kartoza-mcp]
S1 -->|websocket| C1[Remote client]
S1 -->|websocket| C2[Remote client]
end
subgraph k8s["Cluster"]
P1[Pod: mcp-bridge] --> P2[Pod: kartoza-mcp]
end
Pick the shape that matches your team:
- Solo engineer / small team → install on each laptop.
- Org-wide rollout → shared host running a bridge, MCP servers child-spawned per client session.
- Cluster / SaaS → container per analytic, scaled horizontally.
No port to open
The server speaks JSON-RPC over stdin / stdout by design. There is no listening socket. Anything that "exposes" the tool to a network is a bridge you've added on top.