Guide

Web Search MCP Servers Compared (2026): Tavily, Exa, Brave Search, Perplexity, Parallel, SerpApi and Firecrawl

Which web search MCP server should my AI agent use, and how do I set it up?

For the lowest cost, start with Parallel Search: its hosted MCP server is free to use without an API key, and its API costs $1 per 1,000 fast searches. For deep research answers, use Perplexity (perplexity_research) or Exa (agent_run). For real Google results, use SerpApi. For an independent index with no third party in the loop, use Brave Search. For full page content with each result, use Firecrawl search, Exa or Tavily.

Compare: the best MCP servers for scraping, search, browser automation and databases →

Coding agent settings change often

Get one email a week when a setting, flag or permission rule changes, checked against the vendor docs.

Try it

  • Firecrawl: search results with the full page content as Markdown, 1,000 free credits a month
  • Bright Data: search plus scraping that gets past bot blocks, 5,000 free MCP requests a month

Partner links: AgentAtlas may earn a commission. It does not change what we recommend.

Quick comparison

  • Tavily: search results and page extraction (tavily-search, tavily-extract). Free: 1,000 credits/month. Paid: $0.008 per credit pay as you go; a basic search is 1 credit, so about $8 per 1,000 basic searches. Cheapest plan: Project, $30/month for 4,000 credits.
  • Exa: search results with clean page content (web_search_exa) and full-page fetch (web_fetch_exa). Free: $10 in credits, reset monthly (up to 2,500 Lite searches). Paid: from $4 per 1,000 searches (lite), $7 per 1,000 for auto. Up to 10 results included.
  • Brave Search: results from Brave's own index, plus news, images, video, local and LLM context tools. Free: $5 in credits every month. Paid: $5 per 1,000 requests.
  • Perplexity: raw search results (perplexity_search) or written answers with web search (perplexity_ask, perplexity_reason, perplexity_research). Search API: $5 per 1,000 requests, or $1 per 1,000 with Fast Search. No free tier is stated on the pricing page.
  • Parallel Search: web_search returns results with excerpts; web_fetch returns Markdown from URLs. Free: the hosted MCP server works with no API key at lower rate limits. API: $1 per 1,000 turbo or fast searches, $5 per 1,000 basic or advanced, 10 results included.
  • SerpApi: search results from Google (default engine google_light), Bing, Yahoo, DuckDuckGo, YouTube, eBay and more through one search tool. Free: 250 searches/month. Cheapest plan: Starter, $25/month for 1,000 searches (about $25 per 1,000).
  • Firecrawl search: firecrawl_search returns results and can scrape each result's page. Free: 1,000 credits/month. Search costs 2 credits per 10 results. Cheapest plan: Hobby, $19/month for 5,000 credits.

Tavily MCP

Tavily's server gives the agent search and page extraction built for LLMs. The hosted endpoint takes your key in the URL or signs you in with OAuth. The local server reads TAVILY_API_KEY.

Claude Code, hosted endpoint with OAuth

claude mcp add --transport http tavily https://mcp.tavily.com/mcp

Any agent, local (mcpServers JSON)

{
  "mcpServers": {
    "tavily-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "tavily-mcp@latest"
      ],
      "env": {
        "TAVILY_API_KEY": "your-api-key-here"
      }
    }
  }
}
  • Hosted with a key: https://mcp.tavily.com/mcp/?tavilyApiKey=<your-api-key>.
  • Main tools: tavily-search and tavily-extract. The server also has map and crawl tools.
  • Optional env vars: DEFAULT_PARAMETERS sets default values for tavily-search (for example include_images); TAVILY_HUMAN_ID is sent as the X-Human-Id header.
  • Gotcha: advanced search costs 2 credits instead of 1, so setting search_depth to advanced as a default doubles the cost.

Exa MCP

Exa returns search results with clean page text, so the agent often does not need a second fetch. The hosted server works without a key, with rate limits. Sign in with OAuth or add an API key for higher limits and for agent_run.

Claude Code, plugin

claude plugin install exa@claude-plugins-official

Any agent, local (mcpServers JSON)

{
  "mcpServers": {
    "exa": {
      "command": "npx",
      "args": [
        "-y",
        "exa-mcp-server"
      ],
      "env": {
        "EXA_API_KEY": "your_api_key"
      }
    }
  }
}
  • Hosted: https://mcp.exa.ai/mcp. Pass a key as ?exaApiKey=, an Authorization: Bearer header or an x-api-key header.
  • Default tools: web_search_exa and web_fetch_exa. agent_run (multi-step research and structured output) is on with OAuth or an API key. web_search_advanced_exa (domain, date and other filters) is opt-in.
  • Gotcha: adding tools to the URL replaces the defaults, so list every tool you want.

Brave Search MCP

Brave's server searches Brave's own independent index. Brave says queries end on infrastructure it runs end to end, with no third party to keep them. There is no hosted MCP endpoint in the README; run it locally with npx or Docker.

Any agent, local (mcpServers JSON)

{
  "mcpServers": {
    "brave-search": {
      "command": "npx",
      "args": [
        "-y",
        "@brave/brave-search-mcp-server",
        "--transport",
        "stdio"
      ],
      "env": {
        "BRAVE_API_KEY": "YOUR_API_KEY"
      }
    }
  }
}
  • Docker: docker run -i --rm -e BRAVE_API_KEY docker.io/mcp/brave-search.
  • Main tools: brave_web_search, brave_llm_context (pre-extracted page content for grounding), brave_news_search, brave_image_search, brave_video_search, brave_local_search, brave_place_search, brave_summarizer.
  • Env vars: BRAVE_API_KEY (or BRAVE_API_KEY_FILE); BRAVE_MCP_ENABLED_TOOLS and BRAVE_MCP_DISABLED_TOOLS limit which tools load.
  • Gotcha: the server defaults to stdio. Use --transport http only when you run it as an HTTP server.

Perplexity MCP

Perplexity's official server has four tools. perplexity_search returns raw results from the Search API. The other three return written answers: perplexity_ask uses the Agent API fast preset, perplexity_reason uses medium and perplexity_research uses high. Earlier versions used the Sonar models sonar-pro, sonar-reasoning-pro and sonar-deep-research.

Claude Code, local

claude mcp add perplexity --env PERPLEXITY_API_KEY="your_key_here" -- npx -y @perplexity-ai/mcp-server

Claude Code, hosted endpoint

claude mcp add --transport http perplexity https://api.perplexity.ai/mcp --header "Authorization: Bearer YOUR_API_KEY"
  • Main tools: perplexity_search, perplexity_ask, perplexity_reason, perplexity_research.
  • Env vars: PERPLEXITY_API_KEY (required), PERPLEXITY_TIMEOUT_MS (default 5 minutes), PERPLEXITY_BASE_URL.
  • Gotcha: research runs can take minutes. Raise PERPLEXITY_TIMEOUT_MS for long queries.
  • Gotcha: the $5 per 1,000 Search API price covers perplexity_search only. The answer tools are billed through the Agent API.

Parallel Search MCP

Parallel's Search MCP is free to use with no API key, at lower rate limits. Add a key through the OAuth-capable endpoint for heavier use.

Claude Code, hosted endpoint (no key)

claude mcp add --transport http "Parallel-Search-MCP" https://search.parallel.ai/mcp
  • With a key: https://search.parallel.ai/mcp-oauth with Authorization: Bearer <PARALLEL_API_KEY>, or the OAuth sign-in.
  • Main tools: web_search and web_fetch (Markdown from specific URLs).
  • Env var used in the docs: PARALLEL_API_KEY (key from platform.parallel.ai).
  • API pricing: $1 per 1,000 turbo or fast requests, $5 per 1,000 basic or advanced, 10 results included.

SerpApi MCP

SerpApi returns structured results scraped from Google and other engines. One search tool covers every SerpApi engine. The hosted endpoint takes your key in the URL path.

Claude Code, hosted endpoint

claude mcp add --transport http serpapi https://mcp.serpapi.com/YOUR_SERPAPI_API_KEY/mcp
  • Header option: send Authorization: Bearer YOUR_API_KEY to https://mcp.serpapi.com/mcp.
  • Main tool: search. Opt-in tools search_table and search_dashboard render results in MCP Apps hosts.
  • The default engine is google_light. Engines include Google, Bing, Yahoo, DuckDuckGo, YouTube and eBay; the list is at the serpapi://engines resource.
  • Self-host: clone the repo, then uv sync && uv run src/server.py.
  • Gotcha: at about $25 per 1,000 searches on Starter, it is the most expensive per query here. Use it when you need Google's own result pages.

Firecrawl search (firecrawl_search)

firecrawl_search searches the web and can scrape each result into page content in the same call. Set scrapeOptions to control that. Firecrawl also runs a search-only hosted endpoint with firecrawl_search and five firecrawl_research_* tools and no page fetching.

Any agent, local (mcpServers JSON)

{
  "mcpServers": {
    "firecrawl": {
      "command": "npx",
      "args": [
        "-y",
        "firecrawl-mcp"
      ],
      "env": {
        "FIRECRAWL_API_KEY": "fc-YOUR_API_KEY"
      }
    }
  }
}
  • Hosted: https://mcp.firecrawl.dev/v2/mcp with Authorization: Bearer <FIRECRAWL_API_KEY>, or https://mcp.firecrawl.dev/v2/mcp-oauth to sign in. Never put the key in the URL.
  • Search-only endpoint: https://mcp.firecrawl.dev/v2/mcp-search. It needs authentication on every request.
  • firecrawl_search parameters include query, limit, lang, country, scrapeOptions, highlights and categories.
  • Gotcha: a search costs 2 credits per 10 results. Passing the result id to firecrawl_search_feedback refunds 1 credit, up to a daily cap (default 100 credits per team).
  • Self-hosted Firecrawl: set FIRECRAWL_API_URL.

Which one to pick

  • Cheapest: Parallel Search (free hosted MCP with no key; $1 per 1,000 fast API searches). Perplexity Fast Search is also $1 per 1,000.
  • Research and deep answers: Perplexity perplexity_research, or Exa agent_run.
  • Google results: SerpApi.
  • Privacy and an independent index: Brave Search.
  • Full page content with results: Firecrawl search with scrapeOptions, Exa web_search_exa, or Tavily with tavily-extract.
  • Keep API keys out of committed files: use environment variables, headers or the OAuth endpoints where the vendor offers them.
  • Prices and free tiers were checked on each vendor's pricing or docs page on 2026-10-23 and change often.

Get coding agent settings changes by email

When a setting, flag or permission rule in this guide changes, it goes in the weekly AgentAtlas update, checked against the vendor docs. One email a week.

Sources

More guides

Other guides

How to allow Cursor to run all commands: Run Everything, allowlist and sandboxHow to allow Claude Code to run all commands: permission modes, allow rules and skip permissionsClaude Code permissions: allow, ask and deny rules, rule syntax and allowed toolsCodex CLI: approval and sandbox modesGemini CLI: YOLO mode, auto_edit and allowing specific shell commandsCursor Privacy Mode: telemetry, training and data retentionClaude Code telemetry and data retention: what is sent and how to turn it offGemini CLI: turn off usage statistics and telemetryCLAUDE.md: where it goes, how it loads, and how it works with AGENTS.mdClaude Code hooks: all events, exit codes, PreToolUse and PermissionRequest JSON, examplesClaude Code subagents: create one, limit its tools, and call itAdd MCP servers to Cursor with mcp.json: Keep files out of Cursor with .cursorignore: Configure Codex with config.toml: Configure Gemini CLI with settings.json: Add MCP servers to Claude Code (claude mcp add, .mcp.json, scopes): Claude Code custom slash commands and skills (SKILL.md): GitHub Copilot custom instructions: Adding MCP servers to GitHub Copilot: Claude Code settings.json: file locations, precedence, and key settingsClaude Code plugins and marketplaces: install, create, and shareGemini CLI extensions and custom commands: Configuring OpenCode with opencode.json: Cline Rules: workspace, global, and conditional rulesKiro steering files: .kiro/steering, inclusion modes, and AGENTS.mdZed agent: instruction files, MCP servers, tool permissions, and ACP agentsCursor CLI: install, headless mode, permissions and CIAider: CONVENTIONS.md, .aider.conf.yml and API keysJunie guidelines, MCP and the Action Allowlist: Amp AGENTS.md, settings.json and MCP: Configure Goose extensions, hints, recipes and permissions: Customize OpenHands with skills, AGENTS.md, setup.sh and MCP: Configure Factory Droid CLI: AGENTS.md, settings.json, autonomy, custom droids and MCPConfigure Qwen Code: settings.json, providers, QWEN.md, MCP and approval modesCursor hooks: hooks.json, beforeShellExecution, afterFileEdit and exit codesCursor sandbox: sandbox.json, network allowlist and run modesCursor settings: settings.json, Cursor Settings and the ~/.cursor config filesCursor browser agent: @browser, browser automation and approval modesCursor subagents: .cursor/agents, frontmatter, built-in Explore and BrowserCursor telemetry and OpenTelemetry export (Privacy Mode, OTLP, Analytics API): Cursor rules setup: project, user and Team Rules, .mdc frontmatter, globs and AGENTS.mdClaude Code headless mode: claude -p, --output-format json, --bare and CI flagsClaude Code statusline: custom status bar in settings.json with context %, cost and git branchClaude Code /model: switch models, aliasesClaude Code /cost and /usage: check token spend, usage limits and reduce costsClaude Code VS Code extension: install, shortcuts, settings and /ideCodex AGENTS.md: global, project and override instruction files explainedCodex MCP servers: codex mcp add and [mcp_servers] in config.tomlCodex sandbox modes: read-only, workspace-write, danger-full-access and network accesscodex exec: run Codex non-interactively in scripts and CI with JSON outputCodex skills: create SKILL.md, skill folder locations and $skill invocationGEMINI.md in Gemini CLI: context file locations, imports and /memoryGemini CLI MCP servers: gemini mcp add and mcpServers in settings.jsonGemini CLI custom slash commands: TOML files, {{args}}, !{shell} and @{file}Gemini CLI headless mode: gemini -p, JSON output and exit codes for scripts and CIGemini CLI sandbox: enable Docker, Podman, macOS Seatbelt or gVisorcopilot-setup-steps.yml: set up the GitHub Copilot cloudGitHub Copilot CLI permissions: --allow-tool, --deny-tool, --allow-all-tools and trusted directoriesGitHub Copilot custom agents: .github/agents/*.agent.md profiles, tools and frontmatterGitHub Copilot code review settings: automatic PR reviews, rulesets, effort level and approvalsOpenCode MCP Server Setup: Local and Remote Servers in opencode.jsonOpenCode Permissions: Allow, Ask or Deny Bash, Edit and WebfetchOpenCode Custom Agents and Subagents: Markdown Files, Modes and @ MentionsCline MCP Setup: cline_mcp_settings.json for Local and Remote ServersCline Auto Approve and YOLO Mode: Run Commands and Edits Without PromptsCline Skills: SKILL.md Location, Format and Slash Command UseAmp MCP Setup: amp mcp add, amp.mcpServers and Workspace ApprovalAmp AGENTS.md: File Locations, @ Mentions and Glob-Scoped GuidanceAmp Skills: SKILL.md Folders, amp skill add and Search OrderKiro MCP Setup: .kiro/settings/mcp.json, autoApprove and OAuthKiro Hooks: .kiro/hooks JSON, PreToolUse, PostFileSave and StopKiro Permissions: permissions.yaml Allow, Ask and Deny RulesFactory Droid MCP Setup: droid mcp add, mcp.json Locations and /mcpFactory Droid Hooks: hooks.json, PreToolUse Matchers and Exit CodesFactory Droid Custom Droids (Subagents): .factory/droids Markdown FilesJunie MCP Setup: .junie/mcp/mcp.json for CLI and /mcp CommandJunie Brave Mode and Action Allowlist: Auto-Approve Commands in Junie CLIJunie Custom Slash Commands: .junie/commands Markdown Files and Argumentsgoose .goosehints and AGENTS.md: Global and Project Instructionsgoose Permission Modes: GOOSE_MODE auto, approve, smart_approve and chatgoose Recipes: recipe.yaml Format, Parameters and goose run --recipeZed Agent Tool Permissions: Auto-Approve Terminal Commands with tool_permissionsUse Claude, Codex and Gemini CLI in Zed: External Agents and agent_serversZed with Ollama, LM Studio and llama.cpp: Local Model Setup and Context LengthMCP 2026-07-28 Migration Guide: Stateless Protocol, No Sessions, server/discover, MRTR, and SDK v2 UpgradeSubagents and Custom Agents Compared: Claude Code vs Codex vs Cursor vs Gemini CLI vs GitHub CopilotAllow all commands in any AI coding agent: Cursor, Claude Code, Codex, Gemini CLI, Copilot CLI and 7 moreSettings file locations for every AI coding agent: Claude Code, Cursor, Codex, Gemini CLI, OpenCode, Qwen Code, Amp and Factory DroidRules and instruction files in every AI coding agent: .cursor/rules, CLAUDE.md, AGENTS.md, GEMINI.md, Copilot instructions and moreGemini CLI hooks: settings.json, BeforeTool, AfterTool, exit codes and /hooksGitHub Copilot hooks: .github/hooks/*.json for Copilot CLI and the cloud agentHooks in every AI coding agent: Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, Kiro and Factory DroidAgent Skills (SKILL.md) in every AI coding agent: Claude Code, Codex, Cline, Amp and OpenHandsHow to deploy a remote MCP server (Streamable HTTP): Cloudflare Workers, Vercel, Railway and moreHeadless mode in every AI coding agent: claude -p, codex exec, gemini -p, Cursor agent -p and copilot -p for scripts and CIClaude Code sandbox: /sandbox, sandbox.enabled, allowedDomains, excludedCommands and strict modeSandbox modes in every AI coding agent: Claude Code, Cursor, Codex and Gemini CLI comparedCustom slash commands in every AI coding agent: file locations, arguments and examplesMigrate from Gemini CLI to Antigravity CLI (2026): Config, MCP, Skills, FlagsRun GitHub Copilot CLI with copilot -p in scripts and CI (2026): Agent Loops 2026: Ralph Loop, /loop, /goal and Headless Loops for AI Coding AgentsCursor skills and custom slash commands: .cursor/skills SKILL.md, .cursor/commands and /migrate-to-skillsCodex hooks: hooks.json, PreToolUse allow/deny, exit code 2 and config.toml [hooks]GitHub Copilot prompt files in VS Code: .github/prompts/*.prompt.md slash commandsOpenCode custom commands: .opencode/commands, $ARGUMENTS, shell output and subtasksQwen Code custom commands: .qwen/commands Markdown files, {{args}}, !{shell} and @{file}

Reviewed Oct 23, 2026. Settings change often; the linked vendor docs are the source of truth.