dsh-tools-mcp
Provides web search functionality via DuckDuckGo, allowing agents to perform web searches without requiring an API key.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@dsh-tools-mcp Start a persistent shell and run `ls -la`, then show the output."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
dsh-tools-mcp
Extract and wrap the tools from minimal mode and standard mode in deepseek-harness (DeepSeek AI's open-source agent harness) as an MCP (Model Context Protocol) server, with the --mode parameter controlling which tool set is exposed.
The tool schemas, description texts, and output envelopes (such as the
<path>/<type>/<content>format ofread, the view/create/str_replace/insert semantics ofstr_replace_editor, and the[exit code: N]marker) are all faithfully reproduced from the original repository'sapps/cli/config/agent-presets/{minimal,standard}/agent.cordis.ymland its correspondingpackages/*/tool-*implementations.
Mode and Tool Mapping
Mode | Parameter | Tools |
Minimal mode |
| Persistent shell ( |
Standard mode |
|
|
Standard mode also supports --with-web-fetch to additionally expose web_fetch (the original standard preset defaults to fetch: false).
Related MCP server: deepseek-agent-mcp
Quick Start
cd dsh-tools-mcp
npm install
npm run build # 输出到 dist/
# 极简模式
node dist/index.js --mode minimal --cwd D:/develop/project/dsh-tools-mcp
# 标准模式
node dist/index.js --mode standard --cwd D:/develop/project/dsh-tools-mcpMCP Client Configuration
// mcp.json / WorkBuddy 自定义连接器
{
"mcpServers": {
"dsh-minimal": {
"command": "node",
"args": ["D:/develop/project/dsh-tools-mcp/dist/index.js", "--mode", "minimal", "--cwd", "D:/develop/project/dsh-tools-mcp"]
},
"dsh-standard": {
"command": "node",
"args": ["D:/develop/project/dsh-tools-mcp/dist/index.js", "--mode", "standard", "--cwd", "D:/develop/project/dsh-tools-mcp"]
}
}
}Both entry points can be registered simultaneously, and you can choose the minimal or standard tool set as needed.
All Parameters
--mode <minimal|standard> Agent 预设模式(默认 minimal)
--cwd <path> 工作区根目录,文件工具基于它解析相对路径(默认 process.cwd())
--shell <auto|bash|pwsh> shell 后端;auto = win32 用 pwsh,其余用 bash
--shell-timeout-ms <n> 持久 shell 单条命令超时(默认 300000)
--max-output-chars <n> 输出截断上限(默认 16000)
--skills-dir <path> 启用 skill 工具,扫描该目录下的 SKILL.md 子目录
--search-provider <duckduckgo|tavily|bing> web 搜索后端(默认 duckduckgo)
--search-api-key <key> tavily/bing 的 API key
--proxy <url> web 工具的 HTTP(S) 代理,如 http://127.0.0.1:7897
--with-web-fetch 额外暴露 web_fetch
--allow-outside-root 允许文件工具访问 --cwd 之外的路径(默认禁止)
--tools <a,b,c> 显式指定工具/套件清单覆盖模式(见下)
--help / --version--tools Override
--tools accepts tool names or suite names to expose a subset as needed:
# 只要文件相关
node dist/index.js --mode standard --tools read,write,edit,glob,grep
# 只要极简模式的编辑器 + 后台任务
node dist/index.js --mode minimal --tools str_replace_editor,job_output,job_list,job_killSuite names: shell (persistent shell), one-shot, fs, search, jobs, todo, web, ask-user, goal, plan, skill.
Design Notes
Persistent shell: No node-pty dependency; uses stdio pipes to drive a long-running
bash/powershellchild process; commands are wrapped with random UUID markers to reliably capture completion status and exit codes; state such ascd/exportis maintained across calls; automatically resets on timeout or shell exit (consistent with the originaltool-bash-persistentsemantics).Path safety: By default, file tools only allow access to paths within the
--cwdworkspace; out-of-bounds access raises an error prompting the use of--allow-outside-root.web_search defaults to DuckDuckGo (no API key required); for users in mainland China, it is recommended to use
--proxy http://127.0.0.1:7897, or switch to--search-provider tavily --search-api-key <key>.All state is in-process (session-level): todo/goal/plan/background job state lives with the server process lifecycle and is cleared on restart—equivalent to the original "session-level state."
Differences from the Original dsh
Item | Original dsh | This MCP wrapper |
Persistent shell | node-pty PTY terminal | stdio pipe long-running process (no interactive prompt, state maintained equivalently) |
| dsh UI question bridge | Synchronous interaction is not possible under MCP stdio; returns the question text and instructs the model to relay it to the user |
| UI approval flow | Server-side flag + plan text callback |
subagent_*/workflow/ralph | Depends on the dsh runtime (LLM sub-agents, workflow engine) | Not wrapped—requires the full dsh runtime, see below |
grep engine | Built-in ripgrep binary | node regex implementation (common syntax is equivalent; some ripgrep features are not supported) |
Unwrapped tools (runtime-coupled tools in the original standard preset, requiring the full dsh runtime): subagent_control, list_agents, subagent, subagent_fork, workflow, ralph. For these capabilities, please use the deepseek-harness itself.
Testing
npm run build
npm test # 冒烟测试:两种模式工具暴露 + 核心工具行为 + --tools 覆写
node scripts/state-test.mjs # 持久 shell 状态保持 / 退出码 / 优雅重置(PROXY=... 可测 web_search)
node scripts/bash-test.mjs # bash 后端验证Source Code Reference
Extracted from deepseek-ai/deepseek-harness (MIT License, master branch):
Mode definitions:
apps/cli/config/agent-presets/minimal/agent.cordis.yml,.../standard/agent.cordis.ymlTool implementations:
packages/shell/tool-bash-persistent,packages/fs/tool-str-replace-editor,packages/fs/tool-fs,packages/fs/tool-fs-search,packages/jobs/tool-jobs,packages/todo/tool-todo,packages/web/tool-web,packages/interaction/tool-ask-user,packages/goal/tool-goal,packages/plan/plan-mode,packages/skill/tool-skill, etc.
Available Tools
2 toolsbashA
Run commands in a persistent shell. State, including the current directory and exported environment variables, persists across calls for this agent.
You don't have access to the internet via this tool.
State is persistent across command calls and discussions with the user.
To inspect a particular line range of a file, e.g. lines 10-25, try 'sed -n 10,25p /path/to/the/file'.
Please avoid commands that may produce a very large amount of output.
Please run long lived commands in the background, e.g. 'sleep 10 &' or start a server in the background.
Inputs: command (required).
str_replace_editorA
Custom editing tool for viewing, creating and editing files
State is persistent across command calls and discussions with the user
If
pathis a file,viewdisplays the result of applyingcat -n. Ifpathis a directory,viewlists non-hidden files and directories up to 2 levels deepThe
createcommand cannot be used if the specifiedpathalready exists as a fileIf a
commandgenerates a long output, it will be truncated and marked with<response clipped>
Notes for using the str_replace command:
The
old_strparameter should match EXACTLY one or more consecutive lines from the original file. Be mindful of whitespaces!If the
old_strparameter is not unique in the file, the replacement will not be performed. Make sure to include enough context inold_strto make it uniqueThe
new_strparameter should contain the edited lines that should replace theold_str
Inputs: path (required), command (required), new_str, old_str, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 2 tools
Both tools are generic and overlap heavily in purpose: bash executes commands, while str_replace_editor edits files—but an agent could easily misuse bash for file edits (it can) or misuse str_replace_editor for shell commands (it cannot). The boundary is unclear, and each tool's descriptions do not clearly delineate when to use one over the other.
The names 'bash' and 'str_replace_editor' follow no consistent convention; one is a single-word executable name, the other is a multi-underscore compound. There is no verb_noun pattern, and the names are descriptive but not aligned. However, they are not chaotic, so a score of 2 is appropriate.
With only two tools, the server feels under-scoped for a general-purpose 'dsh-tools' server. Two tools can be sufficient if they cover the domain, but here the domain is broad (shell + file editing), and the count is too low to be considered well-scoped for the apparent purpose.
The tool surface lacks any file reading dedicated tool, any process management tool, or any other common operations. While bash can compensate, there are no explicit tools for listing files, searching, or managing processes. The set is far from covering typical developer tasks, though it covers the basics of shell and file editing.
Maintenance
Related MCP Connectors
Hosted MCP server and Agent Skills for specs, engineering threads, and project memory.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Remote MCP server exposing your Node Command fleet (files, shell, processes, browser) to AI hosts.
Official MCP server for Agentwork — delegate tasks to AI agents with human-in-the-loop
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server that wraps DeepSeek's AI capabilities into standard MCP tools, supporting three authentication modes including free web-based usage without API keys.6519 npm3MIT
- AlicenseAqualityDmaintenanceMCP server that packages DeepSeek agents as callable tools, offering a bare model for quick Q&A and a full agent capable of executing real coding and file-modifying tasks in a workspace.2MIT
- AlicenseNot gradedqualityCmaintenanceTurns DeepSeek Harness into an MCP server with tools for session management, agent execution, resources, and OAuth, plus browser automation and GitHub/GitLab integration.30 npm20MIT
- AlicenseNot gradedqualityCmaintenanceMCP server bridging ChatGPT to DeepSeek Harness, exposing 13 tools for task submission, status tracking, result retrieval, project/session management, and human-in-the-loop approvals.4MIT