网页搜索与内容提取服务

MCP DuckDuckResearch是一个结合DuckDuckGo搜索能力、网页内容提取和截图功能的服务器,为程序化访问网页内容提供支持。

  • by bkataru-workshop
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 bkataru-workshop/mcp-duckduckresearch

使用说明

MCP鸭子研究

MCP(模型上下文协议)服务器,将DuckDuckGo搜索功能与网页内容提取和屏幕截图功能相结合。此服务器弥合了搜索信息和以编程方式访问web内容之间的差距。

特性

  • 🔍 DuckDuckGo搜索:使用DuckDuckGo的搜索引擎搜索网络
  • 📄 内容提取:访问网页并将其内容提取为Markdown
  • 📸 电脑屏幕截图工具:使用自动大小优化功能对网页进行截图
  • ⚡ 稳健的错误处理:内置防止机器人检测和内容验证的保护
  • 🔒 安全搜索选项:可配置的安全搜索级别,用于适当的内容过滤

安装

# Clone the repository
git clone https://github.com/yourusername/mcp-duckduckresearch.git
cd mcp-duckduckresearch

# Install dependencies
npm install

# Build the project
npm run build

使用Cline和Roo代码

熟料安装

  1. 首先使用上述安装步骤构建项目

  2. 在Cline设置中配置MCP服务器:

    在以下位置编辑Cline MCP设置文件: %APPDATA%\Code\User\globalStorage\rooveterinaryinc.roo-cline\settings\cline_mcp_settings.json

    添加以下配置:

    {
      "mcpServers": {
        "duckduckmcp": {
          "command": "node",
          "args": ["path/to/mcp-duckduckresearch/build/index.js"],
          "disabled": false,
          "alwaysAllow": []
        }
      }
    }
    

    替换 path/to/mcp-duckduckresearch 使用克隆此存储库的实际路径。

可用工具

配置后,Roo Code中将提供以下工具:

1.搜索_鸭子

使用DuckDuckGo搜索网络。Roo Code中的示例用法:

<use_mcp_tool>
<server_name>duckduckmcp</server_name>
<tool_name>search_duckduckgo</tool_name>
<arguments>
{
  "query": "typescript best practices",
  "options": {
    "region": "zh-cn",
    "safeSearch": "MODERATE",
    "numResults": 10
  }
}
</arguments>
</use_mcp_tool>

2.访问_页面

访问网页并将其内容提取为Markdown:

<use_mcp_tool>
<server_name>duckduckmcp</server_name>
<tool_name>visit_page</tool_name>
<arguments>
{
  "url": "https://example.com",
  "takeScreenshot": false
}
</arguments>
</use_mcp_tool>

3.拍摄_屏幕截图

对当前加载的页面进行截图:

<use_mcp_tool>
<server_name>duckduckmcp</server_name>
<tool_name>take_screenshot</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>

Roo代码中的工作流示例

以下是搜索信息和访问结果的完整示例:

  1. 首先,搜索信息:
<use_mcp_tool>
<server_name>duckduckmcp</server_name>
<tool_name>search_duckduckgo</tool_name>
<arguments>
{
  "query": "TypeScript best practices",
  "options": {
    "numResults": 10,
    "safeSearch": "MODERATE"
  }
}
</arguments>
</use_mcp_tool>
  1. 然后,访问其中一个结果:
<use_mcp_tool>
<server_name>duckduckmcp</server_name>
<tool_name>visit_page</tool_name>
<arguments>
{
  "url": "https://example.com/typescript-practices",
  "takeScreenshot": true
}
</arguments>
</use_mcp_tool>

服务器将自动处理:

  • 浏览器初始化和清理
  • 内容提取和转换为Markdown
  • 截图捕获和优化
  • 错误处理和重试

发展

先决条件

  • Node.js(v18或更高版本)
  • npm
  • 一个能够运行Chrome/Chromium的系统(适用于剧作家)

设置开发环境

# Install dependencies
npm install

# Start in development mode
npm run dev

# Run tests
npm test

# Run tests with coverage
npm run test:coverage

# Format code
npm run format

# Lint code
npm run lint

项目结构

mcp-duckduckresearch/
├── src/
│   ├── browser.ts     # Browser management and content extraction
│   ├── search.ts      # DuckDuckGo search implementation
│   ├── types.ts       # Type definitions and schemas
│   ├── utils.ts       # Utility functions
│   └── index.ts       # Main server implementation
├── tests/
│   ├── unit/          # Unit tests
│   └── integration/   # Integration tests
└── package.json       # Project configuration

测试

该项目使用Vitest进行测试。测试分为:

  • 单元测试:测试单个组件和功能
  • 集成测试:测试完整的工作流程
  • 测试覆盖率:目标覆盖率>80%

使用以下工具运行测试:

# Run all tests
npm test

# Run with coverage
npm run test:coverage

贡献

  1. 分叉存储库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。

鸣谢