DeepSeek Harness MCP Setup: Connect Model Context Protocol Servers
DeepSeek Harness has no native MCP — it arrives via plugins. Setup dsh-plugin-setting-mcp, the dsh-mcp-lens gateway, and community MCP servers.
How MCP Works in dsh
DeepSeek Harness does not speak MCP natively — Model Context Protocol arrives as plugins, configured through the settings panel or cordis configuration[1].
Because everything in dsh is a plugin, MCP support is a family of plugins rather than one built-in protocol: an official community plugin for panel-based configuration, a gateway plugin for large tool directories, and community servers that expose dsh's own capabilities back to MCP clients like Cursor or Codex[1][2].
- MCP integration is plugin-based, not a native protocol
- Configure via Settings → Plugins or cordis config layers
- Three main routes: settings plugin, gateway, community server
Option 1: Settings-Panel MCP Plugin
The official community plugin dsh-plugin-setting-mcp lets you configure MCP servers from the dsh settings panel instead of hand-editing YAML[2].
For users of the visual alternative, the community plugin dsh-mcp-manager (Js2Hou) provides a dedicated UI for managing MCP servers[2].
# Install the settings-panel MCP plugin into the web profile
dsh plugin --profile web add dsh-plugin-setting-mcp
# Then open the Web UI at http://127.0.0.1:3080
# Settings → Plugins → MCP → add your server URL / command
# (stdio servers are declared in the profile's cordis.patch.yml)Option 2: dsh-mcp-lens Gateway
If you maintain a large remote tool directory, dsh-mcp-lens acts as an MCP gateway with progressive disclosure: two stable interfaces for searching big tool catalogs, lazy connection, and bounded caching[1].
Progressive disclosure means the model only loads the tool definitions it actually queries — which keeps context small and latency low even when thousands of tools are registered. That is the pattern for enterprise MCP estates.
The gateway is the right choice when a single MCP server would dump an overwhelming tool list into every request.
Option 3: Community MCP Server
The dsh-cursor-codex project ships a zero-dependency MCP stdio server that exposes dsh itself as MCP tools — dsh_delegate and dsh_health — callable from Cursor or Codex[1].
This is the reverse direction: instead of dsh consuming MCP servers, dsh becomes an MCP server. Combined with the Cursor integration guide, it closes the loop between the IDE and the harness.
# Expose dsh as MCP tools for Cursor / Codex
# Merge the server into Cursor:
# merge templates/cursor/mcp.json into ~/.cursor/mcp.json
# Codex uses dsh.config.toml instead
# dsh_delegate — hand a task to dsh from any MCP client
# dsh_health — check the harness profile statusWeb Search MCP Plugins
For agent web search, community plugins wrap existing search MCP services with DeepSeek-friendly defaults[1].
Both are drop-in tool plugins; add them with dsh plugin add and they register as agent search tools. Keys are stored per profile in $DSH_HOME/.credentials.yaml[3].
- dsh-web-search-exa — keyless anonymous MCP fallback (mcp.exa.ai/mcp) plus keyed REST mode
- dsh-tavily — multiple-key rotation for Tavily
Troubleshooting MCP Connections
Most MCP failures in dsh come from configuration layering or credential handling, not from the servers themselves[2][3].
- Plugin not loading: confirm it is installed into the profile you launched (dsh plugin --profile web add ...)
- Server not reachable: check the URL/command in the profile's cordis.patch.yml
- Credential errors: store keys via the Models/settings screen — they are written to .credentials.yaml and not readable afterwards
- Changed config not applying: model and provider changes apply on the next request; plugin changes need a profile restart
Stuck on a config-layer issue? The common errors guide covers MISSING_CREDENTIAL, UNKNOWN_MODEL, and the rest of the official troubleshooting table.