import { DocsTitle, DocsLead, DocsH2, DocsP, Mono } from '@/components/docs-page';
export const metadata = { title: 'FAQ — BuildMyMCPServer docs' };
const ITEMS: { q: string; a: React.ReactNode }[] = [
{
q: 'How does the LLM-generated code stay safe?',
a: 'Three layers: strict Zod validation of the JSON spec, regex scan for banned tokens (eval, child_process, prompt-injection markers), and a static check on the rendered TypeScript before Docker build. If any layer trips, the build fails with a clear error and nothing is deployed.',
},
{
q: 'What happens if Claude hallucinates a broken tool?',
a: 'The build fails at the static-check or Docker-build stage. The user sees the exact error in the live log and can refine the prompt and rebuild. No invalid server ever serves traffic.',
},
{
q: 'Do my secrets ever leave my environment?',
a: 'No. Secrets are AES-256-GCM encrypted at rest in your Postgres, decrypted only when injecting into your container at boot. They never appear in audit logs, build logs, or the prompt sent to Claude.',
},
{
q: 'Why MCP and not OpenAPI?',
a: 'MCP standardizes the discovery, invocation, auth, and streaming surface in a way OpenAPI never did. The point is that any spec-compliant client picks up any spec-compliant server with zero per-API integration work. OpenAPI requires custom glue for every client.',
},
{
q: 'Can I use my own Claude API key?',
a: 'Yes — set ANTHROPIC_API_KEY in .env. On self-hosted control planes you can also wire a separate per-org key (Sprint 4).',
},
{
q: 'What if I don\'t set ANTHROPIC_API_KEY?',
a: <>The generator falls back to a deterministic mock spec (two tools: