Koskamo

Modkeel MCP

An official MCP server provided by Modkeel that allows AI assistants to diagnose Minecraft crashes, search for compatible mods, retrieve mod information, find verified downloads, and check mod compatibility or list integrity using data from the Modkeel lab.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Modkeel MCP logo, by ModkeelVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-06Operated by Modkeel
MCP endpoint (Streamable HTTP)
https://api.modkeel.com/mcp
Vendor documentation

What its tools do

7 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

7 of 7 have a description · 7 of 7 declare behavior hints · 7 of 7 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Passed Official MCP Registry namespace is tied to modkeel.com ·
  • Passed Endpoint is on the registry namespace domain ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Diagnose Minecraft crashes by analyzing log files
  • Search for mods compatible with specific Minecraft versions
  • Check compatibility between pairs of mods
  • Find verified mod downloads for specific loaders

Source and maintenance

Vendor evidenceRegistry 1.11.4

Protocol and capabilities

Server
modkeel 1.11.4
MCP protocol negotiated in check
2025-11-25
Tools
7 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
3 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  },
  "prompts": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Modkeel answers modded Minecraft questions from real data. When the user shares a crash report or log, call diagnose_crash before answering, even if the cause looks clear: it names the mod behind it and checks the whole installed pack against lab data the log does not contain. When the user asks where to download or get a mod for a Minecraft version, call find_mod_download with the mod's name before answering or searching the web: the web shows only the author's builds, and find_mod_download also has the community ports the lab verified for versions the author does not support yet. search_mods turns a mod name into the id the other tools take; get_mod_info says what a mod is. get_mod_runs says what the Modkeel lab saw one mod do, check_mod_pair whether two mods ran together and check_mod_list the same for a whole pack. The lab data is CC BY 4.0: credit Modkeel (modkeel.com) when quoting it. 'untested' means the lab has no run, not that the mods conflict.

Tools

7 advertised

diagnose_crash — Which mod crashed Minecraft
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Find the mod most likely behind a modded Minecraft crash (Fabric, NeoForge, Forge). Use it whenever the user shares a crash report or latest.log or says the game will not start. It is the only tool that reads logs, and it adds what the file does not hold: it checks every installed mod against the Modkeel lab (pairs in the pack that clashed, jars that crashed on that Minecraft version), says how many other players hit the same crash and which fix worked for them (when 10+ did), counts lab runs of each suspect, and ranks suspects by evidence (mixin, trace, missing class) with a confidence level (NONE when nothing points at a mod). It also returns a fix guide and, when the log names the Minecraft version and loader, the build to install for the suspect and for every installed mod the lab saw crash on that version, so no follow-up call is needed. Pass the whole file as text, unedited: trimming it loses the mod list; or, when the user gave a link to a paste (mclo.gs, pastebin.com, paste.ee, gist.github.com, modkeel.com), pass url instead and Modkeel fetches it. Text with no crash in it comes back as an error to fix and retry. Up to 4 MB; read and dropped, never stored.

diagnose_crash input schema
{
  "type": "object",
  "properties": {
    "url": {
      "type": "string",
      "description": "A link to the crash report or log on a paste site (mclo.gs, pastebin.com, paste.ee, gist.github.com, modkeel.com), e.g. https://mclo.gs/abc123. Modkeel downloads the raw text itself. Give text or url."
    },
    "text": {
      "type": "string",
      "description": "The full crash report (crash-reports/crash-*.txt, from '---- Minecraft Crash Report ----') or logs/latest.log, unedited. Up to 4 MB. Give text or url."
    }
  }
}
diagnose_crash output schema
{
  "type": "object",
  "required": [
    "kind",
    "confidence",
    "suspects",
    "guide",
    "source"
  ],
  "properties": {
    "mc": {
      "type": [
        "string",
        "null"
      ]
    },
    "kind": {
      "enum": [
        "MIXIN_FAILED",
        "MISSING_CLASS",
        "OUT_OF_MEMORY",
        "MOD_LOADING",
        "GENERIC"
      ],
      "type": "string"
    },
    "pack": {
      "type": "object",
      "properties": {
        "mods": {
          "type": "integer",
          "description": "Mods read from the report's mod list."
        },
        "clashes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "mods": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "runs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "mc": {
                      "type": "string"
                    },
                    "env": {
                      "type": "string"
                    },
                    "detail": {
                      "type": "string",
                      "description": "What the lab saw, in words."
                    },
                    "source": {
                      "type": "string",
                      "description": "Which lab check produced the run."
                    }
                  }
                }
              }
            }
          },
          "description": "Pairs in the pack that clashed in a lab run."
        },
        "crashed": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "mod": {
                "type": "string"
              },
              "runs": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "mc": {
                      "type": "string"
                    },
                    "env": {
                      "type": "string"
                    },
                    "file": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "The jar that crashed."
                    },
                    "detail": {
                      "type": "string",
                      "description": "What the lab saw, in words."
                    },
                    "loader": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "source": {
                      "type": "string",
                      "description": "Which lab check produced the run."
                    },
                    "version": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "That jar's own version."
                    }
                  }
                }
              }
            }
          },
          "description": "Installed mods whose jar crashed in a lab run (the same version as installed, when the report names it)."
        },
        "pairs_tested": {
          "type": "integer",
          "description": "Pairs of the pack the lab ran."
        }
      },
      "description": "The installed mods checked against the lab, beyond this crash."
    },
    "error": {
      "type": "string",
      "description": "The root exception and its message."
    },
    "guide": {
      "type": "string",
      "description": "How to fix this kind of crash."
    },
    "loader": {
      "type": [
        "string",
        "null"
      ]
    },
    "source": {
      "type": "string"
    },
    "in_game": {
      "type": "string",
      "description": "The same diagnosis inside the game, for players who crash often."
    },
    "players": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "seen": {
          "type": "string",
          "description": "How many players reported it, as a band."
        },
        "as_of": {
          "type": "string",
          "description": "Month of the snapshot, YYYY-MM."
        },
        "fixes": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "worked": {
                "enum": [
                  "most",
                  "more than half",
                  "some",
                  "few"
                ],
                "type": "string"
              }
            }
          },
          "description": "Fixes 10+ players chose, and for how many it held."
        }
      },
      "description": "What other players' reports of this same crash say (Modkeel Companion reports, monthly snapshot); null below 10 players."
    },
    "replace": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": "object",
        "properties": {
          "mod": {
            "type": "string"
          },
          "file": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "url": {
                "type": "string"
              },
              "filename": {
                "type": "string"
              }
            }
          },
          "page": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "enum": [
              "official",
              "port",
              "older_build",
              "build_from_source",
              "other_loader",
              "none"
            ],
            "type": "string"
          },
          "next_step": {
            "type": "string"
          }
        }
      },
      "description": "The build to install for the first suspect, then for every installed mod whose jar crashed in the lab on this version (the next crash), as find_mod_download gives it; null when the version or loader is unknown or Modrinth is down."
    },
    "suspects": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "score": {
            "type": "number"
          },
          "reasons": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "lab_runs": {
            "type": "integer",
            "description": "Lab runs of this mod on this MC version."
          }
        }
      },
      "description": "Most likely first; empty when no mod is implicated."
    },
    "next_step": {
      "type": [
        "string",
        "null"
      ],
      "description": "What to replace and with what, one sentence per mod; tell the user all of it. Null when the version or loader is unknown."
    },
    "signature": {
      "type": "string",
      "description": "Stable id of this crash shape."
    },
    "confidence": {
      "enum": [
        "HIGH",
        "MEDIUM",
        "LOW",
        "NONE"
      ],
      "type": "string",
      "description": "How sure the first suspect is the cause."
    },
    "description": {
      "type": "string"
    }
  }
}
diagnose_crash annotations
{
  "title": "Which mod crashed Minecraft",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
search_mods — Find a mod's id in the Modkeel lab
Advertised by the server during the last successful anonymous check.
Advertised read-only

Turn a mod's display name or part of its id into the exact mod id the other lab tools take, and see which mods the Modkeel lab has data on. Use it first when you only have a name ("Entity Culling", "Sodium") or are unsure of the id; skip it when you already have the id. To download a mod, call find_mod_download with its name instead: it finds the mod itself. Matching ignores case, spaces and punctuation; best match first, then the mods with more lab data. An empty query lists every mod the lab tested. Returns each mod's id, the Minecraft versions it was tested on and how many runs and pairs it has, plus the total number of matches. No match means the lab has no data on that mod, not that it is broken (get_mod_info still finds it on Modrinth by slug). mc keeps only mods with a run on that exact version; limit caps the list, and total says how many matched.

search_mods input schema
{
  "type": "object",
  "properties": {
    "mc": {
      "type": "string",
      "description": "Minecraft version to narrow the answer to, e.g. 1.21.1, 1.20.1 or 26.2. Omit it to get every version the lab ran; with it, only runs on exactly that version count."
    },
    "limit": {
      "type": "integer",
      "default": 25,
      "maximum": 100,
      "minimum": 1,
      "description": "How many mods to return, 1 to 100. Default 25."
    },
    "query": {
      "type": "string",
      "description": "Mod name or part of its id, e.g. \"Entity Culling\", \"sod\" or \"create\". Empty or omitted: list every mod the lab tested."
    }
  }
}
search_mods output schema
{
  "type": "object",
  "required": [
    "query",
    "total",
    "mods",
    "data"
  ],
  "properties": {
    "mc": {
      "type": [
        "string",
        "null"
      ]
    },
    "data": {
      "type": "object",
      "properties": {
        "built": {
          "type": "string"
        },
        "license": {
          "type": "object"
        }
      },
      "description": "Snapshot date and license of the lab data; attribute when quoting."
    },
    "mods": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Pass this to the other tools as mod_id."
          },
          "runs": {
            "type": "integer"
          },
          "pairs": {
            "type": "integer"
          },
          "versions": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "description": "Best match first."
    },
    "query": {
      "type": "string"
    },
    "total": {
      "type": "integer",
      "description": "Matches before the limit."
    }
  }
}
search_mods annotations
{
  "title": "Find a mod's id in the Modkeel lab",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_mod_info — What a mod is, from its catalog page
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

What one Minecraft mod is and where to get it: its Modrinth page (title, summary, categories, loaders, the Minecraft releases its author lists, client/server side, licence, downloads, source and issue links) next to a short Modkeel lab record (tested versions, run and pair counts). Use it for "what does this mod do?", "is it client-only?", "where do I download it?" or to link a suspect from diagnose_crash. The versions here are what the author declares; for what the lab saw run or crash, use get_mod_runs, and for two mods together, check_mod_pair. Takes a lab mod id or a Modrinth slug; from a name, call search_mods first. The project is matched by the SHA-1 of a jar the lab ran (source: jar_hash, exact), else by slug (source: slug); a mod on neither returns found: false, not an error. Asks Modrinth live on each call (nothing cached here), so it can fail when Modrinth is down: retry later.

get_mod_info input schema
{
  "type": "object",
  "required": [
    "mod_id"
  ],
  "properties": {
    "mod_id": {
      "type": "string",
      "description": "Lab mod id (e.g. fabric_api, ferritecore) or Modrinth slug (e.g. fabric-api, sodium-extra), lowercase. Unsure? Call search_mods first."
    }
  }
}
get_mod_info output schema
{
  "type": "object",
  "required": [
    "mod",
    "found",
    "modrinth",
    "lab",
    "data"
  ],
  "properties": {
    "lab": {
      "type": "object",
      "properties": {
        "runs": {
          "type": "integer"
        },
        "pairs": {
          "type": "integer"
        },
        "tested": {
          "type": "boolean"
        },
        "versions": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "mod": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "properties": {
        "built": {
          "type": "string"
        },
        "license": {
          "type": "object"
        }
      },
      "description": "Snapshot date and license of the lab data; attribute when quoting."
    },
    "found": {
      "type": "boolean",
      "description": "False: on neither Modrinth nor in lab jars."
    },
    "source": {
      "enum": [
        "jar_hash",
        "slug",
        null
      ],
      "type": [
        "string",
        "null"
      ],
      "description": "How the Modrinth project was matched."
    },
    "modrinth": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "id": {
          "type": "string"
        },
        "url": {
          "type": "string",
          "description": "The mod's Modrinth page: link users here."
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "license": {
          "type": [
            "string",
            "null"
          ]
        },
        "loaders": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "updated": {
          "type": "string"
        },
        "wiki_url": {
          "type": [
            "string",
            "null"
          ]
        },
        "downloads": {
          "type": "integer"
        },
        "followers": {
          "type": "integer"
        },
        "categories": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "issues_url": {
          "type": [
            "string",
            "null"
          ]
        },
        "source_url": {
          "type": [
            "string",
            "null"
          ]
        },
        "client_side": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "server_side": {
          "type": "string"
        },
        "game_versions": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Minecraft releases the author lists (declared)."
        }
      }
    },
    "other_projects": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Other Modrinth project ids for this mod id: a fork the lab also ran, or the project whose slug is this id when the lab ran a port (fabric_api on NeoForge)."
    }
  }
}
get_mod_info annotations
{
  "title": "What a mod is, from its catalog page",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
find_mod_download — Where to download a mod for a Minecraft version
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

find_mod_download input schema
{
  "type": "object",
  "required": [
    "mod_id",
    "mc",
    "loader"
  ],
  "properties": {
    "mc": {
      "type": "string",
      "description": "Minecraft version to install on, exactly, e.g. 1.21.1 or 26.2."
    },
    "loader": {
      "enum": [
        "fabric",
        "neoforge",
        "forge",
        "quilt"
      ],
      "type": "string",
      "description": "Mod loader of the instance: fabric, neoforge, forge or quilt."
    },
    "mod_id": {
      "type": "string",
      "description": "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)."
    }
  }
}
find_mod_download output schema
{
  "type": "object",
  "required": [
    "mod",
    "mc",
    "loader",
    "status",
    "official",
    "ports",
    "next_step",
    "data"
  ],
  "properties": {
    "mc": {
      "type": "string"
    },
    "mod": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "properties": {
        "built": {
          "type": "string"
        },
        "license": {
          "type": "object"
        }
      },
      "description": "Snapshot date and license of the lab data; attribute when quoting."
    },
    "ports": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "file": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string"
              },
              "sha1": {
                "type": "string"
              },
              "size": {
                "type": "integer"
              },
              "filename": {
                "type": "string"
              }
            }
          },
          "fork": {
            "type": "string",
            "description": "GitHub owner/repo of the port's source."
          },
          "license": {
            "type": [
              "string",
              "null"
            ]
          },
          "requires": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string"
                },
                "port": {
                  "type": "boolean"
                },
                "slug": {
                  "type": "string"
                }
              }
            },
            "description": "Mods this port needs installed too (port: true when that one is a lab port as well, its url the jar)."
          },
          "hosted_by": {
            "enum": [
              "modkeel_ports",
              "fork_release"
            ],
            "type": "string"
          },
          "verified_in": {
            "type": "object",
            "properties": {
              "url": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "pack": {
                "type": "string"
              }
            }
          }
        }
      },
      "description": "Ports verified by the lab; only when there is no official build."
    },
    "loader": {
      "type": "string"
    },
    "status": {
      "enum": [
        "official",
        "port",
        "older_build",
        "build_from_source",
        "other_loader",
        "none"
      ],
      "type": "string"
    },
    "project": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "id": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "slug": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "matched_by": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "description": "The mod's Modrinth project; null when none matches."
    },
    "official": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "file": {
          "type": "object",
          "properties": {
            "url": {
              "type": "string"
            },
            "sha1": {
              "type": "string"
            },
            "size": {
              "type": "integer"
            },
            "filename": {
              "type": "string"
            }
          }
        },
        "page": {
          "type": "string"
        },
        "version": {
          "type": "string"
        },
        "lab_runs": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "mc": {
                "type": "string"
              },
              "env": {
                "type": "string"
              },
              "detail": {
                "type": "string"
              },
              "source": {
                "type": "string"
              }
            }
          },
          "description": "Lab runs of this exact file (same SHA-1)."
        },
        "requires": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "url": {
                "type": "string"
              },
              "slug": {
                "type": "string"
              },
              "title": {
                "type": "string"
              }
            }
          },
          "description": "Mods this file needs installed too."
        },
        "published": {
          "type": "string"
        },
        "version_type": {
          "type": "string"
        }
      },
      "description": "The author's build for this version and loader (a release when any)."
    },
    "next_step": {
      "type": "string",
      "description": "What the user can do now, one sentence."
    },
    "older_build": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "env": {
          "type": [
            "string",
            "null"
          ]
        },
        "url": {
          "type": [
            "string",
            "null"
          ]
        },
        "file": {
          "type": [
            "string",
            "null"
          ]
        },
        "page": {
          "type": "string"
        },
        "detail": {
          "type": "string"
        },
        "result": {
          "enum": [
            "ran",
            "crashed"
          ],
          "type": "string"
        },
        "version": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "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)."
    },
    "source_build": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "env": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "repo": {
          "type": "string"
        },
        "branch": {
          "type": [
            "string",
            "null"
          ]
        }
      },
      "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."
    },
    "other_loaders": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Loaders the author builds this version for."
    },
    "declared_versions": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Newest Minecraft releases the author lists."
    }
  }
}
find_mod_download annotations
{
  "title": "Where to download a mod for a Minecraft version",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_mod_runs — What the Modkeel lab saw a mod do
Advertised by the server during the last successful anonymous check.
Advertised read-only

Everything the Modkeel lab saw one Minecraft mod do: each Minecraft version where it ran on a server or a client, or crashed, and every mod it ran with or clashed with. Use it for "does this mod work on 1.21.1?", "which versions was it tested on?" or to check a suspect from diagnose_crash. For one specific pair of mods, check_mod_pair gives a direct verdict; for what the mod is and where to get it, get_mod_info. Takes a mod id; from a name, call search_mods first. A mod the lab never ran returns tested: false with empty lists, not an error. Returns every matching row, unpaginated: a few dozen at most per mod.

get_mod_runs input schema
{
  "type": "object",
  "required": [
    "mod_id"
  ],
  "properties": {
    "mc": {
      "type": "string",
      "description": "Minecraft version to narrow the answer to, e.g. 1.21.1, 1.20.1 or 26.2. Omit it to get every version the lab ran; with it, only runs on exactly that version count."
    },
    "mod_id": {
      "type": "string",
      "description": "Lowercase mod id as the loader knows it (the Modrinth/Fabric/NeoForge id, e.g. sodium, create, entityculling), not the display name. Unsure of the id? Call search_mods first."
    }
  }
}
get_mod_runs output schema
{
  "type": "object",
  "required": [
    "mod",
    "tested",
    "runs",
    "pairs",
    "data"
  ],
  "properties": {
    "mc": {
      "type": [
        "string",
        "null"
      ]
    },
    "mod": {
      "type": "string"
    },
    "data": {
      "type": "object",
      "properties": {
        "built": {
          "type": "string"
        },
        "license": {
          "type": "object"
        }
      },
      "description": "Snapshot date and license of the lab data; attribute when quoting."
    },
    "runs": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "mc": {
            "type": "string"
          },
          "env": {
            "type": "string"
          },
          "file": {
            "type": "string"
          },
          "repo": {
            "type": "string",
            "description": "For a ported build: the GitHub repo (owner/name) the lab built it from."
          },
          "sha1": {
            "type": "string",
            "description": "SHA-1 of the jar run."
          },
          "branch": {
            "type": "string"
          },
          "detail": {
            "type": "string",
            "description": "What the lab saw, in words."
          },
          "loader": {
            "type": "string"
          },
          "source": {
            "type": "string",
            "description": "Which lab check produced the run."
          },
          "version": {
            "type": "string"
          },
          "how_to_get": {
            "type": "string",
            "description": "For a ported build: the jar is not hosted; the command that builds it, and whether the lab ran it on a client. Relay it."
          }
        }
      },
      "description": "One per jar the lab ran; env: server, client or crashes."
    },
    "pairs": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "mc": {
            "type": "string"
          },
          "env": {
            "type": "string"
          },
          "with": {
            "type": "string"
          },
          "detail": {
            "type": "string",
            "description": "What the lab saw, in words."
          },
          "source": {
            "type": "string",
            "description": "Which lab check produced the run."
          }
        }
      },
      "description": "Mods it shared a run with; env: server, client or clash."
    },
    "tested": {
      "type": "boolean",
      "description": "False: the lab never ran this mod."
    }
  }
}
get_mod_runs annotations
{
  "title": "What the Modkeel lab saw a mod do",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_mod_pair — Do two mods work together
Advertised by the server during the last successful anonymous check.
Advertised read-only

Whether two Minecraft mods ran together in the Modkeel lab, clashed, or were never tested together. Use it for "can I use X with Y?" or to check two suspects from diagnose_crash; for one mod's whole record, use get_mod_runs. Takes two mod ids in any order (from names, call search_mods first). Unknown ids are not an error: the verdict is untested, meaning no lab run, never a known conflict. With mc, only runs on that version count. clash wins if any run clashed. Returns the verdict and the runs behind it.

check_mod_pair input schema
{
  "type": "object",
  "required": [
    "mod_a",
    "mod_b"
  ],
  "properties": {
    "mc": {
      "type": "string",
      "description": "Minecraft version to narrow the answer to, e.g. 1.21.1, 1.20.1 or 26.2. Omit it to get every version the lab ran; with it, only runs on exactly that version count."
    },
    "mod_a": {
      "type": "string",
      "description": "First mod. Lowercase mod id as the loader knows it (the Modrinth/Fabric/NeoForge id, e.g. sodium, create, entityculling), not the display name. Unsure of the id? Call search_mods first."
    },
    "mod_b": {
      "type": "string",
      "description": "Second mod, same format, e.g. iris."
    }
  }
}
check_mod_pair output schema
{
  "type": "object",
  "required": [
    "mods",
    "verdict",
    "runs",
    "data"
  ],
  "properties": {
    "mc": {
      "type": [
        "string",
        "null"
      ]
    },
    "data": {
      "type": "object",
      "properties": {
        "built": {
          "type": "string"
        },
        "license": {
          "type": "object"
        }
      },
      "description": "Snapshot date and license of the lab data; attribute when quoting."
    },
    "mods": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "runs": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "mc": {
            "type": "string"
          },
          "env": {
            "type": "string"
          },
          "detail": {
            "type": "string",
            "description": "What the lab saw, in words."
          },
          "source": {
            "type": "string",
            "description": "Which lab check produced the run."
          }
        }
      },
      "description": "The runs behind the verdict; env: server, client or clash."
    },
    "verdict": {
      "enum": [
        "ran_together",
        "clash",
        "untested"
      ],
      "type": "string",
      "description": "untested: no lab run, not a known conflict."
    }
  }
}
check_mod_pair annotations
{
  "title": "Do two mods work together",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_mod_list — Do these mods work together
Advertised by the server during the last successful anonymous check.
Advertised read-only

A whole mod list or modpack checked against the Modkeel lab at once: every pair in it that clashed, the mods whose jar crashed, the pairs that ran together, and the mods the lab has no data on. Use it for "will these mods work together?" or before updating a pack; for two mods, check_mod_pair is enough. Takes up to 300 mod ids (from names, search_mods first; unknown ids just land in untested_mods). With mc, only runs on that version count, and each crashed mod also gets the author's current build for it, since the crash is about the exact file the lab ran. verdict is problems_found when anything clashed or crashed, else no_known_problem, which is not a guarantee: pairs.tested out of pairs.total says how much of the list the lab covered.

check_mod_list input schema
{
  "type": "object",
  "required": [
    "mod_ids"
  ],
  "properties": {
    "mc": {
      "type": "string",
      "description": "Minecraft version to narrow the answer to, e.g. 1.21.1, 1.20.1 or 26.2. Omit it to get every version the lab ran; with it, only runs on exactly that version count."
    },
    "mod_ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "maxItems": 300,
      "minItems": 1,
      "description": "Lowercase mod ids as the loader knows them, e.g. [\"sodium\", \"iris\", \"create\"]. The ids of a mods folder's jars work."
    }
  }
}
check_mod_list output schema
{
  "type": "object",
  "required": [
    "mods",
    "verdict",
    "clashes",
    "crashed",
    "untested_mods",
    "pairs",
    "data"
  ],
  "properties": {
    "mc": {
      "type": [
        "string",
        "null"
      ]
    },
    "data": {
      "type": "object",
      "properties": {
        "built": {
          "type": "string"
        },
        "license": {
          "type": "object"
        }
      },
      "description": "Snapshot date and license of the lab data; attribute when quoting."
    },
    "mods": {
      "type": "integer",
      "description": "Distinct ids checked."
    },
    "pairs": {
      "type": "object",
      "properties": {
        "total": {
          "type": "integer"
        },
        "tested": {
          "type": "integer"
        }
      }
    },
    "clashes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "mods": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "runs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "mc": {
                  "type": "string"
                },
                "env": {
                  "type": "string"
                },
                "detail": {
                  "type": "string",
                  "description": "What the lab saw, in words."
                },
                "source": {
                  "type": "string",
                  "description": "Which lab check produced the run."
                }
              }
            }
          }
        }
      },
      "description": "Pairs in the list that clashed in a lab run."
    },
    "crashed": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "mod": {
            "type": "string"
          },
          "runs": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "mc": {
                  "type": "string"
                },
                "env": {
                  "type": "string"
                },
                "file": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "The jar that crashed."
                },
                "detail": {
                  "type": "string",
                  "description": "What the lab saw, in words."
                },
                "loader": {
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "source": {
                  "type": "string",
                  "description": "Which lab check produced the run."
                },
                "version": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "That jar's own version."
                }
              }
            }
          },
          "current": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "url": {
                "type": "string"
              },
              "status": {
                "enum": [
                  "crashed",
                  "newer_build"
                ],
                "type": "string"
              },
              "filename": {
                "type": "string"
              },
              "published": {
                "type": "string"
              }
            },
            "description": "With mc: the author's current build for it. newer_build: another file than the one that crashed, not run by the lab yet."
          },
          "next_step": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "description": "Mods whose jar crashed in a lab run: that exact file (runs[].file)."
    },
    "verdict": {
      "enum": [
        "problems_found",
        "no_known_problem"
      ],
      "type": "string"
    },
    "next_step": {
      "type": [
        "string",
        "null"
      ],
      "description": "With mc and crashed mods: what to install or leave out, for the player."
    },
    "ran_together": {
      "type": "array",
      "items": {
        "type": "array",
        "items": {
          "type": "string"
        }
      },
      "description": "Pairs in the list seen working together."
    },
    "untested_mods": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "No lab data: unknown, not broken."
    }
  }
}
check_mod_list annotations
{
  "title": "Do these mods work together",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

3 advertised

diagnose-crash — Why did my modded Minecraft crash?

Advertised by the server during the last successful anonymous check.

Find the mod behind a crash and how to fix it, from the crash report or log.

No arguments advertised.

check-modpack — Will these mods work together?

Advertised by the server during the last successful anonymous check.

Check a mod list for known clashes and crashes, and get each mod's download.

mods
Mod names or ids, separated by commas. (required)
mc
Minecraft version, e.g. 1.21.1. (required)
loader
fabric, neoforge, forge or quilt. (required)
update-modpack — Move my mods to another Minecraft version

Advertised by the server during the last successful anonymous check.

For each mod, the build for the new version, a verified port, or what to do.

mods
Mod names or ids, separated by commas. (required)
mc
The Minecraft version to move to, e.g. 1.21.10. (required)
loader
fabric, neoforge, forge or quilt. (required)

Resources

Not advertised

No resource definitions available.

90-day uptime

A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.

Too few checks for a percentage yet (2 of 2 answered).

  1. 2026-11-06: 1 of 1 checks answered
  2. 2026-11-07: 1 of 1 checks answered

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
1322 ms
95th percentile latency
1322 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 1322 ms · metadata changed · 7 tool(s), 3 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http modkeel-mcp https://api.modkeel.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add modkeel-mcp --url https://api.modkeel.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable modkeel-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "modkeel-mcp": {
      "url": "https://api.modkeel.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "modkeel-mcp": {
      "type": "streamableHttp",
      "url": "https://api.modkeel.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start modkeel-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "modkeel-mcp": {
      "type": "http",
      "url": "https://api.modkeel.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http modkeel-mcp https://api.modkeel.com/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://api.modkeel.com/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "modkeel-mcp": {
      "serverUrl": "https://api.modkeel.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Modkeel MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run Modkeel MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing