
# dsh-mcp-studio
**The MCP server & Skills manager for DeepSeek Harness — the Tauri desktop edition's extension panel, consolidated into one plugin.**
[](https://github.com/functy23/dsh-mcp-studio)
[](https://www.typescriptlang.org/)
[](https://github.com/functy23/dsh-mcp-studio)
[](https://github.com/functy23/dsh-mcp-studio)
[](https://opensource.org/licenses/MIT)
[](https://github.com/functy23/dsh-mcp-studio/stargazers)
[](https://github.com/functy23/dsh-mcp-studio)
[](https://github.com/functy23/dsh-mcp-studio/graphs/contributors)
[Issues](https://github.com/functy23/dsh-mcp-studio/issues) • [Changelog](CHANGELOG.md) • [简体中文](README.md)
---
## 📦 What this is
The Tauri desktop edition ([deepseek-harness-desktop](https://github.com/dsh-tauri-desk/deepseek-harness-desktop))
ships its extension panel (Skills / MCP / plugin market) as **three mutually dependent packages**:
| Upstream package | Role | Depends on |
| --- | --- | --- |
| `dsh-tauri-panel-extension` | the panel itself: Skills / MCP / market tabs + host routes | `dsh-tauri`, `dsh-tauri-ui` |
| `dsh-tauri` | host + client framework bridge (`defineRoutes`, `defineService`, `definePanel`, `defineRegister`, locale, store) | — |
| `dsh-tauri-ui` | components used by the panel (Button/Chip/Modal/SegmentedControl/PanelPage/icons…) | `dsh-tauri` |
Installing MCP management meant installing all three, and it only worked inside the Tauri build.
**dsh-mcp-studio consolidates them into a single package**: the upstream sources are vendored as-is
(`src/panel`, `src/vendor/dsh-tauri`, `src/vendor/dsh-tauri-ui`), a build-time alias layer (`src/bridge`)
maps the old bare specifiers onto those local files, and only the minimum changes needed for
cross-platform support are applied. **No UI was rewritten.**
## ✨ How the integration works
```
src/ ← live code: everything reachable from the product entries
panel/ the extension panel, verbatim (host services + routes, client components/register/locales/styles)
vendor/dsh-tauri/ the framework bridge it imports, verbatim (Tauri-only invoke/iframe modules stay unused)
vendor/dsh-tauri-ui/ the components it imports, verbatim
bridge/ build-time module mapping: old bare specifier → local file
vendor-archive/ ← vendored subtrees unreachable from the product entries (Tauri-only bridges,
tests of modules that were never vendored); out of build / typecheck / tests
```
Two artifacts: `lib/index.js` (host half, ESM) and `lib/client.js` (client half, DSH ModuleLoader CJS).
### Cross-platform changes (three adaptations + behaviour fixes)
1. **Module mapping** — `dsh-tauri`, `dsh-tauri/client`, `dsh-tauri-ui/client` resolve to `src/bridge/*`, so upstream imports are untouched.
2. **Profile detection** — upstream only honoured `--profile`; `DSH_PROFILE`, `DSH_PROFILE_DIR` and the
`