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:
- Navigate to API Keys in the dashboard
- Click Create new key
- 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:
- A spinner or "Searching…" indicator before the response
- 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 listshowsbrave-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:
| Tool | What it does |
|---|---|
brave_web_search | General web search — news, docs, any URL |
brave_local_search | Location-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 -ypulls the latest server version at runtime — no manual updates needed- Claude calls
brave_web_searchautomatically 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