Skip to main content
Glama

nowplaying

Report what is playing on the target instance without changing anything — also a reachability and state probe. Returns the player-state snapshot { "state", "type", "time", "totaltime", "progress", "audio", "subtitle" (audio/subtitle for…

Instructions

Report what is playing on the target instance without changing anything — also a reachability and state probe. Returns the player-state snapshot { "state", "type", "time", "totaltime", "progress", "audio", "subtitle" (audio/subtitle for video: count + current track), "nowplaying": { "media", "id", "title", "artist", … } }; { "state": "stopped" } when idle.

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/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden and does well: it declares the call is non-mutating, discloses the exact returned snapshot fields, and specifies the idle return shape. It omits what happens when the instance is unreachable or how the target is resolved, which a probe tool would ideally cover.

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

Conciseness3/5

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

The purpose and safety statement are well front-loaded, but the long inline JSON snapshot dump largely restates the output schema that already exists. The opening sentence earns its place; the return-shape enumeration is padding against structured data.

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?

Purpose, safety profile, and idle-state behavior are all covered, and the output schema handles return values, so an agent has enough to call it correctly. The one real gap is failure/unreachable behavior for a tool explicitly framed as a reachability probe.

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?

Only one parameter and schema description coverage is 100%, so the schema already documents 'instance' and its default fully. The description adds no further semantics (no format, no fallback behavior), which is the baseline 3 case.

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 and resource ('Report what is playing on the target instance') and adds a second explicit role as a 'reachability and state probe'. This clearly separates it from the mutating siblings play/pause/stop, which an agent can infer 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 Guidelines4/5

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

The phrase 'without changing anything' and the reachability-probe framing give clear context for when to pick this over the play/pause/stop siblings, and the idle case ('{ "state": "stopped" } when idle') tells the agent how to read a null result. No explicit exclusions or named alternatives, so it stops short of a 5.

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