MCP WebSearch Server
MCP Server for web search and advanced web scraping. Uses SearchAPI.io for Google Search and AI Mode.
Quick Start
Option 1: Stdio (npx)
{
"mcpServers": {
"websearch": {
"command": "npx",
"args": ["-y", "mcp-websearch-server"],
"env": {
"SEARCHAPI_KEY": "your-api-key-here"
}
}
}
}
Option 2: HTTP Server (Streamable HTTP)
Run as HTTP server:
MCP_TRANSPORT=http PORT=3000 npx mcp-websearch-server
Then configure MCP client with API key in URL or header:
Option A: API key in URL query parameter
{
"mcpServers": {
"websearch": {
"url": "http://localhost:3000/mcp?apikey=YOUR_KEY",
"transport": "streamable-http"
}
}
}
Option B: API key in header
{
"mcpServers": {
"websearch": {
"url": "http://localhost:3000/mcp",
"transport": "streamable-http",
"headers": {
"X-API-Key": "YOUR_KEY"
}
}
}
}
Option C: Server-side default key
MCP_TRANSPORT=http SEARCHAPI_KEY=default-key PORT=3000 npx mcp-websearch-server
The server implements MCP Streamable HTTP transport (spec 2025-03-26) with:
- Session management with
Mcp-Session-Idheaders - SSE streaming for server-initiated messages
- Resumability support with
Last-Event-ID - Per-user API key support via query param or header
Get your API key at searchapi.io
Tools
| Tool | Description |
|---|---|
web_search | Google Search with pagination, time filter, site filter |
ai_search | Google AI Mode - get AI-generated answers with sources |
web_scrape | Advanced scraper with multiple extract modes (text/markdown/structured) |
get_links | Extract links from a webpage with optional filter |
scrape_multiple | Scrape up to 5 URLs at once |
Parameters
web_search
query- Search querynum_results- Number of results (1-20, default 10)page- Page number for pagination (1-10)time_period- Filter: last_hour, last_day, last_week, last_month, last_yearsite- Limit to specific site (e.g., "github.com")
ai_search
query- Question or topicimage_url- Optional image URL for visual questionslocation- Location for local queries
web_scrape
url- URL to scrapeselector- CSS selector (optional)extract_mode- text, markdown, or structuredinclude_links- Include links in outputmax_length- Max content length (1000-50000)
get_links
url- URL to extract links fromfilter- Text filter for URLs/anchors
scrape_multiple
urls- Array of URLs (max 5)max_per_page- Max content per page (500-5000)
Deployment
PM2 (Production)
- Edit
ecosystem.config.jsand set yourSEARCHAPI_KEY - Run:
npm run pm2:start - Check logs:
npm run pm2:logs
Or manually:
MCP_TRANSPORT=http PORT=3000 SEARCHAPI_KEY=your-key pm2 start index.js --name mcp-websearch
Docker
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
ENV MCP_TRANSPORT=http PORT=3000
EXPOSE 3000
CMD ["node", "index.js"]
Roadmap
- Add Serper.dev provider support
- Add SerpAPI provider support
- Provider auto-fallback
License
MIT
