# MCP Migration Guide — v2.1 → v3.0 → v3.0.1 > **TL;DR (v3.0.1, 2026-04-23)** — Promoted `chrome-devtools-mcp` from optional to default. claude-forge now ships with **4 MCP servers** (playwright · context7 · jina-reader · chrome-devtools). Rationale: Lighthouse/Core-Web-Vitals diagnostics are a different class of browser work than general automation, and the two complement each other without overlap. > > **TL;DR (v3.0)** — claude-forge v3.0 shipped with **3 MCP servers** instead of v2.1's 6. The 4 removed servers have first-class replacements already built into Claude Code 2026 or the standard CLI toolbox. This guide explains each replacement. ## Why the Cut v2.1 bundled `memory`, `exa`, `github`, and `fetch` as defaults. Four forces made this redundant in v3.0: 1. **Auto Memory landed in Claude Code (2026)** — the harness now persists user profile, feedback, and project facts under `~/.claude/projects/.../memory/` automatically. An MCP memory server became duplicate infrastructure for most users. 2. **WebSearch is first-class** — Claude Code ships a native `WebSearch` tool that covers >90% of what Exa did for general research. 3. **`gh` CLI is universal** — GitHub Actions, issues, PRs, releases, gists, and repo management all work via `gh` through the `Bash` tool. The MCP wrapper added no capabilities, only surface area. 4. **jina-reader + fallback** — a single URL-to-markdown server covers fetch duties; if blocked, Claude Code can still hit the URL directly. Result: fewer dependencies for new users, faster install, lower token overhead on `ToolSearch`. ## The 4 Default Servers (v3.0.1) | Server | Type | Replaces | Primary Use | |--------|------|----------|-------------| | **playwright** | stdio | (new in v3.0) | Browser automation — navigate/click/screenshot/trace | | **context7** | stdio | (kept) | Up-to-date library docs (React, Next.js, Prisma, etc.) — use **before** writing library code | | **jina-reader** | stdio | fetch | URL → markdown, token-efficient page content | | **chrome-devtools** | stdio | (promoted in v3.0.1) | Lighthouse audits, Core Web Vitals (LCP/INP/CLS), memory snapshots, network inspection | ### Why `chrome-devtools` joins the default set (v3.0.1) `playwright` covers general browser automation (click/fill/navigate), but quantitative diagnostics — Lighthouse scoring, LCP/INP/CLS measurement, V8 heap snapshots, CPU throttling — are Chrome DevTools Protocol territory. Users on performance-sensitive projects were importing `chrome-devtools` from `mcp-servers.optional.json` ~100% of the time, so keeping it optional added friction without upside. The two servers now coexist: `playwright` for "does this UI work?" and `chrome-devtools` for "how fast is it?" Cost: one extra npx spin-up on first invocation (server is stdio, so no idle cost). If you never run Lighthouse/perf audits, the server simply never starts. ## Per-Server Replacement Recipes ### `memory` → Auto Memory + optional MCP **What Auto Memory covers:** user facts, feedback corrections, project context, references to external systems. Stored at `~/.claude/projects//memory/MEMORY.md` with typed entries (`user`, `feedback`, `project`, `reference`). **If you still need the MCP memory server** (team-shared knowledge graph, cross-project), add it from `mcp-servers.optional.json`: ```bash # copy the "memory" entry from optional → main # then reinstall ./install.sh --upgrade ``` ### `exa` → WebSearch + optional MCP **WebSearch** is available as a built-in tool — no setup, no token. For 90% of "find me recent articles on X" needs. **Keep `exa` when:** you need Exa-specific features — semantic company/people search, domain filters, citation-grade sources. Then copy from `mcp-servers.optional.json`. ### `github` → `gh` CLI + optional MCP `gh` is installable on every platform and integrates through `Bash`: ```bash gh pr create --title "..." --body "..." gh issue list --state open gh api repos/OWNER/REPO/contents/path gh release create v3.0.0 --notes-file CHANGELOG.md ``` **Keep `github` MCP when:** managed policies disable `Bash(gh:*)` for your org. Then enable it from `mcp-servers.optional.json` and scope permissions tightly. ### `fetch` → `jina-reader` + fallback `jina-reader` converts any URL to clean markdown and handles most sites. If jina is rate-limited, Claude Code falls back to native HTTP via `WebFetch` (blocked by default in claude-forge — enable only as last resort). **Keep `fetch` MCP when:** you need mcp-server-fetch's specific caching or proxy features. Copy from `mcp-servers.optional.json`. ## Adding Servers Back Three steps: ```bash # 1. View optional catalog cat mcp-servers.optional.json | jq '.servers | keys' # 2. Copy an entry jq '.servers.memory' mcp-servers.optional.json > /tmp/memory.json # Hand-merge into mcp-servers.json under "servers" # 3. Reinstall ./install.sh --upgrade ``` `install.sh --upgrade` detects mcp-servers.json changes and reregisters the servers. ## Settings.json Implications v3.0 shipped `settings.json` with allowlist entries for the 3 MCP namespaces that were default at the time. v3.0.1 promoted `chrome-devtools` to the default set but intentionally kept it out of `permissions.allow` so that Lighthouse/Core-Web-Vitals runs (which are heavy and can take 30–60 seconds each) trigger an explicit user approval each time, rather than running silently in the background: ```json "allow": [ "mcp__playwright__*", "mcp__context7__*", "mcp__jina-reader__*" ] // chrome-devtools is in enabledMcpjsonServers but intentionally not here // → every Lighthouse / perf trace call prompts for approval ``` When adding a server back, also add its `mcp____*` to `permissions.allow`, and consider adding it to `enabledMcpjsonServers` for explicit activation. ## FAQ **Q: I have v2.1 workflows that call `mcp__memory__*`. Will they break?** A: Yes — the tool becomes unavailable. Either migrate to Auto Memory or restore the server from the optional file. **Q: Can I run more than 4 servers?** A: Yes. The 4-server default (v3.0.1) is a sensible minimum, not a maximum — v3.0 shipped with 3, and you can add any of the 6+ servers in `mcp-servers.optional.json` back in at any time. There is no practical cap; each server costs a few MB RAM + startup time. **Q: Does this affect plugin distribution?** A: No. `plugin.json` does not list MCP servers — they're project-scoped in `mcp-servers.json`. ## References - Claude Code MCP docs: https://code.claude.com/docs/en/mcp - Auto Memory: https://docs.anthropic.com/en/docs/claude-code/memory - Playwright MCP: https://github.com/microsoft/playwright-mcp - Context7: https://upstash.com/blog/context7-mcp - Jina Reader: https://github.com/PsychArch/jina-mcp-tools