HasData DuckDuckGo について
HasData DuckDuckGoは、構造化されたDuckDuckGo検索データを提供するホスト型MCPサーバーです。広告とオーガニック検索結果を分け、地域指定とDuckDuckGo独自のAI回答にも対応します。
主な機能
- 01構造化されたオーガニック検索結果
- 02広告を別配列で返却
- 03Search AssistのAI回答
- 0437地域の指定
- 05カーソルによるページ送り
活用シーン
- 01地域ごとの検索結果の比較
- 02オーガニック順位と広告の追跡
- 03複数ページの検索結果の収集
MCP 対応
ストリーミング可能なHTTP経由で、DuckDuckGo検索ツールとパラメーターのリソースをMCPクライアントに提供します。stdioランチャーも利用できます。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.hasdata.com/mcp?apis=duckduckgoclaude mcp add --transport http com-hasdata-duckduckgo https://mcp.hasdata.com/mcp?apis=duckduckgo{"mcpServers":{"com-hasdata-duckduckgo":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=duckduckgo"}}}Cursor で開く{"servers":{"com-hasdata-duckduckgo":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=duckduckgo"}}}VS Code で開く{"mcpServers":{"com-hasdata-duckduckgo":{"type":"http","url":"https://mcp.hasdata.com/mcp?apis=duckduckgo"}}}{"mcpServers":{"com-hasdata-duckduckgo":{"serverUrl":"https://mcp.hasdata.com/mcp?apis=duckduckgo"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://mcp.hasdata.com/mcp?apis=duckduckgo認証が必要ツール
2| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| pets | number | いいえ | ペットの数。 |
| neLat | number | いいえ | 地図のバウンディングボックスの北東角の緯度。4 つの境界ボックス座標をすべて指定すると、場所ではなくボックス内でリスティングを検索します。 |
| neLng | number | いいえ | 地図のバウンディングボックスの北東角の経度。 |
| swLat | number | いいえ | 地図のバウンディングボックスの南西角の緯度。 |
| swLng | number | いいえ | 地図のバウンディングボックスの南西角の経度。 |
| adults | number | いいえ | 大人の人数。 |
| checkIn | string | はい | リスティングのチェックイン日。 |
| infants | number | いいえ | 乳幼児の人数。 |
| checkOut | string | いいえ | リスティングのチェックアウト日。 |
| children | number | いいえ | 子どもの人数。 |
| location | string | いいえ | リスティングを検索する場所。完全な地図バウンディングボックス(neLat、neLng、swLat、swLng)を指定しない場合は必須です。 |
| nextPageToken | string | いいえ | 次のページの結果を取得するためのトークン。 |
詳細
DuckDuckGo MCP Server
Claude、Cursor、Windsurf、その他あらゆる MCP クライアントに、構造化 JSON 形式の DuckDuckGo 検索結果を提供するホスト型 Model Context Protocol(MCP)サーバーです。順位付きのオーガニック検索結果、独立した配列にまとめられた広告、DuckDuckGo 独自の AI 回答、対象となる 37 の地域に対応しています。大量の検索と解析を想定して構築されており、ローカルブラウザーも、設定が必要なフォールバックチェーンもありません。
毎月 1,000 クレジットを無料で利用でき、カードの登録も不要です。100 回検索できます。
https://mcp.hasdata.com/mcp?apis=duckduckgo
目次
- 必要なもの
- クイックスタート
- プロンプトの例
- ツール
- エラーと失敗時の処理
- 料金、無料枠、制限
- ツールの選択
- 他との比較
- よくある質問
- HasData のリンク
- 開発
- コントリビューション
- ライセンス
必要なもの
カスタムヘッダーを使ったストリーミング可能な HTTP に対応する MCP クライアントと、ダッシュボードから取得できる無料の HasData API キーが必要です。それ以外は必要ありません。これはリモートサーバーのため、最も簡単な方法は URL とヘッダーを指定することです。ブラウザーパッケージを追加したり、ローカルプロセスを起動し続けたりする必要はありません。stdio のみのクライアントでは、代わりに @hasdata/duckduckgo-mcp(npm)または hasdata-duckduckgo-mcp(PyPI)のランチャーを利用できます。
クイックスタート
サーバー URL はどのクライアントでも同じです。Claude Code と Claude Desktop では実際に動作を確認しています。その他のブロックは、それぞれのクライアントがリモートサーバー向けに文書化している形式に従っています。
| フィールド | 値 |
|---|---|
| URL | https://mcp.hasdata.com/mcp?apis=duckduckgo |
| トランスポート | HTTP、ストリーミング可能 |
| 認証ヘッダー | x-api-key: HASDATA_API_KEY |
OAuth に対応しているクライアントでは、同じ URL をコネクタとして追加し、設定ファイルにキーを記述せずにサインインできます。
Claude Code
claude mcp add --transport http duckduckgo "https://mcp.hasdata.com/mcp?apis=duckduckgo" \
--header "x-api-key: HASDATA_API_KEY"
Claude Desktop
「設定」、「コネクタ」、「カスタムコネクタを追加」の順に選択し、https://mcp.hasdata.com/mcp?apis=duckduckgo を貼り付けてサインインします。
設定ファイルを使う場合、Claude Desktop はローカル(stdio)サーバーのみを読み込むため、stdio ランチャーを介してリモートサーバーに接続します。@hasdata/duckduckgo-mcp パッケージがそのランチャーで、キーを環境から読み込みます。claude_desktop_config.json に次の内容を追加します。
{
"mcpServers": {
"duckduckgo": {
"command": "npx",
"args": ["-y", "@hasdata/duckduckgo-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Node ではなく Python を使う場合は、ランチャーを PyPI パッケージに置き換えます。手動でインストールしなくても uvx で実行できます。
{
"mcpServers": {
"duckduckgo": {
"command": "uvx",
"args": ["hasdata-duckduckgo-mcp"],
"env": { "HASDATA_API_KEY": "YOUR_KEY" }
}
}
}
Cursor
すべてのプロジェクトで使う場合は ~/.cursor/mcp.json、特定のプロジェクトで使う場合は .cursor/mcp.json を使用します。
{
"mcpServers": {
"duckduckgo": {
"url": "https://mcp.hasdata.com/mcp?apis=duckduckgo",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Windsurf
~/.codeium/windsurf/mcp_config.json を使用します。Windsurf では url ではなく、フィールド名に serverUrl を使います。
{
"mcpServers": {
"duckduckgo": {
"serverUrl": "https://mcp.hasdata.com/mcp?apis=duckduckgo",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Cline
{
"mcpServers": {
"duckduckgo": {
"url": "https://mcp.hasdata.com/mcp?apis=duckduckgo",
"type": "streamableHttp",
"headers": { "x-api-key": "HASDATA_API_KEY" },
"disabled": false
}
}
}
VS Code
ワークスペース内の .vscode/mcp.json を使用します。
{
"servers": {
"duckduckgo": {
"type": "http",
"url": "https://mcp.hasdata.com/mcp?apis=duckduckgo",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
Codex CLI
~/.codex/config.toml を使用します。
[mcp_servers.duckduckgo]
url = "https://mcp.hasdata.com/mcp?apis=duckduckgo"
[mcp_servers.duckduckgo.headers]
"x-api-key" = "HASDATA_API_KEY"
Gemini CLI
~/.gemini/settings.json を使用します。
{
"mcpServers": {
"duckduckgo": {
"httpUrl": "https://mcp.hasdata.com/mcp?apis=duckduckgo",
"headers": { "x-api-key": "HASDATA_API_KEY" }
}
}
}
プロンプトの例
コードではなく、プロンプトです。1 つ貼り付けると、エージェントが自分でツールを呼び出します。MCP ではモデルが呼び出し回数を決め、成功した呼び出しごとに 10 クレジットがかかるため、それぞれに必要な呼び出し回数を記載しています。
DuckDuckGo で「model context protocol」を検索し、順位とドメインを添えて上位 10 件の結果を教えてください。
1 回の呼び出し、10 クレジット。
「vpn review」というクエリをドイツ地域で実行し、次に米国地域で実行して、片方にだけ表示されるドメインを教えてください。
2 回の呼び出し、20 クレジット。地域はパラメーターです。2 つの市場で同じクエリを実行する場合、呼び出しは 2 回です。
「best crm software」を検索し、有料掲載のみを一覧にして、それぞれの広告主のドメインを示してください。
1 回の呼び出し、10 クレジット。広告は独自の配列で返されるため、ヒューリスティックによるフィルタリングは不要です。
「model context protocol」というクエリで最初の 3 ページを確認し、複数の順位を占めているドメインを教えてください。
3 回の呼び出し、30 クレジット。最初のページ以降は、カーソルを使ってページごとに新しい呼び出しが必要です。1 回目の呼び出し後は、引数から q を省きます。
「who invented the transistor」を検索し、DuckDuckGo 独自の AI 回答を、回答の根拠となったオーガニック検索結果と並べて表示してください。
1 回の呼び出し、10 クレジット。
このうち 2 つが、このサーバーが存在する理由です。地域ターゲティングは 37 の市場全体で第一級のパラメーターです。国をまたいで同じクエリを比較するのはループ処理であり、プロキシの設定は必要ありません。また、有料掲載はオーガニック検索結果とは別に返されるため、広告かどうかの推測に頼らずに順位を追跡できます。
ページ送りには毎回呼び出しが必要です。10 ページを確認するプロンプトでは、10 回の呼び出しとなり、100 クレジットがかかります。
ツール
| ツール | 返される内容 |
|---|---|
hasdata_duckduckgo_serp_getSearchResults | オーガニック検索結果(タイトル、URL、スニペット、表示 URL、順位、日付、サイトリンク、動画メタデータ)、広告、Search Assist の AI 回答。1 回の呼び出しにつき 10 クレジット |
ツールは 1 つです。以下のサンプルは実際の呼び出し結果を抜粋したもので、ウェブの変化に伴って内容も変わります。結果の形式として確認してください。
サンプルはペイロードであり、レスポンス全体ではありません。tools/call の結果には 1 つのテキストブロックが含まれ、そのテキスト自体が url、status、text、json を格納した JSON で、スクレイピングしたデータは json の下にあります。生の JSON-RPC レスポンスでは、パスは result.content[0].text で、これを解析してから .json にアクセスします。チャットクライアントはこれを展開してくれますが、エンドポイントに直接接続するコードでは展開されません。
DuckDuckGo の検索結果を取得する
hasdata_duckduckgo_serp_getSearchResults
DuckDuckGo の検索結果ページを取得し、解析した結果を返します。
| パラメーター | 型 | 備考 |
|---|---|---|
q | string | 検索語です。q または nextPageToken のいずれかが必要です |
nextPageToken | string | 前回のレスポンスにある pagination.nextPageToken のカーソルです。両方を送信した場合はこちらが優先され、併せて送信した q は警告なしで無視されます |
kl | string | <country>-<language> 形式の地域指定です。us-en や de-de から、地域指定なしの jp-jp や wt-wt まで、37 種類あります |
cc | string | 2 文字の国コードで、36 種類あります。setLang と組み合わせる場合は kl の代わりに使用できます |
setLang | string | インターフェースと検索結果の言語で、33 種類あります |
safeSearch | string | off、moderate、strict のいずれかです |
deviceType | string | desktop、mobile、tablet のいずれかです |
qまたはnextPageTokenのどちらかを送信してください。どちらも送信しないと、要件が条件付きで、スキーマでは単純な必須項目のリストとして表現できないため、両方のフィールド名を示す 422 エラーが返されます。両方を送信してもエラーにはなりません。カーソルが優先され、クエリは無視されます。そのため、ページを取得する際も引数にqを残すエージェントは、気付かないまま誤った検索結果を読み取ります。
positionは検索結果全体ではなく、その結果が取得されたページ内での順位です。2 ページ目では順位が再び 1 から始まり、ページサイズも一定ではないため、10 件、15 件、14 件のページが返されることがあります。したがって、絶対順位は、すでに収集したオーガニック検索結果の数にpositionを足した値であり、ページ番号から算出できるものではありません。それを考慮せずに順位データセットを作成すると、各ページの最上位の結果がすべて 1 位として扱われてしまいます。
organicResults、ads、searchAssist、pagination を返します。オーガニック検索結果には position、title、link、displayedLink、source、snippet が含まれ、DuckDuckGo に表示される場合は日付、サイトリンク、動画メタデータも含まれます。searchAssist には、クエリに対する DuckDuckGo 独自の AI 回答が格納されます。
ページに広告や Search Assist がない場合、
adsとsearchAssistは存在しないため、読み取る前にキーの有無を確認してください。organicResultsも存在しない場合があるので、必ず存在するものとして扱うのではなく、デフォルト値を指定して読み取ってください。実際に一致する結果がないクエリでも、関連性の低いエントリーが並ぶページ全体が返されることがあります。「何も見つかりませんでした」という場合の通常の挙動とは異なります。
{
"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…" }
}
プロンプトとリソース
サーバーは5つのリソースを公開しており、受け付ける値が固定リストになっている各パラメーターに1つずつ対応します。拒否された呼び出しから値の使い方を学ぶより、リソースを読み取る方が低コストで、クレジットもかかりません。各 URI は hasdata://duckduckgo/<parameter> です。
| パラメーター | 値の数 | 選択する内容 |
|---|---|---|
kl | 37 | <country>-<language> 形式の DuckDuckGo 地域コード(例:us-en、de-de)です。国と言語設定を同時に指定し、cc/setLang より優先されます。地域を指定しない場合は wt-wt を使用してください。 |
cc | 36 | 検索対象となる国の2文字の国コードです。setLang と組み合わせて DuckDuckGo の地域を指定します。kl が設定されている場合は無視されます。 |
setLang | 33 | 優先する検索結果/インターフェースの言語コードです。通常は2文字(例:en、de)で、一部の言語ではスクリプトタグ付きの形式(例:zh-hans、zh-hant)もあります。cc と組み合わせて DuckDuckGo の地域を指定します。kl が設定されている場合は無視されます。 |
safeSearch | 3 | アダルトコンテンツのフィルタリングオプションです。 |
deviceType | 3 | 検索に使用するデバイスタイプを指定します。 |
リストの取得に API キーは不要なため、ユーザーが登録する前にクライアントが読み取ることができます。
エラーと失敗するケース
ツール呼び出しでクライアントに HTTP エラーコードが返ることはほとんどありません。MCP レイヤーは 200 を返し、失敗内容を結果に含めます。isError は true に設定され、理由がテキストで示されます。ステータス行を期待する場面で、エージェントはメッセージを読み取ります。
キーが間違っていても、接続エラーではなくツールの出力として通知されます。 ツール一覧の取得では空でないキーなら何でも受け付けるため、クライアントはハンドシェイクを完了し、正常な状態を表示します。その後、最初のツール呼び出しで isError: true と HasData API error: 401 Unauthorized というテキストが返されます。それ以前の処理では問題が報告されないため、この文字列を確認してください。
キーがない場合に限り、実際の HTTP エラーが発生します。 すべてのツールより先に認証が行われるため、接続自体が 401 で失敗します。
スキーマに適合しない引数は、検索として処理される前に拒否されます。 サーバーは isError: true と MCP error -32602: Input validation error というテキストを返し、該当するフィールドを示します。データは取得されず、課金もされません。
q と nextPageToken のどちらも指定しない場合は、 両方のフィールドと、それらを関連付ける requiredIfNotExists ルールを示す errors 配列とともに、422 が返されます。
クエリに該当する情報がなくても、結果は返されます。 関連性は DuckDuckGo が判断するため、意味のない文字列でも、ads と searchAssist が含まれない、関連性の低い項目が10件並ぶ通常のページが返されます。該当なしを示す情報は何もないため、「このブランドに関する情報がない」ことを知らせるアラートを作成する場合は注意が必要です。
データを含む結果には、サポートへの問い合わせ時に引用できる requestMetadata.id も含まれます。
料金、無料枠、上限
呼び出しごとに10クレジットかかります。結果の件数によって料金は変わりません。1件だけのページも、全件が揃ったページと同じ料金です。
無料枠は毎月1,000クレジット、カード登録不要で、検索100回分に相当します。請求サイクルごとに更新されるため、利用量の少ないエージェントであれば無料枠を期限なく使い続けられます。
有料プランは、200,000クレジット(検索20,000回分)の月額59ドルから利用できます。単価は利用量に応じて下がり、エントリープランでは検索1,000回あたり2.95ドル、Basic では1.19ドル、Growth の各プランでは0.83ドルです。最新の料金は料金ページをご覧ください。
プランによって同時実行数も変わります。無料枠では同時に1件、Startup では5件、Basic では15件、Growth の各プランでは50~500件まで実行できます。放置状態で実行するものは、上限超過を想定して安全に処理してください。ファンアウトするエージェントは、あなたが気づくより先に上限に達する可能性があります。
200 以外の応答が返ったリクエストは課金されません。結果が見つからなくても、正常に完了した呼び出しは課金対象です。
ツールの選択
apis クエリパラメーターによって、エージェントに表示されるツールが決まります。ツールを絞ると、ツール定義に使われるコンテキストが減り、モデルが誤ったツールを選ぶ可能性も低くなります。
?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
このパラメーターには、duckduckgo のようなプロバイダー名や、google_maps_search のような個別の API 名を指定します。スペルミスのある名前は無視されます。すべての名前が誤っている場合、リクエストは 400 エラーとなり、本文には認識できなかった名前と、有効な値がすべて記載されます。パラメーターを省略すると、同じエンドポイントで HasData の 57 個のツールすべてを利用できます。
ここでリストを広げる一般的な理由は、1 つのエージェントで 3 つのエンジンを使うことです。3 つすべてを公開すれば、DuckDuckGo、Google、Bing で同じクエリを比較するのに必要なプロンプトは 1 つだけです。
比較
現実的な代替手段は、セルフホスト型サーバーです。よく使われるものはローカルで実行する Python パッケージで、手元のマシンから DuckDuckGo にアクセスし、モデルに整形済みのテキストブロックを渡します。1 度に 1 つの質問に答えるリサーチアシスタントには適しています。検索量を増やしたい場合や、安定した形式が必要な場合には対応できません。
| セルフホスト型サーバー | このサーバー | |
|---|---|---|
| 検索結果の形式 | モデルが読み取れるように作られた整形済みテキスト文字列 | position、title、link、displayedLink、source、snippet、日付、サイトリンクを含む JSON |
| 有料掲載 | ほかのノイズとともに除外 | 別個の ads 配列に保持 |
| ページネーション | 1 ページに対する max_results 上限 | すべてのレスポンスにカーソルを含む |
| 地域 | 1 つの region コード | 37 個の地域コード、または国と言語を個別に設定 |
| セーフサーチ | サーバー起動時に固定され、エージェントからは意図的に呼び出せない | 呼び出しごとに設定 |
| ページを取得する場所 | オプションの curl_cffi バックエンドと、設定可能なフォールバックを備えた httpx 経由で、手元のマシンから取得 | 当社 |
| スループット | 1 分あたり 30 件に自己制限 | プランごとの同時実行数。無料プランの 1 件から 1,500 件まで |
| 実行するもの | Python 環境、オプションの追加パッケージ、および localhost 以外で実行する場合のコンテナまたはプロキシの設定 | URL とヘッダー |
| ページコンテンツの抽出 | fetch_content ツール | 提供なし |
| コスト | 無料 | 1 回あたり 10 クレジット |
判断を左右するのは、主に 2 つの項目です。テキストの塊はチャットの回答には適した出力ですが、ランキングデータセットには不向きです。文章から position を再構成する作業は、本来行う必要のないものだからです。また、ページの取得を当社が行うため、バックエンドについて検討する必要がありません。httpx とブラウザーを偽装するクライアントのどちらを使うか選んだり、フォールバックに必要な追加パッケージをインストールしたり、通常の HTTP クライアントでページを取得できなくなったときにスタックトレースを調べたりする必要もありません。
ほかの項目はいずれも、実際に比較検討すべき点です。セルフホスト型サーバーは無料で、アカウントも不要です。クエリは手元のマシンにとどまり、ページコンテンツも取得できますが、このサーバーにはその機能がありません。1 つのアシスタント内で 1 日に数件検索する程度なら、セルフホスト型のほうが適しています。こちらは、検索数、地域数、または出力形式が重要になってきた場合に適しています。
DuckDuckGo の API との比較。 api.duckduckgo.com は Instant Answer API であり、検索結果ページではなく、該当する場合は百科事典の概要を返します。ランキング付きのウェブ検索結果を提供する公式エンドポイントはありません。そのため、ここで紹介する選択肢はすべてページを解析します。
このサーバーが対応していないこと。 ページの取得やコンテンツの抽出、画像検索やニュース検索、自動補完には対応していません。検索結果ページを解析して返します。
FAQ
DuckDuckGo の公式 MCP サーバーはありますか?
いいえ。DuckDuckGo は MCP サーバーを公開していません。どの選択肢も、ほかの開発者が構築したものです。ほとんどはローカルで実行するオープンソースプロジェクトで、こちらは HasData が保守するホスト型サーバーです。
DuckDuckGo MCP サーバーとは何ですか?
AI クライアントが呼び出せるツールとして、DuckDuckGo 検索を公開するサーバーです。クライアントは Model Context Protocol 経由でツール呼び出しを送信し、サーバーが検索を実行して構造化された JSON を返します。モデルはその結果を使い、HTML ページを見ることはありません。
DuckDuckGo のアカウントや API キーは必要ですか?
いいえ。必要な認証情報は HasData キーだけです。DuckDuckGo には登録が必要な開発者プログラムはなく、公開されている Instant Answer API からは検索結果が返されません。
何かをホストしたり、実行したりする必要はありますか?
いいえ。これはストリーミング可能な HTTP を使うリモート MCP サーバーです。インストールするものも、Python 環境も、ブラウザーパッケージも、再起動するプロセスもありません。
データはリアルタイムですか、それともキャッシュされていますか?
リアルタイムです。各呼び出しはリクエスト時に検索結果ページを取得し、それぞれ独自の requestMetadata.id を持ちます。同一の呼び出しを 2 回行った場合も、保存済みのコピーを再生するのではなく、別々に取得します。
同じクエリを地域ごとに比較できますか?
はい。それが、プロキシではなくパラメーターを使う主な理由です。kl は 37 の地域コードに対応し、国と言語を分ける必要がある場合は、cc と setLang を組み合わせます。各地域で個別に呼び出します。
DuckDuckGo のレイアウトが変更された場合はどうなりますか?
お客様側での対応は不要です。変更を追跡し、レスポンススキーマを安定させているため、フィールド名と型は変わりません。報告する内容がないブロックはレスポンスに含まれないため、ads と searchAssist はデフォルト値を設定して読み取ってください。
他の HasData API と一緒に使えますか?
はい。apis パラメーターにはリストを指定できます。?apis=duckduckgo,google_serp,bing_serp を指定すると、エージェントが3 つの検索エンジンを一度に利用できます。
キーを貼り付ける代わりに、OAuth でサインインできますか?
はい。対応しているクライアントで利用できます。Claude Desktop と Cursor では、エンドポイントをコネクターとして追加してサインインできます。無人エージェントやスクリプトでは、x-api-key ヘッダーを使用します。
コンプライアンスと個人データ
HasData は公開されているデータのみを取得します。プラットフォームの利用規約により自動アクセスが制限されている場合があり、コンプライアンスの遵守はお客様の責任です。収集するデータに個人情報が含まれる場合は、GDPR、CCPA、またはお客様の管轄区域で適用される同等の規則に基づく適法な根拠があることを確認してください。
HasData のリンク
| 製品ページとリクエストビルダー | DuckDuckGo SERP API |
| サーバーのドキュメント | MCP サーバーのドキュメント |
| 1 つのサーバーで使える 57 個すべてのツール | HasData/hasdata-mcp |
| クライアントの使い方ガイド | MCP クライアントとインテグレーション |
| 対応しているその他の検索エンジン | Google、Bing、その他 53 個の API |
| プランとクレジットの費用 | プランとクレジットの費用 |
| キーと使用状況 | HasData ダッシュボード |
| npm の Node ランチャー | @hasdata/duckduckgo-mcp |
| PyPI の Python ランチャー | hasdata-duckduckgo-mcp |
開発
このリポジトリは、リモートサーバーの設定とドキュメントです。ビルド手順はなく、コンテナ化するものもありません。
test/ 内のテストでは、コミットなしでも変更される可能性のあるツールの契約を検証します。?apis=duckduckgo がツールを正確に1つ返すこと、その名前が変更されていないこと、この README で説明しているパラメーターが記載どおりの列挙値とともに存在すること、そして使用中のキーが実際に受け入れられることを確認します。最後のチェックでは実際に検索を実行し、10クレジットを消費します。これは、適切な理由で失敗する可能性のあるカナリアの費用です。
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test
同じテストスイートは、プッシュのたびに CI で実行され、週1回スケジュールに従って実行されます。上流のツール一覧は、このリポジトリに誰も手を加えなくても変更される可能性があるためです。失敗した場合は、ツール一覧が変わったか、キーが使えなくなったか、エンドポイントに到達できなかったことを意味し、アサーションメッセージでその原因が示されます。
貢献
パラメーター表とレスポンス例の修正が、最も役立つ貢献です。これらは変更されやすい箇所だからです。実行した呼び出しと、受け取ったレスポンスを記載してください。フォークからのプルリクエストでは、キーなしでテストスイートが実行され、ライブチェックは失敗ではなくスキップされます。
ライセンス
MIT。LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。