mcpField
D
duckdata

duckdata

ローカル
github.com/CloudCorpRecords検索02 日前に更新

duckdata について

duckdata は、HasData がホストする DuckDuckGo MCP サーバーへのローカルブリッジです。構造化された検索結果を必要とするクライアント向けに、広告を通常の検索結果と分けて返す読み取り専用ツールを中継します。

主な機能

  1. 01順位付き DuckDuckGo 検索結果の取得
  2. 02広告と通常の検索結果の分離
  3. 03地域・言語・デバイスによる絞り込み
  4. 04SafeSearch の設定とページ送り

活用シーン

  1. 01エージェント向けの検索結果取得
  2. 02ページトークンを使った検索の継続

MCP 対応

MCP クライアントに DuckDuckGo 検索ツールを公開し、HasData のホスト型 MCP サーバーへ呼び出しを転送して、結果を変更せず返します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"cloudcorprecords-duckdata": {
"command": "npx",
"args": [
"-y",
"@reneturcios/duckdata"
]
}
}
}
起動コマンドnpx -y @reneturcios/duckdata

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@reneturcios/duckdata0.1.0
ocighcr.io/cloudcorprecords/duckdata:0.1.0

ツール

1

掲載時のツール一覧 · 2 日前に更新

パラメーター型必須説明
qstringいいえSERP をスクレイピングする検索語を指定します。`nextPageToken`(続きのページのクエリを含む)が指定されている場合を除き、必須です。
ccenumいいえ検索元の国を指定する2文字の国コードです。`setLang` と組み合わせて DuckDuckGo の地域設定を構成します。`kl` が設定されている場合は無視されます。ar | au | at | be | br | ca | cl | dk | fi | fr | de | hk | in | id | it | jp | kr | my | mx | nl | nz | no | cn | pl | pt | ph | ru | sa | za | es | se | ch | tw | tr | gb | us
klenumいいえDuckDuckGo の地域コードです。形式は `<country>-<language>` です(例:`us-en`、`de-de`)。国とインターフェース言語を同時に設定し、`cc`/`setLang` より優先されます。地域を指定しない場合は `wt-wt` を使用します。ar-es | au-en | at-de | be-nl | be-fr | br-pt | ca-en | ca-fr | cl-es | dk-da | fi-fi | fr-fr | de-de | hk-tzh | in-en | id-en | it-it | jp-jp | kr-kr | my-en | mx-es | nl-nl | nz-en | no-no | cn-zh | pl-pl | ph-en | ru-ru | za-en | es-es | se-sv | ch-de | tw-tzh | tr-tr | uk-en | us-en | wt-wt
setLangenumいいえ優先する結果/インターフェースの言語コードです。通常は 2 文字(例:`en`、`de`)で、一部の言語ではスクリプトタグ付きの形式(例:`zh-hans`、`zh-hant`)を使用します。`cc` と組み合わせて DuckDuckGo の地域を指定します。`kl` が設定されている場合は無視されます。ar | ca | zh-hans | zh-hant | hr | cs | da | nl | en | et | fi | fr | de | he | hu | it | ja | ko | lv | lt | nb | pl | pt | ro | ru | sk | sl | es | sv | th | tr | uk | vi
deviceTypeenumいいえ検索に使用するデバイスの種類を指定します。desktop | mobile | tablet
safeSearchenumいいえ成人向けコンテンツのフィルタリングオプションです。off | moderate | strict
nextPageTokenstringいいえ各レスポンスで `nextPageToken` として返される不透明なトークンです。次のページの結果を取得するには、`q` の代わりに渡します。元のリクエストのセッションに紐づく署名済みページ URL が含まれるため、そのまま使用する必要があり、手動で作成することはできません。次のページがない場合は返されません。

詳細

duckdata

duckdata は、ホスト型の HasData DuckDuckGo MCP サーバーへの小さなローカルブリッジです。DuckDuckGo の検索結果を JSON として返します。クエリを指定すると、タイトル、URL、スニペット、表示 URL、順位、日付、サイトリンク、動画メタデータを含む、順位付けされたオーガニック検索結果が返されます。広告は別の配列に分けられ、上流サーバーが提供する場合は Search Assist AI の回答も含まれます。

このブリッジは独自の検索結果を保持しません。ライブエンドポイントから取得した上流サーバーのツール一覧を、そのままローカルで提供し、各ツール呼び出しを上流に転送して、結果を変更せずに返します。取得時に確認された機能は、読み取り専用の検索取得が 1 つだけです。書き込み、メッセージング、決済のツールはありません。

ツール

  • hasdata_duckduckgo_serp_getSearchResults — DuckDuckGo の SERP を取得します。取得時のスキーマには required 配列がありません。q は検索語です(nextPageToken が指定されている場合を除き必須です。nextPageToken には次のページで継続するクエリが含まれます)。kl(us-en や de-de のような <country>-<language> コード。37 地域に対応)で地域を指定するか、代わりに cc と setLang を組み合わせて指定します。kl が優先されます。safeSearch(off、moderate、strict)で成人向けコンテンツをフィルタリングし、deviceType(desktop、mobile、tablet)でフォームファクターを選択し、前回のレスポンスで返された不透明な nextPageToken を使ってページを移動します。

設定

  • HASDATA_DUCKDUCKGO_MCP_URL(任意)— 上流エンドポイントを上書きします。デフォルトは https://mcp.hasdata.com/mcp?apis=duckduckgo です。(この上書き用フックは、この再構築で独自にラベル付けした再現です。)
  • HASDATA_API_KEY(任意)— 設定すると、すべての上流リクエストに、呼び出し元自身の HasData API キーを使った x-api-key: <key> ヘッダーが付加されます。設定されていない場合、キーのヘッダーは送信されません。(ヘッダー名と環境変数名は、元のレジストリレコードで固定されています。この環境変数からキーを転送する動作は、ラベル付けした再現です。元の機能はキーなしで取得されています。)
転送の仕組み

最初のツール呼び出し時に、クライアントは上流とのストリーミング可能な HTTP セッションを開きます。まず JSON-RPC の initialize リクエスト(protocolVersion 2025-03-26、clientInfo name duckdata)を送信し、続いて notifications/initialized 通知を送信してから、呼び出し元の引数を変更せずに含めた tools/call リクエストを送信します。上流が initialize に Mcp-Session-Id ヘッダーを付けて応答した場合、その値はセッションの以降すべてのリクエストに付加されます。このセッションはプロセスの存続期間中、再利用されます。レスポンスは通常の JSON またはサーバー送信イベントとして届く場合があり、どちらも読み取られます。

成功した上流の結果は、上流が設定した isError フラグも含め、そのまま渡されます。JSON-RPC エラー、2xx 以外のステータス、読み取り不能なレスポンス、完了できないリクエストなどの失敗は、テキストが duckdata error: で始まる isError 結果として返されます(この表示方法は、この再構築で独自にラベル付けした再現です)。

CLI

このツールは、JSON 引数文字列を 1 つ受け取るサブコマンドとしても利用できます。

npx @reneturcios/duckdata hasdata_duckduckgo_serp_getSearchResults '{"q":"open source search","kl":"us-en","safeSearch":"moderate","deviceType":"desktop"}'
npx @reneturcios/duckdata --version

終了コード:成功時は 0、isError 結果の場合は 1、使用方法に誤りがある場合は 2 です。

MCP サーバー

npx -y @reneturcios/duckdata mcp

MCP クライアントの設定:

{
  "mcpServers": {
    "duckdata": {
      "command": "npx",
      "args": ["-y", "@reneturcios/duckdata", "mcp"]
    }
  }
}

Docker

docker run -i ghcr.io/cloudcorprecords/duckdata
docker run --rm ghcr.io/cloudcorprecords/duckdata --version

コンテナのデフォルトコマンドは mcp なので、最初の形式は stdio MCP サーバーとして動作します。それ以外の引数は通常どおり CLI に渡されます。

開発

npm install
npm run build
npm test
npm run dev

テストスイートは、スタブ化された JSON-RPC 上流サーバーのみを使って実行されます。ライブネットワークへの呼び出しはありません。

ライセンス

MIT — LICENSE を参照してください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。