网页搜索服务

一个零配置的MCP服务器,为任何LLM提供网页搜索和阅读功能,无需API密钥或浏览器安装。

  • by tamb
  • TypeScript
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 tamb/simple-web-search-mcp

使用说明

简单网络搜索mcp

零配置MCP服务器,使任何LLM都能够 搜索网页 和 阅读网页.没有API密钥,没有浏览器安装,没有配置文件-只需运行它。

npx simple-web-search-mcp --log

特征

  • 两个工具: search_web (搜索互联网)和 read_url (阅读任何网页)
  • 9搜索引擎 --以可配置的顺序尝试具有自动容错功能的引擎:DuckDuckGo、Brave、Bing、Google、Ecosia、Startpage、Qwant、Yahoo、Yandex
  • /search 和 /read 提示 --在Claude Desktop和其他MCP客户端中工作的slash命令
  • 速率限制 --429/503上具有自动重试+指数回退的每台主机节流
  • 缺省安全 --输入验证、URL方案实施(仅限http/https)、HTML剥离、控制字符删除、标记注入转义、内容围栏
  • 默认情况下为零配置 --开箱即用,可通过CLI标志、环境变量或配置文件进行完全自定义
  • 可选文件日志记录 --使用 --log 将每日日志文件写入 ~/.simple-web-search-mcp/logs/
  • 没有API密钥 --所有引擎都通过纯HTTP工作
  • 不安装浏览器 --内置Node.js的纯HTTP fetch +干杯
  • 清洁降价输出 --LLM实际可以使用的结构化结果

设置

光标

添加 .cursor/mcp.json:

{
  "mcpServers": {
    "web-search": {
      "command": "npx",
      "args": ["-y", "simple-web-search-mcp", "--log"]
    }
  }
}

克劳德桌面

添加 claude_desktop_config.json:

{
  "mcpServers": {
    "web-search": {
      "command": "npx",
      "args": ["-y", "simple-web-search-mcp", "--log"]
    }
  }
}

具有自定义选项

{
  "mcpServers": {
    "web-search": {
      "command": "npx",
      "args": [
        "-y", "simple-web-search-mcp",
        "--log",
        "--engines", "brave,duckduckgo",
        "--max-results", "5"
      ]
    }
  }
}

工具

search_web

在互联网上搜索并获得降价结果。按顺序尝试配置发动机,但在出现故障时失败。您可以请求每次呼叫首先尝试特定的引擎。默认情况下,结果包括 [1], [2],…作为每个结果标题和代码段旁边的markdown链接(链接到源URL),加上 参考文献 底部截面;使用config禁用 citations: false 或 --no-cite,或强行继续 --cite.

参数 类型 说明
query string 搜索查询
prefer_engine string 可选。先尝试发动机(例如。 duckduckgo, brave, bing).
include_citations boolean 可选。如果设置,则覆盖此调用的服务器配置(包括/省略引用)。
think boolean 可选。如果为真,查询多个引擎,按URL合并,并返回编译的研究结果(前3个引擎)。

read_url

获取一个网页,并将其内容作为干净、可读的标记返回。剥离导航、广告和样板。

参数 类型 说明
url string 要获取的URL(例如。 https://...)

Slash命令(提示)

支持提示的MCP客户端将显示以下内容 / 命令:

命令 描述
/search <input> 搜索网络。键入您的查询;可选地以标志结尾: -engine, -cite, -no-cite, -think (例如。 weather --brave, topic --think 深入研究)。提示标志覆盖MCP/服务器配置。
/read <url> 阅读网页并总结其内容

标志/搜索 --在以下位置使用一个或两个连字符 结束 您的查询。这些将覆盖该请求的服务器配置:

  • 发动机: -brave, --dd等等。(先试试那台发动机)
  • 引用: --cite (包括参考文献), --no-cite (省略参考文献)
  • 思考(研究): --think 或 -think --在多个引擎上运行相同的查询(前3个),按URL合并结果,并使用“Found via”列返回编译后的研究。用于深入研究。

每个搜索响应都以 通过[搜索引擎][表情符号] (例如。 via DuckDuckGo :D);每个读取响应都以开头 通过[URL][:].

启用引用后,指示模型包括 内联引用 [1] 、[2]等(在该来源的句子或事实旁边)以及 参考文献 底部截面;每个数字都匹配相同的来源(维基百科风格)。

如果你没有看到“通过…”或引用链接: 模型没有调用 search_web 工具(例如“模型未能生成工具调用”)。请使用支持工具/函数调用的模型,或重试查询。当工具被实际调用时,服务器总是返回“通过…”和引用。

旗帜(满) 缩写 发动机
--duckduckgo --dd DuckDuckGo
--brave --b 勇敢
--bing --bi Bing
--google --g 谷歌
--ecosia --ec Ecosia
--startpage --sp 起始页
--qwant --qw Qwant
--yahoo --yh 雅虎
--yandex --ya Yandex

搜索引擎

发动机按顺序试运转。如果第一个引擎出现故障或没有返回结果,则会自动尝试下一个引擎。

ID 姓名 备注
duckduckgo DuckDuckGo 默认首选。HTML端点,非常可靠
brave 勇敢搜索 以隐私为重点的良好替代方案
bing Bing 微软的搜索引擎
google 谷歌 使用普通HTTP(验证码)可能不太可靠
ecosia Ecosia Bing驱动,用广告收入种树
startpage 首页 带有隐私的谷歌搜索结果可能需要Cookie
qwant Qwant 欧洲隐私引擎(使用Lite HTML)
yahoo 雅虎 经典搜索引擎,打开重定向网址
yandex Yandex 支持英语的俄罗斯搜索引擎

默认顺序: duckduckgo, brave, bing, google, ecosia, startpage, qwant, yahoo, yandex

自定义 --engines brave,duckduckgo (CLI), WEB_SEARCH_ENGINES=brave,duckduckgo (env),或 "engines": ["brave", "duckduckgo"] (配置文件)。

每个引擎都有自己的解析器 src/engines/ --易于维护、修复或添加新的。

配置

一切都是开箱即用的。通过三层覆盖任何设置(最高优先级优先):

1.CLI标志

npx simple-web-search-mcp --engines brave,duckduckgo --max-results 5 --timeout 20000
标志 默认值 描述
--log off 将日志写入 ~/.simple-web-search-mcp/logs/ (每日文件 YYYY-MM-DD.log)
--cite -- 在搜索结果中包含维基百科风格的引用(覆盖配置)
--no-cite -- 在搜索结果中省略引用部分(覆盖配置)
--engines <list> 所有9个引擎 以逗号分隔的引擎顺序
--max-results <n> 10 要返回的最大搜索结果数
--timeout <ms> 15000 HTTP请求超时
--rate-limit <ms> 1000 对同一主机的请求之间的最小延迟
--max-retries <n> 3 重试429/503/网络错误
--max-content-length <n> 12000 要返回的页面内容的最大字符数
--user-agent <string> Chrome UA 自定义用户代理标头
--config <path> -- JSON配置文件的路径

2.环境变量

WEB_SEARCH_ENGINES=brave,duckduckgo WEB_SEARCH_MAX_RESULTS=5 npx simple-web-search-mcp
变量 映射到
WEB_SEARCH_LOG 启用文件日志记录(设置为 1, true,或 yes)
WEB_SEARCH_CITATIONS citations — 1/true/yes 为了包括参考文献, 0/false/no 省略
WEB_SEARCH_ENGINES engines
WEB_SEARCH_MAX_RESULTS maxResults
WEB_SEARCH_TIMEOUT timeoutMs
WEB_SEARCH_RATE_LIMIT rateLimitMs
WEB_SEARCH_MAX_RETRIES maxRetries
WEB_SEARCH_MAX_CONTENT_LENGTH maxContentLength
WEB_SEARCH_USER_AGENT userAgent
WEB_SEARCH_CONFIG 配置文件的路径

3.配置文件

服务器按以下顺序查找JSON配置文件:

  1. --config <path> (CLI标志)
  2. $WEB_SEARCH_CONFIG (env 是)
  3. ./.simple-web-search.json (项目本地)
  4. ~/.simple-web-search/config.json (用户级别)

示例配置文件:

{
  "engines": ["brave", "duckduckgo", "bing"],
  "maxResults": 5,
  "timeoutMs": 20000,
  "rateLimitMs": 2000,
  "maxRetries": 2,
  "maxContentLength": 8000,
  "citations": true
}

集 "citations": false 在搜索结果中省略“引用”部分。在运行时使用覆盖 --cite 或 --no-cite.

安全

所有输入和输出都经过消毒:

  • 输入验证 --查询被修剪、长度限制(400个字符)和删除控制字符
  • URL验证 --只有 http: 和 https: 方案是允许的; javascript:, data:, file:等被阻塞
  • HTML剥离 --在输出之前,从提取的文本中删除所有HTML标记
  • 控制字符删除 --从所有输出中删除二进制/控制字符
  • Markdown注入转义 --抓取标题中的特殊字符被转义,因此它们无法破坏markdown链接语法
  • 内容物围栏 --抓取的页面内容用视觉分隔符清晰地分隔,这样LLM就可以将其与指令区分开
  • 输出为纯文本 --服务器只返回markdown格式的文本,从不返回原始HTML或可执行内容

速率限制

内置的速率限制保护您和搜索引擎:

  • 每台主机限制 --强制对同一主机名的请求之间的最小延迟(默认为1秒)
  • 自动重试 --重试HTTP 429(请求太多)和503(服务不可用)
  • 指数退避 --重试之间间隔1秒、2秒、4秒、8秒(上限为15秒)
  • 尊重 Retry-After --尊重服务器的Retry-After标头(如果存在)
  • 可配置的 --调整 rateLimitMs 和 maxRetries 满足您的需求

项目结构

src/
  index.ts            MCP server — tools, prompts, startup
  config.ts           Config loading (CLI > env > file > defaults)
  logger.ts           Optional file logging (~/.simple-web-search-mcp/logs, enabled with --log)
  parse-search-input.ts  Parses /search input for trailing --engine / --abbrev flags
  search.ts           SearchClient — orchestrates engines + page reading
  sanitize.ts         Input/output sanitization
  rate-limiter.ts     Per-host throttling + retry with backoff
  engines/
    types.ts          SearchEngine interface
    index.ts          Engine registry + default order
    duckduckgo.ts     DuckDuckGo HTML parser
    brave.ts          Brave Search parser
    bing.ts           Bing parser
    google.ts         Google parser
    ecosia.ts         Ecosia parser
    startpage.ts      Startpage parser
    qwant.ts          Qwant Lite parser
    yahoo.ts          Yahoo parser
    yandex.ts         Yandex parser
tests/
  sanitize.test.ts    Sanitization unit tests
  engines.test.ts     Engine parser unit tests (all 9 engines)
  config.test.ts      Config loading unit tests
  rate-limiter.test.ts  Rate limiter unit tests
  fixtures/           Mock HTML for each engine

需求

  • Node.js 18或更高版本

发展

git clone <repo-url>
cd simple-web-search-mcp
npm install
npm run build
npm start

脚本

脚本 描述
npm test 运行单元测试(vitest)
npm run test:watch 在监视模式下运行测试
npm run lint 带Biome的棉绒
npm run lint:fix 自动修复棉绒问题
npm run format 带生物特征的格式
npm run docs 生成API文档(TypeDoc)
npm run build 编译TypeScript

许可证

麻省理工学院