Brave Search MCP Server

Brave's own MCP server for querying its search API: web, news, images, video, places and summaries

Official · Brave Software TypeScript Remote (hosted) · Streamable HTTPLocal · stdio Web search

94 popularity score ★ 1.6k ↓ 61k/wk

Connect your client

Local (npm)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs BRAVE_API_KEY. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add brave-search -e BRAVE_API_KEY=<BRAVE_API_KEY> -- npx -y @brave/brave-search-mcp-server --transport stdio
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "brave-search": {
      "command": "npx",
      "args": [
        "-y",
        "@brave/brave-search-mcp-server",
        "--transport",
        "stdio"
      ],
      "env": {
        "BRAVE_API_KEY": "<BRAVE_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "brave-search": {
      "command": "npx",
      "args": [
        "-y",
        "@brave/brave-search-mcp-server",
        "--transport",
        "stdio"
      ],
      "env": {
        "BRAVE_API_KEY": "<BRAVE_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "brave-search": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@brave/brave-search-mcp-server",
        "--transport",
        "stdio"
      ],
      "env": {
        "BRAVE_API_KEY": "<BRAVE_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.brave-search]
command = "npx"
args = ["-y", "@brave/brave-search-mcp-server", "--transport", "stdio"]

[mcp_servers.brave-search.env]
BRAVE_API_KEY = "<BRAVE_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e BRAVE_API_KEY=<BRAVE_API_KEY> brave-search npx -- -y @brave/brave-search-mcp-server --transport stdio
Local (Docker)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs BRAVE_API_KEY. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add brave-search -e BRAVE_API_KEY=<BRAVE_API_KEY> -- docker run -i --rm -e BRAVE_API_KEY mcp/brave-search
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "brave-search": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "BRAVE_API_KEY",
        "mcp/brave-search"
      ],
      "env": {
        "BRAVE_API_KEY": "<BRAVE_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "brave-search": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "BRAVE_API_KEY",
        "mcp/brave-search"
      ],
      "env": {
        "BRAVE_API_KEY": "<BRAVE_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "brave-search": {
      "type": "stdio",
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "BRAVE_API_KEY",
        "mcp/brave-search"
      ],
      "env": {
        "BRAVE_API_KEY": "<BRAVE_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.brave-search]
command = "docker"
args = ["run", "-i", "--rm", "-e", "BRAVE_API_KEY", "mcp/brave-search"]

[mcp_servers.brave-search.env]
BRAVE_API_KEY = "<BRAVE_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e BRAVE_API_KEY=<BRAVE_API_KEY> brave-search docker -- run -i --rm -e BRAVE_API_KEY mcp/brave-search

Settings 11

BRAVE_API_KEY Required: Brave Search API key. Not needed if BRAVE_API_KEY_FILE is set.
BRAVE_API_KEY_FILE Optional: Path to a file holding the API key; takes precedence over BRAVE_API_KEY (for Docker secrets).
BRAVE_MCP_TRANSPORT Optional: stdio (default) or http.
BRAVE_MCP_PORT Optional: Port for the HTTP transport, default 8080.
BRAVE_MCP_HOST Optional: Bind address for HTTP, default 127.0.0.1; 0.0.0.0 exposes it on all interfaces.
BRAVE_MCP_ALLOWED_ORIGINS Optional: Extra Origin values accepted by the HTTP transport.
BRAVE_MCP_ALLOWED_HOSTS Optional: Host header values accepted by the HTTP transport; unset means not checked.
BRAVE_MCP_ENABLED_TOOLS Optional: Space-separated list of the only tools to enable.
BRAVE_MCP_DISABLED_TOOLS Optional: Space-separated list of tools to disable.
BRAVE_MCP_LOG_LEVEL Optional: Logging level, default info.
BRAVE_MCP_STATELESS Optional: Stateless HTTP mode, default true.

In a container, a setting goes in with -e NAME=value after docker run.

What it does

This is Brave's server for its Brave Search API. It gives an assistant eight search tools that each call one part of that API: general web results, news, images, videos, local businesses, points of interest around a place or coordinates, a pre-extracted page-content endpoint meant for grounding model answers, and a summariser that turns an earlier web search into a written answer with optional source links.

The tools take most of the API's own options: country, language, safe-search level, time window (last day, week, month, year or a date range), result counts, paging and Goggles for custom re-ranking. The summariser works in two steps: a web search run with summary turned on returns a key, and that key is passed to brave_summarizer.

It runs on your own machine from npm or the mcp/brave-search Docker image and talks over stdio by default; an HTTP mode can be switched on with a flag or setting. Individual tools can be switched on or off with allow and deny lists. Version 2 changed the default transport from HTTP to stdio and stopped returning base64 image data from brave_image_search, so configurations written for 1.x may need updating. A hosted copy is also listed on Smithery.

What it needs

To run it yourselfNode.js 22+orDocker

A Brave Search API account and API key from brave.com/search/api, on a Search or Answers plan. Node.js 22 or newer for the npm package (the README's development prerequisites), or Docker for the container image. Some features need a Pro plan.

Limits

Each query is capped at 400 characters and 50 words, and paging stops at offset 9. Full local business search needs a Pro plan and otherwise falls back to ordinary web results; extra snippets in web and news results are Pro-only too. brave_summarizer only works on a key returned by a web search run with summary enabled. Since 2.x, image search returns URLs and metadata rather than image data. The HTTP transport has no authentication of its own.

Who it suits

Suits anyone who already has, or is willing to get, a Brave Search API key and wants an assistant to look things up on the public web, in the news, in images and video, or around a place, from one vendor-maintained server. It only reads: nothing is posted or changed anywhere, so the main costs are API usage on your Brave plan and the queries Brave sees. Pick something else if you want search without signing up for a paid-tier API, or need to fetch and render arbitrary pages rather than search results; this server returns what Brave's index holds.

Tools 8

brave_web_search
Searches the web with filters for country, language, freshness, safe search and result types; can request a summary key.
brave_local_search
Finds local businesses with ratings and opening hours; falls back to web results without a Pro plan.
brave_video_search
Returns video results with metadata and thumbnails.
brave_image_search
Returns image results with URLs, sizes and confidence scores.
brave_news_search
Searches recent news articles, defaulting to the last 24 hours.
brave_summarizer
Writes a summary from an earlier web search's summary key, optionally with source links.
brave_place_search
Lists points of interest around coordinates or a named location, with address, hours and contact details.
brave_llm_context
Fetches pre-extracted page text for a query, with token, URL and snippet limits, for grounding answers.

Similar servers