Show and tell: Persistent editor workflows in DeepSeek Harness with MCP Apps #747
wangcan26
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
I built an installable community plugin that adds an MCP Apps Host to DeepSeek Harness:
Product idea
Every Editor. One DSH Editor.
DSH Editoris my shorthand for a specialized editor that runs inside the Harness Agent Chat with its original UI and data model. A user edits and saves; the Agent reads the saved project state and operation records, then continues from that revision.I use MCP Apps as the shared contract between the editor, its MCP Server, and the Host.
Demo
In this 34-second recording, the Agent creates a Three.js Pong project. The user changes the table layout and camera inside the MCP App, then clicks Save. That action persists a new revision and sends a standard
ui/message. The next Agent turn callsinspect_project, reads the two human operations, and responds with what changed.Host implementation
I built the plugin with
@modelcontextprotocol/ext-apps@1.7.5for the MCP Apps2026-01-26specification. It runs as a Cordis bundle and connects to Harness through public plugin and Session APIs.I run a test gate that covers:
tools/listandtools/callresources/listandresources/readui://resources withtext/html;profile=mcp-appui/initialize, tool input/result notifications, and teardownui/messagehandoff to the current Harness Sessionui/download-fileI keep model-facing tool text separate from structured UI metadata. If a View cannot load, the tool row retains its plain text result.
Security boundary
I run the Harness UI and Sandbox Proxy on different loopback origins. Each View sits inside a double iframe with CSP and explicit sandbox attributes. I accept a bridge message only when both
postMessageorigin and frame source match. Host API routes reject cross-origin writes and cap body and metadata sizes.Today, you can run the plugin on loopback Web with inline views. You reconnect MCP transports manually.
The security diagram and threat boundary are here:
https://github.com/creativedswork/dsh-mcp-apps#security-architecture
Try it
You can also run the standalone Counter Demo against the published Harness CLI without a neighboring Harness source tree.
I would value implementation feedback on:
ui/messageand download paths;The package is community-maintained and uses the MIT License.
All reactions