Preface¶
Connecting directly to the Axolotl Launcher’s built-in MCP endpoint in DSH often encounters three issues: the session is killed by the server after about 30 seconds of no response, the tools/list schema of 269 tools takes up about 195 KB of constant context, and screenshot tools only return base64 or paths instead of images visible directly in the conversation. Direct connection works, but the cost and stability are not ideal for agents.
Below introduces the community plugin dsh-plugin-axolotl (maintainer sdf123098, Category: Client). It adds an adapter layer between DSH and the launcher: it holds the MCP connection and responds to heartbeats, folds upstream tools into domain tools by prefix, and converts screenshots into DSH attachments; optional Bearer token authentication. The plugin runs with the current DSH process permissions. Please check GitHub source code and the MIT license before installing.
What is this¶
In one sentence: Integrates the Axolotl Launcher’s MCP server (default http://127.0.0.1:5219/mcp) into DeepSeek Harness’s Cordis plugin.
The launcher exposes about 269 MCP tools since 1.11.0-beta.2. This plugin does not register them as-is to the model, but collects them into 9 domain tools, plus axolotl_status (diagnostics) and axolotl_raw (calling any tool by its upstream original name), for a total of 11 DSH tools.
Why this layer is needed¶
Session and Heartbeat¶
The launcher (Rust/rmcp) pings the client every 15 seconds via an independent SSE stream; the entire MCP session terminates if there is no response within 10 seconds, and subsequent calls often appear as Streamable HTTP error: Error POSTing to endpoint. The plugin maintains a persistent SDK client internally, automatically responding to pings; it automatically reconnects and retries once after disconnection.
Tools List Volume¶
The full schema is approximately 195 KB. The plugin splits the tools by name prefix into 9 domains; the tool descriptions for each domain only list the op name (totaling about 9 KB). When full parameters are needed, pass op: "help" to the corresponding domain tool to check on the fly, trading one call for reduced constant volume in the context.
Screenshots into Conversation¶
Base64 images returned by ui_screenshot, skin_get_texture, screenshot_get, etc., are converted by the plugin into DSH attachment references, so screenshots can appear directly in the conversation; this depends on whether the profile has attachment storage mounted, and may degrade to text-only if not mounted.
Core Features¶
| Tool | Covering Upstream Tools | Purpose |
|---|---|---|
axolotl_status |
— | Version, connection, control session, number of tools per domain |
axolotl_instances |
48 | Instances, installation tasks, download queue, game processes |
axolotl_launch |
18 | Launch, Java, window, memory, game version metadata |
axolotl_content |
26 | Mods, resource packs, shaders, modpacks |
axolotl_files |
15 | Files inside instance, archives, NBT |
axolotl_worlds |
17 | Saves and seeds |
axolotl_schematics |
9 | .schem, .litematic, etc. projections |
axolotl_servers |
34 | Dedicated servers and LAN |
axolotl_ui |
7 | UI screenshots, navigation, clicks, inputs |
axolotl_system |
91 | Settings, proxy, storage, database, logs, accounts, skins, updates |
axolotl_raw |
269 | Call any tool by upstream original name (configurable to disable) |
Domain tools have unified parameters:
op(Required): Upstream tool name, or"help"args: Argument object for that op;instance_id/session_idwill be auto-completedinstance_id: Convenient shorthand, equivalent toargs.instance_id
The launcher only allows one control session at a time; the plugin auto-enables/disables based on sessionPolicy etc. The default idle time is 15 minutes. Write operations can go through DSH approval when requireApproval: true (total 83 write operations requiring full access).
When the launcher enables “Require Authentication”, HTTP requests need Authorization: Bearer <token>. The token is saved in <DSH_HOME>/data/dsh-plugin-axolotl/config.json, not in cordis.patch.yml; the settings page only displays the first and last 4 digits, and the new token takes effect on the next call and reconnects.
Installation and Enablement¶
Official installation command (from repository README):
dsh plugin install dsh-plugin-axolotl
Or manually: Place the package in the profile’s node_modules, and add in the insert section of cordis.patch.yml:
- id: axolotl
name: 'dsh-plugin-axolotl'
config:
upstreamUrl: 'http://127.0.0.1:5219/mcp'
Prerequisites:
- Launcher version ≥ 1.11.0-beta. The 1.10.5 stable version only has 3 shell tools (
get_launcher_info/start_session/end_session), unable to cover the capabilities described in this article. - In the launcher: Settings → MCP Server → Enable, and allow full access (write operations require it).
- The plugin requires Node ≥ 20 (see
package.json).
Common configuration items (can be modified in DSH plugin settings page or cordis.patch.yml):
| Field | Default | Description |
|---|---|---|
upstreamUrl |
http://127.0.0.1:5219/mcp |
Launcher MCP address |
autoConnect |
true |
Auto-connect when DSH starts |
sessionPolicy |
auto |
auto / persistent / manual |
sessionIdleMs |
900000 |
Auto-close control session after idle (15 minutes) |
sessionRetryMs |
45000 |
Upper limit for retry when session is occupied |
exposeRawTool |
true |
Whether to register axolotl_raw |
requireApproval |
true |
Whether high-risk write operations go through DSH approval |
toolCallTimeoutMs |
120000 |
Timeout for single upstream call |
Typical Usage¶
It is recommended to first execute op: "help" for the target domain, then call with parameters. The example workflow in the README is as follows:
axolotl_instances op: instance_list → List instances
axolotl_instances op: instance_launch args: { instance_id } → Launch, returns operation_id
axolotl_system op: operations_get args: { operation_id } → Poll async result
axolotl_content op: content_list args: { instance_id } → Mod list
axolotl_ui op: ui_screenshot → Screenshot appears in conversation
Download and installation, etc., are non-blocking: they return operation_id, which is used to poll via axolotl_system’s operations_get.
Use Cases and Notes¶
Who is it for: Already running the Axolotl Launcher locally, wants to manage instances, mods, saves, LAN, or view the launcher interface via DSH agents, and doesn’t want to handle MCP heartbeats, massive tools/list, and screenshot pipelines themselves.
Notes:
- Does not support multiple launchers in parallel; the control session is globally unique.
- Does not modify launcher source code (upstream GPL-3.0, this plugin MIT).
axolotl_uican screenshot and click, but does not take over the launcher UI structure.- May fail within ~30 seconds after restarting DSH due to the old session not being released; the plugin will retry until
sessionRetryMs; if it still fails, you need to wait for the launcher heartbeat timeout to release the session. - The community directory skillhub.cn has no official affiliation with DeepSeek or Fanghu (Huanfang); the DSH ecosystem philosophy is “Everything is a plugin”, please review the code yourself before installing.
Troubleshooting points: When axolotl_status shows not connected, check the launcher and MCP switch; when upstream tools: 0, verify the version is 1.11.0-beta or higher; 401 and port issues give different hints from the plugin (401 prioritize looking at error.code, don’t confuse with “session expired”).
Conclusion¶
dsh-plugin-axolotl organizes the Axolotl Launcher’s MCP capabilities into a small set of domain tools, and handles connection keep-alive, context volume, screenshot attachments, and optional token authentication, suitable for driving local Minecraft launcher workflows with natural language in DSH.
- Directory page: https://www.skillhub.cn/plugins/sdf123098/dsh-plugin-axolotl
- Source code and docs: https://github.com/sdf123098/dsh-plugin-axolotl