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 { StaticCodeBlock } from '@/components/static-code-block'; import { FAQ, faqJsonLd } from '@/lib/seo'; import { ChevronDown } from 'lucide-react'; import Link from 'next/link'; const PROMPT_EXAMPLE = `Create an MCP server that searches our Notion workspace. Tools: search_pages, get_page_content. Auth: NOTION_API_KEY.`; const OUTPUT_EXAMPLE = `> Generating spec... OK (2 tools) > Static checks OK > Building image bmm-mcp-notion OK 17.2s > Deploying container OK > Live at https://notion-x9.mcp.buildmymcpserver.com > First request: 401 → token → 200 OK`; const INSTALL_SNIPPET = `{ "mcpServers": { "notion": { "url": "https://notion-x9.mcp.buildmymcpserver.com/mcp", "auth": "oauth2" } } }`; const EXAMPLES: { title: string; desc: string }[] = [ { title: 'Postgres reader', desc: 'Read-only access to your tables with schema introspection.' }, { title: 'Salesforce', desc: 'Query opportunities, accounts and leads from Claude.' }, { title: 'Notion', desc: 'Search pages, read content, append blocks.' }, { title: 'GitHub', desc: 'List issues, search code, post comments — scoped to one repo.' }, { title: 'Stripe', desc: 'Look up charges, customers, refunds (read-only by default).' }, { title: 'Custom REST', desc: 'Wrap any HTTP API behind one prompt-defined tool surface.' }, ]; 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: 'Ranked by real usage', d: 'Templates rise on fork count and active deploys — not vanity stars. The useful ones surface themselves.', }, ]; const TIERS = [ { name: 'Hobby', price: '€0', tag: 'Forever free', features: ['1 server', '100k calls/mo', 'BMM subdomain', 'Community support'], }, { name: 'Pro', price: '€49', tag: '/ month', features: [ '5 servers', '1M calls/mo', 'Custom domain', 'Priority build queue', 'Email support', ], }, { name: 'Team', price: '€149', tag: '/ month', features: ['25 servers', '10M calls/mo', 'RBAC + audit log', 'SLA 99.9%', 'Slack support'], }, { name: 'Enterprise', price: '€499+', tag: '/ month', features: ['Unlimited', 'BYOC', 'SSO / SAML', 'Dedicated cluster', 'Customer success'], }, ]; export default function Landing() { return ( <> {/* Hero — left: copy + CTAs, right: cycling step-rotator tile. The old layout stacked three static code blocks vertically; the new layout shows one centered tile that cycles through the same three artifacts (prompt → build.log → claude config) with a mouse-reactive 3D tilt and a step indicator. Shorter overall so the video section below is teased above the fold. */}
{/* WebGL particle field — capability-detected client component. Sits behind the hero content at z-0 with pointer-events:none so the CTAs above remain fully interactive. The canvas listens for pointermove on window itself, so the ring still tracks the cursor through the content above. With the hero now filling the full first-viewport (minus the 48px sticky nav), the field has cinematic-scale room and the indigo radial glow + dot mask read as the dominant background motif. */}
v0.1 — updated 2026-05-20

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 Read the docs
OAuth 2.1 + PKCE Streamable HTTP AES-256 secrets Per-server isolation
{/* Scroll cue — fixed at the bottom of the loadscreen rather than inside the hero, so it sits at the natural lower edge of the first viewport regardless of how tall the hero ends up. Fades out once the user has scrolled past the loadscreen. */} {/* Flow video — full-width edge-to-edge under the hero. The clip shows the real flow (prompt → server schematic → live connection to Claude Desktop) in three smooth phases. autoplay-muted-loop + playsInline satisfies every mobile browser autoplay policy; the `poster` carries first paint while the video decodes. */}
{/* HeroVideo: native
{/* How it works */}

How it works

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

{/* The same video used to live here; it now has its own full-width section directly under the hero so it's teased above the fold and gets edge-to-edge real estate. This section keeps the three explanatory cards as supporting copy under the video. */}
{[ { 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.', }, ].map((s) => (
{s.n}

{s.t}

{s.d}

))}
{/* Works with */}

Works with the clients you already use

{['Claude Desktop', 'Cursor', 'ChatGPT', 'VS Code Copilot', 'Continue.dev'].map((t) => ( {t} ))}
{/* Examples */}

Built for the work you actually have

Anything with an HTTP API or a database, in minutes.

{EXAMPLES.map((e) => (
{e.title}

{e.desc}

))}
{/* Marketplace */}

Start from a template, ship in seconds

The marketplace is a library of working MCP servers the community already built. Fork one to skip the prompt — or publish your own and let others build on it.

Browse the marketplace →
{MARKETPLACE_POINTS.map((p) => (

{p.t}

{p.d}

))}
{/* Pricing */}

Pricing

Pay for tool calls, not for boilerplate.

{TIERS.map((t, i) => (
{t.name}
{t.price} {t.tag}
    {t.features.map((f) => (
  • — {f}
  • ))}
))}
{/* FAQ — collapsible accordion using native
. Crawlers and screen readers still see the full Q+A in the HTML; users see one question at a time and expand on demand. No JS, no state, semantically correct. `list-none` + the WebKit-marker pseudo-class suppress the default disclosure triangle so we can render our own chevron that rotates via `group-open`. */}

FAQ

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

{f.a}

))}
); }