Introduction

Connecting web search to agents usually involves configuring credentials for each backend individually: one key for Exa, one for Tavily, one for Firecrawl, etc., requiring separate application and entry for each. DeepSeek Harness (DSH) natively includes Exa/Perplexity/DeepSeek search, but if you want to offload queries to more backends, some work needs to be done at the provider layer.

dsh-all-search solves exactly this problem: it adds a web search provider named anysearch to DSH, backed by a single MCP gateway called AnySearch. A single API key aggregates Exa/Tavily/Firecrawl/Context7, and it won’t fail even if there is absolutely no key. Below, I introduce its positioning, features, and configuration methods.

What is this

dsh-all-search is maintained by RealAlexandreAI, licensed under MIT, version 0.2.1, and is a port of pi-all-search.

It works by registering the AnySearch web search provider into DSH’s ctx.web with the provider name anysearch. DSH’s built-in web_search tool will pick it up alongside the built-in providers.

AnySearch is a single MCP gateway: after setting the api_key, a single key aggregates Exa/Tavily/Firecrawl/Context7, eliminating the need to configure credentials for each backend individually.

Core Features

Aggregating four backends with one key

After setting the api_key, queries go through the AnySearch gateway, which aggregates Exa/Tavily/Firecrawl/Context7. You do not need to prepare credentials for these backends separately.

Won’t become a no-op without a key

When api_key is not set, the same anysearch provider still reports available() = true. It switches to searching via Firecrawl’s POST /v1/search endpoint, sending requests without the Authorization header (keyless mode). In other words, the provider will not become a no-op.

Note: In keyless mode, hosts sharing the same external IP (e.g., via NAT, CI) will share the same unauthenticated daily quota pool.

Optional Firecrawl private quota & Developer Index

You can optionally set firecrawl_api_key; the plugin will send Authorization: Bearer to use your own Firecrawl quota.

When both firecrawl_api_key and the AnySearch key are configured, developer intent queries (repo/issue/PR/commit/skill) will hit the Firecrawl Developer Index first—a semantic artifact index covering READMEs, issues, PRs, OpenAPI specs, and skills—and fall back to AnySearch if there are no results or failures.

Installation and Activation

Official installation command:

dsh plugin --profile web add dsh-all-search

The plugin requires Node >= 20.0.0. After installation, the provider is registered as anysearch on ctx.web, and the built-in web_search tool will pick it up along with the built-in providers.

Configuration Example

In the configuration, the id is all-search and the name is dsh-all-search:

- id: all-search
  name: dsh-all-search
  config:
    api_key: <your anysearch key>   # optional

Available configuration keys under config:

  • api_key: The AnySearch key. Once set, queries go through the AnySearch gateway.
  • base_url: MCP endpoint override.
  • firecrawl_api_key: Optional Firecrawl key (Bearer quota). When the AnySearch key is configured, it also enables the Developer Index branch.

api_key is optional. If left blank, it uses the Firecrawl keyless search mentioned above. If the host shares its external IP with others in a NAT or CI environment, it is recommended to set firecrawl_api_key to obtain a private quota.

Privacy

  • Keys are only stored in the configuration file and are never written to logs.
  • When api_key is set, only the query itself and the result count are sent to the AnySearch gateway.
  • When api_key is not set, queries are sent to Firecrawl’s /v1/search.

Self-Check

If you need to build from source or verify:

npm install
npm run typecheck
npm test
npm run build

npm test covers result parsing, maxResults, HTTP errors, and keyless Firecrawl routing. Real-world testing:

node --import tsx tests/real/real-search.mjs

Scenarios and Notes

Suitable for:

  • Developers who want to use Exa/Tavily/Firecrawl/Context7 in DSH with a single key;
  • Teams that already hold an AnySearch or Firecrawl key and wish to integrate existing quotas;
  • Scenarios where search is needed as a fallback even without credentials (keyless Firecrawl).

Notes:

  • The plugin runs with the permissions of the current dsh process; you should check the source code and license before installing (this project is MIT).
  • DSH natively includes Exa/Perplexity/DeepSeek search; this plugin supplements AnySearch on top of them, not replaces them.
  • Keyless mode shares the daily quota among hosts sharing the same external IP.
  • Node version must be >= 20.0.0.

Conclusion

DSH’s philosophy is that everything is a plugin, and dsh-all-search is a practical supplement to this philosophy: one provider, one key, multiple search backends, and a usable fallback path even without credentials.

  • GitHub: https://github.com/RealAlexandreAI/dsh-all-search
  • Community Directory: https://www.skillhub.cn/plugins/RealAlexandreAI/dsh-all-search (Independent community site, no official affiliation with DeepSeek/Quantum)