Skip to content

About this project

Sathi is a portfolio piece, not a startup.

It's built and dogfooded by Amar Gupta to demonstrate end-to-end ownership of a non-trivial MCP-driven system — from Postgres schema and RLS, through a custom OAuth broker and ~70 typed tools, to ExtApps widgets that render in Claude's client. Signup stays gated so live tokens and the operator's real corpus don't leak.

About the builder

Amar Gupta

AI-powered full-stack engineer · 7+ years · building agent-native software

Sathi is part of a five-product portfolio of dogfooded apps that share infrastructure: one Supabase project, a custom MCP fabric, Postgres with row-level security, and a desktop Electron relay that wakes Claude Code on demand. I built every layer — protocol, schema, dashboards, embeddings, hybrid search, and the MCP tool surface that lets Claude actually run my life.

Currently building

Setu (chat relay), Sandesh (publishing), Sankalp (job autopilot), Swayam (automation), Sathi (personal manager)

Open to

Senior / staff full-stack · AI eng · MCP and agent infra roles

MCP server designPersonal-ops orchestrationHybrid search (vector + tsvector)TypeScript / Next.js 16Supabase + Postgres RLSLLM tool calling

What Sathi demonstrates

Six skills, one running system.

01

MCP server design

Stateless, per-request MCP server with ~70 typed tools across 8 pillars (habits, tasks, finance, goals, documents, memory, skills, graph). Zod schemas at every entry; flat schemas for back-compat dispatchers (`manage_*` / `query_*`) so LLM clients get real field hints instead of `EMPTY_OBJECT_JSON_SCHEMA`.

02

OAuth 2.0 + PKCE end-to-end

Custom broker at `/oauth/{authorize,token,register,revoke}` + RFC 8414 / 9728 well-known endpoints. Tokens SHA-256 hashed at rest, access TTL 24h, refresh 30d, code 10m. Dynamic client registration so any MCP client (Claude.ai, ChatGPT, CC) attaches cleanly.

03

Hybrid memory + duplicate detection

Postgres `pgvector` (1536-dim embeddings) + `tsvector` search vector, blended in the `pa_hybrid_search` RPC. `pa_match_memories` at 0.9 cosine catches near-duplicates at save time and powers `consolidate_memories`; stale hints surface old low-importance items for review.

04

Postgres + RLS at the boundary

Every table (`pa_memory_items`, `tasks`, `habits`, `transactions`, `goals`, `wallet_documents`, `pa_entity_links`, `pa_audit_log`) has row-level security. The `pa_*` prefix isolates Sathi from sibling apps on the same Supabase project, while JWTs interoperate across all five products.

05

Cross-pillar graph + audit

`pa_entity_links` lets any two entities (task/memory/goal/habit/document/transaction) link with typed relationships (references, blocks, part_of, related_to). `pa_audit_log` is an append-only change log keyed by user, entity, tool name — full replayable history of every mutating MCP call.

06

Next.js 16 + Vercel serverless discipline

App Router, Server Components by default, no middleware (auth per-layout for explicit data flow). Stateless MCP factory per request (required for Vercel). `GET /api/mcp` returns 405 by spec; only POST carries tool calls — that change alone cut ~99k spurious edge requests in 12h.

Sibling products

Sathi is one of five.

Setu, Sandesh, Sankalp, Swayam, and Sathi share one Supabase project, the same MCP fabric, and the same OAuth broker pattern. Each lives at its own subdomain and demonstrates a different end-to-end use case.

Hiring?

I'm open to senior / staff roles.

Full-stack, AI eng, MCP / agent infra. Happy to walk a hiring panel through any layer of this system live — OAuth broker, tool registration, hybrid search RPC, the ExtApps widget protocol, or the Claude Code session that actually drives it.

Portfolio piece

Built by Amar Gupta — AI / MCP / full-stack engineer. Sathi is one of 5 dogfooded products in the portfolio.