mcp-kodi demonstrates a functional Kodi control interface with explicit tool definitions in src/mk-tools.c. Tool names follow verb conventions (play, pause, stop, search, list). All 13 tools have descriptions and input schemas with proper JSON Schema types. However, multiple dimension gaps prevent higher scores: (1) descriptions are terse (11-84 chars), falling short of the 50-200 char LLM-optimized baseline; (2) output schemas are absent, tools declare no structured result format, forcing LLMs to reverse-engineer responses; (3) error handling guidance is minimal, no recovery hints or actionable error messages visible in code; (4) parameter interdependencies underdocumented (e.g., searchmedia's artist/album filters only apply to 'music' type, but this constraint isn't stated in parameter descriptions); (5) the rpc escape-hatch tool violates single-responsibility principle by accepting arbitrary JSON-RPC methods, creating a high-risk surface for misuse without guardrails.
List contributors (artist, director, actor, composer, etc.) from Kodi library.
Operation: "get" lists configured instances, "set" creates/updates one, "remove" deletes one.
Mute audio on the target Kodi instance.
Skip to next item in the playlist.
Get the now-playing state of all configured Kodi instances or a specific instance.
Pause playback on the target Kodi instance.
Resume playback on the target Kodi instance.
No output schemas documented. Tools declare no structured result format (MCP outputSchema field). LLMs cannot predict response structure, forcing runtime discovery and increasing hallucination risk.
Descriptions are below LLM-optimized length (median 60 chars vs. baseline 50-200). searchmedia reads 'Search Kodi library by media type (movie, music, tvshow) with optional filters.', lacks guidance on WHEN to use vs. contributors, WHAT filters apply to which types, or example intent.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2025-06-18+ | v2 |
Play a file from Kodi library by its path or ID.
Skip to previous item in the playlist.
Low-level JSON-RPC escape hatch: issue any Kodi RPC method directly (only available on instances with allow_rpc set).
Search Kodi library by media type (movie, music, tvshow) with optional filters.
Stop playback on the target Kodi instance.
Unmute audio on the target Kodi instance.
Parameter interdependencies undocumented. searchmedia exposes artist, album parameters but only for music type. playfile exposes movieid, episodeid, songid alternatives but constraint (pick ONE by type) is implicit, not stated. LLMs will pass invalid combinations.
rpc tool violates single-responsibility principle. Accepts arbitrary JSON-RPC methods with unvalidated params object. No guard against destructive methods or permission checks. allow_rpc flag is server-side but no role/permission documentation visible.
No error handling guidance. Tool descriptions do not state what errors can occur (e.g., invalid instance, network timeout, Kodi API failure) or recovery hints (e.g., 'Verify instance is running' or 'Try searchmedia first to list valid media types').
instances tool mixes three operations (get, set, remove) under one name. Parameter 'action' enum drives behavior. This data-driven pattern works but violates convention, split into get_instances, create_instance, delete_instance for clarity and one-tool-one-job composition.
No pagination guidance. searchmedia and contributors accept limit/offset but do not document total count in response or max recommended limit. LLMs may request 1000 results (if allowed), exhausting context window.
Destructive write operations lack confirmation pattern. play, pause, stop, mute, unmute, and playfile modify state without dry-run or explicit user confirmation. An LLM in a loop could issue unintended commands.