Some checks failed
CI/CD / typecheck (pull_request) Successful in 1m17s
CI/CD / test (pull_request) Successful in 1m24s
CI/CD / lint (pull_request) Successful in 2m56s
CI/CD / smoke (pull_request) Failing after 1m54s
CI/CD / build (pull_request) Successful in 4m19s
CI/CD / publish (pull_request) Has been skipped
Readiness probes ran real searches every interval: searxng's searxng_web_search probe fanned a query out to every engine 1,440 times a day, billing API-key engines (braveapi, kagi), and duckduckgo's `search` probe scraped DuckDuckGo from the same IP agents search from. - searxng: probe searxng_instance_info, which reads /config only - duckduckgo: probe fetch_content on example.com every 300s - firecrawl (new): firecrawl-mcp against a self-hosted or cloud Firecrawl, for reading pages as main-content markdown; probe firecrawl_scrape on example.com every 300s Every probe still names a readiness tool, as templates.test.ts requires; each was run against the real package before being written down. docs/web-search.md now pairs searxng (search) with firecrawl (reading) and says why duckduckgo does not hold up under agent traffic. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JPjtnE6Gd343oRNtMU9Bcd
31 lines
1.1 KiB
YAML
31 lines
1.1 KiB
YAML
name: duckduckgo
|
|
version: "1.0.0"
|
|
description: DuckDuckGo web search and page-to-markdown fetching — no API key, no backing service
|
|
packageName: "duckduckgo-mcp-server"
|
|
runtime: python
|
|
transport: STDIO
|
|
repositoryUrl: https://github.com/nickclyde/duckduckgo-mcp-server
|
|
# Readiness fetches a tiny static page instead of searching. A `search` probe is
|
|
# a DuckDuckGo scrape every interval (1,440/day at 60s) from the same IP agents
|
|
# search from, which is how that IP ends up answering CAPTCHA. This proves the
|
|
# process and its outbound fetch path work, not that DuckDuckGo is answering.
|
|
healthCheck:
|
|
tool: fetch_content
|
|
arguments:
|
|
url: "https://example.com"
|
|
max_length: 500
|
|
intervalSeconds: 300
|
|
timeoutSeconds: 20
|
|
env:
|
|
- name: DDG_SAFE_SEARCH
|
|
description: Result filtering — STRICT, MODERATE or OFF
|
|
required: false
|
|
defaultValue: "MODERATE"
|
|
- name: DDG_REGION
|
|
description: Default region/language code (e.g. us-en, pl-pl, uk-en)
|
|
required: false
|
|
- name: DDG_SEARCH_BACKEND
|
|
description: Fetch backend — auto, httpx or curl. `curl` survives more bot checks.
|
|
required: false
|
|
defaultValue: "auto"
|