Skip to main content
Glama

play

Press Play on the Kodi remote: resumes paused playback only — it cannot start new content (with nothing loaded it is a no-op); use playfile to start something.

Instructions

Press Play on the Kodi remote: resumes paused playback only — it cannot start new content (with nothing loaded it is a no-op); use playfile to start something. Returns the player-state snapshot { "state", "type", "time", "totaltime", "progress", "nowplaying": { "media", "id", "title", "artist", … } }.

Input Schema

NameRequiredDescriptionDefault
instanceNoTarget Kodi instance. Omitted uses the default ("(null)").

Output Schema

NameRequiredDescriptionDefault
timeNoPlayback position { hours, minutes, seconds, milliseconds }.
typeNoThe active player kind.
audioNoAudio tracks of the playing video (video only): { count, current: { index, language, codec, channels } }. `index` is the set_audio_and_subtitle audio selector.
stateYesPlayback state; "stopped" means nothing is loaded.
progressNoLegible position derived from time/totaltime, "elapsed / total (NN%)" e.g. "15:38 / 46:40 (33%)"; absent for live streams with no fixed length.
subtitleNoSubtitles of the playing video (video only, present only when any exist): { count, enabled, current: { index, language } }. `current` is present only while a subtitle is shown; `index` is the set_audio_and_subtitle subtitle selector.
totaltimeNoThe item's duration, same shape as time.
nowplayingNoThe loaded media (present whenever something is loaded): { media (song/episode/movie/…; "unknown" off-library), id (library id, -1 off-library), file, label, title; and where they apply showtitle/season/episode (TV), album/artist/track (song) }.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed15 schema fields changed
    • removedOutput schema / properties / album
      Removed value: -{
      -  "description": "Song: the album name.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / artist
      Removed value: -{
      -  "description": "Song: the performers, an array of strings.",
      -  "type": "array"
      -}
    • addedOutput schema / properties / audio
      Added value: +{
      +  "description": "Audio tracks of the playing video (video only): { count, current: { index, language, codec, channels } }. `index` is the set_audio_and_subtitle audio selector.",
      +  "type": "object"
      +}
    • removedOutput schema / properties / episode
      Removed value: -{
      -  "description": "TV episode: episode number.",
      -  "type": "integer"
      -}
    • removedOutput schema / properties / file
      Removed value: -{
      -  "description": "Path of the playing item.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / id
      Removed value: -{
      -  "description": "Library id of the playing item; -1 when off-library.",
      -  "type": "integer"
      -}
    • removedOutput schema / properties / label
      Removed value: -{
      -  "description": "Kodi's display label for the item.",
      -  "type": "string"
      -}
    • removedOutput schema / properties / media
      Removed value: -{
      -  "description": "Real media type (song/episode/movie/musicvideo/…); \"unknown\" for an off-library file.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / nowplaying
      Added value: +{
      +  "description": "The loaded media (present whenever something is loaded): { media (song/episode/movie/…; \"unknown\" off-library), id (library id, -1 off-library), file, label, title; and where they apply showtitle/season/episode (TV), album/artist/track (song) }.",
      +  "type": "object"
      +}
    • addedOutput schema / properties / progress
      Added value: +{
      +  "description": "Legible position derived from time/totaltime, \"elapsed / total (NN%)\" e.g. \"15:38 / 46:40 (33%)\"; absent for live streams with no fixed length.",
      +  "type": "string"
      +}
    • removedOutput schema / properties / season
      Removed value: -{
      -  "description": "TV episode: season number.",
      -  "type": "integer"
      -}
    • removedOutput schema / properties / showtitle
      Removed value: -{
      -  "description": "TV episode: the show's name.",
      -  "type": "string"
      -}
    • addedOutput schema / properties / subtitle
      Added value: +{
      +  "description": "Subtitles of the playing video (video only, present only when any exist): { count, enabled, current: { index, language } }. `current` is present only while a subtitle is shown; `index` is the set_audio_and_subtitle subtitle selector.",
      +  "type": "object"
      +}
    • removedOutput schema / properties / title
      Removed value: -{
      -  "description": "The item's title (may be empty).",
      -  "type": "string"
      -}
    • removedOutput schema / properties / track
      Removed value: -{
      -  "description": "Song: track number on the album.",
      -  "type": "integer"
      -}
  2. First observedv0.1.0

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden: it discloses the no-op behavior when nothing is loaded and the exact return snapshot shape, which is real context beyond the schema. It does not mention permission/auth requirements or error conditions, leaving a small gap for a state-changing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core action, then the constraint, then the alternative, then the return shape, in three compact sentences with no filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-optional-parameter tool with an output schema and no annotations, the description covers action, exclusion, alternative, and return structure. Only auth/permission or failure behavior is unaddressed, which is minor given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One optional parameter with 100% schema description coverage, so the schema already explains the 'instance' default behavior. The description adds nothing about the instance parameter, which is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (resume playback) on a specific resource (Kodi remote) and narrows the scope to 'paused playback only'. It explicitly names the sibling it is not (playfile) and the situation where it is a no-op, so an agent can distinguish it from pause/stop/playfile without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit when-not ('it cannot start new content (with nothing loaded it is a no-op)') and names the correct alternative for that case ('use playfile to start something'). This is the full when/when-not/alternative triad.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.