MCP gateways
AI assistants reach my tools through the Model Context Protocol (MCP). The gateways put those tools behind the same login as everything else.
The solution
| Gateway | Address | Fronts |
|---|---|---|
| gitea-mcp | gitea.mcp.obiwalker.com |
The Gitea API |
| icloud-mcp | icloud.mcp.obiwalker.com |
iCloud |
Each gateway is an auth proxy. A caller logs in through Zitadel, with each gateway its own project there. The gateway then calls the service behind it with its own credential, sealed in git. Each has a small NFS volume for its state: login sessions and a signing key. Images are pulled from Gitea's registry.
Why
The assistant never holds the real credential. It gets a Zitadel login, which I can revoke in one place, never the Gitea token or the iCloud password.
Same pattern as every other app. A new gateway is a chart from the starter, a Zitadel project, and an Argo CD Application in the
mcpgroup.
Trade-offs and known limits
No backups, on purpose. The volumes hold only transit data: sessions and keys the gateway makes again. Losing one means each MCP client logs in again; the real credentials are sealed in git.
A healthy pod isn't a working gateway. A rollout only proves the port is open. The real check is an MCP client completing the Zitadel login and making a call.