返回市场
MCP网页搜索

MCP网页搜索

作者:undici774 星标更新:2025-11-15

项目介绍

📂 MCP Web Search Server

一个注重隐私的网络、社交媒体和档案搜索服务器,通过模型控制协议(MCP)提供工具,以受控方式访问外部搜索能力。


目录


🎯 特性

  • 并行搜索:在多个注重隐私的网络搜索引擎之间进行。
  • 社交媒体查找:在主要平台上查找公共内容。
  • 档案检索:从Wayback Machine、archive.today、Google缓存等处获取。
  • 动态列出:支持的引擎和档案服务列表。
  • 结果缓存:使用LRU淘汰机制加速重复查询。

📦 安装与快速开始

# 克隆仓库(如果适用)
git clone https://github.com/undici77/MCPWebSearch.git
cd MCPWebSearch

# 运行启动脚本(如有不同,请调整名称)
./run.sh -d /path/to/working/directory

1️⃣ 创建并激活一个Python虚拟环境(.venv)。
2️⃣ 安装requirements.txt中所需的所有依赖项。
3️⃣ 启动MCP搜索服务器(main.py),该服务器监听stdin/stdout上的JSON-RPC消息。

📌 确保启动脚本可执行:chmod +x run.sh


⚙️ 命令行选项

选项描述
-d, --directory工作目录的路径(默认:当前进程目录)。

服务器本身不需要额外的CLI标志;所有配置都是通过JSON-RPC完成的。


🤝 与LM Studio集成

在您的mcp.json中添加一个条目,以便LM Studio可以自动启动服务器:

{
  "mcpServers": {
    "web-search": {
      "command": "/absolute/path/to/run.sh",
      "args": [
        "-d",
        "/absolute/path/to/working/directory"
      ],
      "env": { "WORKING_DIR": "." }
    }
  }
}

📌 将脚本设置为可执行(chmod +x /absolute/path/to/run.sh),并在启动LM Studio之前运行一次./run.sh以安装虚拟环境。


📡 MCP API概述

所有通信遵循JSON-RPC 2.0通过stdin/stdout。

initialize

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {}
}

响应:协议版本(2024-11-05)、服务器功能(工具枚举)和基本服务器信息(nameversion)。

tools/list

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/list",
  "params": {}
}

响应:工具定义数组(名称、描述、输入模式)。

tools/call

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "<tool_name>",
    "arguments": { … }
  }
}

注意:工具标识符键是**name**,而不是tool


🛠️ 可用工具

web_search

使用多个注重隐私的引擎并行搜索网络。

名称类型必填描述
query字符串搜索查询(最多500个字符)。
engine字符串❌ (默认all使用的引擎(duckduckgobravestartpageecosiamojeekyandexall)。
max_results整数❌ (默认20)每个引擎的最大结果数(1-50)。

示例

{
  "jsonrpc": "2.0",
  "id": 10,
  "method": "tools/call",
  "params": {
    "name": "web_search",
    "arguments": {
      "query": "隐私聚焦搜索引擎",
      "engine": "duckduckgo",
      "max_results": 15
    }
  }
}

服务器返回一个格式化的文本块,其中包含每个选定引擎的标题、URL和摘要。


social_search

在主要社交媒体平台上搜索公共内容。

名称类型必填描述
query字符串搜索查询(最多500个字符)。
platform字符串❌ (默认all要搜索的平台(twitterreddityoutubegithubstackoverflowmediumpinteresttiktokinstagramfacebooklinkedinall)。

示例

{
  "jsonrpc": "2.0",
  "id": 11,
  "method": "tools/call",
  "params": {
    "name": "social_search",
    "arguments": {
      "query": "AI伦理研究",
      "platform": "reddit"
    }
  }
}

响应包含可以直接在浏览器中打开的直接URL。


archives_search

跨多个网络档案服务查找URL的存档版本。

名称类型必填描述
url字符串完整的URL(必须包括http://https://)。
service字符串❌ (默认all存档服务(waybackarchive_todaygoogle_cachebing_cacheyandex_cachecachedviewghostarchiveall)。
check_availability布尔值❌ (默认false)当为true时,服务器会查询Wayback Machine API以获取快照统计信息。

示例

{
  "jsonrpc": "2.0",
  "id": 12,
  "method": "tools/call",
  "params": {
    "name": "archives_search",
    "arguments": {
      "url": "https://example.com",
      "service": "wayback",
      "check_availability": true
    }
  }
}

响应列出存档URL,并且如果请求的话,还包括快照数量和时间戳。


list_engines

列出所有可用的注重隐私的搜索引擎。

名称类型必填描述
(无参数)

示例

{
  "jsonrpc": "2.0",
  "id": 13,
  "method": "tools/call",
  "params": {
    "name": "list_engines",
    "arguments": {}
  }
}

服务器返回每个引擎的markdown格式概述及其使用说明。


list_archives_services

列出所有支持的网络档案服务。

名称类型必填描述
(无参数)

示例

{
  "jsonrpc": "2.0",
  "id": 14,
  "method": "tools/call",
  "params": {
    "name": "list_archives_services",
    "arguments": {}
  }
}

响应包括每个服务的描述、其ID和关键特征。


clear_cache

清除内部搜索结果缓存。

名称类型必填描述
(无参数)

示例

{
  "jsonrpc": "2.0",
  "id": 15,
  "method": "tools/call",
  "params": {
    "name": "clear_cache",
    "arguments": {}
  }
}

服务器回复确认消息。


🔐 安全特性

  • 查询净化 – 去除控制字符,移除HTML标签,并强制执行MAX_QUERY_LENGTH(500)。
  • 严格的URL验证 – 只接受带有有效域名的http://https://方案。
  • 阻止模式 – 正则表达式防止<script>注入、javascript: URI和事件处理程序属性。
  • 输入模式强制执行 – 每个工具通过JSON-RPC的inputSchema验证必填字段。
  • 速率限制 – 一个asyncio信号量限制并发外部请求(MAX_CONCURRENT_SEARCHES)。

© 2025 Undici77 – 保留所有权利。