DSH Plugin Hub

Tools and MCP

dsh-web-search-diy

By aaronlei · community

Adds configurable web search to DSH across Chat Completions, Responses, Anthropic Messages, and standalone APIs, normalizing results into cited sources. Vendor and protocol coverage varies; some combinations are degraded or unverified.

DeepSeek Harness plugin in Tools and MCP

web-searchsearch-providercitationsapi-protocols

Installation

Review the source and trust level before running this DSH plugin command.

dsh plugin --profile web add dsh-web-search-diy

Alternative installation methods

Sources

README

dsh-web-search-diy

English · 简体中文

<p align="center"> <a href="https://www.npmjs.com/package/dsh-web-search-diy"><img alt="npm version" src="https://img.shields.io/npm/v/dsh-web-search-diy?style=flat-square&amp;label=npm&amp;color=cb3837"></a> <a href="LICENSE"><img alt="license: MIT" src="https://img.shields.io/npm/l/dsh-web-search-diy?style=flat-square&amp;color=blue"></a> <a href="package.json"><img alt="node &gt;= 18" src="https://img.shields.io/badge/node-%3E%3D18-339933?style=flat-square&amp;logo=nodedotjs&amp;logoColor=white"></a> <a href="#capability-matrix"><img alt="vendors: 7" src="https://img.shields.io/badge/vendors-7-8A2BE2?style=flat-square"></a> <a href="#capability-matrix"><img alt="protocols: 4" src="https://img.shields.io/badge/protocols-4-8A2BE2?style=flat-square"></a> <a href="https://github.com/deepseek-ai/deepseek-harness"><img alt="dsh plugin" src="https://img.shields.io/badge/dsh-plugin-4D6BFE?style=flat-square"></a> </p>

A web search provider plugin for the DeepSeek Harness (DSH). It supplies the built-in web_search tool per vendor × protocol: three in-protocol shapes (Chat Completions / Responses / Anthropic Messages) plus standalone search, covering DeepSeek, Kimi, Zhipu, Qwen, OpenAI, Anthropic, OpenRouter, and four custom targets. Results are normalized into structured citation sources for the calling model to ground its answer on. The plugin also ships an observability page that records every search and can backfill history from older session logs.

Capabilities

Capability matrix

Legend: ✅ full (in-protocol search + citable sources); ◐ degraded (searches, but sources or model are limited); ✗ unsupported; ⚙ custom.

Vendor Chat Completions Responses Anthropic Messages Standalone search
DeepSeek ✗ ◐ deepseek-v4-pro only; sources from open_page ✅ ✅ /v1/tools/search
Kimi ✗ built-in $web_search retired ✅ web_search + include ✗ no server tool in the schema ✅ /v1/tools/search
Zhipu ✅ web_search tool ✅ web_search + results[] ✗ accepts but does not run it ✅ /paas/v4/web_search
Qwen ◐ enable_search, no sources ✅ action.sources (url only) ✅ needs the billing header ✗ no standalone REST
OpenAI ◐ gpt-5-search-api only ✅ full filters / include ✗ no such endpoint ✗
Anthropic ✗ ✗ ✅ native web_search ✗
OpenRouter ✅ openrouter:web_search ✅ same server tool ◐ alias, untested ✗
Custom ⚙ template + 4 variants ⚙ template + toolType ⚙ template + toolType ⚙ template + 8 mapping fields

13 full, 4 degraded (OpenRouter Anthropic is pending), 4 custom. Eight unsupported entries exist only for the collapsed section and never create a configuration bucket.

Install

Published on npm:

dsh plugin --profile web add dsh-web-search-diy

The bundle patch performs the wiring, so no manual cordis.patch.yml edits are required:

For local development, install the checkout as a link:

dsh plugin --profile web add link:./dsh-web-search-diy

The plugin declares the @deepseek-ai/* hooks as peerDependencies. Run pnpm install once in the plugin directory before linking; the harness provides the peers at runtime.

Configuration

Configuration page

Location: Plugins → Installed plugins → the dsh-web-search-diy card (clicking the card opens this plugin's configuration page). Copy follows Settings → Language (zh, en, ja, es, fr, de, ru, pt).

Configuration file (v3)

$DSH_HOME/dsh-web-search-diy.json, written by the configuration page:

{
  "version": 3,
  "vendor": "qwen",
  "protocol": "responses",
  "targets": {
    "qwen/responses": {
      "baseURL": "https://maas.qianwenaiapi.com/compatible-mode/v1",
      "apiKeyEnv": "QWEN_TOKEN_PLAN_API_KEY",
      "model": "qwen3.8-flash",
      "maxOutputTokens": 4096,
      "toolType": "web_search",
      "includeSources": true
    },
    "custom/search": {
      "baseURL": "https://search-gateway.example.com",
      "path": "/v1/tools/search",
      "apiKeyEnv": "SEARCH_GATEWAY_API_KEY",
      "queryField": "q",
      "countField": "size",
      "resultsPath": "data.items",
      "urlField": "link",
      "titleField": "name",
      "snippetField": "desc",
      "count": 10
    }
  }
}

Migrating from 1.x

v2 mode v3 target
responses qwen/responses
anthropic-messages deepseek/anthropic-messages
zhipu-web-search zhipu/search
zhipu-chat-search zhipu/chat-completions

Field reference

Protocol / vendor Fields
Common baseURL, apiKeyEnv, model, maxOutputTokens (the last two are hidden for standalone)
Responses · OpenAI toolType, includeSources, reasoningEffort, searchContextSize, allowedDomains, blockedDomains, userLocation, externalWebAccess, returnTokenBudget, searchContentTypes, imageMaxResults, imageCaption
Responses · Kimi toolType, includeSources, allowedDomains (blockedDomains / search_context_size return 400)
Responses · Zhipu / Qwen toolType, includeSources, reasoningEffort
Responses · DeepSeek toolType; the model is locked to deepseek-v4-pro and include is not sent
Responses · OpenRouter toolType, includeSources, engine, mode, maxResults, maxUses, maxTotalResults, searchContextSize, maxCharacters, userLocation, allowedDomains, excludedDomains, xSearch
Anthropic Messages toolType, maxUses, thinking, effort, allowedDomains, blockedDomains, userLocation, responseInclusion
Chat · Zhipu searchEngine, count, searchRecencyFilter, contentSize, searchDomainFilter, requireSearch, searchPrompt, reasoningEffort
Chat · Qwen searchStrategy, forcedSearch, freshness, assignedSiteList, searchExtension, promptIntervene
Chat · OpenRouter engine, mode, maxResults, maxUses, maxTotalResults, searchContextSize, maxCharacters, userLocation, allowedDomains, excludedDomains, xSearch
Chat · OpenAI no search parameters; the model is locked to gpt-5-search-api
Standalone count, includeContent, searchEngine / contentSize / searchRecencyFilter / searchDomainFilter (Zhipu), oriQuestion / localization (DeepSeek), timeoutSeconds (Kimi), digestEntries, digestSnippetChars; custom adds path and the 8 mapping fields

oriQuestion sends the human prompt that triggered the search as DeepSeek's ori_question: whitespace collapsed, cut to 128 characters, read from the initiating Session and omitted out

README excerpt; see the original.

Read original README

Data as of 2026-11-05

Related plugins

By Anionex

Integrates image Q&A, OCR, grounding, cropping, tracing, pixel comparison, HTML screenshots, and a task Skill into DSH Web and Headless. Configure a vision provider; first use may set up Python.

Tools and MCP

local-shell-mcp-dsh

By fwerkor

Connects local-shell-mcp shell, file, browser-automation, and remote-worker capabilities to DSH, including MCP tools and a per-session Live Workspace. Operations depend on upstream configuration.

Tools and MCP

dsh-openbiliclaw

By whiteguo233

Brings OpenBiliClaw recommendations, saved items, profiles, and dialogue into DSH Web and exposes agent tools; requires its running backend with Agent Bridge v2. Crawling stays in the main project.

Tools and MCP

dsh-recommend

By zp-home

Queries, searches, and recommends DSH plugins with published scoring and trend data; its rankings periodically sync GitHub topic repositories and depend on that collection coverage.

Tools and MCP

dsh-docs

By Sqhao-O

Parses local PDF, Office, Markdown, HTML, CSV, and text files, with offline OCR; reads only the session workspace or allowed roots, with a bundled OCR runtime for Windows x64.

Tools and MCP

dsh-vision-router

By ysr666

Adds vision routing and image tools for text-only DSH agents, including OCR, grounding, cropping, and pixel comparison; the default cloud chain sends images remotely unless Local-only vision is enabled.