PyModel/dsh-research-plugins--packages-dsh-tavily ↗★ 0
@pymodel/dsh-tavily
Tavily web search + Tavily MCP for DSH: settings toggle to official DeepSeek, keyless search, MCP extract/crawl/map
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:PyModel/dsh-research-plugins#34872607e1134dbece3bdb9e4bca92fef1fdf2c6&path:packages/dsh-tavily说明文档
阅读完整 README ↗@pymodel/dsh-tavily
Tavily for DeepSeek Harness: adds the Tavily Search API as a web search provider, plus a Tavily MCP bridge — keyless search / extract, crawl / map with an API key.
Install
npm (stable, official recommendation):
dsh plugin --profile web add @pymodel/dsh-tavily
dsh web
Or follow GitHub (latest commit on the repo):
dsh plugin --profile web add github:pymodel/dsh-research-plugins#path:packages/dsh-tavily
Settings → Plugins → Plugin settings → Tavily web search: turn the toggle on. The key is optional; leave it blank for keyless search. Test connection at the bottom-left checks that search works now (including keyless).
Pin a commit:
dsh plugin --profile web add github:pymodel/dsh-research-plugins#path:packages/dsh-tavily#
Remove:
dsh plugin --profile web remove dsh-tavily
dsh.bundle· prebuiltlib/· git install does not needallowBuilds
Features
- Settings toggle: off = official DeepSeek, on = Tavily — no uninstall to switch back
- No key uses Tavily keyless; a key uses
Authorization: Bearer - Bottom-left connection test: one real Tavily search (
max_results: 1); keyless if no key, account quota if a key is saved (1 credit) - Timeout, abort, official host lock, drop results without a url
- Key and toggle live on the credentials plane, not the settings file
- Tavily MCP bridge:
mcp__tavily__tavily-search/tavily-extractwork keyless;crawl/mapunlock withTAVILY_API_KEY
Behavior
Web search
| Toggle | Key | web_search |
|---|---|---|
| Off (default) | — | official DeepSeek |
| On | empty | Tavily keyless |
| On | set | Tavily account quota |
Provider id: tavily.
MCP tools
The bundled MCP row registers Tavily's hosted MCP server under the tavily namespace and works out of the box:
- Keyless (default): the required
X-Tavily-Access-Mode: keylessheader selects free rate-limited access with thetavily-searchandtavily-extracttools. - Keyed: set
TAVILY_API_KEYto unlockcrawl/mapand use your account quota:
export TAVILY_API_KEY=tvly-...
or in a project .env / $DSH_HOME/.env:
TAVILY_API_KEY=tvly-...
The key goes into the Authorization: Bearer header at load time — never into the endpoint URL and never into YAML. A key added to .env needs a dsh web restart.
Credentials
| Ref | Meaning |
|---|---|
TAVILY_API_KEY | Optional (search). Present = account quota; absent = keyless |
TAVILY_SEARCH_ENABLED | Present = on; unset = off |
The search key and toggle are stored on the credentials plane ($DSH_HOME/.credentials.yaml). The MCP bridge reads TAVILY_API_KEY from the launch environment instead, because MCP rows resolve before credentials are materialized. Do not commit real keys.
Updates
- 0.2.0 MCP bridge: keyless mode via
X-Tavily-Access-Mode: keyless(row always on); keyed auth moved from URL query parameter toAuthorization: Bearerheader. Search provider: caller cancellation preserved on runtimes withoutAbortSignal.any. - 0.1.0 First release as
@pymodel/dsh-tavily. Web search provider with settings toggle (off = official DeepSeek, on = Tavily) plus a Tavily MCP bridge (extract / crawl / map). English-only localisation.