搜索服务MCP服务器

一个基于Serper.dev的MCP服务器,提供Google搜索和URL内容抓取功能。

  • by ideadesignmedia
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ideadesignmedia/search-mcp

使用说明

Serper.dev MCP 服务器(search-mcp)

基于Serper.dev的TypeScript MCP服务器,提供两个工具:

  • serper_search通过Serper.dev进行谷歌搜索
  • serper_fetch获取结果URL的原始内容

该服务器是使用 @ideadesignmedia/open-ai.js (MCP 服务器/客户端辅助程序),使用 @ideadesignmedia/request 对于HTTP,通过(某种方式)加载配置 @ideadesignmedia/config.js。

要求

  • Node.js 18+(建议使用20+)
  • Yarn(或 npm)
  • Serper.dev API密钥

安装

  • yarn install

配置

@ideadesignmedia/config.js 负载(或负荷) config.json 在项目根目录下,并将条目映射到 process.env。

  1. 复制样本并填写值:
  • PowerShell: Copy-Item config-sample.json config.json
  • Bash: cp config-sample.json config.json
  1. 在(相应位置)设置所需值 config.json:
  • SERPER_DEV_API_KEY (必填)
  • SERPER_DEV_BASE_URL (默认 https://google.serper.dev)
  • SERPER_DEV_TIMEOUT_MS (默认 10000)
  • MCP_TRANSPORTS 一个或多个 stdio,http,websocket (默认 stdio)
  • PORT HTTP/WS 端口(未设置时默认为 3000)

跑

  • 开发(TypeScript): yarn dev
  • 构建: yarn build
  • 开始(已编译): yarn start

交通

  • HTTP: 设置 MCP_TRANSPORTS 包括 http (并且可选地 websocket); 服务器监听于 http://localhost:PORT/mcp。
  • STDIO: 使用默认值 MCP_TRANSPORTS=stdio 当通过MCP兼容客户端通过标准输入输出(stdio)启动时。注:在嵌入到标准输入输出客户端中时,避免向标准输出(stdout)打印内容。

快速入门

  • PowerShell

    • Copy-Item config-sample.json config.json
    • $env:SERPER_DEV_API_KEY = 'your-serper-key'
    • $env:MCP_TRANSPORTS = 'http' (或者 stdio)
    • $env:PORT = '4510'
    • yarn dev (或者 yarn build && yarn start)
  • Bash

    • cp config-sample.json config.json
    • export SERPER_DEV_API_KEY='your-serper-key'
    • export MCP_TRANSPORTS=http (或 stdio)
    • export PORT=4510
    • yarn dev (或者 yarn build && yarn start)

当与……一起运行时 MCP_TRANSPORTS=http,您可以将MCP客户端连接到 http://localhost:$PORT/mcp。

NPX

  • 将这个包发布到npm(名称为 @ideadesignmedia/search-mcp),你可以运行:
    • HTTP:(超文本传输协议) npx @ideadesignmedia/search-mcp --http --port 4510 --key $SERPER_DEV_API_KEY
    • STDIO(进程标准输入输出): npx @ideadesignmedia/search-mcp --stdio --key $SERPER_DEV_API_KEY
    • STDIO(基于文件): npx @ideadesignmedia/search-mcp --stdio --stdio-files (创建 ./mcp-stdio.in/.out)
    • 可选日志记录:添加 --log-file ./server.log 和/或 --verbose (stderr) 通常表示标准错误输出(Standard Error),在中文中可以翻译为“(标准错误输出)”或简化为“(错误)”。不过,在具体语境中,可能需要根据上下文来决定最合适的翻译。如果直接保留原样,也可以理解为是在指示某种错误或异常信息的输出。

旗帜

  • --key 集合(或套装) SERPER_DEV_API_KEY
  • --base (根据上下文,"sets" 可以翻译为多种意思,以下是其中一些可能的翻译): SERPER_DEV_BASE_URL (默认 https://google.serper.dev)
  • --timeout (一组)设定 SERPER_DEV_TIMEOUT_MS
  • --port (根据上下文,"sets" 可以翻译为多种意思,以下是其中一些可能的翻译):集合、套装、设定、安装、设置、系列、种群、群组、配置、组合、系列作品、批次、阵容、队伍、队伍组合、阵容组合、套装组合、配置组合等 PORT
  • --http/--websocket/--stdio 选择交通工具(或 --transports=http,websocket)

STDIO注意事项:

  • 默认情况下,日志记录输出到标准错误;添加 --verbose 看到一行启动信息(对标准输入输出安全)。
  • 基于文件的STDIO在JSON-RPC中使用两个文件: *.in (客户端→服务器)和 *.out (服务器→客户端)。通过(某种方式)传递自定义路径 --stdio-in 和 --stdio-out。
  • 避免向标准输出(stdout)打印;使用标准错误输出(stderr)或 --verbose 为了获得一个最简状态行。
  • 要强制跳过 config.json:设置 MCP_NO_CONFIG=1。
  • 将日志写入文件: --log-file ./server.log (所有运输方式均安全)

发布

  • 确保 dist 已被构建并包含(已由 files + prepublishOnly)。
  • npm publish --access public (限定公开包)

工具

  • serper_search
    • 参数: { query: string; limit?: number; language?: string; country?: string; autocorrect?: boolean }
    • 返回Serper的有机结果及相关部分(JSON格式)
  • serper_fetch
    • 参数: { url: string }
    • 回报;收益 { url, content } 哪里 content 是原始文本/HTML

测试

  • 类型检查: yarn typecheck
  • 实时集成测试(HTTP传输):
    • 确保 SERPER_DEV_API_KEY 设定于 config.json 或者环境
    • 运行: yarn test
    • 测试在测试端口上启动服务器,并使用 McpClient 打电话 serper_search (“创意设计媒体”)和 serper_fetch (ideadesignmedia.com),并确保响应内容非空。

项目布局

  • src/server.ts – 启动MCP服务器
  • src/config/ – 运行时配置(通过环境变量读取) config.json)
  • src/services/serperClient.ts – 使用Serper客户端 @ideadesignmedia/request
  • src/tools/ – MCP工具(serper_search, serper_fetch)
  • tests/serper.mcp.integration.test.ts – 实时MCP客户端集成测试