import { GitHubIcon, NotionIcon, PostgresIcon, RestIcon, SalesforceCloudIcon, StripeIcon, } from '@/components/brand-icons'; import { HeroStepRotator } from '@/components/hero-step-rotator'; import { HeroVideo } from '@/components/hero-video'; import { JsonLd } from '@/components/json-ld'; import { ParticleHero } from '@/components/particle-hero'; import { PulseLink } from '@/components/pulse'; import { ScrollCue } from '@/components/scroll-cue'; import { TIERS } from '@/lib/pricing'; import { FAQ, faqJsonLd } from '@/lib/seo'; import { Activity, ChevronDown, Container, ShieldCheck } from 'lucide-react'; import Link from 'next/link'; import type { ComponentType } from 'react'; interface ExampleEntry { title: string; desc: string; /** Brand logo component rendered inside the coloured chip. */ Icon: ComponentType<{ size?: number; className?: string }>; /** Official brand colour for the chip background. */ bg: string; /** Foreground colour the icon paints in. */ fg: string; } const EXAMPLES: ExampleEntry[] = [ { title: 'PostgreSQL', desc: 'Read-only access to your tables with schema introspection.', Icon: PostgresIcon, bg: '#336791', fg: '#ffffff', }, { title: 'Salesforce', desc: 'Query opportunities, accounts and leads from Claude.', Icon: SalesforceCloudIcon, bg: '#00a1e0', fg: '#ffffff', }, { title: 'Notion', desc: 'Search pages, read content, append blocks.', Icon: NotionIcon, bg: '#ffffff', fg: '#0a0a0b', }, { title: 'GitHub', desc: 'List issues, search code, post comments. Scoped to one repo.', Icon: GitHubIcon, bg: '#181717', fg: '#ffffff', }, { title: 'Stripe', desc: 'Look up charges, customers, refunds (read-only by default).', Icon: StripeIcon, bg: '#635bff', fg: '#ffffff', }, { title: 'Custom REST', desc: 'Wrap any HTTP API behind one prompt-defined tool surface.', Icon: RestIcon, bg: '#6366f1', fg: '#ffffff', }, ]; // Honest marketplace preview data: template names + tool counts only. These // mirror the first-party starter templates; no invented fork counts, no // "verified" theatre — the frame is labelled as a preview of the card format. const PREVIEW_TEMPLATES: { name: string; author: string; tools: number }[] = [ { name: 'notion-search', author: 'core', tools: 2 }, { name: 'github-issues', author: 'core', tools: 3 }, { name: 'stripe-readonly', author: 'core', tools: 4 }, { name: 'postgres-readonly', author: 'core', tools: 3 }, ]; const MARKETPLACE_POINTS: { t: string; d: string }[] = [ { t: 'Fork and own', d: 'Start from a server someone already shipped. Fork it, paste your own credentials, deploy. No prompt required.', }, { t: 'Secrets never travel', d: "A template carries the spec and generated code, never the author's API keys. You add your own on fork.", }, { t: 'Open from day one', d: 'Publish a server you built and anyone can fork it. The marketplace is young — early templates set the standard.', }, ]; // Proof-by-specificity band: three claims a visitor can verify with one // click instead of taking our word for it. Substitute for social proof // until there is social proof. const PROOF_POINTS: { t: string; d: string; href: string; linkLabel: string; Icon: ComponentType<{ size?: number; className?: string }>; }[] = [ { t: 'OAuth 2.1 authorization server', d: 'PKCE, Dynamic Client Registration and Resource Indicators (RFC 8707) in front of every server.', href: '/docs/oauth', linkLabel: 'Read the auth docs', Icon: ShieldCheck, }, { t: 'Live system status', d: 'Uptime and incident history, public. If a build queue slows down, you see it before we tell you.', href: '/status', linkLabel: 'Check status now', Icon: Activity, }, { t: 'Per-server container isolation', d: 'Every generated server runs in its own Docker container. Secrets AES-256-GCM encrypted at rest.', href: '/security', linkLabel: 'Security architecture', Icon: Container, }, ]; const PIPELINE_STEPS: { n: string; t: string; d: string }[] = [ { n: '01', t: 'Describe your tool', d: 'A sentence is enough. List your secrets and which APIs to call.', }, { n: '02', t: 'We generate, check, deploy', d: 'Claude writes the spec. We render TypeScript, run static checks, build a container, deploy to your subdomain.', }, { n: '03', t: 'Install in your client', d: 'Copy the snippet into Claude Desktop, Cursor or ChatGPT. OAuth flow on first use.', }, ]; /** Mono shell-comment section kicker: `## how_it_works` */ function Kicker({ children }: { children: string }) { return

## {children}

; } export default function Landing() { const teaserTiers = TIERS.filter((t) => t.name === 'Hobby' || t.name === 'Pro'); return ( <> {/* Hero — left: copy + CTAs, right: cycling terminal tile. The WebGL particle field sits behind at z-0 with pointer-events:none so the CTAs stay interactive. */}

Describe your tool.
We host the server.
AI uses it.

From prompt to production MCP server in 60 seconds. OAuth 2.1, Streamable HTTP, ready for Claude, Cursor and ChatGPT.

Start building free → See a live build
OAuth 2.1 + PKCE Streamable HTTP AES-256 secrets Per-server isolation
{/* Flow video — full-width edge-to-edge under the hero. Plays when scrolled into view (see hero-video.tsx); preload=metadata keeps the 2.6 MB mp4 off the critical path on mobile. */}
{/* How it works — three pipeline nodes joined by a gradient connector. Desktop: horizontal line behind the numbered nodes. Mobile: the grid stacks and each card keeps its own node, joined by a left rail. */}
how_it_works

Three steps. No JSON to write, no Docker to manage.

{/* Gradient connector — desktop only, sits behind the node row. */}
{/* Mobile left rail joining the stacked nodes. */}
{PIPELINE_STEPS.map((s) => (
{s.n}

{s.t}

{s.d}

))}
{/* Proof by specificity — three verifiable claims, each one click from its evidence. Replaces the old pseudo-logo row: no invented marks, just a plain-text compatibility line. */}
verify_it_yourself

No testimonials yet — we're new.
So check the claims instead.

{PROOF_POINTS.map((p) => { const Icon = p.Icon; return (

{p.t}

{p.d}

{p.linkLabel} → ); })}

Works with Claude Desktop, Cursor, ChatGPT, VS Code Copilot and Continue.dev — anything that speaks MCP.

{/* Use cases — brand-coloured integration grid. */}
use_cases

Wrap any HTTP API.
In minutes.

Ship integrations like these from one prompt each.

{EXAMPLES.map((e) => { const Icon = e.Icon; return (

{e.title}

{e.desc}

); })}
{/* Marketplace — split layout: selling points left, honest preview frame right. */}
marketplace

Skip the prompt.
Fork what works.

The marketplace is a library of working MCP servers. Fork one, paste your credentials, deploy. Or publish yours and let others build on it.

    {MARKETPLACE_POINTS.map((p) => (
  • {p.t}

    {p.d}

  • ))}
Browse the marketplace →
{/* Pricing teaser — Hobby + Pro only; the full matrix lives on /pricing. Data is shared via lib/pricing.ts so it can't drift. */}
pricing

Pay for tool calls.
Not for boilerplate.

{teaserTiers.map((t) => { const featured = Boolean(t.highlight); return (
{featured && ( Recommended )}
{t.name}
{t.price} {t.tag}

{t.description}

    {t.features.map((f) => (
  • {f}
  • ))}
{t.cta}
); })}
See all plans — Team, Enterprise →
{/* FAQ — collapsible accordion using native
. Crawlers and screen readers see the full Q+A in the HTML. */}
faq

Questions, answered straight.

{FAQ.map((f) => (
{f.q}

{f.a}

))}
{/* Final CTA — the page must not end on FAQ. Gradient top border keeps the brand mark scarce but present at the exit point. */}

Your first server is one prompt away.

Free tier, full source export, no lock-in. If it doesn't work for you, take the TypeScript and leave.

Start building free → Read the docs
); } /** * Honest marketplace preview. * * Static, server-rendered browser frame showing what a template card looks * like. Card data mirrors the first-party starter templates — names, author * and tool counts only. No fork counts, no "verified" badges: the frame is * explicitly labelled a preview, not live marketplace traffic. */ function MarketplacePreview() { return (
{/* Browser chrome */}
buildmymcpserver.com/templates
{/* Toolbar inside the page chrome */}
Templates preview
{/* Template cards grid */}
{PREVIEW_TEMPLATES.map((t) => (
{t.name}
{t.author} template
{t.tools} tools
))}
); }