An MCP (Model Context Protocol) Server to play and control movies using VLC.
VLC MCP server has significant definition quality gaps. Tool names follow basic verb-noun conventions (get_, set_, adjust_), but parameter schemas are minimally specified with no type constraints or validation. Descriptions exist but are below baseline (averaging ~120 chars, well below the 194-char baseline for A+ tools). Critically, no tool returns a documented output schema, LLMs cannot predict what fields or types will be returned. Parameters lack constraints (e.g., volume_level accepts 0-200 but is described as 'percentage' without explicit range declaration in schema). The 'action' parameter in vlc_control is a free-form string with no enum constraint despite the description enumerating 4 fixed values. No error handling guidance is present, failures return bare strings with no recovery path. The server is functional but would not pass production code review.
Increase or decrease the volume by a specified percentage. Args: change: An integer representing the percentage to change the volume by. Positive values increase volume, negative values decrease it.
Get all available videos with their path.
Get the current status of VLC playback.
Get the current volume level of VLC (as a percentage).
Seek to a specific position in the video. + or - seek relative to the current position and otherwise absolute. Allowed values are of the form: [+ or -][<int><h>:][<int><m>:][<int><s>] Examples: -10s -> seek 10 seconds backward +1h:2m:3s -> seek 1 hour, 2 minutes and 3 seconds forward 30s -> seek to the 30th second
Set the volume level of VLC (0-200, where 100 is normal volume). Args: volume_level: An integer between 0 and 200 representing the volume percentage
No output schemas documented for any tool. LLMs cannot predict return types, fields, or structure. get_status returns a formatted string, but the actual status.json structure (state, time, length, filename, etc.) is hidden in implementation. Downstream tools cannot reliably extract data.
vlc_control action parameter accepts free-form string ('action': {'type': 'string', ...}) but description enumerates 4 fixed values (play, pause, stop, fullscreen). No enum constraint in schema. LLM may hallucinate invalid actions like 'resume', 'next', causing failures with bare error 'Unknown action' offering no recovery guidance.
Volume parameters (set_volume, adjust_volume) lack numeric range constraints in schema. set_volume validates 0-200 at runtime with a string error, but JSON Schema minProperties/maxProperties are absent. Error message 'Invalid volume level: {volume_level}. Please use a value between 0 and 200.' is user-friendly but should be enforced by schema to prevent malformed calls.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-21 | D | 50 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 12 | - | v1 |
Show the video using the the video path and the subtitle language code. If the subtitle language code is an empty string, the video will play with no subtitle.
Control VLC playback with actions: play, pause, stop, fullscreen.
Error responses are bare strings with no recovery guidance. Examples: 'Failed to get status: {e}' (line: get_status), 'VLC command error: {e}' (vlc_command). No classification (retryable vs fatal), no actionable next steps. Patterns like 'Try search_users()' are absent.
show_video tool accepts video_path as relative path but no validation or path traversal guards visible. subtitle_language_code is a free-form string with no enum of supported languages. Descriptions are present but lack constraints (format, length, allowed values).
get_available_videos returns all videos but no pagination or limit. Description says 'Get all available videos' but response structure is never documented. If thousands of videos exist, response could blow context window. No mention of total count or chunking strategy.
Descriptions are below production baseline (averaging ~120 chars vs 194-char baseline). Examples: 'Increase or decrease the volume by a specified percentage.' (64 chars) lacks context for when to use adjust_volume vs set_volume. 'Show the video using the the video path...' (typo: 'the the') lacks completion guidance.