Caveist is an MCP-native server that turns any AI assistant into your personal sommelier. This is the stack.
Subdomain routing · Auth header injection · TLS termination
OAuth 2.1 · 10 tools
Auth · Public cave
Async events · Workers
RLS · pgcrypto · pg_trgm
Wine label images
10 MCP tools exposed via OAuth 2.1
The Vue dashboard shows your collection. Bottles, tasting history, drinking windows, your public cellar page. Manage through AI, browse here.
What happens when you say "add 6 bottles of Margaux 2018"
Claude/ChatGPT understands you want to add wine and calls add-to-cellar
Request hits mcp.caveist.com → Worker routes to /v1/mcp, injects auth headers
Edge function validates OAuth token, extracts user_id, scopes all queries to your cellar via RLS
upsertWine() → exact match? reuse. Fuzzy match >0.85? auto-merge. Ambiguous? create new entry.
6 bottle rows inserted (your scope). Inngest event wine/added fires → async worker fetches label image to R2
MCP returns structured result. AI formats it naturally: "✓ 6 bottles added. Château Margaux 2018, peak 2030–2055."
The Model Context Protocol is an open standard by Anthropic that lets AI assistants use external tools. USB-C for AI. One protocol, any model.
When you ask Claude "what wine goes with lamb?", Claude calls Caveist's query-cellar tool, gets your actual bottles, and recommends from your stock.
Every MCP connection authenticates via OAuth 2.1 with PKCE. Your AI gets a scoped token. It can access your cellar and nothing else.
Auth, database, storage, edge functions. The backend.
Row-Level Security, trigram indexes, full-text search.
Edge runtime for MCP server and API functions.
Workers proxy, Pages hosting, R2 image storage.
Model Context Protocol server implementation.
End-to-end type safety, from DB to AI tools.
Runtime schema validation for every MCP tool input.
Async event processing: onboarding, image fetch, drip.
Every table has RLS policies. Your bottles and tastings are invisible to other users, even at the database level.
MCP connections authenticate with modern OAuth. Tokens are scoped, rotatable, and never stored in plaintext.
Your cellar data lives in Supabase with AES-256 encryption at rest and TLS 1.2+ in transit. We never sell or train on your data.
Say "Margaux 2018", "Ch. Margaux '18", or "Chateau Margaux 2018" . Caveist knows it's the same wine. Normalized producer matching + pg_trgm fuzzy search ensures one canonical entry per wine.
Peak drinking periods, predicted per bottle. Based on region, appellation, vintage, and grape variety. Caveist tells you what's ready now and what to keep aging.
Château Margaux 2018 · Margaux AOC
"Built by wine lovers who write code."
Get Started