A3Boy / dsh-web-tools

Listed

Multi-provider Web Search & Fetch for DeepSeek Harness — Tavily, Exa, Firecrawl, Brave, You.com, Jina & SearXNG with fallback and native settings UI.

mainModelTool View source

Installation

npx -y @deepseek-ai/dsh plugin --profile web add github:A3Boy/dsh-web-tools

This installation command is an unverified starting point generated from the GitHub repository address.

README

Maintainer-authored documentation snapshot.

View on GitHub ↗
Commit 6fc9582Synced Aug 17, 2026

dsh-web-tools

dsh-web-tools

Multi-provider Web Search / Fetch plugin for DeepSeek Harness.

Supports Tavily, Exa, Firecrawl, Parallel, Brave, You.com, Jina, and SearXNG with provider ordering, automatic fallback, multiple API keys, and quota display.

Uses the native DSH web_search / web_fetch tools.

GitHub Stars MIT License DeepSeek Harness TypeScript

8 Providers Fallback Multi-Key BYOK SearXNG

English | 简体中文

dsh-web-tools settings

Features

  • 8 search providers
  • Configurable provider order
  • Automatic fallback
  • Enable / disable providers independently
  • Multiple API keys per provider
  • API key health status
  • Balance / quota / rate-limit display
  • Combined quota for multiple keys
  • Background quota refresh
  • Provider connection test
  • Test Search
  • Fallback attempt history
  • System proxy / Windows proxy support
  • Self-hosted SearXNG
  • Chinese / English UI
  • API keys stored with DSH Credentials

The plugin does not provide shared API keys or a proxy service. Requests go directly from the local DSH Host to each provider.

Installation

dsh plugin --profile web add github:A3Boy/dsh-web-tools

A single command, no extra configuration: the compiled lib/ is committed to git (the package ships no prepare build script), so pnpm installs the GitHub dependency without triggering a build check and uses the shipped artifacts directly.

Restart dsh web, then open:

Settings → Web Search

Check the plugin:

dsh --profile web --dump-config

(You should see a # == dsh-web-tools entry, and it is registered as web.searchProvider.)

Update:

dsh plugin --profile web update dsh-web-tools

Remove:

dsh plugin --profile web remove dsh-web-tools

For contributors: this repo has no prepare script. After changing src/, run npm run build manually and commit the compiled lib/ together with your change (otherwise installs fetch stale artifacts). CI also runs npm run build to enforce consistency.

Currently developed and tested against DeepSeek Harness 0.1.0-rc.6.

Providers

ProviderSearchFetchQuota
Tavily
Exa
Firecrawl
ParallelDashboard only
Brave Search
You.com
JinaBest effort
SearXNGSelf-hosted

Provider settings and quota

A simple starting point:

Use caseTry
General searchTavily
Semantic / technical searchExa
Search + page contentFirecrawl / Parallel / Jina
General Web searchBrave
Web / NewsYou.com
Self-hostedSearXNG

You do not need to configure every provider.

One provider is enough to use the plugin. Multiple providers enable fallback.

Free tier reference

Updated 2026-08-16. Pricing and free tiers may change. Check the provider website for current details.

ProviderFree / signup credits
Tavily1,000 credits / month
Exa$20 on signup + $10 / month
Firecrawl1,000 credits / month
ParallelUp to $80 on signup + $5 / month
Brave Search$5 credits / month
You.com$100 for new accounts
Jina10M tokens for a new API key
SearXNGSelf-hosted, no platform quota

Recurring monthly free allowances:

Tavily       1,000 credits
Exa          $10
Firecrawl    1,000 credits
Parallel     $5
Brave        $5

Signup / one-time credits:

Parallel     up to $80
Exa          $20
You.com      $100
Jina         10M tokens

Some free tiers require account registration or a payment method. Check the upstream provider rules.

Parallel and You.com also offer separate free MCP Search endpoints. The providers in this plugin currently use their REST APIs and therefore still use API keys.

Provider order

Set the order in which providers are used:

Tavily → Firecrawl → Exa → Parallel → Brave

The first provider is the default.

Providers in the search chain can be reordered by dragging.

Removing a provider from the chain does not delete its configuration, so it can still be tested manually.

Fallback

The plugin tries the next provider when the current one has problems such as:

rate limit
timeout
network error
service error
quota exhausted

Example:

Tavily
   ↓ timeout
Firecrawl
   ↓
success

Provider fallback

If an API key fails authentication and the provider has multiple keys, another available key is tried first.

Multiple API keys

Each provider can have multiple API keys:

Tavily
├── Key A
├── Key B
└── Key C

The plugin automatically selects an available key.

Keys can be separated by:

newlines
commas
spaces
semicolons

Full API keys are never returned to the browser. The Settings page only receives masked credential information.

Quota

Current quota support:

ProviderQuota
Tavily
Firecrawl
Brave
You.com
Jina
Exa
ParallelDashboard only
SearXNGSelf-hosted

For supported providers, quota from multiple API keys is combined.

Example:

Key A: 950 / 1000
Key B: 982 / 1000

Pool: 1932 / 2000

Quota is refreshed in the background with a default 5-minute cache.

Brave quota is read from the X-RateLimit-* information returned by Search and the latest result is saved.

Quota information is only used for display and does not block Search.

The Settings page can run a real search through the configured provider chain.

It shows:

  • final provider
  • total latency
  • result count
  • provider attempts
  • success / timeout / rate limit / authentication failure
  • search results

Test Search

Test Search uses the same provider chain as normal agent searches.

Web Fetch

Providers with page-content support:

Tavily
Exa
Firecrawl
Parallel
Jina

A normal flow can be:

web_search
    ↓
URL
    ↓
web_fetch
    ↓
page content

Search and Fetch do not have to use the same provider.

For example:

Brave Search
    ↓
Parallel Fetch

Proxy

Supports:

HTTPS_PROXY
HTTP_PROXY
Windows system proxy

Local addresses bypass the proxy by default:

localhost
127.0.0.1
::1
*.local

NO_PROXY is also supported.

SearXNG

SearXNG does not require an API key.

Configure only the instance URL:

http://127.0.0.1:8080

It can be used alone:

SearXNG

or as part of the fallback chain:

Tavily → Exa → Brave → SearXNG

UI language

The Web Search page supports:

Follow system
中文
English

The language setting only affects this plugin page.

Security

  • API keys are used only on the DSH Host
  • full API keys are never returned to the browser
  • logs do not contain full API keys
  • requests do not pass through a server operated by this project
  • no search usage telemetry is uploaded
  • SearXNG can be used as a fully self-hosted search option

Development

Install:

npm install

Test:

npm test

Type-check:

npx tsc -p tsconfig.json --noEmit
npx tsc -p tsconfig.client.json --noEmit

Build:

npm run build

Provider adapters are in:

src/host/providers/

See CONTRIBUTING.md for more information.

Update still showing old code?

If the plugin still behaves like an older version after updating and restarting:

cd ~/.dsh/profiles/web
pnpm install

For local development, file: may use a copied snapshot.

Using link: is usually more convenient.

Contributing

Issues and pull requests are welcome.

New Search Provider suggestions are welcome too.

License

MIT © A3Boy

Project files and signals

Shown items are public repository signals detected in the directory snapshot.

TestsDetected
Contributing guideDetected

Repository information

Language
TypeScript
License
MIT
Last updated
Aug 17, 2026, 5:59 AM

Install deliberately

Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.