HMCL MCP Server
Search, download, and install Minecraft modpacks from CurseForge using HMCL's embedded API key, including retrieving project details and specific versions.
Search, download, and install Minecraft modpacks from Modrinth, including retrieving project details and specific versions, all through HMCL's own addon repository.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@HMCL MCP Serverinstall Minecraft version 1.20.1"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
HMCL MCP Server
MCP (Model Context Protocol) server that lets AI agents drive HMCL (Hello Minecraft! Launcher, https://hmcl.huangyuhui.net) programmatically: install Minecraft versions, search/download/import modpacks (Modrinth + CurseForge), and launch/stop the game.
HMCL has no command line interface (no --launch, no --import, no headless mode), so this project injects a small javaagent into a headless HMCL JVM and drives HMCL's core classes directly. Modpack search/download/install all run through HMCL's own addon repositories inside the agent (Modrinth, and CurseForge with HMCL's embedded API key — no user key needed); listing installed versions/modpacks is a local filesystem scan.
Architecture
┌──────────────────────────────┐ stdio (JSON-RPC only) ┌────────────────────────────────┐
│ MCP client / AI agent │ ◀────────────────────────▶ │ Node MCP server (this repo) │
└──────────────────────────────┘ └───────────────┬────────────────┘
filesystem scans │ HTTP JSON API
<workdir>/versions/, │ 127.0.0.1:<port>
mcpacks/ (search/download) │ X-HMCL-Agent-Token
▼
┌────────────────────────────────┐
│ Headless HMCL JVM │
│ java -javaagent:hmcl-agent.jar │
│ -Dhmcl.gameDir=<workdir> … │
│ -cp HMCL.jar;javafx-*.jar │
│ hmcl.agent.AgentMain │
└────────────────────────────────┘Node MCP server (
src/, TypeScript, stdio transport): registers 13 tools, drives HMCL's own Modrinth/CurseForge modpack repositories for search/download/install, scans<workdir>/versions/on disk for installed versions and modpacks, and talks to the agent over loopback HTTP.Java agent (
agent/, compiled bynpm run build:agent): injected into HMCL with-javaagent; initializes HMCL core headlessly (SettingsManager.init()→DownloadProviders.init()→Accounts.init()) and exposes a loopback HTTP JSON API (/status,/versions/install,/modpack/install,/launch,/launch/stop,/shutdown) on127.0.0.1:<port>. A non-daemon HTTP thread keeps the JVM alive.No launcher GUI: the HMCL window never opens. When you launch the game, the game window itself opens normally (the game is a separate child process).
HMCL-compatible directory layout inside the workdir: versions/<id>/, libraries/, assets/, mcpacks/ (downloaded pack files), hmcl/ (HMCL.jar + hmcl-agent.jar + javafx jars), .hmcl/ (HMCL 3.16+ workspace config).
Related MCP server: Desktop Commander MCP Server
Requirements
Node.js 18+ (24 recommended) — MCP SDK 1.30.0,
npm installJDK 17+ with
javac(21 recommended) — HMCL itself requires Java 17;javacis needed to compile the agent jarInternet access on first run (HMCL jar, javafx jars, Minecraft versions/libraries/assets)
Tools (13)
Tool | Args | Description |
| — | Java path + version, workdir, hmcl dir contents (HMCL.jar / hmcl-agent.jar / javafx jars), agent running status, version/modpack counts |
| — | Download latest HMCL jar into |
| — | Start the headless HMCL JVM with the agent (no-op if already running) and return agent |
| — | Stop the headless HMCL JVM (agent |
| — | Scan |
|
| Install a vanilla Minecraft version through the agent's HMCL download pipeline |
|
| Search modpacks via HMCL's own repositories (CurseForge uses HMCL's embedded key — no user key needed) |
|
| Project details + latest version for one modpack (id = Modrinth slug or CurseForge numeric id) |
|
| Download the pack file into |
|
| Download (if |
| — | Scan |
|
| Launch an instance as an offline account; the game opens as a child process |
| — | Stop the running game process (agent |
All handlers return structured data on success and an error message on failure (MCP isError result) — they never crash the server.
Quick start
npm install # install dependencies
npm run build # compile the MCP server → dist/
npm run build:agent # download javafx jars + compile agent/build/hmcl-agent.jar (javac required)Register the server in your MCP client:
{
"mcpServers": {
"hmcl-mcp": {
"command": "node",
"args": ["D:/ProjectDir/AgentFarm/HMCL-MCP/dist/index.js"]
}
}
}Environment variables can be set in the client's env object, in your shell, or via a .env file — see .env.example and docs/setup.md.
Environment variables
Variable | Default | Description |
|
| HMCL working directory (game root + user data): |
|
| Directory holding |
|
| Java binary used to launch the headless HMCL JVM |
| (none) | Optional CurseForge API key override, passed to HMCL as |
|
| Agent HTTP port on |
|
| Shared token, sent as the |
Typical agent workflows
Modpack: search → install → launch
search_modpacks(query: "fabulously optimized")→get_modpack(id: "fabulously-optimized")→install_modpack(id: "fabulously-optimized", name: "fabulously-optimized")(downloads and installs in one step, all through HMCL) →launch_game(version: "fabulously-optimized", username: "Steve")— note:launch_game'sversionis the instance name frominstall_modpack/list_modpacks, not the Minecraft version numberVanilla: install a version → launch
install_version(mc_version: "1.21.4")→launch_game(version: "1.21.4", username: "Steve")First run / fresh setup
check_environment(verify java + hmcl dir) →install_hmcl(downloads HMCL.jar, builds the agent jar) →start_hmcl(boots the headless JVM, agent responds on/status)Cleanup
stop_game(stop the running game) →stop_hmcl(stop the headless JVM)
Troubleshooting
javac not found/ java missing: installing a JDK is the user's responsibility — install JDK 17+ (21 recommended) and make sure bothjavaandjavacare on PATH (or setHMCL_MCP_JAVA).First run downloads:
install_hmcldownloads HMCL.jar (~10 MB) from GitHub releases andnpm run build:agentdownloadsjavafx-base/javafx-graphicsfrom Maven Central — both need internet and can take a minute.install_hmclfails with HTTP 403/429: GitHub API rate limit — downloadHMCL-<version>.jarmanually and place it at<hmclDir>/HMCL.jar(seedocs/setup.md), then re-run.CurseForge errors (403): missing/invalid API key — CurseForge is optional; use Modrinth (keyless) for search/install.
Headless means no launcher window: only the game window appears, on
launch_game.Port conflict: change
HMCL_MCP_AGENT_PORTand restart; the agent binds127.0.0.1only.Paths containing
!: HMCL refuses to run when the working directory or jar path contains!— use a path without it.
Docs
docs/setup.md— manual HMCL install, workdir layout, reusing an existing game directory, security notesdocs/research/— research notes (MCP SDK, HMCL Java API, HMCL CLI/modpack formats, Modrinth/CurseForge APIs)src/types.ts— the shared contract (tools, types, cross-module interfaces)
Available Tools
13 toolscheck_environmentcheck_environmentA
Report the current environment: java (path + version), workdir, hmcl dir contents (HMCL.jar / hmcl-agent.jar / javafx jars), whether the headless HMCL agent JVM is running (loopback probe with short timeout), and counts of installed versions and modpacks. Run this first to diagnose setup problems. java is null when no JDK is found.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses important behavioral details such as the loopback probe with short timeout, and the null java when no JDK is found. It could be more explicit about being read-only with no side effects, but the disclosed details are valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence listing all relevant outputs, followed by two short, high-value sentences about usage and a null case. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately explains return values: java info, workdir, directory contents, JVM status, and counts. It lacks specifics about error behavior or timeout outcomes, but the core diagnostic information is thoroughly covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has 0 parameters and the schema shows no properties, so there is nothing to document. Per calibration, a baseline of 4 is appropriate; the description does not need to add parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Report the current environment' and then enumerates specific outputs (java path/version, workdir, hmcl dir contents, JVM running status, counts). This clearly distinguishes it from sibling tools like install_hmcl or launch_game, which perform actions, while this tool is purely diagnostic.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Run this first to diagnose setup problems' gives explicit guidance on when to use the tool and implies it should precede other tools. It does not mention alternatives or exclusions, but given the tool's diagnostic nature, this is sufficient context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_modpackdownload_modpackA
Download a modpack file through HMCL into /mcpacks/ (SHA-1 verified via HMCL's downloader). Pass versionId (a version name from get_modpack) to pick a specific version; defaults to the latest. Returns {id, version, gameVersions, filename, path, size, sha1}.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| source | No | ||
| versionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the download destination, SHA-1 verification, default version behavior, and the return object structure. However, it does not mention permission requirements, overwrite behavior, or any side effects beyond writing to <workdir>/mcpacks/. With no annotations, these traits are not covered elsewhere.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences contain destination, verification, parameter usage, and return format, with no superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Considering the tool has 3 parameters and no output schema, the description covers the primary action, a key behavioral detail (SHA-1), default version selection, and the full return object structure. It misses explanations for id and source, but overall is sufficiently complete for a download tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description clarifies the versionId parameter and its default behavior, and references get_modpack as the source of version names. It does not explain the id parameter (likely the modpack identifier) or the source parameter, though the enum values are self-explanatory. With 0% schema coverage, this is partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads a modpack file via HMCL to a specific directory, with specific behavior (SHA-1 verification). This distinguishes it from sibling tools like install_modpack, which presumably installs the modpack.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through the versionId parameter ('a version name from get_modpack') and defaulting to latest, but offers no explicit guidance on when to choose this over install_modpack or other siblings. It provides context but no when-not/alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_modpackget_modpackA
Get details of a modpack project (id = Modrinth slug or CurseForge slug) through HMCL: summary + available versions (id = version name, version, gameVersions, loaders) and the latest version.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| source | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavior. It does explain the output structure (summary, available versions, latest version), but it omits potential prerequisites like needing HMCL to be started or installed, and any side effects (though 'get' implies read-only). It adds some useful context like 'through HMCL', but not enough to fully satisfy transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that efficiently conveys the tool's purpose, input semantics for the key parameter, and expected output fields. No redundancy or unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives a good overview of what the tool returns and the input id format, but it leaves out important context: what 'through HMCL' implies (e.g., whether HMCL must be running), and the role of the optional 'source' parameter. Without an output schema or annotations, these gaps reduce completeness for an agent deciding whether to invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage, so the description must compensate. It explains the 'id' parameter as 'Modrinth slug or CurseForge slug', which is helpful, but it does not explain the 'source' parameter at all, even though it has an enum. This omission is significant, especially since source disambiguates the id platform.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get details of a modpack project' with a specific verb and resource. It also distinguishes from siblings like search_modpacks, download_modpack, and install_modpack by focusing on retrieving summary and version details for a specified id.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on usage: it's for retrieving details of a modpack by its Modrinth or CurseForge slug, and it specifies the returned information. However, it does not explicitly mention when not to use it or name alternative tools, so it's not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_hmclinstall_hmclA
Prepare the HMCL directory: if /HMCL.jar is missing, download the latest HMCL release jar from GitHub (asset ending in .jar); then run node agent/build.mjs (requires javac on PATH) to fetch the javafx jars and compile hmcl-agent.jar; copy hmcl-agent.jar and the javafx jars into . Returns the resulting paths. Safe to re-run.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosure. It transparently lists the side effects: downloading from GitHub, running a build script, copying files, and returning paths. The note 'Safe to re-run' adds important idempotency context. It does not mention potential failure modes or network requirements, but the core behavioral traits are clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is front-loaded with the primary intent, then logically walks through the install steps. Every clause adds necessary information—checking, downloading, building, copying, returning, and idempotency—with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex multi-step tool with no parameters and no output schema, the description is remarkably complete: it covers the conditional download, the build command with a prerequisite, the file placement, and the return value. The 'safe to re-run' note enhances completeness. No critical information appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters, so the baseline is 4 per the rubric. The description appropriately focuses on the procedural steps rather than inputs, and the schema has nothing left undocumented. No additional parameter meaning is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'Prepare' and the resource 'HMCL directory', then details the exact steps: conditional download, build via node script, and copying artifacts. This clearly distinguishes it from sibling tools like start_hmcl and stop_hmcl, which focus on lifecycle, and check_environment, which validates prerequisites.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides solid usage context by specifying the install/prepare workflow and stating that it is safe to re-run, implying idempotency. It also calls out a key requirement ('requires javac on PATH'). However, it does not explicitly state when to prefer this over alternatives or mention a scenario where it should not be used, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_modpackinstall_modpackA
Install a modpack as a game instance under /versions/. Either pass path to a local .mrpack/.zip file, or id (plus optional versionId) to download it first via HMCL; name is the instance name (defaults to the pack name). Requires the HMCL agent — it is started automatically if possible.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | ||
| name | No | ||
| path | No | ||
| source | No | ||
| versionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description discloses several behavioral traits: the installation path, the default instance name, and the HMCL agent dependency with automatic startup. It goes beyond a minimal statement by revealing these operational details, though it does not cover edge cases like overwrites or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long and front-loaded with the main purpose. Each sentence adds necessary information: core action, input modes, and the HMCL requirement. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 optional parameters and no output schema, the description covers the main usage scenarios, dependencies, and naming default. However, it omits the source parameter explanation and potential side effects. Given the tool's complexity, this is a solid but not exhaustive description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no descriptions for its 5 parameters, but the description explains path, id, versionId, and name, including the name default. The 'source' parameter is not addressed, leaving one parameter unclarified. Overall, the description compensates well for the lack of schema-level documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: installs a modpack as a game instance under a specific path. It distinguishes from siblings like download_modpack and install_hmcl by focusing on installation and mentioning both local file and remote download modes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the two input modes (local path or id) and notes the HMCL agent requirement with auto-start. It provides clear context but does not explicitly state when to use this tool over alternatives such as download_modpack, so no exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
install_versioninstall_versionA
Install a vanilla Minecraft version (e.g. "1.20.4") through the HMCL agent. Downloads the version json, client jar and libraries (via BMCLAPI/mojang mirrors) into /versions// and /libraries/ — this can take a few minutes on first run. Assets are downloaded by HMCL at first launch.
| Name | Required | Description | Default |
|---|---|---|---|
| version | Yes | Minecraft version id, e.g. "1.20.4" |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses downloads (version json, client jar, libraries), destinations (<workdir>/versions/<id>/ and <workdir>/libraries/), duration ('can take a few minutes'), and asset behavior (downloaded by HMCL at first launch). This is rich behavioral context, though it doesn't state overwrite behavior or return status.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with action, no redundant phrases. Every sentence adds meaningful detail about install behavior and locations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter install operation with no output schema, the description covers the key aspects: what, where, time, and asset handling. It does not explicitly mention prerequisites (e.g., HMCL already installed) or what happens on success/failure, which prevents a higher score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already describes the version parameter with an example. The description adds little beyond restating the example and context, so it meets the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Install') and identifies the resource ('a vanilla Minecraft version'), with an example '1.20.4'. It distinguishes from siblings like install_modpack by specifying 'vanilla' and 'through the HMCL agent'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for installing a specific vanilla version but does not explicitly state when to use it over alternatives or mention exclusions. For example, it doesn't say 'use install_modpack for modpacks' or note that HMCL must be installed first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launch_gamelaunch_gameA
Launch a game instance through the agent as an offline account. version is an instance id (see list_versions / list_modpacks). username defaults to Steve; maxMemory is the max heap in MB; javaPath overrides the Java used for the game; extraArgs are appended after the default JVM args. The game runs as a separate child process — the game window opens normally.
| Name | Required | Description | Default |
|---|---|---|---|
| version | No | ||
| javaPath | No | ||
| username | No | ||
| extraArgs | No | ||
| maxMemory | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It explains that the game runs as a separate child process, the window opens normally, the account is offline, and parameters modify defaults. This is far beyond a minimal 'launches a game' statement and provides meaningful behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences: purpose, parameter meanings, and runtime behavior. Every sentence adds necessary information without redundancy, and the most important purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the 5 parameters, no annotations, and no output schema, the description is quite complete: it covers all inputs and the execution model. It could be more complete by mentioning prerequisites (e.g., HMCL must be installed) or how to stop the launched game, but the essential information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description explains every parameter: version is an instance id, username defaults to Steve, maxMemory is in MB, javaPath overrides the Java used, and extraArgs are appended after the default JVM args. This fully compensates for the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific action ('Launch') and a specific resource ('a game instance'), and it adds the offline-account detail. This distinguishes it from sibling tools like start_hmcl (which starts the launcher) and stop_game (which stops a game).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides some usage context by pointing to list_versions/list_modpacks for finding a version id, but it never explicitly states when to use this tool instead of alternatives or when not to use it. The correct usage is implied by the name and purpose, not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modpackslist_modpacksA
List installed modpacks by scanning /versions/*/modpack.json (HMCL ModpackConfiguration). Returns [{name, path, format, gameVersion?, modLoader?}] where format maps Modrinth→mrpack, CurseForge→curseforge, HMCL→hmcl; gameVersion/modLoader are best-effort reads from the pack manifest. name is the instance id — pass it as version to launch_game.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses the scanning path, return structure, format mapping, and best-effort reads. It does not cover error handling or permissions, but for a read-only listing tool, the details given are sufficient and transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences deliver all essential information without redundancy. Every clause adds value: scanning path, output shape, format mapping, best-effort caveat, and the launch_game link. The description is dense yet coherent, earning a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no parameters, the description fully specifies the tool's behavior and return format. It also situates the tool within the broader workflow via the launch_game link. No critical information is missing for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description adds context by explaining the output fields and how `name` relates to launch_game, which effectively covers the semantics of the implicit data the tool returns.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the function: 'List installed modpacks' with a specific scanning path. It distinguishes from sibling tools like search_modpacks and list_versions by specifying the source and output format. The linkage to launch_game (passing name as version) further clarifies its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on what the tool does and hints at its use for launching games, but does not explicitly mention when not to use it or name alternatives. It gives a practical usage tip ('pass it as version to launch_game'), which is helpful guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_versionslist_versionsA
List installed game versions by scanning /versions/ — a directory counts as a version when it contains /.json. Returns [{id, path, hasJar}], sorted by id.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. It discloses the scanning location, the exact criterion for what counts as a version, the return shape, and sort order. This is strong behavioral disclosure for a simple listing tool, though it does not cover error handling or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, dense sentence provides all necessary information without filler. Every clause adds value: what is listed, where it scans, the version criterion, the return structure, and the sort order.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Even though there is no output schema, the description explicitly specifies the return object format and sorting, making the behavior fully predictable. For a parameterless read-only list tool, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to describe. According to the rubric, a baseline of 4 applies; no additional parameter information is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and resource ('installed game versions') and clearly distinguishes itself from siblings like install_version and list_modpacks. The scanning behavior and version-detection rule add precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies the tool is for retrieving existing installed versions and provides context about how detection works. It does not explicitly name alternatives or exclusions, but the read-only listing nature is unmistakable next to installation tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_modpackssearch_modpacksA
Search modpacks with HMCL's own repositories: Modrinth (default) or CurseForge (HMCL's embedded API key — no HMCL_MCP_CURSEFORGE_API_KEY needed). Returns ModpackSummary[]: id (slug), title, description, authors, url.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| source | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It adds useful context about the embedded CurseForge API key and the return type, but does not explicitly state read-only behavior, rate limits, pagination, or default limits. The 'search' verb implies no side effects, but this is not explicitly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main verb, and includes only essential details. Every sentence contributes value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the return value shape (ModpackSummary[] with fields) and the special API key detail, which is important context. However, it omits default source/limit, pagination, and error scenarios. For a search tool with no output schema, this is mostly complete but missing some operational details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should compensate for parameter meanings. It indirectly explains the 'source' parameter by naming Modrinth and CurseForge, but does not mention 'query' or 'limit' at all, leaving two of three parameters unexplained beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb 'Search' and resource 'modpacks', and clearly distinguishes from siblings by specifying the repositories (Modrinth/CurseForge). It differentiates from list_modpacks and get_modpack by focusing on search behavior and return type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the tool's purpose (searching modpacks) and context (HMCL repositories), implying when to use it. However, it does not explicitly contrast with alternative tools like list_modpacks or get_modpack, nor state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_hmclstart_hmclA
Start the headless HMCL JVM with the injected javaagent (no-op if already running, per ensureAgent) and return the agent status ({hmclVersion, workdir, java, versions, running, gamePid}). The launcher GUI never opens; only the game window appears when a game is launched.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses several behavioral traits: headless (GUI never opens), idempotent (no-op if already running), and the specific return payload structure. This goes beyond the name and helps the agent predict side effects and output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long and front-loaded with the core action. It packs essential details (headless, no-op, return fields, GUI behavior) without any filler. The mention of 'per ensureAgent' is slightly internal but does not detract from the overall efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is remarkably complete. It explains what happens, when it does nothing, what it returns, and how it interacts with the game window. This gives an agent all the information needed to invoke and interpret the result, especially given the sibling context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema coverage is effectively 100%. The description does not need to explain any parameter semantics. According to the rubric, the baseline for 0 parameters is 4, which is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it 'Start[s] the headless HMCL JVM with the injected javaagent' and returns agent status. The verb 'start' plus the specific resource distinguishes it from siblings like stop_hmcl or launch_game. It also notes the no-op behavior, adding further clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this is a headless start that returns agent status, implying it is a prerequisite for launching games. However, it does not explicitly mention when to use it versus alternatives like launch_game, nor does it include exclusions. The purpose is obvious enough that an agent would know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_gamestop_gameA
Stop the currently running game process via the agent (POST /launch/stop).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It names the endpoint and the basic action but does not disclose side effects (e.g., abrupt termination, unsaved progress), error behavior when no game is running, or whether the operation is idempotent. This is a minimal mutation disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that immediately states the action, includes the endpoint for useful context, and contains no filler words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless stop operation, the description is adequate but incomplete. It does not mention expected responses or result behavior, and with no output schema or annotations, an agent must infer success/failure semantics. However, the 0-param complexity keeps this at a minimum viable level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is an empty object with 100% coverage. Baseline for 0 params is 4, and the description adds no unnecessary param detail, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Stop the currently running game process' and includes the endpoint 'POST /launch/stop'. This distinguishes it from sibling tools like stop_hmcl, which would stop a different process.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as stop_hmcl or launch_game. The phrase 'currently running game process' implies a condition, but no prerequisites, exclusions, or context about the intended workflow are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stop_hmclstop_hmclA
Stop the headless HMCL JVM by POSTing /shutdown to the agent on 127.0.0.1, then confirm the agent is down with a status probe. Fails when no agent is reachable (run start_hmcl first).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosure. It explains the shutdown mechanism, the verification status probe, and the failure mode when no agent is reachable. This is good transparency, though it could mention idempotency or side effects, but for a simple stop tool this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. The first front-loads the action and method, the second adds verification and failure condition. Every sentence earns its place with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple stop tool with no parameters and no output schema, the description covers the purpose, method, verification, and failure condition. It is complete enough for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is an empty object, covering 100% of the parameter space. The baseline for 0-parameter tools is 4, and the description adds no unnecessary parameter details, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool stops the headless HMCL JVM, distinguishing it from sibling stop_game. It specifies the action (POST /shutdown) and verification step, providing a clear, specific verb+resource definition.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage context: stop the HMCL JVM and verify its shutdown. It also notes a prerequisite ('run start_hmcl first') and failure condition, which helps the agent know when to use it. However, it does not explicitly contrast with stop_game or other alternatives, leaving some room for interpretation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct resource (HMCL setup, agent lifecycle, versions, modpacks, game launch) with clear verbs like install, start, stop, list, search, get, download. No two tools perform the same action on the same resource, and descriptions make boundaries explicit.
All tool names follow a consistent verb_noun snake_case pattern, with paired verbs (start/stop, launch/stop, install/list) and objects (hmcl, versions, modpacks, game). This makes the API predictable and easy to navigate.
13 tools is well within the ideal 3-15 range and covers setup, environment, modpacks, versions, and game control without redundancy or bloat. Each tool has a clear, non-overlapping role.
The server covers core workflows: install/setup, status checking, version installation and listing, modpack search/download/install/list, and game launch/stop. Minor gaps like uninstall/delete tools or per-mod management are not critical for the stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for AI dialogue using various LLM models via AceDataCloud
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
An MCP server that gives your AI access to the source code and docs of all public github repos
Related MCP Servers
- FlicenseBqualityDmaintenanceA lightweight MCP server that provides a unified interface to various LLM providers including OpenAI, Anthropic, Google Gemini, Groq, DeepSeek, and Ollama.6739
- AlicenseNot gradedqualityDmaintenanceA comprehensive MCP server that gives AI assistants full control over your desktop — monitor system resources, manage windows, capture screenshots, control the clipboard, launch applications, and more.MIT
- AlicenseAqualityAmaintenanceAn MCP server that empowers AI coding agents to work effectively with Minecraft mod development, providing static analysis of decompiled source code and runtime interaction with a running Minecraft instance.314213MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to control Minecraft via MCP with configurable versions, creative building commands, survival helpers, and an autonomous agent loop.Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/vfyjxf/HMCL-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server