For builders · Model Context Protocol
Plug your agent into a founder's library.
A public MCP server exposing every framework, insight, service, 100+ Substack posts, and 60 book poems — human vs AI, yours to guess — searchable, slug-addressable, and ready to drop into any MCP-aware client.
Endpoint
https://kcrucyjpzabirewfvynq.supabase.co/functions/v1/mcpStreamable HTTP transport. Public — no user auth — but Supabase's edge gateway requires the project anon key on both apikey and Authorization: Bearer headers.
Authentication
search_content and get_book are gated: they return a paywall hint unless the request carries a supporter's Supabase session JWT in the Authorization header (replacing the anon key). The email on that JWT must match an active paid subscriber in the Substack funnel. Every other tool is fully public — call it with just the anon key above.
Catalog, content, and brand stay free — discoverability isn't paywalled. The book Just Thoughts is supporter-gated over MCP but remains free to read on the web at /book.
Tools
Start by calling get_catalog — it returns live counts and retrieval instructions for every content type so your agent knows exactly what to ask for.
The book Just Thoughts is fully queryable via get_book. Each of the 30 poem pairs presents the same theme twice — once written by Nicolas, once by AI. Use mode='browse' to read without knowing the author, mode='reveal' to see the attribution.
get_catalog{}→ { summary, content_types, tips }Call this first. Returns a live catalog of all content types with real counts from the database, series descriptions, and retrieval tips. Tells agents exactly what's available and how to ask for it.
get_book{ mode?: "browse" | "reveal" | "single", chapter?: "love" | "life" | "leadership", slug? }→ BookPoem[]Fetch poems from 'Just Thoughts — Love, Life and Leadership in an AI-driven World'. 60 poems, 30 pairs — each title has one human-written poem by Nicolas and one AI-generated by Chat G-PoeT. Supporter-gated over MCP (any paid Substack tier); free to read on the web at /book. mode='browse' hides authorship (the guessing game), mode='reveal' exposes it, mode='single' fetches by slug. Filter by chapter.
list_content{ type?, tag?, limit? }→ ContentItem[]Browse the catalog. Filter by type (framework | insight | service | book | blog | asset | post) or tag. The 'asset' type surfaces Nicolas' own downloadable / linkable assets (Founder Coaching Guide, Cold Email Templates, the poetry book, and the Substack supporter subscription) — all surfaced under the /resources hub. IMPORTANT: posts (the Substack archive, 100+ items) are database-backed — always pass type='post' with limit=200 to retrieve the full archive. Default limit is 200 for posts, 50 for all other types.
list_archive{}→ { count, generated_at, items: ArchiveEntry[] }Free-tier directory of the full Just Thoughts Substack archive — every post's slug, title, subtitle, excerpt, tags, publish date, and canonical URL, newest first, in one call. No supporter required. Browse with this, then call get_content(slug) for a specific post's full body.
get_content{ slug, include_html? }→ ContentItem (+ blocks, links)Fetch a single item by slug. For Substack posts: returns structured blocks, cross-platform backlinks, and optionally the raw HTML.
search_content{ query, limit? }→ ContentItem[] (ranked)Hybrid search: semantic embeddings over Substack posts + keyword scoring over frameworks, services, blog, and the book.
run_passion_compass{ mode?: "items" | "score" | "history", answers?, context? }→ { render, items | profile | history }Passion Compass — a two-axis lens (harmonious vs obsessive) with money as a vector. mode='items' returns the 10 assessment items (free). mode='score' scores answers + context and saves a snapshot. mode='history' returns saved snapshots. Score and history require a paid supporter (any Substack tier).
get_us_expansion_compass{}→ { render, title, url, archetypes, cost_snapshot, hub_notes, legal_checklist, case_matches, attribution }US Expansion Compass — an eight-question diagnostic mapping European/Israeli founders to one of five archetypes (Long-Range, Homebase, Dual-Hub, Westbound, US-Native) with a stage-aware action plan, US cost snapshot, landing-hub notes, and legal checklist. Free. Returns a render directive; clients SHOULD direct the user to the interactive tool at /resources/us-expansion-compass instead of listing the archetypes as static text. Inspired by public research on transatlantic expansion (Index Ventures, Frontline Ventures, Maki.vc, Business Finland).
run_life_calibration{ step?: "identity" | "ikigai" | "statement" | "life_doc" | "goals" | "summary", answers?, birthday_month? }→ { render, step, next_step, voice, notice, sources, branded_pdf, ...step content }Calibrating Purpose — a guided walk through the yearly self-reflection exercise: an identity warm-up from 'Know Who You Are', the four Ikigai quadrants, an 'I am' statement, the L.I.F.E. legacy document, then goal review and goal setting. Free, no sign-in, and completely stateless — nothing the person says is stored. Call it one step per call and honor the render directive: one question at a time, never writing someone's purpose for them. step='summary' with the person's own answers returns the closing block they paste into their own notes, plus a branded_pdf pointer to /resources/calibrating-purpose#carry-it-out where they can download the summary as a branded PDF built in their own browser.
run_purpose_statement{ step?: "readiness" | "context" | "stories" | "draft" | "curate" | "embed" }→ { render, step, next_step, why, do_this, ask, principles, voice, read_more }The organisational twin of run_life_calibration: facilitates the collective purpose-statement exercise from Just Thoughts #65 — readiness, context, pride-and-joy stories, 1-2-4-All drafting, open curation, and embedding it in the operating cadence. Free, stateless, facilitation only: never draft an organisation's purpose statement for it, and say plainly when the readiness step shows the team isn't there yet.
design_one_on_one{ mode?: "menu" | "educate" | "design" | "next" | "sort_notes" | "questions" | "quarter", step?: "cadence" | "topics" | "sequence" | "plan", cadence_weeks?, quarter_weeks?, emphasis?, session_type?, notes?, subject_label?, situation?, covered_elsewhere?, record? }→ { render, mode, data_notice, … per mode: options | blocks+grid | step+ask+plan | box+why_this_box+questions+coverage | placements+missing_boxes | session_type+questions | sessions+chart+coverage }Leadership Rhythm Kit — the 1-on-1 companion, on the nine-grid (operational | wellbeing | development × Me | You | Us). Six modes: menu (default — offer the lead the choice, starting with 'do you want to design a rhythm for yourself?'), educate (never run 1-on-1s before), design (step-by-step walk: cadence → topics → sequence → plan, one step per call), next (pick the box the next single session should sit in — used automatically when subject_label or situation is given), sort_notes (paste raw notes from a conversation that already happened; each line is placed on the grid and the absent boxes are named), questions (matched to the session type: regular, hard-week, new-joiner, gone-quiet, review, promotion, underperformance, team-friction), quarter (week-by-week map of which topic and perspective each session carries). All modes free; memory, the coverage map and the ledger require a paid supporter. Pasted notes are never stored, and subject_label must be a pseudonym — names and emails are rejected. Clients MUST state the returned data_notice before the lead describes a colleague.
evaluate_feedback{ draft, subject_label?, relationship?, record? }→ { render, data_notice, quadrant, nvc, predicted_reaction, score, rewrite, coaching_instead, trend }Grades a draft piece of feedback against Radical Candor × Nonviolent Communication, predicts how it lands on the reception scale (Destroy / Deny / Defend / Dismiss → Reflect & Listen / Reflect & Ask / Reinforce), and rewrites it once in the lead's own register. The draft and the rewrite are never stored — only the quadrant and a score, for supporters. Free to run.
read_the_room{ situation, subject_label?, works_in?: "isolation" | "team", record? }→ { render, data_notice, placement, confidence, moment, capacity_read, trust_read, back_on_you }Coach the coach. Places a pseudonymous situation on the coaching grid (oblivious | aware | developing × isolation | team), calls coaching-vs-feedback, and reads it against the 100% life capacity rule and the three-strikes trust formula — always turning one question back on the lead. The situation text is never stored. Free to run.
leadership_ledger{}→ { render, coverage, never_covered, candor_mix, feedback_quality, retention_months }The lead's own record of practice: which of the nine boxes they cover, which they avoid, and how their feedback quality is trending. Supporter-gated and strictly self-scoped — a mirror on the lead, never a file on their team.
export_my_leadership_data{}→ { account, leadership_sessions, retention, never_stored, processors }Data access right: everything stored about your use of the Leadership Rhythm Kit, as JSON. Free, no supporter subscription needed — requires your own signed-in token.
erase_my_leadership_data{ confirm?: 'ERASE', retention_months?: 3 | 6 | 12 }→ { erased, deleted } or { pending_confirmation, would_delete }Right to erasure: permanently deletes every Leadership Rhythm Kit record for you — a hard delete, not a flag. Free. Without confirm='ERASE' it reports what would be deleted. Pass retention_months instead to change how long future records are kept.
render_hint{ slug, variant?: "card" | "tldr" | "full" | "carousel" }→ { component, variant, props }Suggested UI block + props for clients that want to render content natively.
get_brand{}→ { fonts, colors, radius, logos, voice }Brand tokens — typography, color palette, tone, and downloadable logo URLs (wordmark, favicon) — so MCP clients can render content in the site's visual language.
ContentItem = { slug, type, title, summary, tags, url, body?, links? }
Frameworks, insights, services, and standalone pages are fully embedded — search_content returns matching paragraphs from anywhere on the site, not just titles or summaries.
Brand, served by MCP
The block below is rendered from a live get_brand call. Any MCP client can pull the same tokens to render content in the site's typographic and color voice.
Loading brand tokens from MCP…
Connect from Claude Desktop / Cursor
Add this to your MCP client config (Claude Desktop: claude_desktop_config.json).
{
"mcpServers": {
"afoundersfriend": {
"transport": "http",
"url": "https://kcrucyjpzabirewfvynq.supabase.co/functions/v1/mcp",
"headers": {
"apikey": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImtjcnVjeWpwemFiaXJld2Z2eW5xIiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODIyOTk1NTQsImV4cCI6MjA5Nzg3NTU1NH0.M8sM6MzEl0G1wx1ofq5Q7cxLYfWATyzXpOESBXuKes8",
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImtjcnVjeWpwemFiaXJld2Z2eW5xIiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODIyOTk1NTQsImV4cCI6MjA5Nzg3NTU1NH0.M8sM6MzEl0G1wx1ofq5Q7cxLYfWATyzXpOESBXuKes8"
}
}
}
}Raw JSON-RPC example
curl -X POST https://kcrucyjpzabirewfvynq.supabase.co/functions/v1/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImtjcnVjeWpwemFiaXJld2Z2eW5xIiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODIyOTk1NTQsImV4cCI6MjA5Nzg3NTU1NH0.M8sM6MzEl0G1wx1ofq5Q7cxLYfWATyzXpOESBXuKes8" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImtjcnVjeWpwemFiaXJld2Z2eW5xIiwicm9sZSI6ImFub24iLCJpYXQiOjE3ODIyOTk1NTQsImV4cCI6MjA5Nzg3NTU1NH0.M8sM6MzEl0G1wx1ofq5Q7cxLYfWATyzXpOESBXuKes8" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"search_content","arguments":{"query":"feedback"}}}'Why this exists
Two decades of notes on building companies, leading people, and staying sane shouldn't sit locked behind a sitemap. If you're building an agent that coaches founders, drafts board decks, or just needs a sharper second opinion — point it here.
No tracking, no rate limits beyond Supabase defaults, no surprise. Just content, addressable.