MCP Server Setup
dmx runs as an MCP (Model Context Protocol) server. You install it once per IDE, and it's available in every project you open.
How it works
dmx exposes two kinds of MCP primitives:
- Prompts: every workflow skill (like
/dmx/planor/dmx/validate) is registered as an MCP prompt — this is the mechanism that surfaces them as slash commands in your IDE - Tools: the agent calls these directly rather than you invoking them as commands
run_loop,loop_advance,loop_continue, andloop_statusdrive the loop orchestrationget_skill_definitionloads a skill's instructions, andlist_skillslists the custom and shared skills in the reposnapshot_loop_for_prmarks the Release Loop's run complete beforecreate-prcommitssync_shared_sourcesdoes the cloning and copying behind/dmx/syncdetect_invoking_ideandsetup_ide_ruleswrite the rule files for/dmx/initand/dmx/upgrade
list_skills isn't the same as the dmx list-skills command-line command. The command-line version prints the skills bundled with dmx; the tool lists the skills in your repo and its shared sources.
Your IDE connects to dmx on startup and discovers all available prompts and tools automatically.
Transport modes
dmx supports two transports:
| Transport | When to use |
|---|---|
| stdio (default) | Local development. The IDE spawns dmx as a subprocess. Zero config, zero network. |
| HTTP + SSE | Shared team server or remote development. dmx runs as a persistent server, multiple IDEs connect. |
For local development, use stdio. It's the simplest setup and requires no running server.
Add dmx to your IDE
Every IDE uses the same config:
{
"mcpServers": {
"dmx": {
"command": "uvx",
"args": ["--from", "deepmodel-dmx@latest", "dmx", "serve"]
}
}
}Save it to the file for your IDE:
| IDE | For all your projects | For one project, shared with your team |
|---|---|---|
| Cursor | ~/.cursor/mcp.json | .cursor/mcp.json |
| Claude Code desktop app | ~/Library/Application Support/Claude/claude_desktop_config.json | .mcp.json |
| Claude Code in the terminal or an IDE extension | See below | .mcp.json |
| VS Code (GitHub Copilot) | ~/.copilot/mcp-config.json | .mcp.json |
Project files live at the repo root, so commit them and every developer gets dmx without setting it up. Claude Code and VS Code both read the same .mcp.json, so one file covers both. If a file already exists, add the dmx entry to its mcpServers object.
Then:
- Cursor: restart Cursor.
- Claude Code: the first time you open a project with a shared
.mcp.json, Claude Code asks you to approve its servers. Runclaude mcp listto confirm dmx is connected.- Desktop app:
claude_desktop_config.jsonapplies to the app's Code tab and to Claude Desktop chat, in every project. On Windows it's%APPDATA%\Claude\claude_desktop_config.json. Restart the app after saving. - Terminal and IDE extensions: the
claudeCLI doesn't readclaude_desktop_config.json. It keeps per-user servers in~/.claude.jsonalongside its own state, so for all your projects add dmx withclaude mcp add --scope user dmx -- uvx --from deepmodel-dmx@latest dmx serverather than editing that file. If dmx is already in your desktop config,claude mcp add-from-claude-desktopcopies it over (macOS and WSL).
- Desktop app:
- VS Code: if you already use
.vscode/mcp.json, you can add dmx there instead. That file uses a top-levelserverskey instead ofmcpServers.
To pin every developer to one release, replace @latest with an exact version, such as deepmodel-dmx==0.5.0. See Upgrading dmx.
Deploy to every machine
To roll dmx out with Jamf, Intune, or another MDM tool, see Enterprise Deployment. It covers the per-user config files, Claude Code's managed-mcp.json, network and mirror settings, and a tested Jamf Pro policy script.
Other MCP-compatible IDEs
For any IDE that supports MCP via stdio, the command is:
uvx --from deepmodel-dmx@latest dmx servedmx works out the workspace root on every tool call. See Workspace root below.
HTTP + SSE transport
To run dmx as a persistent server:
uvx --from deepmodel-dmx dmx serve --http --port 8080With bearer token authentication:
REQUIRE_API_KEY=true MCP_API_KEY=your-secret-token uvx --from deepmodel-dmx dmx serve --http --port 8080In your IDE, connect to http://localhost:8080/sse.
For shared team servers, run dmx on a dedicated host and point each developer's IDE at the server URL. Use a different token per developer for auditability.
Verifying the connection
After connecting, ask your IDE: What dmx skills are available?
A working connection returns the full list of dmx skills. If you see no skills or an error, check:
uvxis on your PATH (which uvx)- Your IDE config file is valid JSON (no trailing commas)
- Your IDE was restarted after config changes
Project scope vs. global scope
By default, dmx reads .dmx/ from the current workspace root. You can point multiple projects at the same dmx server. Each project's .dmx/ is isolated.
If you work in monorepos, dmx resolves .dmx/ from the workspace root, which is typically the root of the repository as seen by your IDE.
Workspace root
dmx resolves the workspace root again on every tool call, in this order:
- Explicit
workspace_root: a path the agent passes to the tool. Must be absolute (~is expanded); a relative path is rejected. - MCP roots: the first workspace root your IDE reports to the server.
- Server working directory: the directory the dmx process was started in, as a last resort.
dmx checks the result before using it. A filesystem root or your home directory is always rejected. An auto-detected root (2 or 3) must also contain a .git or .dmx directory. If it doesn't, the call fails with an error instead of guessing, so loop state is never written outside your project. The exception is the /dmx/init bootstrap, which works on a brand-new project that has neither yet.
If you see an error like this:
no `.git` or `.dmx` found here — this doesn't look like a project root.your IDE probably opened a parent folder, or doesn't report MCP roots and started dmx somewhere else. Open the repository root itself in your IDE, or ask the agent to retry with workspace_root set to the project's absolute path.