local-shell-mcp

52Star11Fork5Issue1Watching

把 local-shell-mcp 的全部 MCP 工具(含 shell、文件、浏览器、远程机器)桥接到 DeepSeek Harness 的 Web 客户端,并提供实时协作的 Live Workspace 视图。

机审证据安装命令仓库已核验dsh-plugin Topic许可证READMEAI 百科
语言
Python
License
MIT
分支
main
chatgpt-appdsh-pluginharnessmcpremote-control

安装

$ dsh plugin --profile web add github:fwerkor/local-shell-mcp

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

对话式安装

帮我安装 DeepSeek Harness 插件 fwerkor/local-shell-mcp:先查看仓库 https://github.com/fwerkor/local-shell-mcp.git 确认安全性,然后执行安装命令并验证插件加载成功。

把这段指令粘贴给 DSH Web GUI 里的助手,由它代你完成安装与验证。

一句话定位

把独立的 local-shell-mcp MCP 服务(提供 shell、文件、浏览器自动化、远程机器、Agent Skills 等工具)桥接到 DeepSeek Harness 的 Web 客户端,并在对话窗口里嵌入一个实时协作的 Live Workspace 面板。

核心能力

  • 把上游 MCP 服务的全部工具按 mcp__lsm__* 命名空间自动注册到 DSH 工具列表,模型可直接调用
  • 把上游服务声明的指令段作为系统提示的一部分注入,模型能感知当前可用的工具与上下文
  • 在 DSH 会话面板的"Live Workspace"标签里渲染一个嵌入式实时工作台,支持查看终端、文件、任务进度并向模型发问
  • 每个 DSH 会话独享一条上游 MCP 连接,会话结束自动断开,并带心跳和断线重连
  • 监听上游 tools/list_changed 通知,热更新本地工具列表而无需重启插件
  • 上游返回的图片、音频、resource 等非文本内容会被丢弃并替换为占位说明,避免污染对话上下文

技术实现

  • 语言: JavaScript(Node.js,ESM)
  • 关键依赖: @modelcontextprotocol/sdk(MCP 客户端)、zod(结果校验)、node:cryptonode:fs/promises
  • 架构模式: DSH bundle patch + 客户端注入双端结构;服务端通过 tools / systemPrompt / webServer / agents 四个钩子把 MCP 桥接进来,客户端通过 slots / sessions / conversation 在对话面板里挂载 React 视图
  • 入口文件: dsh/index.js(服务侧桥接)、dsh/client.js(客户端 React 视图)、cordis.patch.yml(注入声明)

适用场景

当你已经在本机或容器里跑着 local-shell-mcp 服务,想让 DeepSeek Harness 直接调用它来做命令行、文件操作、浏览器自动化、远程机器控制时,装上这个插件就能把整套工具和实时工作台搬进 DSH 网页。多账号协作或需要把模型执行过程可视化展示时尤其方便。

前置依赖与兼容性

依赖最低版本说明
DSH未声明通过 dsh.bundle.patchdsh.client.inject 注入,需支持 bundle patch 与 client runtime 的 DSH 版本
Node.js>=22package.json engines 字段声明
平台跨平台纯 Node.js 实现,无原生模块,依赖 node:crypto / node:fs/promises
本地 MCP 服务自带依赖上游 local-shell-mcp HTTP 服务,默认地址 http://127.0.0.1:8765/mcp,需另行启动

安装方式

dsh plugin --profile web add github:fwerkor/local-shell-mcp

配置项

本插件无需普通用户手工配置;以下高级字段在 cordis.patch.ymlconfig 下生效(也可通过同名 DSH_LSM_* 环境变量覆盖默认值):

配置类型说明默认值
url字符串上游 MCP 服务的 HTTP/HTTPS 地址,DSH 会向它建立 Streamable HTTP 连接http://127.0.0.1:8765/mcp
browserUrl字符串给 Live Workspace 浏览器面板使用的前端来源地址,不写则沿用上游返回的地址未设置(透传上游)
headers对象透传给上游 MCP 请求的额外 HTTP 头,比如 Authorization空对象
toolCallTimeoutMs数字单次工具调用的最长等待时间,超时会被中断120000(120 秒)
keepAliveIntervalMs数字心跳探测间隔,必须不小于 5000 毫秒30000(30 秒)
reconnectInitialDelayMs数字上游断开后第一次重连的等待毫秒数500
reconnectMaxDelayMs数字重连退避的最大等待毫秒数30000

环境变量快捷覆盖:DSH_LSM_MCP_URL / DSH_LSM_BROWSER_URL / DSH_LSM_AUTHORIZATION / DSH_LSM_TOOL_CALL_TIMEOUT_MS / DSH_LSM_KEEPALIVE_INTERVAL_MS

常见问题

Q: 装上之后 DSH 里能看到什么?

A: 对话面板里会多出一个"Live Workspace"标签,里面是 local-shell-mcp 的实时协作界面(终端、文件、任务进度等)。模型可用的工具列表也会按 mcp__lsm__ 前缀自动追加上游声明的全部工具。

Q: 必须先启动 local-shell-mcp 服务吗?

A: 是的。本插件只是桥接,不内置 MCP 服务,依赖 localhost:8765(默认)的上游 MCP 服务。可以通过 DSH_LSM_MCP_URL 环境变量或 cordis.patch.yml 里的 url 字段改成别的地址。

Q: 每个 DSH 会话是独立的吗?

A: 是的。插件为每个 DSH Session 单独建立一条上游 MCP 连接,并用专属的会话亲和请求头标识,最多同时维护 64 个活跃会话连接,超出时会按最近使用时间淘汰已结束的会话。

Q: 工具结果里包含图片或音频怎么办?

A: 插件只把文本片段转发给模型,图片、音频、resource 类型的内容会被替换成"[image: …, content discarded]"这类占位说明,避免大块二进制塞进对话上下文。

Q: 需要给本地服务加 Bearer Token 吗?

A: 可选。在 DSH 进程环境里设置 DSH_LSM_AUTHORIZATION 即可透传到上游 MCP 请求头;也可以在 cordis.patch.ymlheaders 字段直接写死。

Q: 上游 MCP 工具列表会变化时,DSH 端会自动更新吗?

A: 会。插件订阅了上游的 tools/list_changed 通知,发现变更会重新拉取并热更新本地的 mcp__lsm__* 工具列表,不需要重启插件或重连会话。

Q: Live Workspace 加载不出来怎么办?

A: 先确认上游 MCP 服务可达并且 live_workspace_reconnect 工具返回了凭证。如果上游是远程 HTTPS 而 DSH 在浏览器里访问,还需要正确设置 DSH_LSM_BROWSER_URL,否则 iframe 跨域或协议不匹配会失败。

上手难度

入门 — 安装一行命令即可,主要工作是先在本地启动一个能访问的 local-shell-mcp MCP 服务,DSH 端无需写额外配置。

已知问题与限制

  • 上游声明的工具若要求"基于任务"(task-based)执行模式,本桥接会直接抛错并不调用,因为当前实现只支持普通请求/响应式的工具调用
  • 同时活跃的 DSH 会话连接上限为 64;当 64 个会话都还活跃且仍想接入新会话时,会直接抛出"too many live sessions"错误而不是排队等待
  • 上游返回的图片、音频、resource_link 等非文本内容会被丢弃,模型拿到的只是占位说明,无法直接查看或转交
  • cordis.patch.ymlbrowserUrl 不能携带用户名密码,否则配置校验阶段就会报错
  • 工具名做了长度与字符归一化(mcp__lsm__ 前缀 + 截断 + 哈希),过长的上游工具名在 DSH 端看到的名称会和原始名不同

收录徽章

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/fwerkor/local-shell-mcp)

把这段 markdown 粘贴到你的 GitHub README,链接回本插件详情页。徽章只声明已被本站收录,不代表安全认证。

返回插件目录