Model Context Protocol (MCP) server that connects an Emby media server to an AI client such as Claude Desktop
The server defines 12 tools with reasonable verb-noun naming and basic parameter schemas. However, critical gaps reduce quality: tool descriptions are present but minimal (averaging ~80 chars, well below the 194-char baseline for A-tier tools); parameter descriptions are sparse or missing for optional filters; output schemas are completely undocumented in the source code provided; and error handling guidance is absent. The parameter schemas visible (e.g., search_items) lack enums for constrained inputs (command, seek commands) and do not document expected output structures. No tool validates inputs or provides actionable error messages. The server is functional for basic use but falls short of production-grade agent-tool standards.
Add items to a playlist on the Emby server.
Create a new playlist on the Emby server.
Remove items from a playlist on the Emby server.
Retrieve a list of genres from the currently selected library in JSON format.
Retrieve a list of libraries from the Emby media server in JSON format.
Retrieve a list of playlists from the Emby server in JSON format.
No output schemas documented for any tool. The source code provides no indication of return types, response field names, or structures. LLMs cannot plan downstream tool calls or extract data without documented return schemas.
Commands (send_session_command, send_playback_command) accept free-form string values for 'command' parameter instead of enums. Examples: 'PlayNow', 'PlayNext', 'Play', 'Pause', 'Stop', 'Seek', 'Rewind', 'FastForward'. Without enums, LLMs hallucinate invalid command names.
Optional parameters (search_items) lack descriptions. 'artist', 'genre', 'lyrics', 'years', 'chunk_number' have schema type but no description explaining when or how to use them. LLMs cannot reason about optional parameters without clear guidance.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | F | 49 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 22 | - | v1 |
Retrieve a list of active player sessions on the Emby server in JSON format.
Retrieves a list of user names and their user IDs from the Emby server in JSON format.
Search the currently selected library for items matching the provided criteria. Results are returned in chunks.
Select a library on the Emby media server by supplying the library's name.
Send a playback control command (play, pause, stop, seek) to a specific player session.
Send a playback command to a specific player session on the Emby server.
No error handling guidance. Tools do not document failure modes, retryability, or what the LLM should do if a call fails. A tool that requires a selected library (e.g., retrieve_genre_list) fails silently if no library is selected.
Tool descriptions are brief (30-70 chars) and lack context. 'Retrieves a list of user names and their user IDs from the Emby server in JSON format.' tells WHAT but not WHEN to use it or what the response structure looks like. Baseline for A-tier tools is 194 chars.
No documented pagination for search_items. The tool mentions 'chunks' and 'chunk_number' but the source provides no specification of chunk size, total item count, or whether more chunks are available. LLMs cannot iterate through large result sets reliably.
Dependencies not documented in descriptions. Tools like retrieve_genre_list, search_items, send_session_command, and send_playback_command depend on prior state (selected library, active session) but do not state prerequisites in their descriptions. LLMs cannot plan multi-step workflows without explicit dependency hints.
Destructive/write tools lack confirmation or dry-run support. add_items_to_playlist, remove_items_from_playlist, create_playlist, and send_playback_command are WRITE operations but do not offer confirmation steps or validation. Agents can modify playlists or playback without reversibility.