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 mcp group.

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.