Skip to main content
Glama

Where to download a mod for a Minecraft version

find_mod_download
Read-onlyIdempotent

The exact file to install for one mod on one Minecraft version and loader, with its download link. Use it for "where do I get X for 26.2 Fabric?", after diagnose_crash names a mod that needs another build, or when updating a pack to a new version. Checks, best first: the author's own build on Modrinth (status official: file, required mods, and lab runs of that exact file), a community port the Modkeel lab verified in one of its modpacks (port), the author's file for an earlier version that the lab ran on this one and saw start (older_build), a port the lab built from its public source and saw start but does not host (build_from_source: the repo, branch and how to build it), the loaders the author does build for that version (other_loader), else none; when that older file crashed in the lab instead, older_build says so and next_step warns against it. next_step says what the user can do in each case. For what the mod is, use get_mod_info; for whether it ran in the lab, get_mod_runs. Takes the mod's name as the user wrote it ("YUNG's Better Mineshafts"), a lab mod id or a Modrinth slug: no search_mods call needed first. Asks Modrinth live (two to five calls, nothing cached), so it can fail when Modrinth is down: retry.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
mcYesMinecraft version to install on, exactly, e.g. 1.21.1 or 26.2.
loaderYesMod loader of the instance: fabric, neoforge, forge or quilt.
mod_idYesThe mod's name as the user wrote it (e.g. Entity Culling), a lab mod id (e.g. sodium, fabric_api) or a Modrinth slug (e.g. fabric-api).

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
mcYes
modYes
dataYesSnapshot date and license of the lab data; attribute when quoting.
portsYesPorts verified by the lab; only when there is no official build.
loaderYes
statusYes
projectNoThe mod's Modrinth project; null when none matches.
officialYesThe author's build for this version and loader (a release when any).
next_stepYesWhat the user can do now, one sentence.
older_buildNoThe author's file for an earlier version, as the Modkeel lab ran it on this one (only when there is no official build or port): ran (started on env) or crashed (detail says how).
source_buildNoA port the Modkeel lab built from this GitHub repo and branch and saw start on env; Modkeel does not host its jar, so the player builds it (next_step says how). Only when nothing published fits.
other_loadersNoLoaders the author builds this version for.
declared_versionsNoNewest Minecraft releases the author lists.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedOutput schema / properties / source_build
      Added value: +{
      +  "description": "A port the Modkeel lab built from this GitHub repo and branch and saw start on env; Modkeel does not host its jar, so the player builds it (next_step says how). Only when nothing published fits.",
      +  "properties": {
      +    "branch": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "env": {
      +      "type": "string"
      +    },
      +    "repo": {
      +      "type": "string"
      +    },
      +    "url": {
      +      "type": "string"
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / status / enum
      Previous value: -[
      -  "official",
      -  "port",
      -  "older_build",
      -  "other_loader",
      -  "none"
      -]New value: +[
      +  "official",
      +  "port",
      +  "older_build",
      +  "build_from_source",
      +  "other_loader",
      +  "none"
      +]
  2. Changed2 schema fields changed
    • addedOutput schema / properties / older_build
      Added value: +{
      +  "description": "The author's file for an earlier version, as the Modkeel lab ran it on this one (only when there is no official build or port): ran (started on env) or crashed (detail says how).",
      +  "properties": {
      +    "detail": {
      +      "type": "string"
      +    },
      +    "env": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "file": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "page": {
      +      "type": "string"
      +    },
      +    "result": {
      +      "enum": [
      +        "ran",
      +        "crashed"
      +      ],
      +      "type": "string"
      +    },
      +    "url": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "version": {
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / status / enum
      Previous value: -[
      -  "official",
      -  "port",
      -  "other_loader",
      -  "none"
      -]New value: +[
      +  "official",
      +  "port",
      +  "older_build",
      +  "other_loader",
      +  "none"
      +]
  3. Changed1 schema field changed
    • addedOutput schema / properties / ports / items / properties / requires
      Added value: +{
      +  "description": "Mods this port needs installed too (port: true when that one is a lab port as well, its url the jar).",
      +  "items": {
      +    "properties": {
      +      "port": {
      +        "type": "boolean"
      +      },
      +      "slug": {
      +        "type": "string"
      +      },
      +      "url": {
      +        "type": "string"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / mod_id / description
      Previous value: -"Lab mod id (e.g. sodium, fabric_api) or Modrinth slug (e.g. fabric-api), lowercase. Unsure? Call search_mods first."New value: +"The mod's name as the user wrote it (e.g. Entity Culling), a lab mod id (e.g. sodium, fabric_api) or a Modrinth slug (e.g. fabric-api)."
  5. Added

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/openWorld, but the description adds substantial behavior beyond them: live Modrinth calls (2-5, nothing cached), failure/retry guidance when Modrinth is down, and the full ranked resolution order (official, port, older_build, build_from_source, other_loader, none) with what each status means and how next_step warns on harmful older builds.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the core purpose and the resolution ordering, and every sentence carries routing or behavior information rather than filler. The single dense paragraph is on the long side, but the length is justified by the multi-branch resolution logic it must convey.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't enumerate return fields, yet it still explains the status values and next_step semantics the agent will see. For an openWorld, live-calling tool with 3 required params, nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds usable context by restating that mod_id accepts a user-typed name, lab mod id, or Modrinth slug and, crucially, that no search_mods call is needed first. It adds little on mc/loader beyond the enum already documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource+scope: it returns the exact file to install for one mod on one Minecraft version and loader, plus the download link. It explicitly differentiates from siblings by naming get_mod_info (what the mod is) and get_mod_runs (whether it ran in the lab), so an agent can route without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states concrete when-to-use triggers ("where do I get X for 26.2 Fabric?", after diagnose_crash names a mod needing another build, when updating a pack) and names alternatives with their selecting conditions. Nothing is left to inference about when this tool is the right choice versus get_mod_info or get_mod_runs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources