DeepSeek Harness Plugin Hub

Publish and manage complete Harness Profiles. Discover Plugins for your next setup.

Explore

PluginsPresetsDocsNews

Community

Publish a pluginContactReport an issue

Resources

Plugin Hub on GitHubDeepSeek HarnessSystem statusPrivacy notice
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

Independent and unofficial. Not affiliated with, authorized by, or endorsed by DeepSeek.

Web Search Serper — DSH Plugin for DeepSeek Harness
DeepSeek Harness Plugin Hub
ProfilesPluginsCategoriesNewsDocsSign inManage Profiles
ProfilesPluginsCategoriesNewsDocsSign in
← Plugins

@dingpenghui/dsh-web-search-serper

Web Search Serper

Serper.dev-backed web search provider for DSH (DeepSeek Harness) web capability seam (ctx.web) — installs as a bundle and takes over web.searchProvider, with automatic fallback to another provider when Serper is unavailable; key via config / env / credential store

The plugin will be installed here. Keep web if you are unsure.

npx -y @deepseek-ai/dsh plugin --profile web add @dingpenghui/dsh-web-search-serper@1.1.1
READMECompatibilityVersions

Compatibility and provenance

Web Search Serper is published as @dingpenghui/dsh-web-search-serper and currently resolves to version 1.1.1. The Hub verifies its manifest and preserves the exact installation source for reproducible installs.

DSH compatibility
*
Runtime surfaces
web
Release source
npm
Registry updated
10/3/2026

Versions

1.1.1stable
10/3/2026
1.1.0stable
10/1/2026
1.0.1stable
10/1/2026

Related plugins

Loading related plugins…

Latest
1.1.1
DSH
*
HMR
Process restart
Tree shaking
Safe tree shaking not declared
Unpacked size
163.3 kB
Files
27
Surface
web
License
MIT
Source
npm
GitHub
★ 1
Weekly downloads
0
Last push
10/3/2026
View source ↗
README badge

Click the badge to copy Markdown for your README.

Do you maintain this Plugin?Claim benefit · Priority security scan

Verify the GitHub repository declared in package.json to manage this listing. After you claim it, Hub will prioritize a security scan of the current version and publish the result when it passes.

Claim this Plugin →
Report an issue

Related plugins

More verified plugins in search-research.

Weknora@wxg-prc-cpg/dsh-weknoraWeKnora knowledge retrieval tools for DeepSeek Harness (dsh): semantic search, document reading and RAG/agent answers over your own knowledge bases.Free Searchdsh-free-searchFree web search for DeepSeek Harness: 24 engines (Bing/DuckDuckGo/AnySearch/SearXNG/Exa/Tavily/Keenable/Firecrawl/Parallel keyless; Zhihu global/site via MCP and Perplexity/SerpBase/DeepSeek/You.com/Baidu/Kimi/Aliyun/Doubao with key; OpenAI/Gemini/Claude Dejadsh-dejadeja-vu memory for DeepSeek Harness: the session history of forty other coding agents, searchable and recalled before each step — a local index, no LLM.Builtin Browserdsh-builtin-browserShared real browser plugin for DeepSeek Harness: install-and-use — a visible native browser the human can take over, driven by the agent over CDP. DOM-level interaction (React/Vue safe), per-task session isolation, cookie persistence (dsh_browser_auth), C

README

dsh-web-search-serper

English | 中文

Overview

@dingpenghui/dsh-web-search-serper is a web search provider plugin backed by the Serper.dev API, for the current DeepSeek Harness (DSH) web capability seam (ctx.web, @deepseek-ai/dsh-web 0.2.0-rc.x).

Serper.dev is an official Google Search partner providing fast, structured Google search results API. Free tier: 2,500 queries per month, no credit card required.

Features

  • 🚀 Fast Search — 1-2 second response times using Google's real index
  • 📊 Structured Results — JSON format, easy to parse
  • 🔒 Privacy Friendly — No user tracking, no cookie collection
  • 💰 Generous Free Tier — 2,500 monthly queries at no cost
  • 🌍 Multi-language Support — Results from countries/regions worldwide
  • 🔧 Takes Over Out of the Box — installing it as a bundle claims web.searchProvider automatically; key resolved lazily per search (config → env → credential store), no restart on change
  • 🛟 Automatic Fallback — when Serper is unavailable it hands the request to another usable search provider instead of breaking web_search entirely

Quick Start

Install

# Option 1 — install from npm (recommended)
dsh plugin --profile web add @dingpenghui/dsh-web-search-serper

# Option 2 — local bundle via link:
# 1. Add to the profile's package.json `dependencies`:
#    "@dingpenghui/dsh-web-search-serper": "link:<absolute path to this dir>"
# 2. Add "@dingpenghui/dsh-web-search-serper" to `dsh.profile.bundles`,
#    and add the insert row to cordis.patch.yml (or copy this package's
#    own cordis.patch.yml content)
pnpm install
pnpm run build

Configure

Installing as a bundle (recommended) needs no manual configuration. The package's own cordis.patch.yml is applied with the bundle and claims the web seam's search provider for serper:

- id: web
  name: '@deepseek-ai/dsh-web'
  config:
    searchProvider: serper     # overrides dsh-base's deepseek-official
    fetchProvider: http        # must be restated: a patch replaces the whole config
- insert:
    - id: web-search-serper
      name: '@dingpenghui/dsh-web-search-serper'

Why the takeover is required. dsh-base pins web.searchProvider to deepseek-official, and the seam's selection rule is "a configured id is the only candidate — never a fallback on failure". Inserting the row without the takeover leaves the plugin registered but never invoked, and silently so. Your profile's own cordis.patch.yml is applied after the bundle layer and wins, so overriding - id: web there switches to another backend.

If you are not using the bundle mechanism and copy rows into your profile patch by hand, copy both blocks above — otherwise it will not take effect either.

No config is required: the API key is resolved lazily per search in this order:

  1. row config.apiKey (explicit, when you add a config block to the row — editable on the plugin detail page, hot-applied after save);
  2. the SERPER_API_KEY environment variable of the DSH host process;
  3. a SERPER_API_KEY reference in the DSH credential store ($DSH_HOME/.credentials.yaml refs: — resolved per search, no restart on change).

To pin the key and options in the composition instead:

- id: web-search-serper
  name: '@dingpenghui/dsh-web-search-serper'
  config:
    apiKey: your-serper-api-key
    gl: cn  # Optional: set default country code

Behavior: Serper first, automatic fallback

  • Preferred — whenever Serper is ready (key present, endpoint valid) it is used;
  • Fallback — if Serper fails for any reason (missing key, 401/403 auth failure, 429 rate limit, 5xx, network error, misconfigured endpoint, …), the request is handed to another registered and usable search provider on the seam, normally the deepseek-official provider shipped with dsh-base;
  • Not on cancel — a user cancellation (WEB_ABORTED) never falls back;
  • Both down — throws WEB_PROVIDER_ERROR whose message names both the primary and the fallback failure, with the fallback error on the cause chain.

The fallback lives inside the plugin, because the DSH web seam itself does not fall back (a configured id is the only candidate). Accordingly, available() still returns true when Serper is unusable but a fallback target exists — otherwise the seam would reject the provider with WEB_PROVIDER_CONFIGURED_UNAVAILABLE before search() ever ran, and no fallback could happen.

Get API Key

  1. Visit https://serper.dev
  2. Register for a free account
  3. Get your API Key from the Dashboard
  4. Free tier: 2,500 queries per month

Configuration Options

FieldTypeRequiredDefaultDescription
apiKeystringNo$SERPER_API_KEY, then credential reference SERPER_API_KEYSerper API key (secret, volatile)
baseURLstringNohttps://google.serper.devAPI endpoint base
glstringNo-Country code (e.g., us, cn, jp)
crstringNo-Region code (e.g., us; sent as the cr parameter)
numResultsnumberNoomitted (Serper defaults to 10)Default result count, capped at 100

Usage Examples

Basic Search

import { apply } from '@dingpenghui/dsh-web-search-serper'

// Used by the Cordis loader; no direct calls needed in most deployments.
// In a Cordis plugin:
// apply(ctx)

Search via ctx.web

const result = await ctx.web.search({
  query: 'latest AI developments 2026',
  maxResults: 5,
})

console.log(result.sources)
// [
//   { url: '...', title: '...', snippet: '...' },
//   ...
// ]

Error Handling

Error CodeMeaningResolution
WEB_PROVIDER_CONFIGURED_MISSINGConfigured provider not registeredCheck if plugin is loaded correctly
WEB_PROVIDER_CONFIGURED_UNAVAILABLEProvider registered but no key availableCheck API key: config / $SERPER_API_KEY / credential reference
WEB_ABORTEDRequest was abortedCheck AbortSignal
WEB_PROVIDER_ERRORAPI request failedCheck network / API key / rate limits

WEB_PROVIDER_CONFIGURED_UNAVAILABLE and WEB_PROVIDER_ERROR only reach web_search when the fallback target is unusable too; a Serper-only failure is absorbed by the automatic fallback (see "Behavior" above).


Limitations & Known Issues

  1. Free tier limit — 2,500 monthly queries, paid plans for higher usage
  2. Google Search only — Does not support Bing, Baidu, or other search engines
  3. No generated answers — Returns search results only, no AI-generated summaries
  4. API Key required — Must provide a valid Serper API Key via config, environment, or credential reference

Related Projects

  • DeepSeek Harness — DSH main project
  • Serper.dev — Google Search API service

License

MIT License — See LICENSE file