Tools I made for myself
MCP Server
Brag-tracker
A multi-tenant MCP server for logging work with AI agents: strict isolation, hand-rolled JSON-RPC, and self-hosted Google OAuth on the free tier.
The problem
If an agent can write to a log, it can also write to the wrong person’s log. Off-the-shelf auth on a toy project is how that happens. I wanted a private record that still behaved like a real multi-tenant service.
What it is
Weekly updates were turning into archaeology. I built a remote MCP server so an agent can write accomplishments as they happen, with per-tenant isolation in every query path and OAuth that I actually understand.
What I built
The server is a remote MCP endpoint on Cloudflare Workers with D1. The JSON-RPC transport is hand-rolled and stateless, which keeps the Worker model honest: no leftover session on the isolate.
Every query path is tenant-scoped. There is no “forget the WHERE” helper. Google OAuth 2.0 is the authorization-code flow with state and nonce checks and a blocked-user gate, hosted by the same project rather than delegated to a black box.
How it fails
A token for tenant A cannot read tenant B. Invalid OAuth state is a hard fail, not a retry that skips the check. The whole thing runs on the free tier, so the design has to stay cheap as well as strict.
Focus
- Stateless JSON-RPC transport for MCP
- Per-tenant isolation on every query path
- Self-hosted Google OAuth 2.0 with state, nonce, and a blocked-user gate
What changed
- Work is captured while it happens instead of reconstructed on Friday.
- Isolation and OAuth are part of the product, not a later hardening pass.