Summary
The Autonomic Mirage Media Server (MMS) exposes a TCP socket/Telnet control protocol on port 5004. This spec covers the connection preamble commands, playback control, browsing, presets, playlists, now-playing queries, and the event model as documented in the Autonomic Media Server Control Protocol v2.6. Commands and responses are terminated with CR+LF. An HTTP JSON API is also referenced in the source but its endpoints were not captured in the crawled content.
Transport
protocols:
- tcp
addressing:
port: 5004
auth:
type: none # inferred: no auth procedure in source
Traits
- queryable # inferred from GetStatus and browse query commands
- levelable # inferred from SetVolume command
Actions
# --- Connection Preamble ---
- id: set_client_type
label: Set Client Type
kind: action
command: "SetClientType {clientType}"
params:
- name: clientType
type: string
description: Identifier string for the control client (e.g. DemoClient)
- id: set_client_version
label: Set Client Version
kind: action
command: "SetClientVersion {version}"
params:
- name: version
type: string
description: Version string in MAJOR.MINOR.BUILD.REVISION format (e.g. 1.0.0.0)
- id: set_host
label: Set Host
kind: action
command: "SetHost {ipAddress}"
params:
- name: ipAddress
type: string
description: IP address the client used to connect to the MMS; used for cover-art URL generation
- id: set_xml_mode
label: Set XML Mode
kind: action
command: "SetXmlMode {mode}"
params:
- name: mode
type: enum
values: [None, Lists]
description: "None = text mode; Lists = XML mode for list responses (recommended)"
- id: set_encoding
label: Set Encoding
kind: action
command: "SetEncoding {codePage}"
params:
- name: codePage
type: integer
description: "Windows code page number; 65001 = UTF-8"
- id: set_instance
label: Set Instance
kind: action
command: "SetInstance {instanceName}"
params:
- name: instanceName
type: string
description: Output instance name (e.g. Player_A); subsequent browse and control commands target this instance
- id: subscribe_events
label: Subscribe Events
kind: action
command: "SubscribeEvents {filter}"
params:
- name: filter
type: string
description: "Optional: true (all events), false, or comma-delimited list of event names to subscribe to. Omit for all events."
- id: get_status
label: Get Status
kind: query
command: "GetStatus"
params: []
- id: set_option
label: Set Option
kind: action
command: "SetOption {option}={value}"
params:
- name: option
type: enum
values: [supports_playnow, supports_inputbox, supports_urls]
description: Option key to configure
- name: value
type: enum
values: [true, false]
description: Option value
# --- Playback Control ---
- id: play
label: Play
kind: action
command: "Play"
params: []
- id: pause
label: Pause
kind: action
command: "Pause"
params: []
- id: play_pause
label: Play/Pause Toggle
kind: action
command: "PlayPause"
params: []
- id: seek
label: Seek
kind: action
command: "Seek {position}"
params:
- name: position
type: integer
description: "Non-negative: seek from start of track (0 to TrackDuration). Negative: seek from end of track (-1 to -TrackDuration)."
- id: skip_next
label: Skip Next
kind: action
command: "SkipNext"
params: []
- id: skip_previous
label: Skip Previous
kind: action
command: "SkipPrevious"
params: []
- id: thumbs_up
label: Thumbs Up
kind: action
command: "ThumbsUp"
params: []
- id: thumbs_down
label: Thumbs Down
kind: action
command: "ThumbsDown"
params: []
- id: set_volume
label: Set Volume
kind: action
command: "SetVolume {level}"
params:
- name: level
type: integer
description: Volume level 0–50; output must be configured in variable gain mode
# --- Browsing ---
- id: browse_albums
label: Browse Albums
kind: query
command: "BrowseAlbums {start} {count}"
params:
- name: start
type: integer
description: One-based start index
- name: count
type: integer
description: Maximum number of items to return
- id: browse_artists
label: Browse Artists
kind: query
command: "BrowseArtists {start} {count}"
params:
- name: start
type: integer
description: One-based start index
- name: count
type: integer
description: Maximum number of items to return
- id: browse_composers
label: Browse Composers
kind: query
command: "BrowseComposers {start} {count}"
params:
- name: start
type: integer
description: One-based start index
- name: count
type: integer
description: Maximum number of items to return
- id: browse_favorites
label: Browse Favorites
kind: query
command: "BrowseFavorites {start} {count}"
params:
- name: start
type: integer
description: One-based start index
- name: count
type: integer
description: Maximum number of items to return
- id: browse_genres
label: Browse Genres
kind: query
command: "BrowseGenres {start} {count}"
params:
- name: start
type: integer
description: One-based start index
- name: count
type: integer
description: Maximum number of items to return
- id: browse_now_playing
label: Browse Now Playing
kind: query
command: "BrowseNowPlaying {start} {count}"
params:
- name: start
type: integer
description: One-based start index
- name: count
type: integer
description: Maximum number of items to return
- id: browse_picklist
label: Browse Picklist
kind: query
command: "BrowsePicklist {start} {count}"
params:
- name: start
type: integer
description: One-based start index
- name: count
type: integer
description: Maximum number of items to return
- id: browse_playlists
label: Browse Playlists
kind: query
command: "BrowsePlaylists {start} {count}"
params:
- name: start
type: integer
description: One-based start index
- name: count
type: integer
description: Maximum number of items to return
- id: browse_radio_sources
label: Browse Radio Sources
kind: query
command: "BrowseRadioSources {start} {count}"
params:
- name: start
type: integer
description: One-based start index
- name: count
type: integer
description: Maximum number of items to return
- id: browse_titles
label: Browse Titles
kind: query
command: "BrowseTitles {start} {count}"
params:
- name: start
type: integer
description: One-based start index
- name: count
type: integer
description: Maximum number of items to return
- id: browse_top_menu
label: Browse Top Menu
kind: query
command: "BrowseTopMenu"
params: []
- id: browse_top_menu_item
label: Browse Top Menu (specific child node)
kind: query
command: "BrowseTopMenu itemGuid={childGuid}"
params:
- name: childGuid
type: string
description: GUID of the child node to browse
- id: browse_service_accounts
label: Browse Service Accounts
kind: query
command: "BrowseServiceAccounts"
params: []
- id: set_music_filter_clear
label: Clear Music Filter
kind: action
command: "SetMusicFilter Clear"
params: []
- id: set_radio_filter_source
label: Set Radio Filter Source
kind: action
command: "SetRadioFilter Source={serviceGuid}"
params:
- name: serviceGuid
type: string
description: GUID of the streaming service obtained via BrowseRadioSources
- id: ack_pick_item
label: Acknowledge Pick Item
kind: action
command: "AckPickItem {guid}"
params:
- name: guid
type: string
description: GUID of the picklist item to select (used when no listAction attribute is present)
- id: set_service_account
label: Set Service Account (session)
kind: action
command: "SetServiceAccount {serviceGuid} {accountGuid}"
params:
- name: serviceGuid
type: string
description: GUID of the streaming service (from BrowseRadioSources)
- name: accountGuid
type: string
description: GUID of the account (from BrowseServiceAccounts)
- id: set_service_account_latched
label: Set Service Account (latched/persistent per output)
kind: action
command: "SetServiceAccount {serviceGuid} {accountGuid} False"
params:
- name: serviceGuid
type: string
description: GUID of the streaming service
- name: accountGuid
type: string
description: GUID of the account
notes: Appending False makes the account selection persistent for the output
- id: set_service_account_clear_service
label: Clear Latched Service Account for One Service
kind: action
command: "SetServiceAccount {service} Clear False"
params:
- name: service
type: string
description: Name or GUID of the streaming service whose latched account should be cleared
- id: set_service_account_clear_all
label: Clear All Latched Service Accounts
kind: action
command: "SetServiceAccount Clear Clear False"
params: []
Feedbacks
# --- Metadata Events ---
- id: meta_data_1
type: string
event: "MetaData1"
description: Generally reserved for radio station name or track count data
- id: meta_data_2
type: string
event: "MetaData2"
description: Generally reserved for artist name
- id: meta_data_3
type: string
event: "MetaData3"
description: Generally reserved for album name
- id: meta_data_4
type: string
event: "MetaData4"
description: Generally reserved for track name
- id: meta_label_1
type: string
event: "MetaLabel1"
description: Label for MetaData1 field
- id: meta_label_2
type: string
event: "MetaLabel2"
description: Label for MetaData2 field
- id: meta_label_3
type: string
event: "MetaLabel3"
description: Label for MetaData3 field
- id: meta_label_4
type: string
event: "MetaLabel4"
description: Label for MetaData4 field
- id: now_playing_guid
type: string
event: "NowPlayingGuid"
description: ID of the now-playing item (e.g. {20dd901a-b092-3386-dc16-6b56f38a811e})
- id: media_art_changed
type: boolean
event: "MediaArtChanged"
values: [true]
description: Indicates art has changed for the current item without NowPlayingGuid changing; always true; triggers art refresh
- id: base_web_url
type: string
event: "BaseWebUrl"
description: Protocol, address, and port portion of the URL to retrieve album art (e.g. http://192.168.0.59:5005)
# --- Track Time Events ---
- id: track_time
type: integer
event: "TrackTime"
description: Current playback position in seconds (non-negative integer)
- id: track_duration
type: integer
event: "TrackDuration"
description: Total track length in seconds; 0 if not available (e.g. broadcast radio)
# --- Playback State Events ---
- id: play_state
type: enum
event: "PlayState"
values: [Playing, Paused, Stopped]
description: Current play state of the output
- id: media_control
type: enum
event: "MediaControl"
values: [Play, Pause, Stop]
description: Current play state of the output (alternate form)
# --- Boolean Flag Events ---
- id: flag_back
type: boolean
event: "Back"
values: [true, false]
description: Whether there is history in the navigation stack; use Back <int> to navigate back
- id: flag_browse_now_playing_available
type: boolean
event: "BrowseNowPlayingAvailable"
values: [true, false]
description: Whether a queue is available to browse (queue has >0 items)
- id: flag_context_menu
type: boolean
event: "ContextMenu"
values: [true, false]
description: Whether AckButton CONTEXT is a valid command
- id: flag_mute
type: boolean
event: "Mute"
values: [true, false]
description: Whether the selected instance is muted
- id: flag_play_pause_available
type: boolean
event: "PlayPauseAvailable"
values: [true, false]
description: Whether Play, Pause, and PlayPause commands are valid
- id: flag_repeat_available
type: boolean
event: "RepeatAvailable"
values: [true, false]
description: Whether Repeat command is valid
- id: flag_repeat
type: boolean
event: "Repeat"
values: [true, false]
description: Whether Repeat is currently enabled
- id: flag_seek_available
type: boolean
event: "SeekAvailable"
values: [true, false]
description: Whether Seek command is valid
- id: flag_shuffle_available
type: boolean
event: "ShuffleAvailable"
values: [true, false]
description: Whether Shuffle command is valid
- id: flag_shuffle
type: boolean
event: "Shuffle"
values: [true, false]
description: Whether Shuffle is currently enabled
- id: flag_skip_next_available
type: boolean
event: "SkipNextAvailable"
values: [true, false]
description: Whether SkipNext command is valid
- id: flag_skip_prev_available
type: boolean
event: "SkipPrevAvailable"
values: [true, false]
description: Whether SkipPrevious command is valid
# --- Multistate Flag Events ---
- id: flag_thumbs_up
type: integer
event: "ThumbsUp"
values: [-1, 0, 1]
description: "-1=disabled/unavailable; 0=enabled, not set; 1=enabled and set"
- id: flag_thumbs_down
type: integer
event: "ThumbsDown"
values: [-1, 0, 1]
description: "-1=disabled/unavailable; 0=enabled, not set; 1=enabled and set; on some services, setting to 1 also skips to next track"
- id: flag_stars
type: integer
event: "Stars"
values: [-1, 0, 1, 2, 3, 4, 5]
description: "-1=disabled/unavailable; 0-5=star rating currently set; SetStars command available when ≥0"
Variables
# UNRESOLVED: SetPickListCount is referenced in the source example but not formally defined as a command; no formal variable table in the captured source
Events
# Events are pushed from the server in the format:
# EventReason Instance Event=Value
# EventReason is typically StateChanged or ReportState
# All feedback fields listed in the Feedbacks section are delivered as events.
# Example: StateChanged Player_A TrackTime=121
# Example: ReportState Player_A MetaData2=Stevie Ray Vaughan
Macros
# Connection preamble sequence as documented in source:
- id: standard_connection_preamble
label: Standard Connection Preamble
steps:
- command: "SetClientType DemoClient"
- command: "SetClientVersion 1.0.0.0"
- command: "SetHost {mmsIpAddress}"
- command: "SetXmlMode Lists"
- command: "SetEncoding 65001"
- command: "SetInstance Player_A"
- command: "SubscribeEvents"
- command: "GetStatus"
Safety
confirmation_required_for: []
interlocks: []
# No safety warnings or interlock procedures were documented in the captured source.
Notes
- Commands and responses are terminated with CR+LF (carriage return + line feed).
- The
SetInstancecommand must be sent before browse/control commands to direct them to the correct output. The subscription (SubscribeEvents) follows the client from instance to instance — no resubscription is needed after SetInstance. - The
SetHostcommand is only strictly necessary in non-flat network configurations but is not harmful to send in simpler setups. Setting it to an unreachable address causes performance degradation. BrowseTopMenucan accept anitemGuid=<guid>argument to browse a specific child node, bypassing the standard top-level picklist response.SetServiceAccountwith a trailingFalseargument makes the account selection latched (persistent) for the output; withoutFalseit is session-scoped.- The source references
SetPickListCountin an example without formally defining it as a command in the captured text. - The source references an
AckButton CONTEXTcommand (governed by the ContextMenu flag) but does not provide further definition in the captured content. - The source references a
Back <int>command (governed by the Back flag) but its full definition was not in the captured content. - The source references
Repeat,Shuffle,SetStars, andSetMusicFiltercommands by name in flag descriptions but their full command syntax was not explicitly documented in the captured content. - The HTTP JSON API is referenced but the endpoints were not captured in the crawled source.
Provenance
source_domains:
- autonomic.atlassian.net
- cpllc.net
source_urls:
- https://autonomic.atlassian.net/wiki/spaces/ASKB/pages/1509556225/Autonomic+Media+Server+Control+Protocol
- https://autonomic.atlassian.net/wiki/spaces/ASKB/pages/25821397/Programmatically+using+Presets
- https://autonomic.atlassian.net/wiki/spaces/ASKB/pages/25821281/Programmatically+Using+Favorites+with+Crestron+Smart+Graphics
- https://autonomic.atlassian.net/wiki/spaces/ASKB/pages/25788736/Control+System+Connections
- https://cpllc.net/wp-content/uploads/CPLLC/CPLLC.Autonomic.Favorites.pdf
retrieved_at: 2026-06-20T18:39:28.658Z
last_checked_at: 2026-06-23T09:50:15.723Z
Verification Summary
verdict: verified
checked_at: 2026-06-23T09:50:15.723Z
matched_actions: 38
action_count: 38
confidence: medium
summary: "All 38 spec actions matched literally in source; transport TCP port 5004 verified. (9 unresolved item(s) noted in Known Gaps.)"
Known Gaps
- "The source document notes that sections on Directly Addressable Content, Modifying the Queue, Presets, Scenes, Playlists, Now Playing, Triggers, Album Art, and JSON HTTP API were truncated in the crawled source. Those sections are not represented in this spec."
- "SetPickListCount is referenced in the source example but not formally defined as a command; no formal variable table in the captured source"
- "Sections on Directly Addressable Content, Modifying the Queue, Presets, Scenes, Playlists, Now Playing, Triggers, Album Art, and JSON HTTP API were explicitly noted as truncated in the source. Commands from those sections are absent from this spec."
- "SetPickListCount command syntax not formally defined in captured source."
- "Back <int> command — governed by Back event but full syntax not documented in captured content."
- "Repeat toggle command — referenced indirectly via RepeatAvailable flag but syntax not captured."
- "Shuffle toggle command — referenced indirectly via ShuffleAvailable flag but syntax not captured."
- "SetStars command — referenced indirectly via Stars event but syntax not captured."
- "AckButton CONTEXT — referenced indirectly via ContextMenu flag but syntax not captured."
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0