Skip to main content
Glama
HasData

DuckDuckGo MCP Server

by HasData

DuckDuckGo MCP-Server

Ein gehosteter Model-Context-Protocol-Server (MCP), der Claude, Cursor, Windsurf und jedem anderen MCP-Client DuckDuckGo-Suchergebnisse als strukturiertes JSON liefert. Rangierte organische Ergebnisse mit Positionen, Anzeigen in einem eigenen Array, DuckDuckGos eigene KI-Antwort und 37 Regionen als Ziel. Gebaut für hohe Volumen und einfaches Parsing, ohne lokalen Browser und ohne Fallback-Kette, die es zu konfigurieren gilt.

https://mcp.hasdata.com/api/mcp?apis=duckduckgo

tool contract MCP Regions License

Inhalt

Related MCP server: duckduckgo-mcp

Was du brauchst

Einen MCP-Client, der streambares HTTP mit benutzerdefinierten Headern spricht. Einen HasData-API-Schlüssel vom Dashboard, kostenlos zu erstellen. Sonst nichts. Dies ist ein Remote-Server. Es gibt keine Python-Umgebung zu verwalten, kein Browserpaket hinzuzufügen und keinen lokalen Prozess, der laufen muss.

Schnellstart

Die Server-URL ist für jeden Client dieselbe. Getestet gegen die folgenden Konfigurationen mit Claude Code, Claude Desktop, Cursor, Windsurf und Cline.

Feld

Wert

URL

https://mcp.hasdata.com/api/mcp?apis=duckduckgo

Transport

HTTP, streamable

Auth-Header

x-api-key: dein_schluessel_hier

Clients mit OAuth-Unterstützung können dieselbe URL als Connector hinzufügen und sich anmelden, ohne einen Schlüssel in eine Konfigurationsdatei einzutragen.

claude mcp add --transport http duckduckgo "https://mcp.hasdata.com/api/mcp?apis=duckduckgo" \
  --header "x-api-key: your_key_here"

Einstellungen, dann Verbindungen, dann Benutzerdefinierten Connector hinzufügen, dann https://mcp.hasdata.com/api/mcp?apis=duckduckgo einfügen und anmelden.

Für den Weg über die Konfigurationsdatei füge dies zu claude_desktop_config.json hinzu:

{
  "mcpServers": {
    "duckduckgo": {
      "type": "http",
      "url": "https://mcp.hasdata.com/api/mcp?apis=duckduckgo",
      "headers": { "x-api-key": "your_key_here" }
    }
  }
}

~/.cursor/mcp.json für jedes Projekt, oder .cursor/mcp.json für eines:

{
  "mcpServers": {
    "duckduckgo": {
      "url": "https://mcp.hasdata.com/api/mcp?apis=duckduckgo",
      "headers": { "x-api-key": "your_key_here" }
    }
  }
}

~/.codeium/windsurf/mcp_config.json. Windsurf nennt das Feld serverUrl, nicht url:

{
  "mcpServers": {
    "duckduckgo": {
      "serverUrl": "https://mcp.hasdata.com/api/mcp?apis=duckduckgo",
      "headers": { "x-api-key": "your_key_here" }
    }
  }
}
{
  "mcpServers": {
    "duckduckgo": {
      "url": "https://mcp.hasdata.com/api/mcp?apis=duckduckgo",
      "type": "streamableHttp",
      "headers": { "x-api-key": "your_key_here" },
      "disabled": false
    }
  }
}

.vscode/mcp.json im Arbeitsbereich:

{
  "servers": {
    "duckduckgo": {
      "type": "http",
      "url": "https://mcp.hasdata.com/api/mcp?apis=duckduckgo",
      "headers": { "x-api-key": "your_key_here" }
    }
  }
}

~/.codex/config.toml:

[mcp_servers.duckduckgo]
url = "https://mcp.hasdata.com/api/mcp?apis=duckduckgo"

[mcp_servers.duckduckgo.headers]
"x-api-key" = "your_key_here"

~/.gemini/settings.json:

{
  "mcpServers": {
    "duckduckgo": {
      "httpUrl": "https://mcp.hasdata.com/api/mcp?apis=duckduckgo",
      "headers": { "x-api-key": "your_key_here" }
    }
  }
}

Beispielaufforderungen

Aufforderungen, kein Code. Füge eine ein und der Agent ruft das Werkzeug selbst auf. Jede ist mit den Aufrufen annotiert, die sie auslöst, denn in MCP entscheidet das Modell, wie viele Aufrufe es macht, und jeder erfolgreiche Aufruf kostet 10 Credits.

Suche bei DuckDuckGo nach „model context protocol" und gib mir die zehn besten Ergebnisse mit ihren Positionen und Domains.

Ein Aufruf, 10 Credits.

Führe die Abfrage „vpn review" in der deutschen Region und noch einmal in der US-Region aus und sag mir dann, welche Domains in der einen vorkommen und in der anderen nicht.

Zwei Aufrufe, 20 Credits. Region ist ein Parameter. Dieselbe Abfrage in zwei Märkten sind zwei Aufrufe.

Suche nach „best crm software" und liste nur die bezahlten Platzierungen mit der Werbetreibenden-Domain für jede auf.

Ein Aufruf, 10 Credits. Anzeigen kommen in einem eigenen Array und müssen nicht herausgefiltert werden.

Nimm die Abfrage „model context protocol" und gehe die ersten drei Seiten durch, dann sag mir, welche Domains mehr als eine Position belegen.

Drei Aufrufe, 30 Credits. Jede Seite nach der ersten ist ein frischer Aufruf mit dem Cursor, und lass q aus den Argumenten weg, sobald du einen hast.

Suche nach „who invented the transistor" und zeig mir DuckDuckGos eigene KI-Antwort neben den organischen Ergebnissen, auf denen sie aufbaut.

Ein Aufruf, 10 Credits.

Zwei davon sind der Grund, warum dieser Server existiert. Region als Ziel ist ein erstklassiger Parameter über 37 Märkte hinweg. Eine Abfrage über mehrere Länder zu vergleichen ist eine Schleife und keine Proxy-Einrichtung. Und bezahlte Platzierungen kommen getrennt von den organischen zurück, was das Tracking von Rankings nicht davon abhängig macht, zu erraten, welches Ergebnis eine Anzeige war.

Das Blättern kostet pro Aufruf. Eine Aufforderung, die zehn Seiten durchläuft, sind zehn Aufrufe und 100 Credits.

Werkzeuge

Ein Werkzeug. Die Beispiele unten sind aus echten Aufrufen gekürzt, und die Ergebnisse darin ändern sich, während sich das Web ändert. Lies sie als Formen.

Die Beispiele sind die Nutzlast, nicht die gesamte Antwort. Ein tools/call-Ergebnis trägt einen Textblock, und dieser Text ist selbst JSON, das url, status, text und json enthält, mit den gescrapten Daten unter json. Bei einer rohen JSON-RPC-Antwort ist der Pfad result.content[0].text, geparst, dann .json. Ein Chat-Client packt das für dich aus, und Code, der direkt mit dem Endpunkt spricht, tut das nicht.

DuckDuckGo-Suchergebnisse abrufen

hasdata_duckduckgo_serp_getSearchResults

Ruft eine DuckDuckGo-Ergebnisseite ab und gibt sie geparst zurück.

Parameter

Typ

Hinweise

q

string

Der Suchbegriff. Entweder q oder nextPageToken muss vorhanden sein

nextPageToken

string

Cursor aus pagination.nextPageToken der vorherigen Antwort. Gewinnt, wenn beides gesendet wird, und das q, das du mitgesendet hast, wird ohne Warnung ignoriert

kl

string

Region als <Land>-<Sprache>, 37 Werte von us-en und de-de bis jp-jp und wt-wt für keine Region

cc

string

Zweibuchstabiges Land, 36 Werte. Eine Alternative zu kl, wenn es mit setLang kombiniert wird

setLang

string

Oberflächen- und Ergebnissprache, 33 Werte

safeSearch

string

off, moderate oder strict

deviceType

string

desktop, mobile oder tablet

Sende entweder q oder nextPageToken. Keines zu senden gibt 422 zurück, das beide Felder nennt, weil die Anforderung bedingt ist und das Schema sie nicht als einfache Pflichtliste ausdrücken kann. Beides zu senden ist auch kein Fehler – der Cursor gewinnt und die Abfrage verpufft, sodass ein Agent, der q beim Blättern in den Argumenten behält, stillschweigend den falschen Ergebnissatz liest.

position zählt innerhalb der Seite, auf der es vorkommt, nicht über den gesamten Ergebnissatz. Seite zwei kommt mit Positionen zurück, die wieder bei 1 beginnen, und die Seitengröße ist ebenfalls nicht fest, sodass Seiten mit 10, 15 und 14 Ergebnissen alle auftauchen. Der absolute Rang ist daher die Anzahl der organischen Ergebnisse, die du bereits gesammelt hast, plus position – nicht etwas, das du aus der Seitennummer ableiten kannst. Baue einen Rangdatensatz ohne das und jede Seite trägt ihre eigene Nummer eins bei.

Gibt organicResults, ads, searchAssist und pagination zurück. Organische Einträge tragen position, title, link, displayedLink, source und snippet, plus ein Datum, Sitelinks und Videometadaten, wo DuckDuckGo sie zeigt. searchAssist enthält DuckDuckGos eigene KI-Antwort für die Abfrage.

ads und searchAssist fehlen, wenn die Seite keines von beiden hat, also teste auf den Schlüssel, bevor du ihn liest. organicResults kann ebenfalls fehlen, also lies es mit einem Standardwert, statt seine Anwesenheit als gegeben zu behandeln. Eine Abfrage ohne echte Treffer kommt trotzdem als volle Seite mit lose verwandten Einträgen zurück, was nicht so aussieht, wie „nichts gefunden" normalerweise aussieht.

{
  "organicResults": [
    {
      "position": 1,
      "title": "What is the Model Context Protocol (MCP)?",
      "link": "https://modelcontextprotocol.io/docs/getting-started/intro",
      "displayedLink": "modelcontextprotocol.io › docs › getting-started › intro",
      "source": "modelcontextprotocol.io",
      "snippet": "MCP is an open-source standard for connecting AI applications to external systems."
    }
  ],
  "ads": [
    { "position": 1, "title": "Make Agents Accountable", "link": "https://www.gravitee.io/platform/ai-agent-management" }
  ],
  "searchAssist": {
    "answer": "Model Context Protocol (MCP) is an open standard from Anthropic that lets LLMs connect to external tools, systems, and data sources using a shared interface."
  },
  "pagination": { "nextPageToken": "eyJ1cmwiOiJodHRwczovL2xpbmtzLmR1Y2tkdWNrZ28uY29t…" }
}

Fehler und Fehlerpfade

Dein Client sieht bei einem Werkzeugaufruf fast nie einen HTTP-Fehlercode. Die MCP-Schicht antwortet mit 200 und legt den Fehler in das Ergebnis, mit isError auf true und dem Grund als Text. Der Agent liest eine Nachricht, wo du vielleicht eine Statuszeile erwarten würdest.

Ein falscher Schlüssel taucht als Werkzeugausgabe auf, nicht als fehlgeschlagene Verbindung. Das Auflisten von Werkzeugen akzeptiert jeden nicht-leeren Schlüssel, also schließt der Client seinen Handshake ab und zeigt Grün. Der erste Werkzeugaufruf kommt dann mit isError: true und dem Text HasData API error: 401 Unauthorized zurück. Achte auf diese Zeichenkette, denn nichts früher im Ablauf meldet das Problem.

Ein fehlender Schlüssel ist der eine echte HTTP-Fehler. Die Autorisierung läuft vor jedem Werkzeug, und die Verbindung selbst schlägt mit 401 fehl.

Ein Argument, das das Schema bricht, wird abgelehnt, bevor es zu einer Suche wird. Der Server antwortet mit isError: true und dem Text MCP error -32602: Input validation error, der das Feld benennt. Es wird nichts abgerufen und nichts berechnet.

Weder q noch nextPageToken gibt 422 mit einem errors-Array zurück, das beide Felder und die requiredIfNotExists-Regel benennt, die sie verbindet.

Eine Abfrage ohne etwas dahinter gibt trotzdem Ergebnisse zurück. DuckDuckGo entscheidet über die Relevanz, also kommt eine unsinnige Zeichenkette als normale Seite mit zehn lose verwandten Einträgen zurück, wobei ads und searchAssist fehlen. Nichts markiert sie als Fehlschlag, was wichtig ist, wenn du einen Alarm auf „keine Abdeckung für diese Marke" aufbaust.

Ergebnisse, die Daten tragen, tragen auch eine requestMetadata.id, die es wert ist, im Support zitiert zu werden.

Preise, kostenlose Stufe und Grenzen

Jeder Aufruf kostet 10 Credits. Die Anzahl der Ergebnisse ändert den Preis nicht. Eine volle Seite kostet dasselbe wie eine Seite mit einem Eintrag.

Die kostenlose Testversion ist 1.000 Credits über 30 Tage ohne Karte, also 100 Suchen. Danach bekommt ein aktives Konto weiterhin 100 Credits täglich nachgefüllt, wann immer sein Guthaben unter 100 fällt, sodass ein Agent mit geringem Volumen auf der kostenlosen Stufe unbegrenzt läuft.

Bezahlte Pläne beginnen bei 49 $ pro Monat für 200.000 Credits, also 20.000 Suchen. Der Stückpreis fällt mit dem Volumen, von 2,45 $ pro 1.000 Suchen im Einstiegsplan auf 0,99 $ bei Business, 0,83 $ bei Growth und 0,75 $ bei den größten Plänen mit hohem Volumen. Aktuelle Zahlen stehen auf der Preisseite.

Dein Plan setzt auch die Nebenläufigkeit. Die kostenlose Testversion erlaubt 1 Anfrage gleichzeitig, Startup 15, Business 30, Growth 50, und die Pläne mit hohem Volumen laufen von 200 bis 1.500. Behandle den Überlauffall in allem Unbeaufsichtigten defensiv, denn ein Agent, der sich aufteilt, wird die Decke vor dir erreichen.

Eine Anfrage, die nicht mit 200 zurückkommt, wird nicht berechnet. Ein erfolgreicher Aufruf, der nichts findet, ist trotzdem ein Aufruf.

Werkzeugauswahl

Der apis-Abfrageparameter entscheidet, welche Werkzeuge dein Agent sieht. Weniger Werkzeuge bedeutet weniger Kontext, der für Werkzeugdefinitionen ausgegeben wird, und weniger Chancen, dass das Modell zum falschen greift.

?apis=duckduckgo                        the one tool in this repo
?apis=duckduckgo,google_serp            add Google search
?apis=duckduckgo,bing_serp,google_serp  three engines side by side

Der Parameter akzeptiert Provider-Namen wie duckduckgo und einzelne API-Namen wie google_maps_search. Falsch geschriebene Namen werden ignoriert. Wenn jeder Name falsch ist, schlägt die Anfrage mit 400 fehl, und der Body listet sowohl das auf, was nicht erkannt wurde, als auch jeden gültigen Wert. Lässt du den Parameter weg, setzt derselbe Endpoint alle 57 HasData-Tools frei.

Drei Engines in einem Agenten sind der häufigste Grund, die Liste hier zu erweitern, denn der Vergleich derselben Anfrage über DuckDuckGo, Google und Bing hinweg ist ein einziger Prompt, sobald alle drei freigeschaltet sind.

Wie es sich vergleicht

Die realistische Alternative ist ein selbst gehosteter Server. Die gängigen sind Python-Pakete, die du lokal ausführst, sie erreichen DuckDuckGo von deiner eigenen Maschine aus und reichen dem Modell einen formatierten Textblock. Das funktioniert gut für einen Recherche-Assistenten, der eine Frage nach der anderen beantwortet. Es funktioniert nicht mehr, wenn es um Volumen und eine stabile Struktur geht.

Selbst gehosteter Server

Dieser Server

Was eine Suche zurückgibt

Ein formatierter Textstring, der für das Modell zum Lesen gebaut wurde

JSON mit position, title, link, displayedLink, source, snippet, Daten und Sitelinks

Bezahlte Platzierungen

Zusammen mit dem restlichen Rauschen entfernt

In einem separaten ads-Array behalten

Pagination

Ein max_results-Limit auf einer einzelnen Seite

Cursor in jeder Antwort

Regionen

Ein region-Code

37 Regionscodes, oder Land und Sprache separat festgelegt

SafeSearch

Beim Serverstart festgelegt, vom Agenten bewusst nicht aufrufbar

Pro Aufruf

Wer die Seite abruft

Deine Maschine, über httpx, mit einem optionalen curl_cffi-Backend und einem Fallback zum Konfigurieren

Unsere

Durchsatz

Selbstgedrosselt auf 30 Suchen pro Minute

Plan-Concurrency, von 1 im Test bis 1.500

Was du ausführst

Eine Python-Umgebung, eine optionale Zusatzinstallation und Container- oder Proxy-Einstellungen, wenn es nicht auf localhost läuft

Eine URL und einen Header

Extraktion von Seiteninhalten

Ein fetch_content-Tool

Nicht angeboten

Kosten

Kostenlos

10 Credits pro Aufruf

Zwei Zeilen tragen die meiste Entscheidung. Ein Textblock ist die richtige Ausgabe für eine Chat-Antwort und die falsche für einen Ranking-Datensatz, weil das Rekonstruieren von position aus Prosa Arbeit ist, die du nicht machen solltest. Und dass das Abrufen bei uns liegt, bedeutet, dass die Backend-Frage wegfällt, ebenso wie die Wahl zwischen httpx und einem Browser-imitierenden Client, die Installation des Extras, von dem der Fallback abhängt, und das Lesen eines Stack-Traces, wenn ein einfacher HTTP-Client keine Seite mehr zurückbekommt.

Alles andere auf dieser Liste ist ein echter Kompromiss. Ein selbst gehosteter Server ist kostenlos, braucht kein Konto, hält deine Anfragen auf deiner eigenen Maschine und ruft Seiteninhalte ab, was dieser Server nicht tut. Wenn du ein paar Suchen pro Tag in einem Assistenten ausführst, ist er die bessere Wahl. Dieser hier ist für den Fall gedacht, in dem die Anzahl der Suchen, die Anzahl der Regionen oder die Form der Ausgabe anfängt, eine Rolle zu spielen.

Gegen DuckDuckGos eigene API. api.duckduckgo.com ist die Instant-Answer-API, und sie gibt eine Enzyklopädie-Zusammenfassung zurück, wenn eine existiert, statt einer Ergebnisseite. Es gibt keinen offiziellen Endpoint, der dir nach Rang geordnete Webergebnisse liefert, weshalb jede Option hier die Seite parst.

Was dieser Server nicht tut. Kein Seitenabruf oder Inhalts-Extraktion, keine Bild- oder News-Vertikalen, keine Autovervollständigung. Er gibt die Ergebnisseite zurück, geparst.

FAQ

Gibt es einen offiziellen DuckDuckGo-MCP-Server?

Nein. DuckDuckGo veröffentlicht keinen MCP-Server. Jede Option ist von jemand anderem gebaut. Die meisten sind Open-Source-Projekte, die lokal laufen, und dieser ist ein gehosteter Server, der von HasData gepflegt wird.

Was ist ein DuckDuckGo-MCP-Server?

Ein Server, der die DuckDuckGo-Suche als Tool bereitstellt, das ein KI-Client aufrufen kann. Der Client sendet einen Tool-Aufruf über das Model Context Protocol, der Server führt die Suche aus und gibt strukturiertes JSON zurück, und das Modell arbeitet mit dem Ergebnis und sieht nie eine HTML-Seite.

Brauche ich ein DuckDuckGo-Konto oder einen API-Schlüssel?

Nein. Die einzige Anmeldeinformation ist dein HasData-Schlüssel. DuckDuckGo hat kein Entwicklerprogramm, für das du dich anmelden könntest, und die Instant-Answer-API, die es veröffentlicht, liefert keine Suchergebnisse.

Muss ich etwas hosten oder ausführen?

Nein. Dies ist ein Remote-MCP-Server über streamable HTTP. Nichts zu installieren, keine Python-Umgebung, kein Browser-Paket, kein Prozess, den du neu starten musst.

Sind die Daten live oder gecacht?

Live. Jeder Aufruf ruft die Ergebnisseite zum Zeitpunkt der Anfrage ab und trägt seine eigene requestMetadata.id. Zwei identische Aufrufe sind zwei separate Abrufe und keine Wiedergabe einer gespeicherten Kopie.

Kann ich dieselbe Anfrage über Regionen hinweg vergleichen?

Ja, und das ist der Hauptgrund, einen Parameter statt eines Proxys zu verwenden. kl akzeptiert 37 Region-Codes, und cc mit setLang trennt Land und Sprache, wenn du sie getrennt brauchst. Jede Region ist ein eigener Aufruf.

Was passiert, wenn DuckDuckGo sein Layout ändert?

Nichts auf deiner Seite. Wir verfolgen die Änderungen und halten das Antwort-Schema stabil, sodass Feldnamen und Typen an Ort und Stelle bleiben. Ein Block ohne etwas zu melden fehlt in der Antwort, also lies ads und searchAssist mit einem Standardwert.

Kann ich das zusammen mit anderen HasData-APIs verwenden?

Ja. Der Parameter apis akzeptiert eine Liste, und ?apis=duckduckgo,google_serp,bing_serp gibt deinem Agenten drei Suchmaschinen auf einmal.

Kann ich mich mit OAuth anmelden, statt einen Schlüssel einzufügen?

Ja, in Clients, die das unterstützen. Claude Desktop und Cursor können den Endpoint als Connector hinzufügen und sich anmelden. Unbeaufsichtigte Agenten und Skripte verwenden den x-api-key-Header.

Compliance und personenbezogene Daten

HasData greift nur auf öffentlich zugängliche Daten zu. Die Bedingungen einer Plattform können automatisierten Zugriff einschränken, und du bist für deine eigene Compliance verantwortlich. Wenn die Daten, die du sammelst, personenbezogene Informationen enthalten, stelle sicher, dass du eine rechtliche Grundlage dafür hast, gemäß GDPR, CCPA oder den entsprechenden Regeln in deiner Rechtsordnung.

Produktseite und Request-Builder

DuckDuckGo-SERP-API

Server-Dokumentation

MCP-Server-Docs

Alle 57 Tools in einem Server

HasData/hasdata-mcp

Client-Walkthroughs

MCP-Clients und Integrationen

Die anderen Suchmaschinen, die wir parsen

Google, Bing und 53 weitere APIs

Pläne und Credit-Kosten

Pläne und Credit-Kosten

Schlüssel und Nutzung

HasData-Dashboard

Entwicklung

Dieses Repository ist Konfiguration und Dokumentation für einen Remote-Server. Es gibt keinen Build-Schritt und nichts zu containerisieren.

Die Tests in test/ prüfen den Tool-Vertrag, den Teil, der ohne einen Commit hier brechen kann. Sie prüfen, dass ?apis=duckduckgo genau ein Tool zurückgibt, dass sein Name sich nicht geändert hat, dass die Parameter, die dieses README dokumentiert, immer noch existieren mit den Enums, die es zitiert, und dass der verwendete Schlüssel tatsächlich akzeptiert wird. Der letzte Check führt eine echte Suche aus und kostet 10 Credits, was der Preis für einen Kanarienvogel ist, der aus dem richtigen Grund scheitern kann.

# macOS and Linux
HASDATA_API_KEY=your_key_here npm test

# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test

Dieselbe Suite läuft in CI bei jedem Push und einmal pro Woche nach Zeitplan, weil sich die Upstream-Tool-Liste ändern kann, ohne dass jemand dieses Repository anfasst. Ein Fehler bedeutet, dass sich die Tool-Liste bewegt hat, der Schlüssel nicht mehr funktioniert oder der Endpoint nicht erreichbar war, und die Assertion-Message sagt, welcher.

Mitwirken

Korrekturen an der Parameter-Tabelle und dem Antwort-Beispiel sind der nützlichste Beitrag, weil das die Teile sind, die abweichen. Füge den Aufruf, den du gemacht hast, und die Antwort, die du bekommen hast, hinzu. Pull-Requests von Forks führen die Suite ohne Schlüssel aus, und die Live-Checks werden übersprungen, statt rot zu werden.

Lizenz

MIT. Siehe LICENSE.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    This MCP server utilizes DuckDuckGo for web searches, providing structured search results with metadata and features like smart content classification and language detection, facilitating easy integration with AI clients supporting the MCP protocol.
    1
    26
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A MCP server for DuckDuckGo HTML search. Unlike other DuckDuckGo MCP servers, this one isn't just AI slop.
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    DuckDuckGo Search MCP Server. Scrapes DuckDuckGo Lite directly — no API key required, no rate limits, robust anti-bot protection.
    3
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for internet search via direct Google and DuckDuckGo HTML scraping with AI-powered result normalization and optional summarization, requiring no API keys for search.
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP server for Google search results via SERP API

  • Hosted MCP: 795 structured web-data tools for search, maps, commerce, social, gaming & finance.

  • Hosted Amazon Seller and Vendor MCP server for Claude, ChatGPT, Cursor, Codex, Gemini, Copilot.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/HasData/duckduckgo-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server