mcpField
D
duckdata

duckdata

本地服务
github.com/CloudCorpRecords搜索与检索02 天前更新

关于 duckdata

duckdata 是连接 HasData 托管版 DuckDuckGo MCP 服务的本地桥接程序,供需要结构化搜索结果的客户端使用。它转发只读搜索工具,并将广告与自然搜索结果分开返回。

主要功能

  1. 01获取按排名排列的 DuckDuckGo 结果
  2. 02分开返回广告与自然结果
  3. 03按地区、语言和设备筛选
  4. 04设置 SafeSearch 并翻页

适用场景

  1. 01为 Agent 获取搜索结果
  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否用于指定搜索来源国家/地区的两位字母国家代码。与 `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否首选结果/界面语言代码,通常为两个字母(例如 `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 服务,并以 JSON 格式返回 DuckDuckGo 搜索 结果。提交查询后,它会返回按排名排列的自然搜索结果——标题、URL、摘要、显示的 URL、位置、日期、站点链接和视频元数据—— 广告则单独放在另一个数组中;如果上游提供了 Search Assist AI 答案,也会一并返回。

该桥接程序本身不保存任何搜索结果。它会在本地提供上游服务的工具列表,该列表 与从实时端点捕获的内容完全一致;并将每次工具调用转发给上游,原样返回结果。捕获到的 工具集只有一个只读搜索获取工具。其中没有写入、消息传递或付款工具。

工具

  • hasdata_duckduckgo_serp_getSearchResults — 获取 DuckDuckGo SERP。捕获到的架构不包含 required 数组:q 是搜索词(除非提供了 nextPageToken,否则必填;该令牌包含 要继续查询的搜索词)。使用 kl 指定地区(采用 <country>-<language> 代码,例如 us-en 或 de-de,支持 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(可选)——设置后,每个 上游请求都会携带 x-api-key: <key> 请求头,其中使用调用者自己的 HasData API 密钥。未设置时,不会发送密钥请求头。(请求头 名称和环境变量名称由原始版本的注册记录确定;从该环境 变量转发密钥是本次重建中标注的还原内容——原始 工具集是在无密钥状态下捕获的。)
转发机制

首次调用工具时,客户端会与上游建立可流式传输的 HTTP 会话:发送 JSON-RPC initialize 请求(protocolVersion 2025-03-26, clientInfo name duckdata),然后发送 notifications/initialized 通知,接着发送携带调用者参数的 tools/call 请求,参数保持不变。上游通过 initialize 响应返回 Mcp-Session-Id 请求头时,该值会随 此会话的每个后续请求一同发送,并在进程运行期间重用。 响应可能是普通 JSON,也可能是服务器发送事件;两种格式都会读取。

上游的成功结果会原样传递,包括上游设置的任何 isError 标志。 失败情况——JSON-RPC 错误、非 2xx 状态、无法读取的响应,或 无法完成的请求——会作为 isError 结果返回,其 文本以 duckdata error: 开头(此错误呈现方式是本次重建中自行标注的 还原内容)。

CLI

该工具也可作为子命令使用,接受一个 JSON 参数字符串:

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。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。