MCP Brave Search Server: Add Real-Time Web to Claude

Connect Brave Search to Claude via MCP in 10 minutes. Get live web results inside Claude Desktop, Claude Code, and any MCP-compatible client.

Problem: Claude Has No Live Web Access by Default

Claude's training data has a cutoff. Ask it about a package released last month, a breaking API change, or today's news — and you get stale answers or a polite refusal.

The Brave Search MCP server fixes this. It gives Claude a tool it can call to fetch live search results mid-conversation, without leaving your IDE or chat window.

You'll learn:

  • How to get a Brave Search API key (free tier is enough)
  • How to wire the MCP server into Claude Desktop and Claude Code
  • How to verify Claude is actually hitting the web, not its training data

Time: 10 min | Difficulty: Beginner


Why Brave Search and Not Google or Bing

Brave Search has a free API tier (2,000 queries/month), no waitlist, and an MCP server maintained in Anthropic's official servers repo. Google Custom Search requires a billing account and is slower to approve. Bing MCP servers exist but are third-party.

For most dev workflows — checking docs, verifying package versions, pulling changelogs — 2,000 free queries per month is more than enough.


Solution

Step 1: Get a Brave Search API Key

Go to https://brave.com/search/api/ and sign up for the free plan.

After confirming your email:

  1. Navigate to API Keys in the dashboard
  2. Click Create new key
  3. Copy the key — it starts with BSA

Store it somewhere safe. You'll paste it into your MCP config in a moment.

Free plan limits: 2,000 requests/month, 1 request/second. Enough for interactive dev use.


Step 2: Install Node.js 18+ (if not already installed)

The Brave Search MCP server is an npm package. Check what you have:

node --version

Expected: v18.x.x or higher. If you're on an older version, install via https://nodejs.org/ or use nvm:

nvm install 20
nvm use 20

You do NOT need to globally install the MCP server package — npx handles it at runtime.


Step 3: Configure Claude Desktop

Find your Claude Desktop config file:

# macOS
open ~/Library/Application\ Support/Claude/

# Windows
explorer %APPDATA%\Claude\

# Linux
xdg-open ~/.config/Claude/

Open claude_desktop_config.json. If it doesn't exist, create it. Add the mcpServers block:

{
  "mcpServers": {
    "brave-search": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-brave-search"
      ],
      "env": {
        "BRAVE_API_KEY": "BSA_YOUR_KEY_HERE"
      }
    }
  }
}

Replace BSA_YOUR_KEY_HERE with the key you copied in Step 1.

If you already have other MCP servers configured, add brave-search as a sibling key inside mcpServers — don't nest it or duplicate the outer braces.

Save the file, then fully quit and relaunch Claude Desktop (Cmd+Q on macOS, not just close the window).


Step 4: Configure Claude Code (optional)

If you use Claude Code in the terminal, add the server to your project or global config:

# Add to current project only
claude mcp add brave-search \
  -e BRAVE_API_KEY=BSA_YOUR_KEY_HERE \
  -- npx -y @modelcontextprotocol/server-brave-search

# Add globally (all projects)
claude mcp add brave-search --scope global \
  -e BRAVE_API_KEY=BSA_YOUR_KEY_HERE \
  -- npx -y @modelcontextprotocol/server-brave-search

Verify it registered:

claude mcp list

Expected output:

brave-search: npx -y @modelcontextprotocol/server-brave-search

Step 5: Test the Connection

In Claude Desktop, open a new chat and ask something that requires live data:

What is the latest stable version of Bun?

Watch for two signals that Claude is using the tool:

  1. A spinner or "Searching…" indicator before the response
  2. A cited source URL in the answer (e.g., bun.sh/blog/...)

If Claude answers from memory without any search indicator, the server isn't connected yet — go back to Step 3 and confirm the config file syntax is valid JSON.


Verification

Run a direct tool test from the Claude Code CLI:

claude -p "Use the brave_web_search tool to find the current npm version of @anthropic-ai/sdk and return only the version number"

You should see: Claude invoke brave_web_search, then return something like 0.39.0 (whatever is current on npm at the time you run this).

If you see Error: tool not found or the response comes without a search, check:

  • claude mcp list shows brave-search
  • Your API key is set correctly (BSA_..., no extra spaces)
  • Node 18+ is on your PATH

What the Server Actually Does

The @modelcontextprotocol/server-brave-search package exposes two tools to Claude:

ToolWhat it does
brave_web_searchGeneral web search — news, docs, any URL
brave_local_searchLocation-based search (restaurants, stores)

Claude decides when to call them based on your prompt. You don't need to ask it to search — just ask your question. If Claude judges the answer requires current information, it calls brave_web_search automatically.

To force a search when Claude might answer from training data:

Search the web for the latest LangGraph changelog and summarize what changed in the last release.

The phrase "search the web" is a reliable trigger.


Rate Limits and Upgrading

The free plan (2,000 req/month) resets on the 1st of each month. If you hit the limit mid-month, Brave returns a 429 and Claude will tell you the search failed.

Check your usage at https://api.search.brave.com/app/usage.

The $3/month Base plan gives 15,000 queries/month and removes the 1 req/sec throttle — worth it if you're using Claude Code as a daily driver for research-heavy tasks.


What You Learned

  • The Brave Search MCP server connects Claude to live web data with ~5 lines of JSON config
  • npx -y pulls the latest server version at runtime — no manual updates needed
  • Claude calls brave_web_search automatically when it judges your question needs current data
  • The free tier (2,000 req/month) is sufficient for most individual dev workflows

Limitation: Brave Search doesn't index everything. For highly specific technical docs (internal APIs, niche libraries), you may still need to paste in the relevant page manually or use brave_web_search with an exact URL query.

Tested on Claude Desktop 0.10.x, Claude Code 1.x, Node 20, macOS Sequoia and Ubuntu 24.04