Open Web Search MCP server

Provides web search capabilities across multiple search engines including Bing, Baidu, Brave, DuckDuckGo, and Exa, plus specialized content extraction from Chinese platforms like CSDN, Zhihu, and LinuxDo for research workflows and technical content retrieval.
Back to servers
Setup instructions
Provider
Aas-ee
Release date
Jul 11, 2025
Language
Go
Stats
276 stars

Open-WebSearch MCP Server is a protocol server that enables web search capabilities using multiple search engines, without requiring API keys. It provides structured search results from various engines like Bing, Baidu, CSDN, DuckDuckGo, and more, along with functionality to fetch complete article content from selected sources.

Installation Options

NPX Quick Start (Recommended)

# Basic usage
npx open-websearch@latest

# With environment variables (Linux/macOS)
DEFAULT_SEARCH_ENGINE=duckduckgo ENABLE_CORS=true npx open-websearch@latest

# Windows PowerShell
$env:DEFAULT_SEARCH_ENGINE="duckduckgo"; $env:ENABLE_CORS="true"; npx open-websearch@latest

# Cross-platform (requires cross-env)
npm install -g open-websearch
npx cross-env DEFAULT_SEARCH_ENGINE=duckduckgo ENABLE_CORS=true open-websearch

Environment Variables

Variable Default Options Description
ENABLE_CORS false true, false Enable CORS
CORS_ORIGIN * Any valid origin CORS origin configuration
DEFAULT_SEARCH_ENGINE bing bing, duckduckgo, exa, brave Default search engine
USE_PROXY false true, false Enable HTTP proxy
PROXY_URL http://127.0.0.1:7890 Any valid URL Proxy server URL
PORT 3000 1-65535 Server port

Common Configurations

# Enable proxy for restricted regions
USE_PROXY=true PROXY_URL=http://127.0.0.1:7890 npx open-websearch@latest

# Full configuration
DEFAULT_SEARCH_ENGINE=duckduckgo ENABLE_CORS=true USE_PROXY=true PROXY_URL=http://127.0.0.1:7890 PORT=8080 npx open-websearch@latest

Local Installation

  1. Clone or download the repository
  2. Install dependencies:
npm install
  1. Build the server:
npm run build
  1. Add the server to your MCP configuration:

MCP Client Configuration

Cherry Studio:

{
  "mcpServers": {
    "web-search": {
      "name": "Web Search MCP",
      "type": "streamableHttp",
      "description": "Multi-engine web search with article fetching",
      "isActive": true,
      "baseUrl": "http://localhost:3000/mcp"
    }
  }
}

VSCode (Claude Dev Extension):

{
  "mcpServers": {
    "web-search": {
      "transport": {
        "type": "streamableHttp",
        "url": "http://localhost:3000/mcp"
      }
    },
    "web-search-sse": {
      "transport": {
        "type": "sse",
        "url": "http://localhost:3000/sse"
      }
    }
  }
}

Claude Desktop:

{
  "mcpServers": {
    "web-search": {
      "transport": {
        "type": "streamableHttp",
        "url": "http://localhost:3000/mcp"
      }
    },
    "web-search-sse": {
      "transport": {
        "type": "sse",
        "url": "http://localhost:3000/sse"
      }
    }
  }
}

NPX Command Line Configuration:

{
  "mcpServers": {
    "web-search": {
      "args": [
        "open-websearch@latest"
      ],
      "command": "npx"
    }
  }
}

Docker Deployment

Using Docker Compose:

docker-compose up -d

Or using Docker directly:

docker run -d --name web-search -p 3000:3000 -e ENABLE_CORS=true -e CORS_ORIGIN=* ghcr.io/aas-ee/open-web-search:latest

Usage Guide

Search Tool

use_mcp_tool({
  server_name: "web-search",
  tool_name: "search",
  arguments: {
    query: "search content",
    limit: 3,  // Optional parameter
    engines: ["bing", "csdn", "duckduckgo", "exa", "brave", "juejin"] // Optional parameter
  }
})

Response format:

[
  {
    "title": "Example Search Result",
    "url": "https://example.com",
    "description": "Description text of the search result...",
    "source": "Source",
    "engine": "Engine used"
  }
]

Fetch CSDN Article Tool

use_mcp_tool({
  server_name: "web-search",
  tool_name: "fetchCsdnArticle",
  arguments: {
    url: "https://blog.csdn.net/xxx/article/details/xxx"
  }
})

Fetch GitHub README Tool

use_mcp_tool({
  server_name: "web-search",
  tool_name: "fetchGithubReadme",
  arguments: {
    url: "https://github.com/Aas-ee/open-webSearch"
  }
})

Supported URL formats:

  • HTTPS: https://github.com/owner/repo
  • HTTPS with .git: https://github.com/owner/repo.git
  • SSH: [email protected]:owner/repo.git
  • URLs with parameters: https://github.com/owner/repo?tab=readme

Fetch Juejin Article Tool

use_mcp_tool({
  server_name: "web-search",
  tool_name: "fetchJuejinArticle",
  arguments: {
    url: "https://juejin.cn/post/7520959840199360563"
  }
})

Usage Limitations

  1. Rate Limiting:

    • Too many searches in a short time may cause engines to temporarily block requests
    • Maintain reasonable search frequency and use the limit parameter judiciously
  2. Result Accuracy:

    • Results depend on the HTML structure of engines and may fail when engines update
    • Some results may lack metadata like descriptions
  3. Legal Terms:

    • This tool is for personal use only
    • Comply with the terms of service of corresponding engines
  4. Search Engine Configuration:

    • Default search engine can be set via the DEFAULT_SEARCH_ENGINE environment variable
    • Supported engines: bing, duckduckgo, exa, brave
  5. Proxy Configuration:

    • HTTP proxy can be configured when search engines are unavailable in specific regions
    • Enable with USE_PROXY=true and configure with PROXY_URL

How to install this MCP server

For Claude Code

To add this MCP server to Claude Code, run this command in your terminal:

claude mcp add-json "web-search" '{"transport":{"type":"streamableHttp","url":"http://localhost:3000/mcp"}}'

See the official Claude Code MCP documentation for more details.

For Cursor

There are two ways to add an MCP server to Cursor. The most common way is to add the server globally in the ~/.cursor/mcp.json file so that it is available in all of your projects.

If you only need the server in a single project, you can add it to the project instead by creating or adding it to the .cursor/mcp.json file.

Adding an MCP server to Cursor globally

To add a global MCP server go to Cursor Settings > Tools & Integrations and click "New MCP Server".

When you click that button the ~/.cursor/mcp.json file will be opened and you can add your server like this:

{
    "mcpServers": {
        "web-search": {
            "transport": {
                "type": "streamableHttp",
                "url": "http://localhost:3000/mcp"
            }
        },
        "web-search-sse": {
            "transport": {
                "type": "sse",
                "url": "http://localhost:3000/sse"
            }
        }
    }
}

Adding an MCP server to a project

To add an MCP server to a project you can create a new .cursor/mcp.json file or add it to the existing one. This will look exactly the same as the global MCP server example above.

How to use the MCP server

Once the server is installed, you might need to head back to Settings > MCP and click the refresh button.

The Cursor agent will then be able to see the available tools the added MCP server has available and will call them when it needs to.

You can also explicitly ask the agent to use the tool by mentioning the tool name and describing what the function does.

For Claude Desktop

To add this MCP server to Claude Desktop:

1. Find your configuration file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

2. Add this to your configuration file:

{
    "mcpServers": {
        "web-search": {
            "transport": {
                "type": "streamableHttp",
                "url": "http://localhost:3000/mcp"
            }
        },
        "web-search-sse": {
            "transport": {
                "type": "sse",
                "url": "http://localhost:3000/sse"
            }
        }
    }
}

3. Restart Claude Desktop for the changes to take effect

Want to 10x your AI skills?

Get a free account and learn to code + market your apps using AI (with or without vibes!).

Nah, maybe later