DuckDuckGo Search MCP server

Registry name: io.github.johnisanerd/duckduckgo. Maintained by AlphaOSINT (Apify developer johnvc, GitHub johnisanerd).

What it does

Run DuckDuckGo searches with region, safe-search and date filters and get organic results, ads, knowledge graph, news, images, videos and related searches.

A low-cost general web search tool for agents that need search results without a Google dependency, plus DuckDuckGo rank tracking.

This server is not self-hosted. It runs on Apify’s hosted MCP endpoint (mcp.apify.com), which starts the Apify Actor johnvc/DuckDuckGo-Scraper-for-serp-rankings for each tool call. You need an Apify account, and every call is billed to that account at the Actor’s prices below. Apify’s own pricing and terms apply to the account.

Charge Price (USD) What it covers
Setup $0.00006 One-time setup fee per Actor run
Search result $0.0004 One DuckDuckGo search result delivered (organic, ad, news, knowledge-graph, image or video item). Only delivered results are billed; cached results bill the same.

Prices shown are Apify’s free-plan rates; paid Apify plans get lower per-event prices. Apify also bills a token amount per run start and per stored row ($0.00001). Prices change from time to time; the Actor’s page on Apify shows the current ones.

Data source and terms

DuckDuckGo public search results, collected by scraping. The server returns the data as published at the time of the call. You are responsible for using it in line with the source’s terms and the laws that apply to you. AlphaOSINT is not affiliated with the source.

Endpoint

Setup

Claude Code

claude mcp add --transport http duckduckgo "https://mcp.apify.com/?tools=johnvc/DuckDuckGo-Scraper-for-serp-rankings"

VS Code (.vscode/mcp.json)

{
  "servers": {
    "duckduckgo": {
      "type": "http",
      "url": "https://mcp.apify.com/?tools=johnvc/DuckDuckGo-Scraper-for-serp-rankings"
    }
  }
}

Cursor (~/.cursor/mcp.json)

{
  "mcpServers": {
    "duckduckgo": {
      "url": "https://mcp.apify.com/?tools=johnvc/DuckDuckGo-Scraper-for-serp-rankings"
    }
  }
}

Claude Desktop (Settings → Connectors → Add custom connector, paste the URL). Older versions without remote connectors can bridge through mcp-remote in claude_desktop_config.json:

{
  "mcpServers": {
    "duckduckgo": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://mcp.apify.com/?tools=johnvc/DuckDuckGo-Scraper-for-serp-rankings"
      ]
    }
  }
}

Each client opens an Apify sign-in (OAuth) on first use. To use a token instead, send Authorization: Bearer <APIFY_TOKEN> as a header; create one under Apify Console → Settings → API & Integrations.

Tools

Tool What it does
johnvc--DuckDuckGo-Scraper-for-serp-rankings Runs the Actor with the parameters below and returns the result rows.
get-actor-run Status of a run started by the tool, for long runs.
get-dataset-items Pages through a run’s full output by datasetId when it is larger than the inline result.
get-key-value-store-record Reads a record a run stored, such as a run report.
abort-actor-run Stops a run.

Apify’s endpoint adds the four helper tools automatically whenever an Actor tool is loaded.

Parameters of johnvc--DuckDuckGo-Scraper-for-serp-rankings

Parameter Type Required Default Description
query string yes "The Siliconimist Podcast" Search DuckDuckGo for this term (up to 500 characters). Identical searches are served from a 7-day cache.
localization string: us-en, uk-en, ca-en, au-en, de-de, fr-fr …   "us-en" Set the region and language for search results (e.g. us-en, uk-en, fr-fr, de-de, jp-jp). Defaults to us-en (United States English).
safe string: strict, moderate, off   "moderate" Set the safe-search filter level. Use strict to block adult content, moderate for default filtering, or off for no filtering.
date_filter string     Filter results by date. Use d for the past day, w for the past week, m for the past month, y for the past year, or a custom range like 2026-01-01..2026-05-01.
max_pages integer   1 Set the maximum number of result pages to fetch. The first page holds 10 results and each later page 15. Use 0 for as many pages as exist (up to 200 pages, about 3,000 results). You pay only for results actually deliv…
output_file string     Save results to this filename in the run’s key-value store in addition to the dataset. Leave empty to skip the file output.

Example arguments:

{
  "helloWorld": 123
}

Output

The tool returns JSON rows with these fields.

Field Type Description
query string Search Query
localization string Localization/Region
safe_search integer 1=Strict, -1=Moderate, -2=Off
date_filter string Date Filter
max_pages integer Maximum Pages
search_timestamp string Search Timestamp
total_results_found integer Total Results Found
pages_processed integer Pages Processed
page_number integer Current Page Number
search_metadata object Search Metadata
search_metadata.localization string Localization Used
search_metadata.localization_name string Localization Name
search_metadata.safe_search integer Safe Search Level
search_metadata.safe_search_description string Safe Search Description
search_metadata.date_filter string Date Filter Used
search_metadata.max_pages integer Maximum Pages Set
pagination_info object Pagination Information
pagination_info.page_number integer Page Number
pagination_info.start_offset integer Result Offset This Page Starts At
pagination_info.organic_results_on_page integer Organic Results on This Page
organic_results array Organic Search Results
ads array Advertisement Results
knowledge_graph array Knowledge Graph Results
news_results array News Results
inline_images array Inline Image Results
inline_videos array Inline Video Results
related_searches array Related Searches
results_count integer Results Delivered on This Page (billed per result)
cached boolean Served From the 7-Day Cache
fetchedAt string When the Page Was Fetched (UTC)
cacheAgeDays number Cache Age in Days