deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:sugarforever/dsh-mcp-apps
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
@sugarforever/dsh-mcp-apps is a dual-face Cordis plugin that makes DeepSeek Harness an MCP Apps host.
The Host half connects to one MCP Server, registers its model-visible tools on ctx.tools, and owns all MCP network or stdio traffic. The Web Client half renders tools carrying _meta.ui.resourceUri as sandboxed interactive Apps inside the Harness conversation.
io.modelcontextprotocol/uitext/html;profile=mcp-app UI resources_meta.ui.resourceUri and legacy _meta["ui/resourceUri"]CallToolResult delivery to the View, including structuredContenttools/call, resources/list, and resources/readPlain MCP tools remain plain Harness tools. An MCP Server does not need to provide a UI for every tool.
DeepSeek Harness currently requires Node.js ^22.19.0 or >=24.0.0. Its profile plugin manager also invokes pnpm; install the version used by the current DSH release:
npm install --global pnpm@11.7.0
Then start the Web profile without a global DSH installation:
npx @deepseek-ai/dsh web
The Web UI is served at http://127.0.0.1:3080 by default. The first run initializes the web profile under ~/.dsh/profiles/web (or $DSH_HOME/profiles/web when DSH_HOME is set).
Install the published package into the DSH Web profile:
npx @deepseek-ai/dsh plugin --profile web add @sugarforever/dsh-mcp-apps
For local development, install this checkout instead:
npx @deepseek-ai/dsh plugin --profile web add /absolute/path/to/dsh-mcp-apps
You can also install a tarball downloaded from a GitHub Release:
npx @deepseek-ai/dsh plugin --profile web add ./sugarforever-dsh-mcp-apps-0.1.2.tgz
The package is a DSH bundle. Installing it also applies its bundled cordis.patch.yml, which mounts the public VibeFun MCP Apps server at https://vibefun.app/api/mcp by default.
To connect a different server, edit the installed profile patch at ~/.dsh/profiles/web/cordis.patch.yml and replace the generated instance configuration. The relevant entry is:
- insert:
- id: mcp-apps-vibefun
name: '@sugarforever/dsh-mcp-apps'
config:
serverName: vibefun
transport: streamable-http
url: https://vibefun.app/api/mcp
failOnStartupError: true
Start or restart DSH and open http://127.0.0.1:3080:
npx @deepseek-ai/dsh web
To remove the package dependency:
npx @deepseek-ai/dsh plugin --profile web remove @sugarforever/dsh-mcp-apps
The plugin manager also removes the bundle patch contributed by the package.
Create mcp-apps.cordis.yml:
- insert:
- id: mcp-apps-vibefun
name: '@sugarforever/dsh-mcp-apps'
config:
serverName: vibefun
transport: stdio
command: node
args: ['/absolute/path/to/your-mcp-server.js']
env:
VIBEFUN_API_KEY: !!js process.env.VIBEFUN_API_KEY
failOnStartupError: true
Run the Harness Web profile with the overlay:
dsh web --patch "$PWD/mcp-apps.cordis.yml"
- insert:
- id: mcp-apps-vibefun
name: '@sugarforever/dsh-mcp-apps'
config:
serverName: vibefun
transport: streamable-http
url: http://127.0.0.1:3000/mcp
headers:
Authorization: !!js '`Bearer ${process.env.VIBEFUN_MCP_TOKEN}`'
failOnStartupError: true
The browser never receives the URL, command, headers, environment, or credentials. Its package-private RPC channel is loopback-only.
npm install
npm test
npm run typecheck
npm run build
The integration test starts a real stdio MCP Apps Server and verifies discovery, tool execution, structured output, resource reading, and teardown.
The repository includes .github/workflows/publish.yml. Publishing a GitHub Release runs the complete release gate, creates an npm tarball, uploads it as a workflow artifact and GitHub Release asset, and publishes the same tarball to npm. Reruns are safe: when that exact npm version already exists, the workflow skips the immutable npm publication and still completes the GitHub artifacts.
The workflow uses npm Trusted Publishing with GitHub OIDC, so it does not require an NPM_TOKEN secret.
If @sugarforever/dsh-mcp-apps does not exist on npm yet, publish the first version locally:
npm login
npm ci
npm test
npm run typecheck
npm run build
npm pack --dry-run
npm publish --access public
On npmjs.com, open the package's Settings → Trusted Publisher, choose GitHub Actions, and configure:
sugarforeverdsh-mcp-appspublish.ymlnpm publishDo not add an environment name unless the workflow is also updated to use that exact GitHub environment.
Update and commit the package version, then push the matching tag:
npm version patch
git push origin main --follow-tags
Create and publish a GitHub Release for that tag. For example, package version 0.1.1 must use tag v0.1.1. Publishing the Release triggers the workflow; a mismatched tag fails before npm publication.
Before creating a Release, the same checks can be run locally:
npm ci
npm test
npm run typecheck
npm run build
npm pack --dry-run
Model ── native Harness tool ── Host MCP Client ── MCP Server
│ │
│ loopback RPC │ ui:// resource
▼ │
Harness Web tool card ── AppBridge ── sandboxed iframe View
See docs/architecture.md and docs/security.md.
srcdoc; Apps should ship self-contained HTML or declare every remote origin in resource CSP metadata.MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。