development
location
documentation
public
web search
MCP
What is A TypeScript MCP server providing comprehensive web search capabilities with multiple tools.?
Web Search MCP Server for use with Local LLMs. This TypeScript MCP server provides comprehensive web search capabilities using direct connections (no API keys required) with multiple tools for different use cases, including full page content extraction and concurrent processing.
Documentation
Web Search MCP Server for use with Local LLMs
A TypeScript MCP (Model Context Protocol) server that provides comprehensive web search capabilities using direct connections (no API keys required) with multiple tools for different use cases.
Features
Multi-Engine Web Search: Prioritizes Bing > Brave > DuckDuckGo for optimal reliability and performance
Full Page Content Extraction: Fetches and extracts complete page content from search results
Multiple Search Tools: Three specialised tools for different use cases
Smart Request Strategy: Uses fast axios requests first, then falls back to browser-based extraction if bot detection is encountered
Concurrent Processing: Extracts content from multiple pages simultaneously
How It Works
The server provides three specialised tools for different web search needs:
1. full-web-search (Main Tool)
When a comprehensive search is requested, the server uses an optimized search strategy:
Browser-based Bing Search - Primary method using dedicated Chromium instance
Browser-based Brave Search - Secondary option using dedicated Firefox instance
Axios DuckDuckGo Search - Final fallback using traditional HTTP
Dedicated browser isolation: Each search engine gets its own browser instance with automatic cleanup
Content extraction: Tries axios first, then falls back to browser with human behavior simulation
Concurrent processing: Extracts content from multiple pages simultaneously with timeout protection
HTTP/2 error recovery: Automatically falls back to HTTP/1.1 when protocol errors occur
For quick search results without full content extraction:
Performs the same optimized multi-engine search as full-web-search
Returns only the search result snippets/descriptions
Does not follow links to extract full page content
3. get-single-web-page-content (Utility Tool)
For extracting content from a specific webpage:
Takes a single URL as input
Follows the URL and extracts the main page content
Removes navigation, ads, and other non-content elements
Compatibility
This MCP server has been developed and tested with LM Studio. It has not been tested with other MCP clients.
Model Compatibility
Important: Prioritise using more recent models designated for tool use.
Older models (even those with tool use specified) may not work or may work erratically. This seems to be the case with Llama and Deepseek. Qwen3 and Gemma 3 currently have the best restults.
✅ Works well with: Qwen3
✅ Works well with: Gemma 3
✅ Works with: Llama 3.2
✅ Works with: Recent Llama 3.1 (e.g 3.1 swallow-8B)
✅ Works with: Recent Deepseek R1 (e.g 0528 works)
⚠️ May have issues with: Some versions of Llama and Deepseek R1
❌ May not work with: Older versions of Llama and Deepseek R1
Installation (Recommended)
Requirements:
Node.js 18.0.0 or higher
npm 8.0.0 or higher
Download the latest release zip file from the Releases page
Extract the zip file to a location on your system (e.g., ~/mcp-servers/web-search-mcp/)
Open a terminal in the extracted folder and run:
npm install
npx playwright install
npm run build
This will create a node_modules folder with all required dependencies, install Playwright browsers, and build the project.
Configure your mcp.json to point to the extracted dist/index.js file:
Note: You must run npm install in the root of the extracted folder (not in dist/).
Troubleshooting:
If npm install fails, try updating Node.js to version 18+ and npm to version 8+
If npm run build fails, ensure you have the latest Node.js version installed
For older Node.js versions, you may need to use an older release of this project
Content Length Issues: If you experience odd behavior due to content length limits, try setting "MAX_CONTENT_LENGTH": "10000", or another value, in your mcp.json environment variables: