QueryQuarry
LiveA double-blind escrow marketplace for talent — recruiters' AIs query a consent-based candidate graph over MCP
Overview
QueryQuarry inverts hiring. Instead of candidates firing applications into the void and recruiters drowning in AI-generated resumes, candidates upload a resume once and join a structured, consent-based talent graph that recruiters query directly from their own AI assistant — Claude, ChatGPT, or any MCP-compatible client. No applications, no scraped data, no job boards.
The defining architectural bet is that the product isn't an app at all — it's a Model Context Protocol (MCP) server. The recruiter's AI is the intelligence; QueryQuarry is the corpus. The second bet is privacy as the moat: it's a double-blind escrow marketplace where a candidate's identity is revealed only on mutual consent. I designed and built the platform end-to-end as founder and sole developer.
My Role
Product & Architecture
Designed the entire system: the MCP-as-interface model, the double-blind escrow contact flow, the consent and metering rules, and the data model (people vs. queryable resume units).
MCP Server
Hand-rolled the recruiter-facing MCP server — JSON-RPC over Streamable HTTP with two auth paths (Stytch Connected-Apps OAuth and revocable API keys) and a tool catalog for searching, evaluating, and contacting candidates — all security enforced in the app layer (auth → subscription → rate limit → consent gate).
Full-Stack Build
Built the whole Next.js 16 server-first application — candidate side (AI resume parsing, profile/resume management, an Opportunities inbox) and recruiter side (onboarding, key management, tiered usage) on Supabase PostgreSQL with row-level security.
Privacy & Security Engineering
Implemented the consent model in the data layer: column-level grants so candidates can only ever write their own consent fields, local asymmetric-JWT verification, a server-side deanonymization guard, and Cloudflare Turnstile on public AI-spending endpoints.
Tech Stack
Frontend
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS 4
Data & Auth
- Supabase PostgreSQL
- Row Level Security
- Column-Level Grants
- Stytch Connected Apps
AI & Protocol
- Model Context Protocol
- Anthropic Claude
- Vercel AI Gateway
Infrastructure
- Vercel
- Resend
- Cloudflare
The MCP Interface
Rather than building yet another recruiter dashboard, the product is an MCP server that a recruiter connects to their existing AI. They ask for candidates the way they'd ask a colleague — “senior React engineer, remote, open to contract” — and their AI runs the search, evaluates results, and reaches out, all conversationally.
Hand-Rolled JSON-RPC
The server is a from-scratch JSON-RPC implementation over Streamable HTTP, with a tool catalog covering search, deep evaluation, contact requests, watchlists, and corpus stats. It runs with an RLS-bypassing service key, so every security control — authentication, subscription status, rate limiting, and consent — is enforced explicitly in the app layer.
Dual Authentication
Recruiters connect via OAuth (Stytch Connected Apps, verified locally against the JWKS with no round-trip) or via scoped, revocable API keys for custom integrations.
Robust Matching
Skills, seniority, employment type, and work-location are stored as canonical slugs, and recruiter queries are normalized to them — so “React” matches “React 19” and free-text variants resolve, closing an entire class of silent-miss bugs.
The Double-Blind Escrow Model
Identity is the last thing exchanged, and only by mutual consent. A search returns anonymous match cards (no name, no contact). A deeper evaluation stays pseudonymous. To connect, a recruiter spends a metered “contact,” identifies themselves, and the candidate is notified — and if interested, they reach out, quoting a code both sides can confirm as the legitimate match.
Consent Enforced in the Database
Candidates can read and write only their own response fields (accept/decline/star); column-level grants make it impossible — even via a crafted API call — to forge or alter the recruiter's side of an offer.
Server-Side Deanonymization Guard
Before consent, a candidate's name and contact patterns are scrubbed from any free text a recruiter sees, so identity can't leak through resume prose.
Anti-Abuse by Design
Separate reveal and contact limits, a per-pair guard (one active offer, cooldowns, blocks), and a brokered first-touch that needs no inbox — keeping the corpus opt-in and spam-free.
Key Features Built
- MCP server with a full tool catalog (search, evaluate, request/track contact, watchlist, corpus stats, subscription)
- Double-blind escrow contact flow with one-time confirmation code
- Identity-last reveal with a server-side deanonymization guard
- AI resume parsing into structured, searchable profiles
- Slug-based skill/match taxonomy with query normalization (versioned-skill matching)
- Multi-select match filters: employment type, seniority, work authorization, relocation
- Candidate Opportunities inbox: tabs, server-side search, infinite scroll, starred filter, undo/block/report
- Pre-account resume draft that survives the sign-in round-trip (sessionStorage)
- Tiered usage metering with a per-pair anti-harassment guard (Stripe checkout in progress)
- Cloudflare Turnstile bot protection on public, AI-spending endpoints
- Full SEO/AEO: metadata, JSON-LD (Organization, WebSite, FAQ, TechArticle), robots, sitemap, llms.txt
- Self-documenting docs with copy-as-markdown, plus Resend transactional email
Links & Resources
Source code is private — this is an active commercial platform