Bundle
deepseek-harness-plugin-mcp
MCP server that lets any agent discover, install, and run DeepSeek Harness plugins.
- Source
- bobleer
- stars
- 3 stars
- License
- MIT
- Updated
- Updated 4 days ago
Readme
# DeepSeek Harness Plugin MCP
Made by [BitFun](https://github.com/GCWing/BitFun/).
MCP server that lets **any agent** discover, inspect, install, and run [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) plugins.
Catalog source: [github.com/topics/dsh-plugin](https://github.com/topics/dsh-plugin).
English | [中文](README.zh.md)
## What it does
DSH plugins are Cordis bundles (`dsh.bundle.patch` → `cordis.patch.yml`). Foreign agents speak MCP, not Cordis. This server is the inverse of `@deepseek-ai/dsh-mcp-client`:
| Plane | Needs DSH? | What the agent can do |
|---|---|---|
| Catalog | No | Search/list/inspect every public `dsh-plugin` repo, read README and `cordis.patch.yml` |
| Profile | `dsh` on PATH | `dsh plugin add` / `remove` into a real profile |
| Runtime | `dsh` on PATH + `--allow-runtime` | Boot that profile and call composition tools as `dsh__*` |
UI/TUI/skin plugins are catalogued and installable. They do not become MCP tools; their UI stays in DSH.
## Install
```bash
npm install -g deepseek-harness-plugin-mcp
# or
npx deepseek-harness-plugin-mcp --help
```
Node `^22.19 || >=24`.
## Wire it into an agent
### Cursor / Claude Desktop / Claude Code / Codex (stdio)
```json
{
"mcpServers": {
"dsh-plugins": {
"command": "npx",
"args": ["-y", "deepseek-harness-plugin-mcp"],
"env": {
"GITHUB_TOKEN": "ghp_optional_but_recommended"
}
}
}
}
```
Enable install and runtime (this runs `dsh plugin` and plugin code):
```json
{
"mcpServers": {
"dsh-plugins": {
"command": "npx",
"args": ["-y", "deepseek-harness-plugin-mcp", "--allow-install", "--allow-runtime"],
"env": {
"GITHUB_TOKEN": "ghp_…",
"DSH_PLUGIN_MCP_PROFILE": "mcp-bridge"
}
}
}
}
```
`dsh` must be on `PATH` for the profile and runtime planes.
### Streamable HTTP
```bash
dsh-plugin-mcp --http --port 8765 --allow-runtime
```
Point the agent at `http://127.0.0.1:8765/mcp`. `GET /health` is a process liveness check.
### Inside DeepSeek Harness
This package is itself a DSH bundle:
```bash
dsh plugin --profile web add github:bobleer/deepseek-harness-plugin-mcp
dsh --profile web
```
The live Harness then serves Streamable HTTP MCP (default `http://127.0.0.1:8765/mcp`) and mirrors `ctx.tools` — every first-party and third-party tool the composition registered.
## MCP tools
Control plane:
- `dsh_plugin_status` / `dsh_plugin_refresh_catalog` / `dsh_plugin_list` / `dsh_plugin_search`
- `dsh_plugin_get` / `dsh_plugin_inspect` / `dsh_plugin_readme`
- `dsh_plugin_list_installed` / `dsh_plugin_install` / `dsh_plugin_uninstall`
- `dsh_runtime_start` / `dsh_runtime_stop` / `dsh_runtime_load` / `dsh_runtime_unload` / `dsh_runtime_list_tools`
After `dsh_runtime_start`, DSH tools appear as `dsh__<name>`.
Resources: `dsh-plugin://catalog`, `dsh-plugin://github/{owner}/{repo}` (+ `/readme`, `/package.json`, `/cordis.patch.yml`), `dsh-plugin://installed/{profile}`, `dsh-plugin://runtime/tools`.
Prompts: `search-dsh-plugins`, `install-dsh-plugin`, `use-dsh-plugin`.
## Flags and env
| Flag / env | Default | Meaning |
|---|---|---|
| `--http` | stdio | Streamable HTTP |
| `--host` / `DSH_PLUGIN_MCP_HOST` | `127.0.0.1` | Bind address |
| `--port` / `DSH_PLUGIN_MCP_PORT` | `8765` | Bind port |
| `--allow-install` / `DSH_PLUGIN_MCP_ALLOW_INSTALL` | off | `dsh plugin add/remove` |
| `--allow-runtime` / `DSH_PLUGIN_MCP_ALLOW_RUNTIME` | off | Spawn DSH and bridge tools |
| `--profile` / `DSH_PLUGIN_MCP_PROFILE` | `mcp-bridge` | Target profile |
| `--dsh-root` / `DSH_ROOT` | unset | Harness checkout (informational in status) |
| `--cache-dir` / `DSH_PLUGIN_MCP_CACHE_DIR` | `~/.dsh-plugin-mcp` | Catalog cache |
| `--no-catalog` / `DSH_PLUGIN_MCP_CATALOG=0` | on | Disable GitHub catalog tools |
| `GITHUB_TOKEN` / `GH_TOKEN` | unset | GitHub API auth |
Install and runtime are off until you opt in. Catalog is always available.
## Typical agent flow
1. `dsh_plugin_search` with the task keywords.
2. `dsh_plugin_inspect` on `owner/repo`. Prefer `isDshBundle: true`.
3. Optional: `dsh_plugin_install` with `github:owner/repo`.
4. `dsh_runtime_start` with `plugins: ["github:owner/repo"]`.
5. Call the listed `dsh__*` tools.
## Development
```bash
npm install
npm run check
```
Protocol smoke (official [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector) CLI, same client family as `@modelcontextprotocol/sdk`):
```bash
npx @modelcontextprotocol/inspector --cli node dist/cli.js --method tools/list
npx @modelcontextprotocol/inspector --cli node dist/cli.js --method tools/call \
--tool-name dsh_plugin_status --tool-args-json '{}'
```
Design: [docs/design.md](docs/design.md).
## License
MIT
Install
dsh plugin --profile web add github:bobleer/deepseek-harness-plugin-mcp
Profile: web
With the hub plugin installed, ask your agent to install it by name — it resolves the same plan shown here.
dsh plugin --profile web add github:stvlynn/dsh.fish#path:packages/dsh-plugin-hub
install deepseek-harness-plugin-mcp from the hub
- This package builds from source on install. pnpm will ask you to allow its build script — that is permission to run the package’s code on your machine, outside the agent sandbox. Only allow sources you trust.
- This source has no pinned commit, so a later push upstream changes what installs. Prefer pinning a commit.