dsh-research-plugins (dsh-mcp-context7)
pymodel/dsh-research-plugins/packages/dsh-mcp-context7
Context7 MCP 브리지: Context7 MCP 서버를 통해 최신 버전별 라이브러리 문서와 코드 예제를 모델에 제공합니다. 기본적으로 키가 필요 없습니다.
설치
dsh plugin --profile web add github:pymodel/dsh-research-plugins이 플러그인은 저장소의 packages/dsh-mcp-context7 하위 디렉터리에 있습니다.
README
dsh-research-plugins
Research plugins for DeepSeek Harness — a pnpm monorepo adding web search and MCP (Model Context Protocol) bridges for AI research, web scraping, and live documentation to your DSH agent.
What this is · Install · API keys · Repo layout · License
What this is
dsh-research-plugins gives your DeepSeek Harness (DSH) agent three research superpowers it does not have out of the box:
- Web search via the Tavily Search API — a settings toggle that swaps the built-in DeepSeek search for Tavily, with keyless search support.
- Web scraping & crawling via the Firecrawl MCP server — scrape, crawl, map, and search the open web inside tool calls.
- Up-to-date library docs via the Context7 MCP server — on-demand documentation and code examples for any library or framework.
Everything is delivered as drop-in DSH plugins — no vendor lock-in, no forks, just a dsh plugin add away.
| Package | What it adds |
|---|---|
@pymodel/dsh-tavily | Tavily Search API as a web search provider (settings toggle, keyless search) + a Tavily MCP bridge (tavily-search / tavily-extract keyless; crawl / map with a key) |
dsh-mcp-firecrawl | Firecrawl MCP: keyless search / scrape / parse; full tool surface with an API key |
dsh-mcp-context7 | Context7 MCP: mcp__context7__* up-to-date library docs and code examples |
Install
Each package installs independently into a DSH profile:
dsh plugin --profile web add @pymodel/dsh-tavily
dsh plugin --profile web add dsh-mcp-firecrawl
dsh plugin --profile web add dsh-mcp-context7
dsh web
Or follow GitHub (this repo, latest commits):
dsh plugin --profile web add github:PyModel/dsh-research-plugins#path:packages/dsh-tavily
dsh plugin --profile web add github:PyModel/dsh-research-plugins#path:packages/dsh-mcp-firecrawl
dsh plugin --profile web add github:PyModel/dsh-research-plugins#path:packages/dsh-mcp-context7
API keys
The MCP bridges use the harness's shipped @deepseek-ai/dsh-mcp-client. They read keys from the launch environment (a real env var, the project .env, or $DSH_HOME/.env) — not from $DSH_HOME/.credentials.yaml:
| Plugin | Env var | Required | Endpoint |
|---|---|---|---|
dsh-tavily (MCP part) | TAVILY_API_KEY | no (keyless MCP: search + extract; crawl/map need a key) | https://mcp.tavily.com/mcp/ |
dsh-mcp-firecrawl | FIRECRAWL_API_KEY | no (keyless: search/scrape/parse; full surface with a key) | https://mcp.firecrawl.dev/v2/mcp |
dsh-mcp-context7 | CONTEXT7_API_KEY | no (keyless works) | https://mcp.context7.com/mcp |
Keys are sent as an Authorization: Bearer header at load time — never in the URL and never in plain YAML. Without a key the bridges run in each vendor's documented keyless mode (X-Tavily-Access-Mode: keyless for Tavily), so every row works out of the box. A key added to .env needs a dsh web restart.
Already have your own MCP row?
The bundles insert loader entries mcp-tavily, mcp-firecrawl and mcp-context7. If your profile's cordis.patch.yml also inserts one of those ids, DSH refuses to boot (duplicate loader entry id: mcp-tavily) and DSH Desktop opens Safe Mode. A second row under another id with the same serverName fails too (serverName "tavily" is already in use).
Delete your own row, or keep your settings (a proxy or gateway URL, say) by turning it into an override of the plugin's row. An override replaces the whole config, so restate every key:
# $DSH_HOME/profiles/web/cordis.patch.yml
- id: mcp-tavily
config:
serverName: tavily
transport: streamable-http
url: http://127.0.0.1:8787/tavily/mcp
toolCallTimeoutMs: 60000
failOnStartupError: false
Repo layout
packages/
dsh-tavily/ # web-search provider + settings card + Tavily MCP row
dsh-mcp-firecrawl/ # pure-config Firecrawl MCP bundle
dsh-mcp-context7/ # pure-config Context7 MCP bundle
The Firecrawl and Context7 packages are pure-config bundles (package.json + cordis.patch.yml) with no build step. The Tavily package keeps its prebuilt lib/ and browser client.
Contributing
Issues and pull requests are welcome. Please open a discussion on GitHub before starting large changes.