Skip to content

Commit 39eb40b

Browse files
committed
fix(mcp): clarify mod compatibility candidates
1 parent d3d1003 commit 39eb40b

1 file changed

Lines changed: 13 additions & 5 deletions

File tree

  • mcp/src/fabricator_mcp/tools

mcp/src/fabricator_mcp/tools/read.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -250,15 +250,23 @@ async def check_installed_mod_updates(client: PanelClient, server_id: str) -> di
250250
server = server if isinstance(server, dict) else {}
251251
listing = await list_installed_mods(client, server_id, identify=True)
252252
version, loader = server.get("version"), server.get("loader")
253-
results = []
253+
results, unidentified, seen = [], [], set()
254254
for mod in listing.get("mods", [])[:25]:
255-
project_id = mod.get("projectId") if isinstance(mod, dict) else None
256-
if not project_id or not version:
255+
if not isinstance(mod, dict):
256+
continue
257+
project_id = mod.get("projectId")
258+
if not project_id:
259+
unidentified.append({"name": mod.get("name")})
260+
continue
261+
if project_id in seen:
262+
continue
263+
seen.add(project_id)
264+
if not version:
257265
continue
258266
compatible = await check_mod_compatibility(client, project_id, version, loader)
259267
target = compatible.get("versionId")
260-
results.append(drop_empty({"name": mod.get("name"), "projectId": project_id, "currentVersionId": mod.get("versionId"), "currentVersionNumber": mod.get("versionNumber"), "targetVersionId": target, "targetVersionNumber": compatible.get("versionNumber"), "updateAvailable": bool(target and target != mod.get("versionId")), "compatible": compatible.get("compatible")}))
261-
return {"minecraftVersion": version, "loader": loader, "updates": results, "identified": listing.get("identified", False), "truncated": len(listing.get("mods", [])) > 25}
268+
results.append(drop_empty({"projectId": project_id, "currentVersionId": mod.get("versionId"), "currentVersionNumber": mod.get("versionNumber"), "candidateVersionId": target, "candidateVersionNumber": compatible.get("versionNumber"), "state": "no-compatible-version" if not compatible.get("compatible") else ("current-for-target" if target == mod.get("versionId") else "different-compatible-version"), "compatible": compatible.get("compatible")}))
269+
return {"minecraftVersion": version, "loader": loader, "mods": results, "unidentified": unidentified, "identified": listing.get("identified", False), "truncated": len(listing.get("mods", [])) > 25}
262270

263271

264272
async def get_server_runtime_diagnostics(client: PanelClient, server_id: str) -> dict[str, Any]:

0 commit comments

Comments
 (0)