Category: Guides & Manuals

Step-by-step setup guides and quick-scan prompt cheat sheets.

  • Stop Getting Stale Answers From Claude Code: Exa MCP Adds AI-Native Web Search That Returns Clean Page Content, No Key Needed

    Stop Getting Stale Answers From Claude Code: Exa MCP Adds AI-Native Web Search That Returns Clean Page Content, No Key Needed

    Last Verified: September 2026 — commands checked against exa-labs/exa-mcp-server and the official Claude Code MCP docs

    Ask Claude Code about a library that shipped last month and one of two things happens: it answers from training data that’s already stale, or it searches and comes back with a list of links and snippets it then has to fetch one by one. Either way you spend the next few turns steering it toward the page that actually has the answer.

    Exa MCP connects Claude Code to Exa, a search engine built for AI agents. Instead of ten blue links, web_search_exa returns clean page content ready to read, and web_fetch_exa turns any URL into Markdown. It’s a hosted server, so setup is one command, and it works without an API key to start.

    Already using our Firecrawl MCP guide? They pair well: Exa is best at finding the right pages, Firecrawl at scraping JavaScript-heavy sites once you know where to look.

    Quick Start

    One command, no key needed:

    claude mcp add --transport http --scope user exa https://mcp.exa.ai/mcp

    Restart Claude Code and run claude mcp list. Total time: about 1 minute. Anonymous use is rate-limited; add an API key later if you hit the limit.

    ⚡ Copy This Prompt: Let Claude Code Install and Verify It For You

    Skip the manual steps below and hand the whole job to the agent instead:

    You have shell access and the `claude mcp` CLI on this machine. Connect the Exa MCP server to Claude Code and report back. Do not tell me it's done unless step 4 actually confirms it:
    
    1. Run `claude mcp list`. If an exa entry already exists, show me its URL and stop instead of adding a second one.
    2. Add Exa's hosted server for all projects (no key needed to start):
       `claude mcp add --transport http --scope user exa https://mcp.exa.ai/mcp`
    3. Run `claude mcp list` and confirm exa shows Connected.
    4. Use `web_search_exa` to find the latest release notes for Claude Code, then use `web_fetch_exa` on the top result and give me 3 bullet points from the page with its URL.
    
    If I later want higher limits, tell me to create a key at https://dashboard.exa.ai/api-keys and re-add the server with an `x-api-key` header. Never ask me to paste the key into this chat, and never put it in the URL. If any step fails, give me the exact error and the command that produced it. Do not skip ahead.

    The last step is a real search-then-read test, so you see Exa’s output before trusting it with actual work.

    What You’ll Need

    RequirementWhy You Need ItTime
    Claude Code installedThe client that calls the Exa tools0 min
    Nothing else to startThe hosted server works anonymously, with rate limits0 min
    An Exa API key (optional)Higher limits and access to the Exa Agent research tool~2 min

    Step-by-Step Setup

    Prefer to do it by hand instead of delegating to the agent? Here’s the manual version.

    Step 1 — Add the hosted server

    ~30 sec

    --scope user makes Exa available in every project:

    claude mcp add --transport http --scope user exa https://mcp.exa.ai/mcp

    Prefer plugins? Exa is also in the official Claude plugin marketplace, which adds its search Skills on top of the same tools:

    claude plugin install exa@claude-plugins-official

    Step 2 — Add an API key (optional)

    ~2 min

    Create a key at dashboard.exa.ai/api-keys, remove the anonymous entry with claude mcp remove exa --scope user, and re-add it with the key as a header:

    claude mcp add --transport http --scope user exa https://mcp.exa.ai/mcp \
      --header "x-api-key: <your-exa-api-key>"

    Exa also accepts the key as a URL parameter, but a header keeps it out of logs and shell history.

    Step 3 — Turn on advanced search (optional)

    ~30 sec

    By default you get web_search_exa and web_fetch_exa. Add web_search_advanced_exa for domain, date, and highlight filters. The tools parameter replaces the defaults, so list every tool you want:

    claude mcp add --transport http --scope user exa \
      "https://mcp.exa.ai/mcp?tools=web_search_exa,web_fetch_exa,web_search_advanced_exa"

    What Each Piece Does

    ToolWhat Claude Can Do With It
    web_search_exa (default)Search the web and get clean, ready-to-use page content back instead of just links
    web_fetch_exa (default)Read one or more URLs as clean Markdown
    web_search_advanced_exa (optional)Search with filters for domains and dates, plus highlights, summaries, and subpage crawling
    agent_run (optional)Run an Exa Agent for multi-step research, list building, and structured output. Needs OAuth or an API key
    Hosted serverNothing runs on your machine. Claude Code talks to mcp.exa.ai over HTTP

    Verify It’s Actually Working

    claude mcp list
    ✔ exa    https://mcp.exa.ai/mcp (HTTP) – Connected
    ! exa    rate limit errors  → add an API key (Step 2)
    ✘ exa    Failed to connect  → check the URL ends in /mcp and quote it if it has ?tools=

    Then give Claude a question its training data can’t answer:

    Use Exa to find what changed in the latest release of the framework this repo uses, and tell me if any of it affects our code

    If Claude calls web_search_exa, reads a result, and cites a URL from the last few weeks, it’s working.

    Common Mistakes to Avoid

    • Adding only the advanced tool. ?tools=web_search_advanced_exa replaces the defaults, so basic search and fetch disappear. List every tool you want in one comma-separated value.
    • Leaving the URL unquoted. A ? or & in the URL can be eaten by your shell. Wrap the URL in quotes whenever it has parameters.
    • Putting the API key in the URL. It works, but the key ends up in your Claude Code config and shell history in plain sight. Use the x-api-key header.
    • Registering it twice. Installing the plugin and running claude mcp add gives Claude two copies of every Exa tool. Pick one.
    • Trusting search results blindly. Web pages can contain prompt-injection text. Ask Claude to cite its sources, and review anything it plans to run based on what it read.

    Q&A

    Is it free?

    You can connect and search without a key, with rate limits. For heavier use or Exa Agent, create a key in the Exa dashboard and check Exa’s current pricing there.

    Doesn’t Claude Code already have web search?

    It does. Exa is an alternative that returns cleaned page content along with results and adds filters and a research agent. Many people keep both and tell Claude when to use Exa.

    Exa or Firecrawl?

    Exa for finding pages and reading them as text. Firecrawl for scraping sites that need JavaScript rendering or for crawling a whole site. They don’t conflict.

    Can I sign in instead of using a key?

    Yes. Exa supports OAuth. Adding ?login to the URL forces the sign-in flow, which you complete with /mcp in Claude Code.

    How do I remove it?

    claude mcp remove exa --scope user. If you created an API key, revoke it in the Exa dashboard.

    Official Resources

  • Stop Pasting PromQL and Log Lines Into Claude Code: Grafana MCP Lets It Query Your Dashboards, Metrics, and Alerts Directly

    Stop Pasting PromQL and Log Lines Into Claude Code: Grafana MCP Lets It Query Your Dashboards, Metrics, and Alerts Directly

    Last Verified: September 2026 — commands checked against grafana/mcp-grafana (v1.5.1) and the official Claude Code MCP docs

    When something breaks in production, the usual Claude Code loop is: open Grafana, find the right dashboard, squint at a spike, copy a PromQL query or a chunk of Loki logs, paste it into the terminal, and repeat when Claude asks for a wider time range. You end up as a slow, lossy copy-paste bridge between your metrics and your agent.

    Grafana MCP is Grafana Labs’ official MCP server. It lets Claude Code search your dashboards, run PromQL against Prometheus and LogQL against Loki, read alert rules and their firing state, and look up incidents on its own. It works with self-hosted Grafana 9.0+ and Grafana Cloud, and it’s open source (Apache 2.0).

    Pair it with our Sentry MCP guide: Sentry tells Claude which error is happening, Grafana shows when it started and what the metrics were doing around it.

    Quick Start

    Create a Grafana service account token with the Viewer role (Administration → Users and access → Service accounts), then run:

    claude mcp add --scope user --transport stdio \
      --env GRAFANA_URL=http://localhost:3000 \
      --env GRAFANA_SERVICE_ACCOUNT_TOKEN=<your-token> \
      grafana -- uvx mcp-grafana --disable-write

    Replace <your-token> with your token, and swap the URL for your Grafana Cloud address (https://myinstance.grafana.net) if you use Cloud. Restart Claude Code and run claude mcp list. Total time: about 5 minutes.

    ⚡ Copy This Prompt: Let Claude Code Install and Verify It For You

    Skip the manual steps below and hand the whole job to the agent instead:

    You have shell access and the `claude mcp` CLI on this machine. Connect the Grafana MCP server (grafana/mcp-grafana) to Claude Code in read-only mode and report back. Do not tell me it's done unless step 5 actually confirms it:
    
    1. Run `uvx --version`. If uv is missing, install it with the official installer for this OS (macOS/Linux: `curl -LsSf https://astral.sh/uv/install.sh | sh`, Windows PowerShell: `powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"`), then re-check.
    2. Run `claude mcp list`. If a grafana entry already exists, stop and show me its config instead of adding a second one.
    3. Ask me for two values: my Grafana URL (e.g. http://localhost:3000 or https://myinstance.grafana.net) and a service account token. Tell me to create the token in Grafana under Administration > Users and access > Service accounts, with the Viewer role. Never echo the token back in chat or write it to any file other than the Claude Code config.
    4. Add the server for all projects, read-only:
       `claude mcp add --scope user --transport stdio --env GRAFANA_URL=<url> --env GRAFANA_SERVICE_ACCOUNT_TOKEN=<token> grafana -- uvx mcp-grafana --disable-write`
    5. Run `claude mcp list` and confirm grafana shows Connected. Then call the Grafana search tool and list the first 5 dashboard titles.
    
    If any step fails, give me the exact error and the command that produced it. A 400 "id is invalid" error on datasource tools means Grafana is older than 9.0, so say that instead of retrying. Do not skip ahead.

    The agent can’t create the service account token for you, so the prompt stops and asks for it. That’s intentional: you decide what role the token gets.

    What You’ll Need

    RequirementWhy You Need ItTime
    Grafana 9.0 or later (self-hosted or Cloud)Datasource tools use API endpoints that were added in 9.00 min
    A service account tokenHow the server authenticates to Grafana. Viewer is enough for read-only use~2 min
    uv installedThe Quick Start runs the server with uvx mcp-grafana, no global install needed~1 min
    Claude Code installedThe client that calls the Grafana tools0 min

    Step-by-Step Setup

    Prefer to do it by hand instead of delegating to the agent? Here’s the manual version.

    Step 1 — Check uv (and optionally start a test Grafana)

    ~1 min

    Confirm uv is available:

    uvx --version

    No Grafana to test against? Start a throwaway local one with Docker, then sign in at http://localhost:3000 (admin / admin):

    docker run -d --name grafana -p 3000:3000 grafana/grafana

    Step 2 — Create a service account token

    ~2 min

    In Grafana, go to Administration → Users and access → Service accounts, select Add service account, give it the Viewer role, then Add service account token and copy it. You won’t see it again.

    Want Claude to create dashboards or silence alerts later? Give the account the Editor role instead and drop --disable-write in Step 3.

    Step 3 — Add the server to Claude Code

    ~1 min

    --scope user makes it available in every project. Everything after -- is passed to the server, which is where --disable-write goes:

    claude mcp add --scope user --transport stdio \
      --env GRAFANA_URL=http://localhost:3000 \
      --env GRAFANA_SERVICE_ACCOUNT_TOKEN=<your-token> \
      grafana -- uvx mcp-grafana --disable-write

    Step 4 — Turn on extra datasources (optional)

    ~1 min

    Prometheus, Loki, dashboards, alerting, and incidents are on by default. Other datasources are off until you enable them with --enabled-tools, for example sql, cloudwatch, elasticsearch, or influxdb. You can also switch off categories you never use, such as --disable-oncall, to keep Claude’s tool list short.

    What Each Piece Does

    Tool GroupWhat Claude Can Do With It
    DashboardsSearch dashboards, get a compact summary, pull a single property with JSONPath, and read each panel’s queries
    PrometheusRun instant and range PromQL queries, list metric and label names, and compute p50/p90/p95/p99 from histograms
    LokiRun LogQL log and metric queries, list labels, and pull detected log patterns
    AlertingList alert rules with their state (firing, normal, error) and read notification policies and contact points
    Incidents & SiftSearch incidents and, on Grafana Cloud, run Sift checks for error patterns in logs and slow requests
    --disable-writeRemoves every create, update, and delete tool, so the agent can look but not touch

    Verify It’s Actually Working

    claude mcp list
    ✔ grafana    uvx mcp-grafana –disable-write – Connected
    ! grafana    401 Unauthorized  → token is wrong or was deleted; create a new one
    ✘ grafana    Failed to connect  → run uvx mcp-grafana --help to see the real error

    Then give Claude a real question:

    Search my Grafana dashboards, pick the one for the API service, and tell me if the error rate changed in the last 6 hours

    If Claude calls a dashboard search tool, then a Prometheus or Loki query tool, and answers with actual numbers from your data, the token, the URL, and the datasource access are all working.

    Common Mistakes to Avoid

    • Giving the token Admin because it’s easier. An AI agent with an Admin token can delete dashboards and alert rules. Start with Viewer and --disable-write, and move up only when you need a write tool.
    • Putting server flags before the --. --disable-write belongs to mcp-grafana, not to claude mcp add. Placed before the double dash, Claude Code rejects it or ignores it.
    • Using the old GRAFANA_API_KEY variable. It still works but is deprecated. Use GRAFANA_SERVICE_ACCOUNT_TOKEN for new setups.
    • Asking for a whole dashboard. Full dashboard JSON can eat a large chunk of the context window. Ask for the summary or specific panels instead; the server has dedicated tools for exactly that.
    • Running Grafana older than 9.0. Datasource tools fail with 400 … “id is invalid”. The fix is upgrading Grafana, not reconfiguring the server.

    Q&A

    Is it free?

    Yes. The server is open source under Apache 2.0. You need a Grafana instance, and the free Grafana Cloud tier or a self-hosted OSS install both work.

    Does it work with Grafana Cloud?

    Yes. Set GRAFANA_URL to your stack address, such as https://myinstance.grafana.net, and use a service account token from that stack. Some tools, like Sift investigations, only exist on Cloud.

    Can Claude change my dashboards or alerts?

    Not with the setup in this guide. --disable-write removes the write tools, and a Viewer token can’t write anyway. Remove both only if you want Claude to edit things.

    I don’t use uv. Are there other ways to run it?

    Yes. The project also ships a Docker image, prebuilt binaries, and a Helm chart. The README’s Usage section covers each one.

    How do I remove it?

    claude mcp remove grafana --scope user, then delete the service account token in Grafana so it can’t be reused.

    Official Resources

  • Stop Copying Specs From Notion Into Claude Code: The Official Hosted Notion MCP Connects in 1 Command, No API Token

    Stop Copying Specs From Notion Into Claude Code: The Official Hosted Notion MCP Connects in 1 Command, No API Token

    Last Verified: September 2026 — commands checked against Notion’s official MCP docs and the Claude Code MCP docs

    Your specs, meeting notes, and bug tickets live in Notion. Your code lives in Claude Code. So every task starts with the same ritual: open the Notion page, copy the requirements, paste them into the terminal, and hope you didn’t miss the comment thread at the bottom where the scope changed.

    Notion MCP is Notion’s official hosted MCP server at mcp.notion.com. Claude Code signs in with your Notion account through OAuth and can then search your workspace, read pages and databases as Markdown, and create or update pages, all limited to what you can already see. There’s no API token, no JSON config, and nothing to run locally.

    Heads-up: search results still point to the older self-hosted package (@notionhq/notion-mcp-server). Notion’s own README now says that repo is no longer actively maintained and recommends the hosted server instead. That’s the version this guide sets up, for the same reason our community MCP picks skip abandoned servers.

    Quick Start

    One command adds it for every project:

    claude mcp add --transport http --scope user notion https://mcp.notion.com/mcp

    Then sign in: run /mcp inside Claude Code, select notion, and approve access in the browser window that opens. Total time: about 2 minutes.

    ⚡ Copy This Prompt: Let Claude Code Install and Verify It For You

    Skip the manual steps below and hand the whole job to the agent instead:

    You have shell access and the `claude mcp` CLI on this machine. Connect Notion's official hosted MCP server to Claude Code and report back. Do not tell me it's done unless step 5 actually confirms it:
    
    1. Run `claude mcp list`. If a notion entry already exists, show me its command or URL. If it runs `npx @notionhq/notion-mcp-server` (the old self-hosted server), tell me and ask before replacing it.
    2. If there's no hosted entry, add it for all projects:
       `claude mcp add --transport http --scope user notion https://mcp.notion.com/mcp`
    3. Tell me to run `/mcp` inside Claude Code (or `claude mcp login notion` in a terminal) and complete the Notion sign-in in my browser. Wait for me to confirm. Never ask me for a Notion token or integration secret; this server uses OAuth only.
    4. Run `claude mcp list` and confirm notion shows Connected.
    5. Search my Notion workspace for any page (use a short keyword like "meeting") and show me the titles of up to 3 results. Read only; do not create or edit any page.
    
    If any step fails, give me the exact error and the command that produced it. Do not skip ahead.

    The agent can’t click “Allow” in Notion’s sign-in page for you, so the prompt pauses there. It also checks for the old self-hosted server so you don’t end up with two Notion entries.

    What You’ll Need

    RequirementWhy You Need ItTime
    A Notion accountAny plan works. Some search filters and AI search across connected apps need Business or Enterprise0 min
    Claude Code installedThe client that connects to the hosted server0 min
    A browser on the same machineThe OAuth sign-in opens a Notion approval page1 min

    Step-by-Step Setup

    Prefer to do it by hand instead of delegating to the agent? Here’s the manual version.

    Step 1 — Add the hosted server

    ~30 sec

    --scope user makes Notion available in every project. Use --scope project instead to share it with your team through a .mcp.json file in the repo:

    claude mcp add --transport http --scope user notion https://mcp.notion.com/mcp

    Step 2 — Sign in with OAuth

    ~1 min

    Inside Claude Code, run /mcp, pick notion, and follow the browser prompt. Prefer the terminal? This runs the same sign-in without opening a session:

    claude mcp login notion

    Choose the workspace you want Claude to reach. You can connect only one workspace per entry.

    Step 3 — Check how much context it uses

    ~30 sec

    Every MCP server adds tool definitions to Claude’s context. Run /context in Claude Code to see how many tokens Notion takes, and compare it with your other servers.

    What Each Piece Does

    ToolWhat Claude Can Do With It
    notion-search / notion-ai-searchFind pages by keyword. AI search also looks through connected apps like Slack and Google Drive when your plan includes Notion AI
    notion-fetchRead a page, database, or data source by URL or ID, including its schema and templates
    notion-create-pages / notion-update-pageWrite new pages or change existing ones, such as filling a status property or appending notes
    notion-query-data-sourcesQuery database rows, for example all tickets marked “Ready for dev”
    notion-create-comment / notion-get-commentsRead and add page comments, including the discussion threads that often hold the real decisions
    OAuth permissionsClaude sees exactly what your Notion account can see. Workspace owners can review and revoke connections in Settings → Connections

    Verify It’s Actually Working

    claude mcp list
    ✔ notion    https://mcp.notion.com/mcp (HTTP) – Connected
    ! notion    Needs authentication  → run /mcp and finish the sign-in
    ✘ notionApi    npx @notionhq/notion-mcp-server  → old self-hosted entry; remove it

    Then give Claude a real task:

    Find the Notion page for our next feature, list the requirements that don't have a matching file in this repo yet, and don't edit anything in Notion

    If Claude calls notion-search, then notion-fetch, and compares the page against your code, the connection and your permissions are working.

    Common Mistakes to Avoid

    • Following an old tutorial. Guides that tell you to create an internal integration, copy an ntn_ token, and share each page with it are for the self-hosted server. The hosted server needs none of that.
    • Keeping both servers. If an old notionApi entry is still registered, Claude sees two sets of Notion tools. Remove it with claude mcp remove notionApi.
    • Letting Claude edit pages unreviewed. Notion’s security guide warns that page content can carry prompt-injection text. Keep Claude Code’s permission prompts on for Notion write tools and read what it plans to change.
    • Hammering search. notion-search is limited to 30 requests per minute. If you hit rate-limit errors, ask Claude to run fewer searches in parallel.
    • Signing in to the wrong workspace. The OAuth page lets you pick a workspace. If search returns nothing, run claude mcp logout notion and sign in again with the right one.

    Q&A

    Is it free?

    The server is free to connect on any Notion plan. Some features, like AI search across connected apps and certain search filters, depend on your Notion plan.

    Can Claude see my whole workspace?

    It can see what your Notion account can see, nothing more. For tighter scope, sign in with an account that only has access to the teamspaces Claude needs.

    Do I still need the npm package?

    No. The hosted server replaces it. Notion says the self-hosted repo may be sunset and that issues there aren’t actively monitored.

    Can my team share the setup?

    Yes. Add it with --scope project and commit the generated .mcp.json. Each person still signs in with their own Notion account.

    How do I remove it?

    claude mcp remove notion --scope user. To also revoke the grant on Notion’s side, remove the connection in Notion under Settings → Connections.

    Official Resources

  • 5 MCP Servers Shouldn’t Mean 5 Config Entries and 5 API Keys: Docker MCP Gateway Runs Them All Behind 1 Container-Isolated Entry

    5 MCP Servers Shouldn’t Mean 5 Config Entries and 5 API Keys: Docker MCP Gateway Runs Them All Behind 1 Container-Isolated Entry

    Last Verified: September 2026 — commands checked against docker/mcp-gateway (v0.43.3) and the official Docker MCP Toolkit docs

    Every MCP server you add to Claude Code is another claude mcp add line, another Node or Python process running on your machine with your user’s full permissions, and often another API key sitting in a config file. By the fifth server, it’s hard to say what’s installed, what it can touch, or where the keys are.

    Docker MCP Gateway collapses all of that into a single entry. Claude Code connects to one server, MCP_DOCKER, and the gateway runs every MCP server you pick from Docker’s catalog, each in its own container. Containers are capped at 1 CPU and 2 GB of memory and get no host filesystem access unless you grant it. Credentials live in Docker Desktop instead of your config files. It’s open source (MIT) and ships built into Docker Desktop as the MCP Toolkit.

    This guide uses GitHub and Playwright as the example servers. If you set up Playwright the direct way with our Playwright MCP guide, this is the containerized alternative.

    Quick Start

    In Docker Desktop, go to Settings → Beta featuresEnable Docker MCP Toolkit → Apply. Then, in a terminal:

    docker mcp profile create --name dev-tools
    docker mcp profile server add dev-tools \
      --server catalog://mcp/docker-mcp-catalog/github-official \
      --server catalog://mcp/docker-mcp-catalog/playwright
    docker mcp client connect claude-code --profile dev-tools --global

    Restart Claude Code and run claude mcp list. You should see MCP_DOCKER connected. Total time: about 5 minutes.

    ⚡ Copy This Prompt: Let Claude Code Install and Verify It For You

    Skip the manual steps below and hand the whole job to the agent instead:

    You have shell access, Docker, and the `claude mcp` CLI on this machine. Set up the Docker MCP Gateway for Claude Code and report back. Do not tell me it's done unless step 6 actually confirms it:
    
    1. Run `docker mcp --help`. If the command is missing or says Docker Desktop isn't running, stop and tell me to start Docker Desktop and turn on Settings > Beta features > Enable Docker MCP Toolkit.
    2. Run `claude mcp list`. If MCP_DOCKER already exists, stop and tell me which profile it uses instead of adding a second one. Also list any existing github or playwright entries, since those would duplicate the gateway's tools.
    3. Run `docker mcp profile list`. If there's no dev-tools profile, create it: `docker mcp profile create --name dev-tools`
    4. Add two servers to it:
       `docker mcp profile server add dev-tools --server catalog://mcp/docker-mcp-catalog/github-official --server catalog://mcp/docker-mcp-catalog/playwright`
    5. Connect Claude Code to the profile for all projects: `docker mcp client connect claude-code --profile dev-tools --global`
    6. Run `claude mcp list` and confirm MCP_DOCKER shows Connected, then run `docker mcp tools count` and tell me the number.
    
    The GitHub server needs OAuth. Tell me to authorize it in Docker Desktop (MCP Toolkit > the server's Configuration tab > OAuth) instead of asking for a token. Never ask me to paste a token into this chat. If any step fails, give me the exact error and the command that produced it. Do not skip ahead.

    The agent can’t flip the Beta toggle in Docker Desktop or finish GitHub’s OAuth for you, so the prompt stops and hands those parts back. That’s intentional.

    What You’ll Need

    RequirementWhy You Need ItTime
    Docker Desktop, recent versionIncludes the docker mcp CLI plugin and the MCP Toolkit UI. The docs are written for 4.62+~5 min
    MCP Toolkit enabledIt’s a Beta feature, so it’s off until you turn it on in Settings1 min
    Claude Code installedThe client that connects to the gateway0 min
    A GitHub account (for this example)The GitHub server authorizes through OAuth in Docker Desktop1 min

    Step-by-Step Setup

    Prefer to do it by hand instead of delegating to the agent? Here’s the manual version.

    Step 1 — Turn on the MCP Toolkit

    ~1 min

    Open Docker Desktop settings, select Beta features, check Enable Docker MCP Toolkit, and select Apply. Confirm the CLI is available:

    docker mcp --help

    Step 2 — Create a profile

    ~1 min

    A profile is a named set of servers. Clients connect to a profile, not to individual servers:

    docker mcp profile create --name dev-tools

    Upgrading from an older Toolkit? Your existing servers are already in a profile named default.

    Step 3 — Add servers from the catalog

    ~2 min

    Browse the catalog to find server IDs:

    docker mcp catalog server ls mcp/docker-mcp-catalog

    Then add the ones you want. Server URIs follow catalog://mcp/docker-mcp-catalog/<server-id>:

    docker mcp profile server add dev-tools \
      --server catalog://mcp/docker-mcp-catalog/github-official \
      --server catalog://mcp/docker-mcp-catalog/playwright

    For servers that need OAuth, such as GitHub, open Docker Desktop → MCP Toolkit, select the server, choose OAuth in its Configuration tab, and follow the link. No token needs to be pasted anywhere.

    Step 4 — Connect Claude Code

    ~1 min

    --global writes the system-wide Claude Code config. Leave it off and the gateway is set up only for the current git repo:

    docker mcp client connect claude-code --profile dev-tools --global

    Prefer to register it yourself? This does the same thing with Claude Code’s own command:

    claude mcp add MCP_DOCKER --scope user -- docker mcp gateway run --profile dev-tools

    Step 5 — Trim the tool list (optional)

    ~2 min

    Every tool from every server in the profile lands in Claude’s context. Check the count and disable the ones you don’t use:

    docker mcp tools count
    docker mcp profile tools dev-tools --disable <server>.<tool>

    What Each Piece Does

    PieceWhat It Does
    MCP Gateway (docker mcp gateway run)The single MCP server Claude Code talks to. It starts server containers on demand and routes tool calls to them
    Catalog (mcp/docker-mcp-catalog)Docker’s curated list of containerized MCP servers, like GitHub, Playwright, and Notion
    ProfileA named group of servers plus their config and tool allowlist. One profile per project works well
    Client connectionWrites the MCP_DOCKER entry into Claude Code’s config so it launches the gateway with your profile
    Secrets & OAuthCredentials are stored in the Docker Desktop VM (since 4.43.0), not in your MCP config files
    Container limits1 CPU and 2 GB of memory per tool container, no host filesystem unless you grant mounts, and tool requests carrying secrets are blocked

    Verify It’s Actually Working

    claude mcp list
    ✔ MCP_DOCKER    docker mcp gateway run – Connected
    ! github    also listed separately  → remove the old direct entry to avoid duplicate tools
    ✘ MCP_DOCKER    Failed to connect  → start Docker Desktop and check the MCP Toolkit is enabled

    Then run the test prompt from Docker’s own docs:

    Use the GitHub MCP server to show me my open pull requests

    If Claude calls a GitHub tool through MCP_DOCKER and lists real pull requests, the gateway, the container, and the OAuth credential are all working.

    Common Mistakes to Avoid

    • Skipping the Beta toggle. The MCP Toolkit is off by default. Without it, docker mcp commands fail or behave unexpectedly.
    • Keeping the old direct entries. If github or playwright is still registered with claude mcp add, Claude sees every tool twice. Remove the direct entries once the gateway works.
    • Forgetting --global. Without it, the connection only applies to the git repo you ran it in, and other projects won’t see MCP_DOCKER.
    • “Docker Desktop is not running” on WSL2 or Docker CE. Set export DOCKER_MCP_IN_CONTAINER=1, and outside Docker Desktop, run docker mcp feature enable profiles once.
    • Loading every server into one profile. Each server adds tools to Claude’s context. Use separate profiles per project and disable tools you never call.

    Q&A

    Is it free?

    Yes. The gateway is open source under the MIT license and ships with Docker Desktop. The separate “Docker AI Governance” enterprise edition is invite-only, but you don’t need it for this setup.

    Why run MCP servers in containers at all?

    A server started with npx or uvx runs with your user’s full access. In a container it’s limited to 1 CPU and 2 GB, can’t see your files unless you mount them, and gets credentials from Docker instead of an environment variable.

    Can Claude add servers on its own?

    With Dynamic MCP, an experimental feature, the agent gets tools like mcp-find and mcp-add to search the catalog and add servers mid-session. If you want a fixed set, run docker mcp feature disable dynamic-tools.

    Does it work without Docker Desktop?

    The CLI plugin can run independently, for example on Docker CE or in WSL2. Set DOCKER_MCP_IN_CONTAINER=1 and enable profiles with docker mcp feature enable profiles.

    How do I remove it?

    docker mcp client disconnect claude-code --global (or claude mcp remove MCP_DOCKER), then turn off the Toolkit in Beta features. Stored credentials can be listed and removed with docker mcp secret ls and docker mcp secret rm.

    Official Resources

  • Stop Copy-Pasting Stack Traces: Sentry MCP Lets Claude Code Pull Production Errors and Fix Them (1 Command, No Token)

    Stop Copy-Pasting Stack Traces: Sentry MCP Lets Claude Code Pull Production Errors and Fix Them (1 Command, No Token)

    Last Verified: September 2026 — commands checked against the official getsentry/sentry-mcp repo (0.39.0) and mcp.sentry.dev

    A production error fires, and the copy-paste loop starts: open Sentry, copy the stack trace, paste it into Claude Code, go back for the breadcrumbs, paste again, then realize you needed the tags too. The agent only ever sees what you remembered to copy.

    Sentry MCP cuts you out of that loop. It’s Sentry’s official server, built for coding agents like Claude Code. The agent can search your issues, pull the full stack trace, breadcrumbs, tags, and trace for an event, and ask Seer, Sentry’s AI debugger, for a root cause. It then fixes the code in the same session. It’s hosted with OAuth sign-in, so there’s no token to create and nothing to install.

    This pairs well with our Chrome DevTools MCP setup. DevTools MCP catches bugs on your machine, and Sentry MCP brings in the ones your users hit in production.

    Quick Start

    One command, then sign in:

    claude mcp add --transport http --scope user sentry https://mcp.sentry.dev/mcp

    Restart Claude Code, run /mcp, and approve access to your Sentry organization in the browser. Then ask: “What are the top unresolved issues in my Sentry project this week?” Total time: about 2 minutes.

    ⚡ Copy This Prompt: Let Claude Code Install and Verify It For You

    Skip the manual steps below and hand the whole job to the agent instead:

    You have shell access and the `claude mcp` CLI on this machine. Connect the hosted Sentry MCP server and report back. Do not tell me it's done unless step 4 actually confirms it:
    
    1. Run `claude mcp list`. If a server named sentry already exists, stop and tell me how it's configured instead of adding a second one.
    2. Add the hosted server (OAuth, no token or Node.js needed):
       `claude mcp add --transport http --scope user sentry https://mcp.sentry.dev/mcp`
    3. Run `claude mcp list` again and confirm sentry is listed. It's fine if it says it needs authentication.
    4. Tell me to restart Claude Code and run `/mcp` to sign in to Sentry in my browser. After I confirm, call the whoami tool and show me which Sentry user and organizations it sees.
    
    Never ask me to paste a Sentry token into this chat. If any step fails, give me the exact error and the command that produced it. Do not skip ahead.

    The sign-in step can’t be automated. Sentry’s OAuth needs you to approve access in the browser, so the prompt stops and hands that part to you. That’s intentional.

    What You’ll Need

    RequirementWhy You Need ItTime
    Claude Code installedProvides the claude mcp command used to register the server0 min
    A Sentry account (sentry.io)The hosted server signs you in with OAuth and reads your organization’s data0 min
    A browserTo approve the OAuth connection the first time1 min
    Self-hosted Sentry only: Node.js + a user auth tokenThe hosted server targets sentry.io. Self-hosted installs run the stdio version locally~5 min

    Step-by-Step Setup

    Prefer to do it by hand instead of delegating to the agent? Here’s the manual version.

    Step 1 — Add the hosted server

    ~1 min

    --scope user makes it available in every project:

    claude mcp add --transport http --scope user sentry https://mcp.sentry.dev/mcp

    Want it locked to one project? Sentry recommends scoping the URL to an org and project. Run this inside that repo (default local scope). Tools then default to that project, and unneeded discovery tools are hidden:

    claude mcp add --transport http sentry https://mcp.sentry.dev/mcp/your-org-slug/your-project-slug

    Step 2 — Sign in and pick permissions

    ~1 min

    Restart Claude Code and run:

    /mcp

    Select sentry and authenticate. The approval screen lists Sentry’s permission groups (“skills”) as checkboxes. For a read-only setup, keep Inspect and Seer and uncheck Triage and Project management. Sentry remembers your choice for the next sign-in.

    Step 3 — Or install the plugin (auto-delegating subagent)

    ~2 min

    The official plugin adds a sentry-mcp subagent. Claude Code hands off to it automatically when you ask about errors, issues, traces, or performance, which keeps Sentry data out of your main context. If you added the server in Step 1, remove it first (claude mcp remove sentry):

    claude plugin marketplace add getsentry/sentry-mcp
    claude plugin install sentry-mcp@sentry-mcp

    Step 4 — Self-hosted Sentry (optional)

    ~5 min

    Create a User Auth Token in Sentry with org:read, project:read, project:write, team:read, team:write, and event:write, then run this in your terminal (not in a chat):

    claude mcp add --scope user --env SENTRY_ACCESS_TOKEN=your-token --env SENTRY_HOST=sentry.example.com sentry -- npx @sentry/mcp-server@latest

    SENTRY_HOST takes the hostname only. The AI-powered search tools (search_issues, search_events) additionally need an LLM provider, set with EMBEDDED_AGENT_PROVIDER plus that provider’s API key. Every other tool works without one. If your instance doesn’t support Seer, add --env MCP_DISABLE_SKILLS=seer.

    What Each Piece Does

    Skill (permission group)What the Agent Can DoTools
    Inspect Issues & EventsRead-only: issues, events, stack traces, breadcrumbs, traces, replays, releases, monitors, profiles, and Sentry docs38
    SeerSentry’s AI debugger: analyze an issue, find the root cause, and suggest a fix12
    TriageResolve, assign, and update issues. This one writes to Sentry18
    Project managementCreate and modify projects, teams, DSNs, and uptime monitors. Also writes to Sentry16

    Tool counts come from Sentry’s published skill definitions (0.39.0). The ones you’ll use most are search_issues, get_issue_details, get_event_stacktrace, get_issue_breadcrumbs, and analyze_issue_with_seer.

    Verify It’s Actually Working

    claude mcp list
    ✔ sentry    https://mcp.sentry.dev/mcp (HTTP) – Connected
    ! sentry    Needs authentication  → run /mcp and finish the browser sign-in
    ✘ sentry    Failed to connect  → check the URL; org/project slugs must match Sentry exactly

    Then give it a real production bug to work through:

    Find the most frequent unresolved error in [YOUR PROJECT] from the last 7 days. Show me the stack trace and breadcrumbs, tell me the root cause, then open the file in this repo where it happens and propose a fix.

    If the tool calls show search_issues and get_event_stacktrace, and the answer cites real event data, it’s working end to end.

    Common Mistakes to Avoid

    • Thinking “Needs authentication” means it’s broken. Every hosted connection uses OAuth. Run /mcp once and sign in. There’s no token to create.
    • Granting Triage when you only wanted to read. Triage lets the agent resolve and reassign issues. Leave it unchecked on the approval screen unless you actually want that.
    • Wrong slugs in a scoped URL. /mcp/{org}/{project} uses the slugs from your Sentry URL, not the display names. A typo means the connection fails.
    • Running both the plugin and a manual server. Pick one. Two entries mean duplicate tools and a subagent that may not be the one answering.
    • Expecting AI search on self-hosted with no LLM key. The stdio server leaves search_issues / search_events unavailable until an LLM provider is configured, and Seer may not be available on self-hosted installs at all.

    Q&A

    Do I need to create a Sentry API token?

    Not for sentry.io. The hosted server uses OAuth, so you sign in through the browser and approve access. Tokens are only needed for the self-hosted stdio setup.

    Can the agent change things in Sentry?

    Only if you grant it. Inspect and Seer read data and run analysis. Triage (resolve/assign) and Project management (projects, teams, DSNs) are the write permissions, and you choose them on the approval screen.

    What’s the difference between the plugin and claude mcp add?

    Both connect to the same hosted server. The plugin also adds a sentry-mcp subagent that Claude Code delegates to automatically for Sentry questions.

    Does it work with self-hosted Sentry?

    Yes, through the stdio server (npx @sentry/mcp-server) with SENTRY_HOST and a user auth token. Some features, like Seer, may not be available on self-hosted instances.

    How do I remove it?

    claude mcp remove sentry (or uninstall the plugin). You can also revoke the authorized application in your Sentry account settings.

    Official Resources

  • Claude Code’s WebFetch Can’t Run JavaScript: Firecrawl MCP Gives It Real Web Scraping in 1 Command (No API Key)

    Claude Code’s WebFetch Can’t Run JavaScript: Firecrawl MCP Gives It Real Web Scraping in 1 Command (No API Key)

    Last Verified: September 2026 — commands checked against the official Firecrawl docs and firecrawl-mcp v3.25.3; keyless endpoint tested live

    You ask Claude Code to pull the plans from a pricing page, and it hands back a vague summary instead of the table. Its built-in WebFetch doesn’t run JavaScript, and the agent gets a processed summary rather than the page itself. JS-rendered docs, pricing tables, and “read these 30 pages and compare them” jobs are where it falls apart.

    Firecrawl MCP fixes that with one command. It gives the agent a proper web toolkit (~7.5k GitHub stars, maintained by the Firecrawl team). It can search the web, scrape any URL into clean markdown or JSON, map every URL on a site, crawl whole doc sections, and parse PDFs. The part most guides miss is that there’s now a hosted keyless endpoint. Search, scrape, and parse work with no API key, no account, and no Node.js install.

    Only need library docs? Our Context7 MCP setup is the better tool for that. Firecrawl is for everything else on the web.

    Quick Start

    One command. No API key, no Node.js:

    claude mcp add --transport http --scope user firecrawl https://mcp.firecrawl.dev/v2/mcp

    Restart Claude Code, then ask: “Use Firecrawl to scrape https://docs.firecrawl.dev and summarize it”. Total time: about 1 minute.

    ⚡ Copy This Prompt: Let Claude Code Install and Verify It For You

    Skip the manual steps below and hand the whole job to the agent instead:

    You have shell access and the `claude mcp` CLI on this machine. Set up the Firecrawl MCP server (hosted, keyless) and report back. Do not tell me it's done unless step 4 actually confirms it:
    
    1. Run `claude mcp list`. If a server named firecrawl already exists, stop and tell me how it's configured instead of adding a second one.
    2. Add the hosted keyless server (no API key, no Node.js needed):
       `claude mcp add --transport http --scope user firecrawl https://mcp.firecrawl.dev/v2/mcp`
    3. Run `claude mcp list` again and confirm firecrawl shows as Connected.
    4. Tell me to restart Claude Code, then after restart use firecrawl_scrape on https://docs.firecrawl.dev and show me the first 10 lines of the markdown it returns.
    
    Never ask me to paste an API key into this chat. If I want the full tool set later, I'll switch to the sign-in URL myself.
    If any step fails, give me the exact error and the command that produced it. Do not skip ahead.

    The prompt deliberately keeps your API key out of the chat. Firecrawl’s own docs say never to put a key in an agent conversation. The sign-in URL in Step 3 below gets you the full tool set without ever handling a key.

    What You’ll Need

    RequirementWhy You Need ItTime
    Claude Code installedProvides the claude mcp command used to register the server0 min
    Nothing else (keyless)The hosted endpoint runs on Firecrawl’s servers. Search, scrape, and parse are free, rate-limited per IP per day0 min
    Free Firecrawl account (optional)Unlocks crawl, map, agent, and the rest of the tools. The free plan includes 1,000 credits, no card~2 min
    Node.js 22+ (local mode only)Only if you run the server on your own machine or point it at a self-hosted Firecrawl0–3 min

    Step-by-Step Setup

    Prefer to do it by hand instead of delegating to the agent? Here’s the manual version.

    Step 1 — Add the keyless server

    ~1 min

    --scope user makes it available in every project:

    claude mcp add --transport http --scope user firecrawl https://mcp.firecrawl.dev/v2/mcp

    This is Firecrawl’s documented Claude Code command with --scope user added. Keyless mode exposes three tools: firecrawl_search, firecrawl_scrape, and firecrawl_parse.

    Step 2 — Restart and run a first test

    ~1 min

    Restart Claude Code so it loads the new tools, then try:

    Search the web for the latest Firecrawl release notes and summarize the sources.

    That’s Firecrawl’s own suggested first prompt. You should see firecrawl_search in the tool calls.

    Step 3 — Unlock the full tool set with sign-in (optional)

    ~2 min

    Crawl, map, agent, and the other tools need an account. The easiest route is browser sign-in, with no API key to copy. Remove the keyless entry first, since Firecrawl’s docs say not to add a second Firecrawl server:

    claude mcp remove firecrawl
    claude mcp add --transport http --scope user firecrawl https://mcp.firecrawl.dev/v2/mcp-oauth

    Then run /mcp inside Claude Code and complete the sign-in in your browser. You can review or revoke the connection later in Firecrawl’s MCP settings.

    Step 4 — Or run it locally with an API key (optional)

    ~3 min

    Use this if you’d rather run the open-source server yourself, or point it at a self-hosted Firecrawl via FIRECRAWL_API_URL. It needs Node.js 22+ and a key from your Firecrawl dashboard. Type the key into your terminal, not into a chat:

    claude mcp add firecrawl --scope user -e FIRECRAWL_API_KEY=fc-YOUR_API_KEY -- npx -y firecrawl-mcp

    Windows:

    claude mcp add firecrawl --scope user -e FIRECRAWL_API_KEY=fc-YOUR_API_KEY -- cmd /c npx -y firecrawl-mcp

    Running n8n? Start the server with HTTP_STREAMABLE_SERVER=true and point n8n’s MCP client at http://localhost:3000/mcp.

    What Each Piece Does

    ToolWhat the Agent Uses It ForKeyless?
    firecrawl_searchWeb search with ranked results, optionally fetching page content in the same callYes
    firecrawl_scrapeOne known URL → clean markdown, or JSON matching a schema you give itYes
    firecrawl_parsePDFs, Word docs, spreadsheets, HTML files → markdown or JSONYes
    firecrawl_mapList every URL on a site without fetching content, which is handy before a crawlNo
    firecrawl_crawlPull content from many pages under a site, bounded by limit and include/exclude pathsNo
    firecrawl_interactClick, type, or navigate on a page before reading itNo
    firecrawl_agentAutonomous multi-source research that returns structured dataNo
    firecrawl_monitor_*Check the same page on a schedule and get diffs when it changesNo
    firecrawl_credit_usageCheck remaining credits and monthly consumptionNo

    With sign-in or an API key, the full profile registers 26 tools, including developer search over GitHub issues and PRs, research-paper search, and crawl/agent status checks. The table covers the ones you’ll actually reach for.

    Verify It’s Actually Working

    claude mcp list
    ✔ firecrawl    https://mcp.firecrawl.dev/v2/mcp (HTTP) – Connected
    ! firecrawl    Needs authentication  → sign-in URL: run /mcp and finish the browser sign-in
    ✘ firecrawl    429 Too Many Requests  → keyless daily limit hit; sign in or add a key

    “Connected” only confirms the server answered. The real test is a page WebFetch struggles with, such as a JavaScript-heavy page:

    Use firecrawl_scrape on [A JS-HEAVY PAGE, e.g. a pricing page] and give me the exact plan names and prices as a markdown table. Quote them verbatim from the scraped content, don't summarize.

    If the tool calls show firecrawl_scrape and the table matches what you see in your browser, it’s working end to end.

    Common Mistakes to Avoid

    • Opening the MCP URL in a browser. https://mcp.firecrawl.dev/v2/mcp is a server endpoint for your MCP client, not a web page. Sign-in happens through /mcp in Claude Code.
    • Pasting your API key into the chat. Firecrawl’s docs are explicit: never put a key in an agent conversation or in the server URL. Use browser sign-in, or pass it with -e / -H in your own terminal.
    • Adding a second Firecrawl entry to “upgrade”. Remove the keyless server before adding the sign-in one, or Claude Code ends up with duplicate tools.
    • Expecting crawl or map on keyless. Keyless is limited to search, scrape, and parse. If firecrawl_crawl is missing, that’s why, not a broken install.
    • Crawling without a limit. Every page costs credits. Run firecrawl_map first, then crawl with limit and includePaths set so a docs crawl doesn’t eat your whole free allowance.

    Q&A

    Is it really free without an API key?

    Yes. The hosted keyless endpoint offers search, scrape, and parse for free, capped per IP address per day by both a request limit and a credit limit. Past that you get a 429. A free account adds 1,000 credits and the full tool set.

    How is this different from Claude Code’s built-in WebFetch?

    WebFetch fetches a single URL and hands the agent a processed summary. It doesn’t run JavaScript. Firecrawl renders the page and returns the actual content as markdown or structured JSON. It can also search, map, and crawl many pages, which WebFetch can’t.

    Do I need Node.js?

    Not for the hosted endpoint. Node.js 22+ is only needed if you run firecrawl-mcp locally, for example against a self-hosted Firecrawl.

    Can I use it in n8n?

    Yes. Run the server locally with HTTP_STREAMABLE_SERVER=true and connect n8n to http://localhost:3000/mcp. curl http://localhost:3000/health should return ok.

    How do I remove it?

    claude mcp remove firecrawl. If you used sign-in, also revoke the connection in Firecrawl’s MCP settings.

    Official Resources

  • Stop Pasting Console Errors Into Claude Code: Chrome DevTools MCP Lets It Read the Console, Network, and Performance Itself (2-Minute Setup)

    Stop Pasting Console Errors Into Claude Code: Chrome DevTools MCP Lets It Read the Console, Network, and Performance Itself (2-Minute Setup)

    Last Verified: September 2026 — commands checked against the official ChromeDevTools GitHub docs (v1.10.1)

    The page is broken, and you’re the middleman: open DevTools, copy the red console error, paste it into Claude Code, go back for the failed network request, paste again, then explain the layout shift in words. Claude Code can read your source, but it’s debugging blind and guessing from whatever you remembered to copy.

    Chrome DevTools MCP takes you out of that loop. It’s the official server from the Chrome DevTools team (~52k GitHub stars), and setup is one command. The agent opens a real Chrome, then reads console messages (with source-mapped stack traces), inspects network requests, records performance traces, runs Lighthouse audits, and takes heap snapshots. It then fixes the code based on what it actually saw.

    Already using our Playwright MCP setup? The two are complementary. Playwright is built for driving the browser through flows. DevTools MCP is built for finding out why a page is broken or slow.

    Quick Start

    One command (needs Node.js LTS and Chrome):

    claude mcp add chrome-devtools --scope user npx chrome-devtools-mcp@latest

    Restart Claude Code, then ask: “Check the performance of https://developers.chrome.com”. Chrome should open and record a trace. Total time: about 2 minutes.

    ⚡ Copy This Prompt: Let Claude Code Install and Verify It For You

    Skip the manual steps below and hand the whole job to the agent instead:

    You have shell access and the `claude mcp` CLI on this machine. Set up the Chrome DevTools MCP server and report back. Do not tell me it's done unless step 5 actually confirms it:
    
    1. Check `node --version`. It needs a current Node.js LTS (20.19+ or 22.12+). If Node is missing or older, install the current LTS using whatever this machine already uses (nvm, Homebrew, winget, or the official installer from nodejs.org), then confirm `node --version` and `npx --version` work in this shell.
    2. Confirm Google Chrome (stable) is installed. If it isn't, stop and tell me. Don't substitute another browser.
    3. Run `claude mcp list` to see what's already configured.
    4. Add the server:
       - macOS / Linux: `claude mcp add chrome-devtools --scope user npx chrome-devtools-mcp@latest`
       - Windows: `claude mcp add chrome-devtools --scope user -- cmd /c npx -y chrome-devtools-mcp@latest`
    5. Run `claude mcp list` again and confirm chrome-devtools shows as Connected.
    
    If any step fails, give me the exact error and the command that produced it. Do not skip ahead.

    The agent checks Node first because an outdated Node version is the most common reason npx servers fail to start. Step 1 handles that before anything else.

    What You’ll Need

    RequirementWhy You Need ItTime
    Claude Code installedProvides the claude mcp command used to register the server0 min
    Node.js LTS (20.19+ or 22.12+)The server runs through npx; the package requires these versions0–3 min
    Google Chrome (stable)Officially supported browser. Other Chromium browsers may work but aren’t guaranteed0 min
    No API keyEverything runs locally against your own Chrome0 min

    Step-by-Step Setup

    Prefer to do it by hand instead of delegating to the agent? Here’s the manual version.

    Step 1 — Check Node.js

    ~1 min

    node --version

    You need 20.19+ or 22.12+ (or 23+). Older? Install the current LTS from nodejs.org or your version manager.

    Step 2 — Add the server

    ~1 min

    macOS / Linux. --scope user makes it available in every project:

    claude mcp add chrome-devtools --scope user npx chrome-devtools-mcp@latest

    Windows. The cmd /c wrapper avoids the “MCP error -32000: Connection closed” startup failure:

    claude mcp add chrome-devtools --scope user -- cmd /c npx -y chrome-devtools-mcp@latest

    Step 3 — Or install it as a plugin (MCP + skills)

    ~2 min

    The plugin version bundles the server with extra skills. If you already added it with the CLI in Step 2, remove that first (claude mcp remove chrome-devtools). Then, inside Claude Code:

    /plugin marketplace add ChromeDevTools/chrome-devtools-mcp
    /plugin install chrome-devtools-mcp@chrome-devtools-plugins

    Restart Claude Code and check with /skills.

    Step 4 — Restart and run a first test

    ~1 min

    Chrome doesn’t open when the server connects. It opens the first time the agent uses a browser tool. Kick it off with:

    Check the performance of https://developers.chrome.com

    Step 5 — Pick a browser mode (optional)

    ~2 min

    Flags go after chrome-devtools-mcp@latest. Re-add the server with the one you want (run claude mcp remove chrome-devtools first):

    Throwaway profile, wiped when the browser closes:

    claude mcp add chrome-devtools --scope user -- npx chrome-devtools-mcp@latest --isolated

    No visible window:

    claude mcp add chrome-devtools --scope user -- npx chrome-devtools-mcp@latest --headless

    Your own running Chrome, handy for debugging pages behind a login. Needs Chrome 144+: open chrome://inspect/#remote-debugging, enable remote debugging, then:

    claude mcp add chrome-devtools --scope user -- npx chrome-devtools-mcp@latest --autoConnect

    Chrome shows a permission dialog the first time. Click Allow.

    What Each Piece Does

    Tool Group (on by default)What the Agent Can DoTools
    DebuggingRead console messages with source-mapped stack traces, screenshots, DOM snapshots, CSS styles, run Lighthouse, evaluate JS9
    NetworkList requests and inspect a single request’s headers, status, and body2
    PerformanceRecord a trace and pull out actionable insights (LCP, layout shifts, long tasks)3
    MemoryTake and compare heap snapshots, find retainers and duplicate strings when hunting leaks14
    Input + NavigationClick, fill forms, type, upload files, open/switch tabs, wait for content16
    EmulationEmulate devices/network conditions and resize the viewport2

    Extensions, PWA, WebMCP, and third-party tool groups also exist but are off by default. Each needs its own flag. See the tool reference below.

    FlagWhat It Does
    --isolatedUses a temporary profile that’s deleted when the browser closes
    --headlessRuns Chrome with no visible window
    --autoConnectAttaches to the Chrome you already have open (Chrome 144+) instead of launching a new one
    --slimExposes a reduced tool set for basic browser tasks
    --no-usage-statisticsOpts out of Google’s usage statistics, which are on by default
    --no-performance-cruxStops trace URLs being sent to the CrUX API for real-user field data

    Verify It’s Actually Working

    claude mcp list
    ✔ chrome-devtools    Connected
    ! chrome-devtools    Connected, but Chrome never opens  → normal until a browser tool runs
    ✘ chrome-devtools    MCP error -32000: Connection closed  → Windows: use the cmd /c command

    “Connected” only confirms the server started. The real test is a debugging task the agent can’t answer from your source code alone:

    Open http://localhost:3000 (or [YOUR APP URL]) in Chrome. List any console errors and any network requests that returned 4xx/5xx, then tell me the most likely cause of each, citing the file and line from the stack trace.

    If it comes back with real console output and request statuses (not guesses), it’s working end to end.

    Common Mistakes to Avoid

    • Thinking it’s broken because Chrome didn’t open. The browser only launches when the agent calls a tool that needs it. Connecting alone never opens a window.
    • Skipping the cmd /c wrapper on Windows. Plain npx often fails to launch from inside another process on Windows. That’s the classic “Connection closed” error.
    • Installing both the CLI version and the plugin. The docs say to remove the CLI-installed server before installing the plugin, or you’ll have two copies fighting over the same browser profile.
    • Browsing sensitive accounts in the agent’s Chrome. The server exposes the browser’s content to your MCP client. With --autoConnect it can see every open window in that profile. Use --isolated when you don’t need your logins.
    • Not knowing what gets sent to Google. Usage statistics are on by default, and performance traces can send page URLs to the CrUX API. Add --no-usage-statistics and --no-performance-crux if that matters for your project.

    Q&A

    How is this different from Playwright MCP?

    Playwright MCP is built for driving the browser through flows (click, fill, navigate) across browsers. Chrome DevTools MCP is Chrome-only but adds the DevTools side: performance traces, Lighthouse, network inspection, source-mapped console errors, and heap snapshots. Many people run both.

    Is it free?

    Yes. It’s open source from the Chrome DevTools team and runs locally. No API key or account needed.

    Can it debug pages that need a login?

    Yes. Use --autoConnect to attach to your own running Chrome (Chrome 144+, remote debugging enabled at chrome://inspect/#remote-debugging), so the agent works in your already-signed-in session.

    Does it work with Edge or Brave?

    Only Google Chrome and Chrome for Testing are officially supported. Other Chromium browsers may work, but that isn’t guaranteed.

    How do I remove it?

    claude mcp remove chrome-devtools. Its default browser profile lives in ~/.cache/chrome-devtools-mcp/ if you want to delete that too.

    Official Resources

  • Stop Burning Tokens on Full-File Reads: How Serena Gives Claude Code IDE-Level Symbol Navigation (3 Commands, 40+ Languages)

    Stop Burning Tokens on Full-File Reads: How Serena Gives Claude Code IDE-Level Symbol Navigation (3 Commands, 40+ Languages)

    Last Verified: September 2026 — commands checked against Serena’s official GitHub docs and CLI source

    You ask Claude Code to change one function, and it greps for the name, opens a 900-line file, reads half of it, opens three more files, and your context window is gone before the first edit. Then the rename it does is a dozen fragile find-and-replace edits that still miss a call site.

    Serena fixes that by giving the agent the tools your IDE already has. It can jump straight to a symbol, list every reference to it, rename it across the project, or replace one function body without reading the rest of the file. Under the hood it runs real language servers (LSP) for 40+ languages. It’s free and open source (by Oraios AI, ~30k GitHub stars, updated daily), and setup is three commands.

    Quick Start

    With uv installed, these three commands do the whole setup:

    uv tool install -p 3.13 serena-agent
    serena init
    serena setup claude-code

    Restart Claude Code and run /mcp. You should see serena listed. Total time: about 5 minutes.

    ⚡ Copy This Prompt: Let Claude Code Install and Verify It For You

    Skip the manual steps below and hand the whole job to the agent instead:

    You have shell access and the `claude mcp` CLI on this machine. Set up the Serena MCP server and report back. Do not tell me it's done unless step 5 actually confirms it:
    
    1. Check `uv --version`. If uv is missing, install it with the official installer for my OS:
       - macOS / Linux: `curl -LsSf https://astral.sh/uv/install.sh | sh`
       - Windows (PowerShell): `powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"`
       The installer puts uv in `~/.local/bin`, which may not be on this shell's PATH yet. Add it for this session (or call uv by its full path), then confirm `uv --version` works before continuing.
    2. Install Serena: `uv tool install -p 3.13 serena-agent`, then run `serena init`.
    3. Register it with Claude Code: `serena setup claude-code`. If that fails, fall back to: `claude mcp add --scope user serena -- serena start-mcp-server --context claude-code --project-from-cwd`
    4. From my project root, run `serena project health-check` and show me the output.
    5. Run `claude mcp list` and confirm serena shows as Connected.
    
    If any step fails, give me the exact error and the command that produced it. Do not skip ahead.

    Step 4 is the important one. A health check proves the language server actually parses your code, not just that the config entry exists.

    What You’ll Need

    RequirementWhy You Need ItTime
    Claude Code installedProvides the claude mcp command Serena registers itself with0 min
    uv (Python package manager)Serena is installed and managed through uv; it’s the only hard prerequisite~1 min
    A real codebaseSerena shines on medium-to-large projects; on a 3-file script it adds little0 min
    Language-specific extras (sometimes)A few languages need an extra toolchain for their language server; see Serena’s language support page0–5 min

    Step-by-Step Setup

    Prefer to do it by hand instead of delegating to the agent? Here’s the manual version.

    Step 1 — Install uv

    ~1 min

    macOS / Linux:

    curl -LsSf https://astral.sh/uv/install.sh | sh

    Windows (PowerShell):

    powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

    Open a new terminal afterward so uv is on your PATH.

    Step 2 — Install Serena

    ~2 min

    The package is called serena-agent. The -p 3.13 flag pins the Python version uv uses for it:

    uv tool install -p 3.13 serena-agent

    When it finishes, the serena command should be available in your shell.

    Step 3 — Initialise Serena

    ~1 min

    Creates Serena’s global config and sets the free language-server backend as the default:

    serena init

    You should get a success message. (JetBrains users can run serena init -b JetBrains to use the paid IDE-plugin backend instead.)

    Step 4 — Register it with Claude Code

    ~1 min

    The one-command way:

    serena setup claude-code

    Or add it manually. Global (every project, Serena picks up whichever folder you launch Claude Code from):

    claude mcp add --scope user serena -- serena start-mcp-server --context claude-code --project-from-cwd

    Per-project (only the current repo):

    claude mcp add serena -- serena start-mcp-server --context claude-code --project "$(pwd)"

    Step 5 — Index a large project (optional)

    ~1–5 min

    From the project root, pre-build the symbol cache so the first queries aren’t slow:

    serena project index

    Step 6 — Make Claude Code actually use it (recommended)

    ~2 min

    Serena’s own docs flag this: Claude Code’s long built-in tool descriptions create a strong bias toward its native grep/read tools, so the agent often ignores Serena even when it’s connected. Serena ships a system-prompt override that counteracts that. Launch Claude Code with it (bash/zsh, or Git Bash on Windows):

    claude --system-prompt="$(serena prompts print-cc-system-prompt-override)"

    Step 7 — Add Serena’s reminder hooks (optional)

    ~2 min

    For long sessions, Serena provides hooks that nudge the agent back to its symbolic tools, activate the project at session start, and auto-approve Serena calls in permissive modes. Add the hooks you want to ~/.claude/settings.json (global) or .claude/settings.json (project):

    {
      "hooks": {
        "PreToolUse": [
          { "matcher": "", "hooks": [{ "type": "command", "command": "serena-hooks remind --client=claude-code" }] },
          { "matcher": "mcp__serena__*", "hooks": [{ "type": "command", "command": "serena-hooks auto-approve --client=claude-code" }] }
        ],
        "SessionStart": [
          { "matcher": "", "hooks": [{ "type": "command", "command": "serena-hooks activate --client=claude-code" }] }
        ],
        "SessionEnd": [
          { "matcher": "", "hooks": [{ "type": "command", "command": "serena-hooks cleanup --client=claude-code" }] }
        ]
      }
    }

    Serena labels hooks as an alpha feature. New to hooks? Our Claude Code hooks guide explains how PreToolUse and SessionStart work.

    What Each Piece Does

    PieceWhat It Does
    serena initWrites the global config and picks the analysis backend (free LSP by default)
    serena setup claude-codeRegisters the MCP server with Claude Code for you
    --context claude-codeLoads a tool set tuned for Claude Code; basic file/shell tools it already has are switched off to avoid overlap
    --project-from-cwdUses whatever directory you start Claude Code in as the active project
    serena project indexPre-caches symbols so lookups on big repos are fast from the first call
    System-prompt overrideCounteracts Claude Code’s bias toward its built-in tools so Serena actually gets used
    serena-hooksOptional reminder / activation / auto-approve hooks for long sessions

    The tools the agent gets

    Serena ToolReplaces This Slow Pattern
    find_symbolGrepping for a function name and reading every match
    get_symbols_overviewOpening a whole file just to see what’s defined in it
    find_referencing_symbolsSearching text for call sites and hoping none were missed
    replace_symbol_bodyLine-number-based edits that break when the file shifts
    rename_symbolFind-and-replace across files (and accidentally renaming the wrong thing)
    insert_after_symbol / insert_before_symbolGuessing the right line to add a new method

    Verify It’s Actually Working

    claude mcp list
    ✔ serena    Connected
    ! serena    Timed out during startup  → raise MCP_TIMEOUT (see mistakes below)
    ✘ serena    Failed to connect  → usually serena not found on PATH

    “Connected” only proves the server started. Check that the language server can read your code:

    serena project health-check

    Then give the agent a task that needs symbol-level understanding, and watch which tools it calls:

    Activate the current project with Serena. Then use Serena's tools (not grep) to find every place that calls [A FUNCTION IN YOUR CODE] and summarize how each caller uses it.

    If the tool calls show mcp__serena__find_symbol and find_referencing_symbols instead of Grep and Read, it’s working end to end.

    Common Mistakes to Avoid

    • Installing it from an MCP or plugin marketplace. Serena’s README explicitly warns that marketplace listings carry outdated install commands. Use uv tool install as shown above.
    • Assuming “Connected” means “used”. Claude Code often keeps reaching for its built-in grep/read tools. Use the system-prompt override (Step 6) and, for long sessions, the hooks (Step 7).
    • Startup timeouts on big projects. If Serena doesn’t come up in time, raise the MCP timeout: export MCP_TIMEOUT=60000 in your shell profile (Windows: setx MCP_TIMEOUT 60000, then open a new terminal).
    • serena not found by Claude Code. Even when it works in your terminal, the client may not see it on PATH. Replace serena in the claude mcp add command with the full path (which serena on macOS/Linux, where serena on Windows).
    • Forgetting to activate the project with a global install. With --project-from-cwd, start Claude Code from the project root. Otherwise ask it to “activate the current directory as a project using Serena”.

    Q&A

    Is Serena free?

    Yes. The default language-server backend is free and open source (GPL-3.0). There’s an optional paid JetBrains plugin backend (free trial) that adds extras like move/inline refactors and interactive debugging.

    Which languages does it support?

    40+ through language servers, including Python, TypeScript/JavaScript, Go, Rust, Java, C#, C/C++, PHP, Ruby, Kotlin, Swift, and more. A few need an extra toolchain installed; check the language support page.

    Does it replace Claude Code’s built-in tools?

    No, it adds to them. In the claude-code context, Serena turns off its own basic file/shell tools because Claude Code already has them, and focuses on symbol-level retrieval and editing.

    Global or per-project install?

    Global with --project-from-cwd is the simplest if you work across many repos. Per-project pins Serena to one folder and never switches.

    How do I remove it?

    claude mcp remove serena removes it from Claude Code, and uv tool uninstall serena-agent removes the package.

    Official Resources

  • Your Prompt Rules Are Just Suggestions: Claude Code Hooks Auto-Format Every Edit and Block Dangerous Commands (2-Minute Setup)

    Your Prompt Rules Are Just Suggestions: Claude Code Hooks Auto-Format Every Edit and Block Dangerous Commands (2-Minute Setup)

    Last Verified: September 2026 — commands and maintenance status checked against live GitHub sources

    You told Claude Code “always run the formatter after editing” and “never run rm -rf”. It listened, until it didn’t. A rule in a prompt is a request — it can be forgotten, skipped, or missed after a context compaction.

    A hook is not a request. It’s a shell command that runs automatically at a specific point in the agent’s workflow, and it can actually block an action before it happens. This guide covers real, practical hook setups you can have running in about 2 minutes, not just the concept.

    Quick Start

    The single most useful starter hook: auto-format every file Claude Code edits, so formatting is never something you have to ask for. Add this to .claude/settings.json in your project root:

    {
      "hooks": {
        "PostToolUse": [
          {
            "matcher": "Write|Edit",
            "hooks": [
              { "type": "command", "command": "npx prettier --write \"$CLAUDE_TOOL_INPUT_FILE_PATH\"" }
            ]
          }
        ]
      }
    }

    Start a new Claude Code session (hooks are snapshotted at startup) — every file it writes or edits now gets auto-formatted, no reminder needed. Total time: about 2 minutes.

    ⚡ Copy This Prompt: Let Claude Code Write and Verify the Hook For You

    Skip the manual JSON editing and hand the whole thing to the agent instead:

    Add a PostToolUse hook to this project's .claude/settings.json that runs [DESCRIBE WHAT YOU WANT, e.g. "prettier --write on every file the Write or Edit tool touches" or "eslint on every .ts file after it's edited"]. Then do the following to prove it actually works, not just that the JSON is valid:
    
    1. Show me the exact hooks block you added.
    2. Make a small test edit to a real file in this project.
    3. Show me the hook actually ran (its output or the resulting file change) as a direct result of that edit.
    4. If it didn't fire, tell me why (wrong matcher, wrong event, syntax error in settings.json) instead of claiming it worked.

    This works because Claude Code can edit its own settings file, then immediately trigger the hook by making a real edit and checking the result — it verifies the hook fires, not just that the config parses.

    What You’ll Need

    Requirement Why You Need It Time
    Claude Code installed Hooks are a built-in Claude Code feature — no extra install 0 min
    A .claude/settings.json file Where project-scoped hooks live; create it if it doesn’t exist yet ~1 min
    The command your hook runs A formatter, linter, or shell script already available on your system varies

    Step-by-Step Setup

    Prefer to build your own hook from scratch instead of the starter above? Here’s how the pieces fit together.

    Step 1 — Pick where the hook lives

    ~1 min

    ~/.claude/settings.json applies to every project on your machine. .claude/settings.json in a repo root is project-scoped and can be committed to git, so your whole team gets the same automation. Both levels combine rather than override — every matching hook from every scope runs.

    Step 2 — Pick the event

    ~1 min

    Two events cover most real use cases: PreToolUse runs before a tool executes and can block it; PostToolUse runs after and can only react. Use PreToolUse for guardrails, PostToolUse for automation like formatting or logging.

    Step 3 — Write a blocking guardrail (PreToolUse)

    ~2 min

    A hook script that inspects a Bash command and exits with code 2 blocks it before it runs. Matchers are case-sensitive tool names — Bash works, bash does not:

    {
      "hooks": {
        "PreToolUse": [
          {
            "matcher": "Bash",
            "hooks": [
              { "type": "command", "command": "/path/to/block-dangerous-commands.sh" }
            ]
          }
        ]
      }
    }

    Inside that script, checking stdin for a pattern like rm -rf and exiting 2 if found is enough to stop the tool call outright — exit code 1 or any other non-zero code is just logged as an error and doesn’t block anything.

    Step 4 — Restart to load changes

    ~1 min

    Claude Code snapshots hook configuration at session startup. Editing settings.json mid-session does nothing until you start a new session — this catches people every time.

    What Each Piece Does

    Piece What It Does
    matcher Regex matched against the tool name (case-sensitive) — controls which tool calls trigger the hook
    PreToolUse Fires before a tool runs; exit code 2 blocks the call entirely
    PostToolUse Fires after a tool already ran; exit code 2 surfaces a blocking error to Claude, but the action already happened
    type: "command" Runs a shell command, receiving JSON context about the event on stdin
    timeout Optional field, in milliseconds — hooks default to a 60-second timeout

    Verify a Hook Actually Fires

    Config validity is not proof it works. Trigger the exact tool the matcher targets and confirm the side effect happened:

    echo "test" >> some-file.txt && cat some-file.txt
    PostToolUse hook fired on Write    formatter output shown
    Hook did not fire    check matcher casing and event name
    ! Hook fired but silent    check the command’s own exit code and stderr

    If nothing happens, check three things in order: the matcher’s exact casing, whether you restarted the session after editing settings.json, and whether the command itself runs correctly when you paste it into a terminal directly.

    Common Mistakes to Avoid

    • Editing settings.json mid-session and expecting it to apply. Hooks are snapshotted at startup — start a new session after any change.
    • Wrong matcher casing. Tool names are case-sensitive: Write matches, write does not.
    • Expecting exit code 1 to block anything. Only exit code 2 blocks a PreToolUse call — any other non-zero code is just logged as an error while the tool still proceeds.
    • Assuming PostToolUse hooks run in order. Multiple hooks matching the same event run simultaneously, not sequentially — don’t rely on one finishing before another starts.
    • Forgetting subagents inherit hooks too. If Claude spawns a subagent via the Agent tool, your PreToolUse/PostToolUse hooks fire for every tool call the subagent makes as well.

    Q&A

    Can a hook actually stop Claude from running a command?

    Yes — a PreToolUse hook that exits with code 2 blocks the tool call before it executes. This is the only way to get a hard guarantee, versus a prompt instruction the agent might not always follow.

    What’s the difference between project and user scope?

    User-level (~/.claude/settings.json) applies everywhere on your machine. Project-level (.claude/settings.json) is scoped to one repo and can be committed so your whole team shares the same automation. Both run together, not one-or-the-other.

    Do hooks slow down every tool call?

    Only for the tools their matcher targets, and only by however long the command takes — keep hook commands fast, and set an explicit timeout for anything that might run long.

    Can I log every tool call without blocking anything?

    Yes — a PostToolUse hook that just appends to a log file and always exits 0 records activity without affecting the agent’s behavior at all.

    Where can I see all the available hook events?

    The official reference at code.claude.com/docs/en/hooks lists the full set beyond PreToolUse/PostToolUse, including events for prompt submission and session lifecycle.

    Official Resources

  • Stop Getting Outdated API Code From Claude Code: Context7 MCP Feeds It Current, Version-Matched Docs (2-Minute Setup)

    Stop Getting Outdated API Code From Claude Code: Context7 MCP Feeds It Current, Version-Matched Docs (2-Minute Setup)

    Last Verified: September 2026 — commands and maintenance status checked against live GitHub sources

    Claude Code writes the code with confidence, you run it, and it fails: the method was renamed a few versions ago, or the config flag no longer exists. It answers from training data by default, so library APIs, framework syntax, and CLI flags can be months or years out of date.

    Context7 fixes that by fetching current, version-matched documentation for whatever library you’re actually using, on demand, instead of relying on what the model memorized during training. Setup takes about 2 minutes.

    Quick Start

    Connect the remote server (no local install needed):

    claude mcp add --scope user --transport http context7 https://mcp.context7.com/mcp

    Restart Claude Code, then ask something like “show me a FastAPI example with async endpoints” — if it’s working, the answer will reference current syntax instead of guessing. Total time: about 2 minutes.

    ⚡ Copy This Prompt: Let Claude Code Install and Verify It For You

    Skip Steps 1-3 below and hand the whole thing to the agent instead:

    You have access to the `claude mcp` CLI in this project. Do the following and report back — do not tell me it's done unless step 3 actually confirms it:
    
    1. Run `claude mcp list` to see what's already configured.
    2. Add Context7: `claude mcp add --scope user --transport http context7 https://mcp.context7.com/mcp`
    3. Run `claude mcp list` again and confirm context7 shows as Connected.
    4. Prove it works: use the context7 tools to look up current documentation for [NAME A LIBRARY YOU ACTUALLY USE, e.g. "Next.js" or "Prisma"] and summarize one recent API detail. If step 3 or 4 fails, tell me the exact error instead of reporting success.

    This works because Claude Code can run its own CLI commands and then immediately use the newly connected server — so it proves it can actually pull fresh docs instead of just confirming the config exists.

    What You’ll Need

    Requirement Why You Need It Time
    Claude Code installed Provides the claude mcp command used to register the server 0 min
    Nothing else for basic use The remote server works unauthenticated at low volume 0 min
    A free API key (optional) Removes rate limits and unlocks private-repo lookups — get one at context7.com/dashboard ~1 min

    Step-by-Step Setup

    Prefer to do it by hand instead of delegating to the agent? Here’s the manual version.

    Step 1 — Add the remote server

    ~1 min

    --scope user makes it available in every project on your machine, not just the current one:

    claude mcp add --scope user --transport http context7 https://mcp.context7.com/mcp

    Step 2 — Add an API key to raise the rate limit (optional)

    ~1 min

    Get a free key at context7.com/dashboard, then pass it as a header on the same command:

    claude mcp add --scope user --header "CONTEXT7_API_KEY: YOUR_API_KEY" --transport http context7 https://mcp.context7.com/mcp

    Step 3 — Or run it locally via npx instead

    ~1 min

    If you’d rather not send lookups to the hosted endpoint, run the same server as a local stdio process:

    claude mcp add --scope user context7 -- npx -y @upstash/context7-mcp --api-key YOUR_API_KEY

    Step 4 — Restart and use it

    ~1 min

    Run claude to start a fresh session, then just ask a normal question about a library — Context7 kicks in automatically when it’s relevant, no special syntax required.

    What Each Piece Does

    Piece What It Does
    Remote HTTP endpoint (mcp.context7.com/mcp) Hosted server, no local process to keep running
    CONTEXT7_API_KEY header Raises your rate limit and enables private-repo documentation lookups
    Local npx alternative Same tools, self-hosted — useful if you can’t send traffic to the hosted endpoint
    --scope user Makes the server available in every project on your machine, not just one repo

    Verify It’s Actually Pulling Fresh Docs

    claude mcp list
    ✔ context7    Connected
    context7    Failed to connect

    “Connected” only confirms the handshake. The real test is asking about a library you know has changed recently and checking the answer reflects that:

    What's the current recommended way to set up middleware in [a framework you use]? Use Context7 to check current docs before answering, and tell me which version the docs you pulled are for.

    If the answer cites a specific version and matches what’s actually in that library’s current docs (not what an older training cutoff would guess), it’s working end to end.

    Common Mistakes to Avoid

    • Assuming it’s used automatically every time. Claude decides when a query needs current docs versus when its own knowledge is sufficient — if you want to force it, say “use Context7” explicitly in the prompt.
    • Hitting rate limits on the free unauthenticated tier. Add an API key (Step 2) if you’re using it heavily — it’s free and takes about a minute.
    • Confusing this with a general web search tool. It’s scoped to library/framework/API documentation, not general current events or arbitrary web content.
    • Not restarting after adding the server. Claude Code needs a fresh session or an /mcp panel refresh to pick up a newly added server.

    Q&A

    Do I need an API key to use it at all?

    No — it works unauthenticated at low volume. A free key from context7.com/dashboard just raises the rate limit and adds private-repo access.

    How is this different from just asking Claude directly?

    Claude’s own knowledge has a training cutoff and can be wrong about recent API changes. Context7 fetches the library’s actual current documentation at query time, so the answer reflects what’s true right now, not what was true when the model was trained.

    Does it work for any library?

    It covers a large and growing index of popular libraries and frameworks. For very obscure or brand-new packages, coverage may be incomplete — in that case Claude falls back to its own knowledge.

    Can I remove it later?

    Yes — claude mcp remove context7 deletes it from the config.

    Official Resources