Skip to main content
Glama

web-search-mcp

Best-in-class web search MCP server for grounded agent retrieval.

Features

  • Multi-provider search (tavily, brave, exa, serper, searxng, duckduckgo)

  • Provider fallback chain and optional ensembling

  • Optional local semantic rerank (RERANKER=local) with @xenova/transformers

  • SSRF-safe URL fetching with robots policy support

  • Injection defense: <untrusted_content> wrapping, hidden-char stripping, heuristic detection

  • HTML, PDF, RSS, and YouTube transcript extraction

  • Reranking, dedupe/canonicalization, chunk anchors for citation

  • Persistent search/page memory with SQLite (STATE_BACKEND=sqlite)

  • MCP-native capabilities: tools, resources, prompts, completions, sampling, elicitation

  • Evaluation harness (Recall@5, MRR@10) and provider A/B compare CLI

  • Production endpoints: /livez, /readyz, /metrics, /health

Related MCP server: Search MCP Server

Install

npm i
npm run build

Configure via .env

Copy and fill the template:

cp .env.example .env

Supported keys:

  • SEARCH_PROVIDER=tavily|brave|exa|serper|duckduckgo

  • TAVILY_API_KEY, BRAVE_API_KEY, EXA_API_KEY, SERPER_API_KEY

  • SEARCH_PROVIDER_FALLBACK=brave,duckduckgo

  • HOST=127.0.0.1

  • STATE_BACKEND=memory|sqlite|redis

  • SQLITE_PATH=.cache/web-search-mcp.sqlite

  • DOMAIN_ALLOWLIST=*.gov,*.edu

  • DOMAIN_BLOCKLIST=internal.example.com

  • HTTP_RATE_LIMIT_RPS=30

  • FETCH_MAX_BODY_BYTES=5000000

  • PORT=8080

  • MCP_BASE_PATH=/mcp (set /mcp/search if desired)

  • CORS_ORIGIN=* (or a specific origin)

  • MCP_AUTH_TOKEN=<secret> (optional bearer token for MCP endpoint)

  • DEBUG=0|1

Run locally (default streamable MCP)

npm run dev

This auto-loads .env and starts a streamable MCP endpoint at:

  • http://127.0.0.1:8080/mcp (or HOST/PORT + MCP_BASE_PATH from .env)

If you need stdio mode explicitly:

npm run dev:stdio

MCP client configuration

Use URL-based config:

{
  "mcpServers": {
    "web-search": {
      "url": "http://127.0.0.1:8080/mcp"
    }
  }
}

If you set MCP_BASE_PATH=/mcp/search, use:

{
  "mcpServers": {
    "web-search": {
      "url": "http://127.0.0.1:8080/mcp/search"
    }
  }
}

If MCP_AUTH_TOKEN is enabled, include:

  • Authorization: Bearer <token>

Stdio fallback (.cursor/mcp.json)

If your client requires command/stdio mode, use:

{
  "mcpServers": {
    "web-search": {
      "command": "npx",
      "args": ["-y", "web-search-mcp", "--stdio"],
      "env": {
        "SEARCH_PROVIDER": "tavily",
        "TAVILY_API_KEY": "YOUR_KEY",
        "SEARCH_PROVIDER_FALLBACK": "brave,duckduckgo"
      }
    }
  }
}

Claude Desktop (stdio fallback)

{
  "mcpServers": {
    "web-search": {
      "command": "npx",
      "args": ["-y", "web-search-mcp", "--stdio"],
      "env": {
        "SEARCH_PROVIDER": "tavily",
        "TAVILY_API_KEY": "YOUR_KEY"
      }
    }
  }
}

VS Code MCP (stdio fallback)

{
  "servers": {
    "web-search": {
      "command": "npx",
      "args": ["-y", "web-search-mcp", "--stdio"],
      "env": {
        "SEARCH_PROVIDER": "duckduckgo"
      }
    }
  }
}

Tools

  • search

  • fetch_url

  • search_and_extract

  • news_search

  • academic_search

  • get_youtube_transcript

  • extract_pdf

  • check_config

Prompts

  • research_topic

  • fact_check

  • latest_news

Resources

  • web-search://page/{id}

  • web-search://history/{id}

CLI

npm run compare -- --query "model context protocol"
npm run eval

Inspector validation

npx @modelcontextprotocol/inspector npm run dev

Smoke test

curl -s http://127.0.0.1:8080/health
curl -s http://127.0.0.1:8080/livez
curl -s http://127.0.0.1:8080/readyz
curl -s http://127.0.0.1:8080/metrics

Expected:

{ "status": "ok", "version": "0.1.0", "provider": "..." }

With auth enabled:

curl -i http://127.0.0.1:8080/mcp
# 401 unauthorized (without Bearer token)

Docker

Build:

docker build -t web-search-mcp .

Run with env file:

docker run --env-file .env -p 8080:8080 web-search-mcp

Then validate each tool:

  • search

  • fetch_url

  • search_and_extract

  • news_search

  • academic_search

  • get_youtube_transcript

  • extract_pdf

  • check_config

For nginx/Kubernetes deployment guidance see docs/NGINX.md and manifests in deploy/k8s plus Helm chart in charts/web-search-mcp.

Build and release

npm test
npm run build

Publish:

npm publish --provenance
A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/charley-forey/web-search-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server