MCP DuckDuckGo Search Plugin
MCP DuckDuckGo 검색 플러그인
Claude Code와 호환되는 MCP(Model Context Protocol)용 DuckDuckGo 검색 플러그인입니다. 고급 탐색 및 콘텐츠 탐색 기능을 갖춘 웹 검색 기능을 제공합니다.
설명
이 프로젝트는 DuckDuckGo를 사용하여 웹 검색 기능을 제공하는 모델 컨텍스트 프로토콜(MCP) 서버를 구현합니다. 이 플러그인은 Claude Code 또는 MCP를 지원하는 다른 클라이언트와 원활하게 작동하도록 설계되었으며, 기본 검색 기능뿐만 아니라 고급 탐색 및 결과 탐색 기능도 제공합니다.
Related MCP server: MCP DuckDuckGo
특징
웹 검색 도구 : DuckDuckGo를 사용하여 웹 검색을 수행합니다.
자세한 결과 : 특정 검색 결과에 대한 자세한 정보를 얻으세요
관련 검색어 : 원래 검색을 기반으로 관련 검색어를 찾아보세요.
페이지 번호 매기기 지원 : 여러 페이지의 검색 결과를 탐색합니다.
도메인 추출 : 각 검색 결과에 대한 도메인 정보를 확인합니다.
고급 필터링 : 사이트 및 기간별로 결과 필터링
향상된 콘텐츠 추출 : 메타데이터, 구조, 스니펫을 포함한 웹 페이지에서 풍부한 콘텐츠를 추출합니다.
기본 웹 스파이더링 : 검색 결과의 링크를 따라 관련 콘텐츠를 탐색합니다(구성 가능한 깊이)
메타데이터 추출 : 제목, 저자, 키워드, 출판 날짜 등을 추출합니다.
소셜 미디어 감지 : 웹 페이지에서 소셜 미디어 링크 식별 및 추출
콘텐츠 구조 분석 : 웹페이지 구조를 이해하기 위해 제목과 섹션을 추출합니다.
검색 문서 : 검색 기능에 대한 포괄적인 문서에 액세스하세요
검색 도우미 : 효과적인 검색 쿼리를 작성하는 데 도움을 받으세요
매개변수화된 리소스 : 특정 쿼리에 대한 형식화된 검색 결과 검색
요구 사항
파이썬 3.9 이상
pip(Python 패키지 관리자)
pyproject.toml에 나열된 Python 패키지
설치
PyPI에서
참고: 이 패키지는 아직 PyPI에 게시되지 않았습니다. 아래 소스에서 설치해 주세요.
나중에 게시되면 다음을 사용하여 설치할 수 있습니다.
지엑스피1
출처에서
이 저장소를 복제하세요:
git clone https://github.com/gianlucamazza/mcp-duckduckgo.git cd mcp-duckduckgo개발 모드에서 패키지를 설치하세요:
pip install -e .또는 제공된 스크립트를 사용하세요.
./scripts/install_dev.sh또는 Make를 사용하세요:
make install
용법
수동으로 서버 시작
MCP 서버를 시작하려면:
mcp-duckduckgo또는 사용자 정의 매개변수를 사용하여:
mcp-duckduckgo --host 127.0.0.1 --port 8000또는 제공된 스크립트를 개발에 사용하세요.
./scripts/run.sh또는 Make를 사용하세요:
make runClaude Code와 함께 사용
위에 설명한 대로 소스에서 패키지를 설치합니다.
플러그인을 사용하도록 Claude Code를 구성하세요.
claude mcp add duckduckgo-search -- mcp-duckduckgo글로벌 구성(모든 프로젝트에서 사용 가능):
claude mcp add duckduckgo-search --scope global -- mcp-duckduckgo클로드 코드 시작:
claude이제 Claude Code에서 DuckDuckGo 검색 기능을 사용할 수 있습니다.
사용 가능한 엔드포인트
이 플러그인은 다음과 같은 엔드포인트를 제공합니다.
도구: duckduckgo_web_search
다음 매개변수를 사용하여 DuckDuckGo를 사용하여 웹 검색을 수행합니다.
query(필수): 검색어(최대 400자, 50단어)count(선택 사항, 기본값: 10): 페이지당 결과 수(1-20)page(선택 사항, 기본값: 1): 페이지 번호site(선택 사항): 결과를 특정 사이트(예: 'example.com')로 제한합니다.time_period(선택 사항): 기간('일', '주', '월', '년')별로 결과를 필터링합니다.
클로드 코드의 사용 예:
Search for "artificial intelligence latest developments"도구: duckduckgo_get_details
특정 검색 결과에 대한 자세한 정보를 검색합니다.
url(필수): 세부 정보를 얻을 결과의 URL
클로드 코드의 사용 예:
Get details for "https://example.com/article"도구: duckduckgo_related_searches
원래 쿼리를 기반으로 관련 검색어를 제안합니다.
query(필수): 원래 검색어(최대 400자)count(선택 사항, 기본값: 5): 반환할 관련 검색 수(1-10)
클로드 코드의 사용 예:
Find related searches for "renewable energy"리소스: docs://search
검색 기능에 대한 포괄적인 설명서를 제공합니다.
클로드 코드의 사용 예:
Show me the documentation for the DuckDuckGo search프롬프트: search_assistant
효과적인 검색 쿼리를 작성하는 데 도움이 됩니다.
클로드 코드의 사용 예:
Help me formulate a search query about climate change solutions리소스: search://{query}
특정 쿼리에 대한 형식화된 검색 결과를 검색합니다.
클로드 코드의 사용 예:
Get search results for "quantum computing breakthroughs"탐색 기능 사용
이 플러그인은 검색 결과를 탐색하고 탐색하는 데 도움이 되는 여러 가지 기능을 제공합니다.
쪽수 매기기
여러 페이지의 검색 결과를 탐색하려면:
Search for "climate change solutions" with 5 results per page, page 2결과 필터링
특정 사이트별로 결과를 필터링하려면:
Search for "machine learning tutorials" on "tensorflow.org"기간별로 결과를 필터링하려면:
Search for "latest news" from the past week결과 세부 정보 탐색
특정 검색 결과에 대한 자세한 정보를 얻으려면:
Get details for "https://example.com/article-found-in-search"관련 검색 찾기
관련 검색어를 알아보려면:
Find related searches for "electric vehicles"이러한 탐색 기능을 Claude의 자연어 기능과 결합하여 강력한 검색 및 탐색 환경을 구축할 수 있습니다. 예:
Search for "python machine learning libraries", then get details on the top result, and finally show me related search terms구현 노트
이 구현은 DuckDuckGo의 공개 웹 인터페이스를 사용하고 HTML 응답을 파싱하여 결과를 추출합니다. DuckDuckGo는 공식 검색 API를 제공하지 않으므로 이 방법은 데모 목적으로 사용됩니다. 프로덕션 환경에서는 공식 API를 제공하는 검색 서비스를 사용하는 것이 좋습니다.
향상된 콘텐츠 추출
DuckDuckGo 플러그인에는 간단한 검색 결과를 넘어서는 고급 콘텐츠 추출 기능이 포함되어 있습니다.
콘텐츠 추출 기능
전체 웹페이지 분석 : 검색 결과 URL에서 HTML 콘텐츠 추출 및 구문 분석
지능형 콘텐츠 타겟팅 : 다양한 유형의 웹사이트에서 주요 콘텐츠 영역을 식별하고 추출합니다.
풍부한 메타데이터 추출 : 제목, 설명, 저자, 키워드 및 출판 날짜 추출
이미지 감지 : 웹 페이지에서 주요 이미지와 미디어를 식별하고 추출합니다.
소셜 미디어 통합 : 소셜 미디어 프로필에 대한 링크 감지 및 추출
콘텐츠 구조 분석 : 웹페이지 구성을 이해하기 위해 제목과 섹션 추출
공식 소스 감지 : 도메인 및 콘텐츠 신호를 기반으로 소스가 공식인지 식별합니다.
웹 스파이더링 기능
이 플러그인에는 기본적인 웹 스파이더링 기능이 포함되어 있습니다.
구성 가능한 깊이 : 원래 URL에서 0~3단계 깊이의 링크를 따릅니다.
링크 제한 : 페이지당 팔로우할 수 있는 링크의 최대 개수를 제어합니다(1-5)
도메인 제한 : 동일한 도메인 내의 링크만 팔로우하는 옵션
관련 콘텐츠 검색 : 원래 검색과 관련된 콘텐츠를 찾아 분석합니다.
향상된 콘텐츠 추출 사용
향상된 콘텐츠 추출 기능을 사용하려면:
Get details for "https://example.com/article" with spider depth 1거미의 움직임을 제어하려면:
Get details for "https://example.com/article" with spider depth 2, max links 3, same domain only개발
이 프로젝트에는 개발을 돕기 위한 scripts 디렉토리에 여러 유틸리티 스크립트가 포함되어 있습니다.
install_dev.sh: 개발 환경을 설정합니다.run.sh: 개발 설정으로 MCP 서버를 실행합니다.test.sh: 커버리지 보고를 통해 테스트를 실행합니다.lint.sh: 린팅 및 코드 포맷팅을 실행합니다.publish.sh: 패키지를 빌드하고 PyPI에 게시합니다.
편의상 다음 대상을 포함하는 Makefile도 제공됩니다.
make install # Install the package in development mode
make test # Run tests with coverage
make lint # Run linting and code formatting
make run # Run the MCP server
make publish # Build and publish the package to PyPI
make clean # Clean build artifacts
make all # Run install, lint, and test (default)
make help # Show help message테스트
이 프로젝트에는 모든 주요 기능을 포괄하는 포괄적인 테스트 스위트가 포함되어 있습니다. 테스트는 tests/ 디렉터리에 있습니다.
테스트 종속성 설치
테스트를 실행하기 전에 테스트 종속성을 설치하세요.
pip install -e ".[test]"테스트 실행
다음을 사용하여 모든 테스트를 실행할 수 있습니다.
pytest커버리지 보고를 사용하여 테스트를 실행하려면:
pytest --cov=mcp_duckduckgo특정 테스트 파일을 실행하려면:
pytest tests/test_models.py자세한 출력으로 테스트를 실행하려면:
pytest -v또는 제공된 스크립트를 사용하세요.
./scripts/test.sh또는 Make를 사용하세요:
make test테스트 구조
테스트 모음은 다음과 같이 구성됩니다.
conftest.py- 테스트를 위한 공유 픽스처 및 구성test_models.py- 데이터 모델 테스트test_search.py- 검색 기능 테스트test_tools.py- MCP 도구 테스트test_resources.py- MCP 리소스에 대한 테스트test_integration.py- 엔드투엔드 통합 테스트test_server.py- 서버 수명 주기 테스트
테스트에 대한 자세한 내용은 tests/README.md 파일을 참조하세요.
코드 포맷팅 및 린팅
black mcp_duckduckgo
isort mcp_duckduckgo
mypy mcp_duckduckgo또는 제공된 스크립트를 사용하세요.
./scripts/lint.sh또는 Make를 사용하세요:
make lintPyPI에 게시
PyPI에 패키지를 게시하려면 다음을 수행하세요.
pyproject.toml에서 버전을 업데이트하세요필요한 자격 증명과 도구가 있는지 확인하세요.
pip install build twine빌드 및 게시:
python -m build twine upload dist/*
또는 제공된 스크립트가 있으면 사용하세요.
./scripts/publish.sh또는 Make를 사용하세요:
make publish기여하다
기여를 환영합니다! 풀 리퀘스트를 제출해 주세요.
특허
저장소
Available Tools
3 toolsget_page_contentC
Fetch and extract content from a web page.
Returns the page title, description, and main content.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | URL to fetch content from |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions what the tool returns ('page title, description, and main content'), which is helpful, but lacks critical details like error handling, rate limits, authentication needs, or performance characteristics. For a web-fetching tool, this leaves significant gaps in understanding its behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately concise with two sentences that directly address purpose and return values. It's front-loaded with the core functionality. However, the second sentence could be more integrated with the first for better flow, and there's some whitespace formatting that slightly affects structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema (which handles return value documentation) and 100% schema coverage for the single parameter, the description provides adequate context for basic understanding. However, for a web content extraction tool with no annotations, it should ideally mention common constraints like URL validation, content type limitations, or network timeout behavior to be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'url' parameter clearly documented. The description adds no additional parameter semantics beyond what's in the schema. According to scoring rules, when schema_description_coverage is high (>80%), the baseline is 3 even with no param info in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('fetch and extract content from a web page') and identifies the resource ('web page'). It distinguishes from sibling tools like 'suggest_related_searches' and 'web_search' by focusing on content extraction rather than search or suggestions. However, it doesn't explicitly differentiate itself from potential similar tools not in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like 'web_search' or 'suggest_related_searches'. There's no mention of prerequisites, constraints, or typical use cases. The agent must infer usage from the purpose alone, which is insufficient for optimal tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
web_searchB
Search the web using DuckDuckGo.
Returns a list of search results with titles, URLs, descriptions, and domains.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| max_results | No | Maximum number of results to return (1-20) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions the search engine (DuckDuckGo) and return format, but lacks critical details like rate limits, authentication needs, privacy implications, or error handling. For a tool with no annotation coverage, this leaves significant gaps in understanding its operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise and front-loaded: two sentences that directly state the tool's function and output. Every sentence earns its place with no wasted words, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (web search with two parameters), no annotations, and an output schema (implied by context signals), the description is minimally adequate. It covers the basic purpose and output format, but lacks usage guidelines and behavioral details that would be helpful for an AI agent, especially without annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both parameters (query and max_results). The description adds no additional parameter semantics beyond what's in the schema, such as query formatting tips or result ordering. This meets the baseline for high schema coverage but doesn't enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search the web using DuckDuckGo' specifies the action (search) and resource (web via DuckDuckGo). It distinguishes from sibling tools like 'get_page_content' (which fetches specific page content) and 'suggest_related_searches' (which suggests queries), but could be more explicit about this differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to choose web_search over get_page_content (e.g., for broad queries vs. specific URLs) or suggest_related_searches (e.g., for refining searches). There's no context about use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v1.0.0- Added
get_page_content - Added
suggest_related_searches - Added
web_search
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: get_page_content extracts content from a specific URL, web_search performs general web searches, and suggest_related_searches provides autocomplete suggestions. There is no overlap in functionality, making tool selection straightforward for an agent.
All tool names follow a consistent verb_noun pattern (get_page_content, suggest_related_searches, web_search) using snake_case. The naming is predictable and readable, with no deviations in style or convention.
With 3 tools, the server is well-scoped for a DuckDuckGo search plugin. Each tool serves a distinct and essential function in the search workflow, from performing searches to extracting content and getting suggestions, with no unnecessary redundancy.
The tool surface covers core search operations effectively, including searching, content extraction, and related suggestions. A minor gap exists in advanced search features like filtering by date or region, but agents can work around this with the provided tools for most use cases.
Maintenance
Related MCP Connectors
Web MCP: scrape/crawl sites, web search, brand assets, app stores, YouTube, Reddit, Hacker News.
Scrape, crawl and search the web for AI agents via MCP.
Web search, scraping, RAG answers with citations, and translation as MCP tools.
Search the agentic web. 4,100+ sites, 11 tools incl. check_url + verify_mcp for probe-before-use.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform real-time web searches, fetch webpage content, and get search suggestions using DuckDuckGo's privacy-focused search engine.-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to search the internet using DuckDuckGo and extract clean, formatted content from web pages.144 npmGPL 3.0
- FlicenseNot gradedqualityDmaintenanceProvides fast, self-hosted web search and reliable web scraping using SearXNG and Crawl4AI, integrated as MCP tools for Claude Code.47-
- AlicenseAqualityDmaintenanceProvides DuckDuckGo web search and site fetching tools for Claude Desktop, enabling up to 10 search results and text content extraction from URLs.2MIT