Today the lanes drive the backend through Composio SQL + anon-key REST. The PURE MCP server turns every operation into a named, scoped, audited tool — no raw SQL in sessions, no anon-key writes from pages at go-live. One contract every MCP-capable client (Claude, Cursor, future lanes) uses to operate PURE identically.
The shape
ClientsClaude · Cursor · lanes
PURE MCP SERVERbearer auth per principal
named tools · per-tool scopes
every call audit_log
named tools · per-tool scopes
every call audit_log
Supabaseservice-role + RLS checks
Netlify / FUB / Mapsscoped per connection
Bearer tokens minted per principal (Mike · lane-A · lane-B · verifier), scopes per tool group. Raw keys never touch a session again.
Tool surface (v1)
BOARD
board.list(status?, lane?)board.dispatch(title, type)board.claim(id, lane)board.update(id, status)board.release(id)MEMORY · DICTIONARY
memory.get(key?)memory.set(key, value)dict.lookup(term)dict.add(term, def)QA · VERIFY
qa.log(lane, target, verdict)qa.latest(target?)vc.challenge(tool, method)vc.log(event)RELEASE
release.cut(label)release.publish(id)release.unpublish(id)release.revert()drives the Netlify deploy API — real deploys, not ticketsWIRE · SESSIONS
mail.send(toLane, title)mail.unread(lane)session.register(lane)session.heartbeat(lane)CONNECTIONS · P2
fub.leads(since?)matterport.models()maps.geocode(addr)gtmetrix.test(url) qa.logzoho.invoices(range)What it fixes that's open today
| TODAY | WITH MCP |
|---|---|
Pages write with the anon key; pure_releases blocked by the allowlist (B-T66 / APR-10) | release.* tools run server-side with scoped service-role — the allowlist gap disappears |
| Publish/unpublish/revert queue a manual Netlify ticket | release.publish calls the Netlify API — a real one-click deploy |
| Audit tab unions several tables | One audit_log — every tool call: who, args-hash, result, ts |
| Spend is estimated (B-T65) | Per-call metering real per-lane spend + enforced budget caps |
Build path
- Cloud Run service (Node) wrapping supabase-js with the service-role key + per-tool RLS-equivalent checks. needs APR-2 hosting
- MCP manifest (the tools above) + bearer auth; Composio/Claude connect by URL.
- Netlify deploy API wired for
release.*(site: acquisto.biz). needs APR-3 token - Retire anon-key writes from pages MCP endpoints; tighten RLS to read-only.
- Phase 2 connection tools (FUB, Matterport, Maps, GA, GTmetrix, Zoho) with per-connection scopes.
Alternative to Cloud Run: Supabase Edge Functions (no new account) — both fine; Mike's call.
Status — backend is LIVE
| RPC backend | LIVE & AUDITED — 7 Postgres functions (board.list/dispatch/claim/update, memory.get/set, qa.log), SECURITY DEFINER, granted to anon, every call writes audit_log. Callable today. |
| APR-2 hosting | APPROVED — Supabase Edge Functions |
| APR-4 spend caps | SET — 50/lane/day (100 merge days) |
| HTTP/MCP wrapper | NEEDS MIKE — supabase functions deploy pure-mcp exposes the live backend over MCP protocol so Claude/Cursor connect by URL |
| APR-3 Netlify token | NEEDS MIKE — set as a Supabase secret; until then release.* queues an ops ticket |