网页搜索工具服务器

一个通过Tavily或SerpAPI提供网页搜索功能的MCP服务器,适用于AI助手和开发工具集成。

  • by Arturo-Quiroga-MSFT
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 arturo-quiroga-msft/mcp-web-search-server

使用说明

Web MCP服务器

一个MCP服务器,它公开了一个 web.search 工具使用 塔维利 默认情况下,可选 SerpAPI 支持。

特性

  • web.search 带有参数的工具: query (必填), provider (tavily | serpapi)和特定于提供商的选项
  • 输出一个紧凑的JSON结果列表(标题、链接、代码段/内容)
  • 为任何兼容MCP的客户端运行stdio

设置

  1. 克隆此仓库(或使用提供的文件夹)。
  2. 创建 .env 从示例中,并设置您的API密钥:
    cp .env.example .env
    

对于Tavily(默认):

echo“TAVILY_API_KEY=your_TAVILY_KEY_here”>>.env

可选:当provider=SerpAPI时启用SerpAPI使用

echo“SERPAPI_KEY=your_sparpi_KEY_here”>>.env

3. Install deps and build:
```bash
npm install
npm run build

在dev中运行

npm run dev

运行编译

npm start

全局CLI命令(可选)

您可以安装一个小的全局命令,这样您就不必在VS code设置中硬编码绝对路径。

  1. 构建和链接CLI
npm install
npm run build
npm link
  1. 验证它是否在您的路径上
web-mcp-server --version
web-mcp-server --help

备注

  • 该命令通过stdio启动MCP服务器,并将一直阻塞,直到客户端断开连接(MCP服务器正常)。
  • 如果你看到“command not found”,请确保你的npm全局bin在PATH上(例如 ~/.npm-global/bin 在macOS上)并重新打开您的终端。

macOS上的PATH设置(zsh)

如果 web-mcp-server 之后找不到 npm link,你的npm全局bin可能不在PATH上。

  1. 设置一个用户级npm前缀并将其添加到PATH中:
npm config set prefix ~/.npm-global
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
  1. 重新链接(如果需要)并验证:
cd /Users/arturoquiroga/GITHUB/WEB-MCP-SERVER
npm link
web-mcp-server --version

提示

  • 您可以使用以下命令检查全局npm bin文件夹: npm bin -g
  • 如果VS Code在从Dock启动时找不到命令,请尝试从终端启动它(这样它就继承了PATH)或在设置中引用绝对命令路径。

在VS代码中使用(继续扩展)

  1. 在VS Code中安装Continue–Coding AI Assistant并重新加载。

  2. 构建服务器,以便Continue可以生成它:

npm install
npm run build
  1. 确保您的Tavily密钥可用于VS Code。macOS上最简单的方法:
export TAVILY_API_KEY="your_tavily_key_here"
export DEFAULT_PROVIDER="tavily"   # optional
code .

或者,直接在中设置值 .continue/config.json (不建议用于共享存储库)。

  1. 打开“继续”侧面板:
  • 使用 .vscode/settings.json 加载 .continue/config.json,运行 node ./dist/index.js 超过stdio。
  • 在工具/服务器中,选择名为的MCP服务器 web 并选择 web.search 工具。
  • 示例参数: { "query": "latest AI research news", "num": 3, "provider": "tavily" }.

故障排除:

  • 如果您看到“Missing TAVILY_API_KEY”,请确认VS Code具有env变量(从同一终端启动VS Code,或将导出添加到shell配置文件中,然后重新启动VS Code)。
  • 你不需要跑 npm run dev 使用Continue时;它将按需生成服务器。

在Claude Desktop中使用(简短说明)

  1. 构建此项目,使编译的条目存在于 dist/index.js.

  2. 在Claude Desktop中,打开“设置”→ 开发者→ 模型上下文协议(MCP),并添加新的stdio服务器。使用如下配置:

{
  "mcpServers": {
    "web": {
      "command": "node",
      "args": ["/Users/arturoquiroga/GITHUB/WEB-MCP-SERVER/dist/index.js"],
      "env": {
        "TAVILY_API_KEY": "${env:TAVILY_API_KEY}",
        "SERPAPI_KEY": "${env:SERPAPI_KEY}",
        "DEFAULT_PROVIDER": "tavily"
      }
    }
  }
}

提示:建议使用绝对路径。如果您的仓库位于其他地方,请更新 args 相应的路径。

  1. 在Claude Desktop中开始新的聊天,并验证 web 工具出现。呼叫 web.search 通过查询(例如。, latest AI research news).如果您看到丢失密钥错误,请设置 TAVILY_API_KEY 直接在上面的MCP服务器env块中。

在GitHub Copilot中使用(代理模式)

  1. 如此构建此项目 dist/index.js 存在:
npm install
npm run build
  1. 在Copilot中注册MCP服务器

选项A——通过UI(如果您的Copilot版本中有):

  • 在VS Code中打开副驾驶聊天面板。
  • 打开其设置/齿轮菜单,查找“模型上下文协议”或“MCP服务器”。
  • 使用以下命令添加新服务器:
    • 姓名: web
    • 类型: stdio
    • 命令: node
    • Args: ./dist/index.js
    • 环境:
      • TAVILY_API_KEY: ${env:TAVILY_API_KEY}
      • DEFAULT_PROVIDER: tavily (可选)
      • SERPAPI_KEY: ${env:SERPAPI_KEY} (可选)

选项B——通过设置JSON(回退):

  • 打开命令选项板→ “首选项:打开设置(JSON)”并添加:
{
  "github.copilot.chat.mcpServers": [
    {
      "name": "web",
      "type": "stdio",
      "command": "node",
      "args": ["./dist/index.js"],
      "env": {
        "TAVILY_API_KEY": "${env:TAVILY_API_KEY}",
        "DEFAULT_PROVIDER": "tavily",
        "SERPAPI_KEY": "${env:SERPAPI_KEY}"
      }
    }
  ]
}

注意:副驾驶的MCP设置键可能因版本而异。如果您在设置UI中没有看到此键,请在副驾驶设置中搜索“MCP”并相应地进行调整。

选项C——使用全局CLI命令(无绝对路径):

  • 之后 npm link,参考 web-mcp-server 用户设置中的命令:
{
  "github.copilot.chat.mcpServers": [
    {
      "name": "web",
      "type": "stdio",
      "command": "web-mcp-server",
      "args": [],
      "env": {
        "TAVILY_API_KEY": "${env:TAVILY_API_KEY}",
        "DEFAULT_PROVIDER": "tavily",
        "SERPAPI_KEY": "${env:SERPAPI_KEY}"
      }
    }
  ]
}

这避免了对本地文件系统路径进行硬编码,并且可以跨工作区工作。

  1. 将您的密钥提供给VS Code:
export TAVILY_API_KEY="your_tavily_key_here"
export DEFAULT_PROVIDER="tavily"   # optional
code .
  1. 在Copilot Chat中重新加载VS代码并进行测试
  • 问:“使用web.search工具查找最新的人工智能研究新闻。”
  • 副驾驶应致电 web.search 并返回结果。如果您看到丢失密钥错误,请确保VS Code继承了您的环境变量,或直接在上面的MCP服务器env块中设置它们。

客户端配置(示例)

对于通过stdio加载本地服务器的MCP客户端,添加类似于以下内容的条目:

{
  "mcpServers": {
    "web": {
## Use in VS Code via .vscode/mcp.json
Some MCP-enabled VS Code clients can automatically discover servers defined in `.vscode/mcp.json` and make their tools available in chat.

Prereqs
- Build artifacts exist at `dist/index.js`:
  - `npm install && npm run build`
- API keys in `.env` at the workspace root (loaded by the server via `dotenv`):
  - `TAVILY_API_KEY=...` (required for Tavily)
  - `SERPAPI_KEY=...` (optional, for SerpAPI)
  - `DEFAULT_PROVIDER=tavily` (optional)

What `.vscode/mcp.json` does
- This repo includes `.vscode/mcp.json` with a server named “Web Search”:

  ```jsonc
  {
    "servers": {
      "Web Search": {
        "type": "stdio",
        "command": "node",
        "args": ["./dist/index.js"]
      }
    }
  }

如何在VS Code中使用它

  1. 构建并设置您的 .env.

  2. 使用支持MCP和 .vscode/mcp.json 发现(例如,一些支持MCP或其他启用MCP的扩展的GitHub Copilot Chat版本)。如果支持,“Web搜索”服务器将自动注册。

  3. 在聊天面板中,展开工具/服务器,然后选择 web.search 工具,或要求助手“使用web.search…”。示例参数:

    { "query": "latest AI research news", "num": 3, "provider": "tavily" }
    

故障排除

  • 如果服务器未出现,则您的聊天客户端可能尚不支持 .vscode/mcp.json.使用此README中的Continue配置,或在客户端中手动注册服务器:
    • 命令: node
    • Args: ./dist/index.js
    • 环境:套 TAVILY_API_KEY (以及可选 SERPAPI_KEY, DEFAULT_PROVIDER)
  • 如果您看到“缺少TAVILY_API_KEY”,请确保您的密钥存在于 .env 或者在VS Code环境中导出。
  • 你也可以在聊天之外吸烟测试:
    • 运行VS代码任务“MCP:搜索Web”(终端>运行任务…)

    • 或者在终端中: npm run search -- --query "your query" --provider tavily --num 3

      “command”:“node”, “args”:[“./dist/index.js”], “env”:{“TAVILY_API_KEY”:“${env:TAVILY_API_KEY}”,“SERPAPI_KEY”:《${nv:SERPAPI_KEY}》} } } }


## Notes
- Requires Node 18+ for built-in `fetch`.
- Tavily free tier and SerpAPI free tier both have quotas/limits.
- You can select a provider per call via `{ provider: "tavily" | "serpapi" }`. Default is Tavily (or set `DEFAULT_PROVIDER` in env).