MCP DuckDuckResearch
mcp server with duckducksearch, web2md, and web2photo
bkataru-workshop
README
MCP DuckDuckResearch
An MCP (Model Context Protocol) server that combines DuckDuckGo search capabilities with web page content extraction and screenshot functionality. This server bridges the gap between searching for information and accessing web content programmatically.
Features
- 🔍 DuckDuckGo Search: Search the web using DuckDuckGo's search engine
- 📄 Content Extraction: Visit web pages and extract their content as Markdown
- 📸 Screenshot Capture: Take screenshots of web pages with automatic size optimization
- ⚡ Robust Error Handling: Built-in protection against bot detection and content validation
- 🔒 Safe Search Options: Configurable safe search levels for appropriate content filtering
Installation
# 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
Usage with Cline and Roo Code
Installation for Cline
-
Build the project first using the installation steps above
-
Configure the MCP server in your Cline settings:
Edit your Cline MCP settings file at:
%APPDATA%\Code\User\globalStorage\rooveterinaryinc.roo-cline\settings\cline_mcp_settings.json
Add the following configuration:
{ "mcpServers": { "duckduckmcp": { "command": "node", "args": ["path/to/mcp-duckduckresearch/build/index.js"], "disabled": false, "alwaysAllow": [] } } }
Replace
path/to/mcp-duckduckresearch
with the actual path where you cloned this repository.
Available Tools
Once configured, the following tools will be available in Roo Code:
1. search_duckduckgo
Search the web using DuckDuckGo. Example usage in 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. visit_page
Visit a webpage and extract its content as 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. take_screenshot
Take a screenshot of the currently loaded page:
<use_mcp_tool>
<server_name>duckduckmcp</server_name>
<tool_name>take_screenshot</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>
Example Workflow in Roo Code
Here's a complete example of searching for information and visiting a result:
- First, search for information:
<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>
- Then, visit one of the results:
<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>
The server will automatically handle:
- Browser initialization and cleanup
- Content extraction and conversion to Markdown
- Screenshot capture and optimization
- Error handling and retries
Development
Prerequisites
- Node.js (v18 or higher)
- npm
- A system capable of running Chrome/Chromium (for Playwright)
Setup Development Environment
# 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
Project Structure
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
Testing
The project uses Vitest for testing. Tests are organized into:
- Unit Tests: Testing individual components and functions
- Integration Tests: Testing the complete workflow
- Test Coverage: Aiming for >80% coverage
Run tests with:
# Run all tests
npm test
# Run with coverage
npm run test:coverage
Contributing
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Credits
- duck-duck-scrape - DuckDuckGo search implementation
- Playwright - Browser automation and screenshots
- Model Context Protocol - MCP specification and SDK
推荐服务器
Crypto Price & Market Analysis MCP Server
一个模型上下文协议 (MCP) 服务器,它使用 CoinCap API 提供全面的加密货币分析。该服务器通过一个易于使用的界面提供实时价格数据、市场分析和历史趋势。 (Alternative, slightly more formal and technical translation): 一个模型上下文协议 (MCP) 服务器,利用 CoinCap API 提供全面的加密货币分析服务。该服务器通过用户友好的界面,提供实时价格数据、市场分析以及历史趋势数据。
MCP PubMed Search
用于搜索 PubMed 的服务器(PubMed 是一个免费的在线数据库,用户可以在其中搜索生物医学和生命科学文献)。 我是在 MCP 发布当天创建的,但当时正在度假。 我看到有人在您的数据库中发布了类似的服务器,但还是决定发布我的。
mixpanel
连接到您的 Mixpanel 数据。从 Mixpanel 分析查询事件、留存和漏斗数据。

Sequential Thinking MCP Server
这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

Nefino MCP Server
为大型语言模型提供访问德国可再生能源项目新闻和信息的能力,允许按地点、主题(太阳能、风能、氢能)和日期范围进行筛选。
Vectorize
将 MCP 服务器向量化以实现高级检索、私有深度研究、Anything-to-Markdown 文件提取和文本分块。
Mathematica Documentation MCP server
一个服务器,通过 FastMCP 提供对 Mathematica 文档的访问,使用户能够从 Wolfram Mathematica 检索函数文档和列出软件包符号。
kb-mcp-server
一个 MCP 服务器,旨在实现便携性、本地化、简易性和便利性,以支持对 txtai “all in one” 嵌入数据库进行基于语义/图的检索。任何 tar.gz 格式的 txtai 嵌入数据库都可以被加载。
Research MCP Server
这个服务器用作 MCP 服务器,与 Notion 交互以检索和创建调查数据,并与 Claude Desktop Client 集成以进行和审查调查。

Cryo MCP Server
一个API服务器,实现了模型补全协议(MCP),用于Cryo区块链数据提取。它允许用户通过任何兼容MCP的客户端查询以太坊区块链数据。