{
  "version": "4.0.0",
  "description": "Centralized MCP registry with phase relevance and install configuration for morph-spec workflows",
  "mcps": {
    "context7": {
      "phases": ["proposal", "plan", "implement"],
      "tools": ["resolve-library-id", "query-docs"],
      "detection": "enabledPlugins includes context7 or mcpServers includes context7",
      "fallback": "WebSearch + WebFetch for library documentation",
      "usage": "Library documentation lookups, API reference, implementation patterns",
      "healthCheck": {
        "toolPattern": "context7",
        "testCall": "Call resolve-library-id with libraryName 'react' and query 'react hooks'",
        "testParams": { "libraryName": "react", "query": "react hooks" },
        "successIndicator": "Returns a library ID (e.g., /facebook/react)",
        "failureHint": "Context7 MCP not responding. Check that @upstash/context7-mcp is installed and the MCP server is running. Try restarting Claude Code."
      },
      "install": {
        "autoInstall": true,
        "transport": "stdio",
        "config": {
          "type": "stdio",
          "command": "cmd",
          "args": ["/c", "npx", "-y", "@upstash/context7-mcp@latest"]
        },
        "credentials": [],
        "prerequisites": [],
        "stackRelevance": ["*"],
        "warnings": [],
        "setupGuide": null
      }
    },
    "playwright": {
      "phases": ["uiux", "implement"],
      "tools": ["browser_navigate", "browser_snapshot", "browser_take_screenshot", "browser_console_messages", "browser_click", "browser_resize"],
      "detection": "mcpServers includes playwright",
      "fallback": "WebFetch for read-only page content, manual testing",
      "usage": "UI preview, smoke testing, page inspection, responsive testing, screenshot capture",
      "healthCheck": {
        "toolPattern": "playwright",
        "testCall": "Call browser_navigate with url 'about:blank'",
        "testParams": { "url": "about:blank" },
        "successIndicator": "Page navigates successfully (no error thrown)",
        "failureHint": "Playwright MCP not responding. Ensure @playwright/mcp is installed and browser binaries are available. Run 'npx playwright install' if needed."
      },
      "install": {
        "autoInstall": true,
        "transport": "stdio",
        "config": {
          "type": "stdio",
          "command": "cmd",
          "args": ["/c", "npx", "-y", "@playwright/mcp@latest"]
        },
        "credentials": [],
        "prerequisites": [],
        "stackRelevance": ["*"],
        "warnings": [],
        "setupGuide": null
      }
    },
    "vercel": {
      "phases": ["implement"],
      "tools": ["search_docs", "list_projects", "get_deployments", "get_deployment_logs", "manage_env_vars"],
      "detection": "mcpServers includes vercel",
      "fallback": "Bash `vercel` CLI commands",
      "usage": "Deployment monitoring, project management, environment variables, log analysis",
      "healthCheck": {
        "toolPattern": "vercel",
        "testCall": "Call search_docs with a query to verify connectivity",
        "testParams": { "query": "deployments" },
        "successIndicator": "Returns documentation search results without auth errors",
        "failureHint": "Vercel MCP not responding. Re-authenticate via /mcp in Claude Code. Ensure you have authorized the Vercel OAuth connection."
      },
      "install": {
        "autoInstall": false,
        "transport": "http",
        "config": {
          "type": "http",
          "url": "https://mcp.vercel.com"
        },
        "credentials": [],
        "prerequisites": [],
        "stackRelevance": ["nextjs", "nextjs-neon", "vercel"],
        "warnings": ["Uses OAuth — you will be prompted to authenticate via browser when first connecting."],
        "setupGuide": "Run: claude mcp add --transport http vercel https://mcp.vercel.com"
      }
    },
    "asaas": {
      "phases": ["plan", "implement"],
      "tools": ["enumerate_endpoints", "get_endpoint_schema", "generate_code_example", "execute_api_call", "search_docs"],
      "detection": "mcpServers includes asaas",
      "fallback": "WebFetch https://docs.asaas.com for API documentation",
      "usage": "Asaas payment API docs, endpoint schemas, code examples, direct API calls",
      "healthCheck": {
        "toolPattern": "asaas",
        "testCall": "Search Asaas docs for 'payments' to verify connectivity",
        "testParams": { "query": "payments" },
        "successIndicator": "Returns documentation results about payment endpoints",
        "failureHint": "Asaas MCP not responding. Verify the MCP is configured with url: https://docs.asaas.com/mcp"
      },
      "install": {
        "autoInstall": false,
        "transport": "http",
        "config": {
          "type": "http",
          "url": "https://docs.asaas.com/mcp"
        },
        "credentials": [],
        "prerequisites": [],
        "stackRelevance": ["asaas"],
        "warnings": ["API call execution requires your Asaas access_token. Doc search works without authentication."],
        "setupGuide": "Run: claude mcp add --transport http asaas https://docs.asaas.com/mcp"
      }
    },
    "stitch": {
      "phases": ["uiux"],
      "tools": ["create_project", "list_projects", "get_project", "list_screens", "get_screen", "generate_screen_from_text", "fetch_screen_code", "fetch_screen_image"],
      "detection": "mcpServers includes stitch",
      "fallback": "HTML mockup + Playwright screenshots (Step 3.5 workflow)",
      "usage": "AI-generated screen designs, design.md export, visual design exploration",
      "healthCheck": {
        "toolPattern": "stitch",
        "testCall": "Call list_projects to verify connectivity",
        "testParams": {},
        "successIndicator": "Returns a list of projects (possibly empty) without auth errors",
        "failureHint": "Stitch MCP not responding. Verify gcloud auth: run 'gcloud auth application-default print-access-token'. Check .claude/stitch-proxy.cjs exists and GCP project ID is correct."
      },
      "install": {
        "type": "proxy-generate",
        "autoInstall": false,
        "transport": "stdio",
        "config": {
          "type": "stdio",
          "command": "node",
          "args": [".claude/stitch-proxy.cjs"]
        },
        "credentials": [
          {
            "name": "GCP Project ID",
            "envVar": "STITCH_GCP_PROJECT",
            "secret": false,
            "helpUrl": "https://console.cloud.google.com/projectselector2/home/dashboard"
          }
        ],
        "prerequisites": [
          {
            "name": "gcloud CLI",
            "checkCommand": "gcloud --version",
            "installUrl": "https://cloud.google.com/sdk/docs/install"
          }
        ],
        "requiredCredentials": ["gcloud-adc"],
        "setupFn": "setupStitch",
        "testCall": "initialize",
        "successIndicator": "protocolVersion",
        "failureHint": "Run: gcloud auth application-default login && gcloud services enable stitch.googleapis.com",
        "stackRelevance": ["nextjs", "nextjs-neon", "vite"],
        "warnings": ["Requires gcloud CLI with application-default credentials. Run 'gcloud auth application-default login' before setup.", "Add .claude/stitch-proxy.cjs to .gitignore (contains your GCP project ID)."],
        "setupGuide": "Run: morph-spec mcp setup stitch (generates OAuth proxy script)"
      },
      "companionSkills": {
        "repo": "google-labs-code/stitch-skills",
        "installCommand": "npx skills add google-labs-code/stitch-skills",
        "skills": ["stitch-design", "stitch-loop", "design-md", "prompt-enhance", "react-components", "shadcn-ui"],
        "description": "Official Stitch agent skills for Claude Code — design generation, multi-page loops, design.md export"
      }
    },
    "gemini-image": {
      "phases": ["uiux", "implement"],
      "tools": ["generate_image", "edit_image", "continue_editing", "list_images", "get_image_info", "get_configuration_status"],
      "detection": "mcpServers includes gemini-image-mcp",
      "fallback": "Manual image creation, stock photos, or placeholder divs",
      "usage": "AI image generation for project assets (heroes, illustrations, brand images) using Gemini models",
      "healthCheck": {
        "toolPattern": "gemini-image",
        "testCall": "Call get_configuration_status to verify API key and server health",
        "testParams": {},
        "successIndicator": "Returns status with valid API key configured",
        "failureHint": "Gemini Image MCP not responding. Check that GEMINI_API_KEY is set in the MCP env config and that MORPH_HUB points at a built morph-HUB checkout."
      },
      "install": {
        "autoInstall": false,
        "transport": "stdio",
        "config": {
          "type": "stdio",
          "command": "node",
          "args": ["${MORPH_HUB}/mcps/gemini-image/dist/index.js"]
        },
        "credentials": [
          {
            "name": "Gemini API Key",
            "envVar": "GEMINI_API_KEY",
            "secret": true,
            "helpUrl": "https://aistudio.google.com/apikey"
          }
        ],
        "prerequisites": [
          "Google AI Studio API key",
          "Local morph-HUB checkout with mcps/gemini-image built, exposed via the MORPH_HUB env var"
        ],
        "stackRelevance": ["nextjs", "next"],
        "warnings": [
          "Internal Polymorphism MCP, not published to npm. The public gemini-image-mcp package was unpublished in 2025-04, so npx installs no longer work.",
          "Requires GEMINI_API_KEY environment variable. Image generation costs apply per Google AI pricing."
        ],
        "setupGuide": "1. Get an API key at https://aistudio.google.com/apikey\n2. Build the MCP: cd $MORPH_HUB/mcps/gemini-image && npm install && npm run build\n3. Run: claude mcp add gemini-image-mcp -e GEMINI_API_KEY=<key> -- node $MORPH_HUB/mcps/gemini-image/dist/index.js\n4. Verify with get_configuration_status"
      }
    },
    "seedance": {
      "phases": ["uiux", "implement"],
      "tools": ["generate_video", "generate_loop_video", "get_video", "list_videos"],
      "detection": "mcpServers includes seedance",
      "fallback": "Use client-provided footage or a static poster image; canvas frame-scrub works from any frame sequence, AI-generated or not",
      "usage": "AI video generation for scroll-driven heroes and ambient backgrounds. generate_video with endImage produces the directional footage that frame-scrub needs (start frame differs from end frame); generate_loop_video is only for seamless ambient loops",
      "healthCheck": {
        "toolPattern": "seedance",
        "testCall": "Call list_videos with limit 1 to verify the server responds (reads local history, spends no credits)",
        "testParams": {
          "limit": 1
        },
        "successIndicator": "Returns the local job history, or 'No videos in history yet'",
        "failureHint": "Seedance MCP not responding. Check that REPLICATE_API_TOKEN is set in the MCP env config and that MORPH_HUB points at a built morph-HUB checkout."
      },
      "install": {
        "autoInstall": false,
        "transport": "stdio",
        "config": {
          "type": "stdio",
          "command": "node",
          "args": ["${MORPH_HUB}/mcps/seedance/dist/index.js"]
        },
        "credentials": [
          {
            "name": "Replicate API Token",
            "envVar": "REPLICATE_API_TOKEN",
            "secret": true,
            "helpUrl": "https://replicate.com/account/api-tokens"
          }
        ],
        "prerequisites": [
          "Replicate account with billing enabled",
          "Local morph-HUB checkout with mcps/seedance built, exposed via the MORPH_HUB env var",
          "ffmpeg on PATH to extract frames for scroll-scrubbing"
        ],
        "stackRelevance": ["next", "react", "vite", "astro"],
        "warnings": [
          "Internal Polymorphism MCP, not published to npm. Requires a local morph-HUB checkout.",
          "Paid per generation. Draft at fast/480p/4s first, render 1080p only after the take is approved.",
          "Generation is stochastic and needs a human approval gate. Do not wire it into an unattended phase."
        ],
        "setupGuide": "1. Get a token at https://replicate.com/account/api-tokens\n2. Build the MCP: cd $MORPH_HUB/mcps/seedance && npm install && npm run build\n3. Run: claude mcp add seedance -e REPLICATE_API_TOKEN=<token> -- node $MORPH_HUB/mcps/seedance/dist/index.js\n4. Verify with list_videos (reads local history, spends no credits)"
      }
    },
    "graphify": {
      "phases": ["proposal", "plan", "implement", "review"],
      "tools": ["query_graph", "get_node", "get_neighbors", "get_community", "god_nodes", "graph_stats", "shortest_path", "list_prs", "get_pr_impact", "triage_prs"],
      "detection": "graphify-out/graph.json exists in the project root (written by morph-spec graph build, or by the graphify post-commit hook)",
      "fallback": "Comportamento atual: Grep/Glob/Read. O grafo é um subconjunto estrito do grep — no eval não encontrou um único arquivo que o grep perderia — então cair para grep não perde recall, só devolve mais ruído",
      "usage": "Blast radius, vizinhança de símbolo e god nodes sem gastar token de leitura. PREFIRA `morph-spec graph explain|affected`, que aplica o saneamento da ADR-003 (coalesce de stub, classificação de órfão) que este servidor NÃO aplica — em C# o grafo cru produz falso negativo silencioso. O MCP serve para exploração interativa e para consulta cross-repo: as 10 tools aceitam project_path, então uma instância serve vários repositórios",
      "healthCheck": {
        "toolPattern": "graphify",
        "testCall": "Call graph_stats with no arguments (uses the current project)",
        "testParams": {},
        "successIndicator": "Returns node and edge counts for the project graph",
        "failureHint": "graphify-mcp não respondeu. Confirme com `graphify --version` (pinado: 0.9.50) e com `morph-spec graph status`. Se o graph.json não existir, rode `morph-spec graph build` — sem grafo o servidor não tem o que servir."
      },
      "install": {
        "autoInstall": false,
        "transport": "stdio",
        "config": {
          "type": "stdio",
          "command": "graphify-mcp",
          "args": []
        },
        "credentials": [],
        "prerequisites": [
          "graphify 0.9.50 instalado (o step 18b do setup-infra faz isso via uv/pipx/pip)",
          "graphify-out/graph.json gerado — morph-spec graph build"
        ],
        "stackRelevance": ["*"],
        "warnings": [
          "O binário é `graphify-mcp`. `python -m graphify.serve`, que é o comando do README oficial, FALHA com `uv tool install`: o pacote vive num venv isolado e o Python do sistema não o enxerga.",
          "Quem instala e pina o graphify é o step 18b do setup-infra, não este registro — por isso autoInstall é false.",
          "As respostas deste servidor são o grafo CRU, sem o saneamento do `morph-spec graph`. Em C#, blast radius cru pode devolver zero consumidores onde existem dois."
        ],
        "setupGuide": null
      }
    }
  },
  "_phaseMatrixNote": "Keys must be the v5 phases from framework/phases.json. The v4 keys 'design' and 'tasks' both collapsed into 'plan'; 'review' was absent entirely, so a project in review resolved to undefined. Stack-scoped MCPs (asaas) stay out of this matrix on purpose — only universal ones are listed.",
  "phaseMatrix": {
    "proposal": ["context7", "graphify"],
    "uiux": ["playwright", "context7", "stitch", "gemini-image", "seedance"],
    "plan": ["context7", "graphify"],
    "implement": ["context7", "playwright", "vercel", "gemini-image", "seedance", "graphify"],
    "review": ["playwright", "context7", "graphify"]
  }
}
