dsh-plugin-axolotl:把美西螈启动器的 269 个 MCP 工具收成 11 个领域工具

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_id will be auto-completed
  • instance_id: Convenient shorthand, equivalent to args.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:

  1. 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.
  2. In the launcher: Settings → MCP Server → Enable, and allow full access (write operations require it).
  3. 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_ui can 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.

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye