Summary
Yamaha MCP1 is an MC Link Controller controllable via Ethernet (TCP/IP) on port 49280. Protocol uses ASCII command strings terminated by LF (0x0A). Supports up to 8 simultaneous remote controller connections. Commands cover device status queries, run mode changes, character encoding and keepalive configuration, preset recall, and product information queries.
Transport
protocols:
- tcp
addressing:
port: 49280
auth:
type: UNRESOLVED # source does not state this (was inferred none: no auth procedure in source)
Traits
traits:
- queryable # inferred: multiple query commands (devstatus, devinfo, sscurrent, ssnum, ssinfo)
Actions
actions:
- id: devstatus_runmode_query
label: Device Run Mode Query
kind: query
command: "devstatus runmode"
params: []
response: "OK devstatus runmode \"{mode}\""
notes: Must be sent first to establish remote control session. Send at ≥1s intervals until device responds with normal mode.
- id: devstatus_error_query
label: Device Error Status Query
kind: query
command: "devstatus error"
params: []
response: "OK devstatus error \"{status}\""
- id: devmode_normal
label: Set Run Mode Normal
kind: action
command: "devmode normal"
params: []
response: "OK devmode normal"
- id: devmode_emergency
label: Set Run Mode Emergency
kind: action
command: "devmode emergency"
params: []
response: "OK devmode emergency"
- id: scpmode_encoding
label: Set Character Encoding
kind: action
command: "scpmode encoding {mode}"
params:
- name: mode
type: enum
values:
- ascii
- utf8
description: "Character encoding mode (default: ascii)"
response: "OK scpmode encoding {mode}"
- id: scpmode_keepalive
label: Set Keepalive Interval
kind: action
command: "scpmode keepalive {interval}"
params:
- name: interval
type: integer
description: "Timeout value in milliseconds (minimum 1000). Actual timeout increased by 1 second."
response: "OK scpmode keepalive {interval}"
- id: sscurrent_query
label: Current Preset Number Query
kind: query
command: "sscurrent"
params: []
response: "OK sscurrent {index} {state}"
notes: "Response state is 'unmodified' or 'modified' indicating whether parameters changed after preset recall."
- id: ssrecall
label: Preset Recall
kind: action
command: "ssrecall {index}"
params:
- name: index
type: integer
description: Preset index number to recall
response: "OK ssrecall {index}"
- id: devinfo_protocolver
label: Protocol Version Query
kind: query
command: "devinfo protocolver"
params: []
response: "OK devinfo protocolver \"{version}\""
- id: devinfo_version
label: Firmware Version Query
kind: query
command: "devinfo version"
params: []
response: "OK devinfo version \"{version}\""
- id: devinfo_productname
label: Product Name Query
kind: query
command: "devinfo productname"
params: []
response: "OK devinfo productname \"{name}\""
- id: devinfo_serialno
label: Serial Number Query
kind: query
command: "devinfo serialno"
params: []
response: "OK devinfo serialno \"{serialno}\""
- id: devinfo_deviceid
label: Device ID Query
kind: query
command: "devinfo deviceid"
params: []
response: "OK devinfo deviceid \"{deviceid}\""
notes: Device ID corresponds to UNIT ID. 3-digit hexadecimal.
- id: devinfo_devicename
label: Device Name Query
kind: query
command: "devinfo devicename"
params: []
response: "OK devinfo devicename \"{devicename}\""
notes: Character encoding follows scpmode encoding setting.
- id: ssnum_query
label: Preset Count Query
kind: query
command: "ssnum"
params: []
response: "OK ssnum {count}"
- id: ssinfo_query
label: Nth Preset Information Query
kind: query
command: "ssinfo {index}"
params:
- name: index
type: integer
description: "Requested index number; range UNRESOLVED"
response: "OK ssinfo {index} \"{display_number}\" {attribute} \"{title}\" \"{comment}\""
notes: "Attribute values: preinst, reserve, user, empty. Character encoding for preset titles and comments follows scpmode encoding."
Feedbacks
feedbacks:
- id: notify_devstatus_runmode
type: enum
values:
- emergency
- update
- normal
description: "Unsolicited run mode change notification. Command: NOTIFY devstatus runmode \"{mode}\""
query_command: "devstatus runmode"
- id: notify_devstatus_error
type: string
description: "Unsolicited error/alert notification. Command: NOTIFY devstatus error \"{alert}\". Alert format: type/message//xnnn onf (sssss) ID-xxx date time."
query_command: "devstatus error"
- id: notify_sscurrent
type: integer
description: "Unsolicited current preset number change notification. Command: NOTIFY sscurrent {index}"
query_command: "sscurrent"
- id: notify_ssrecall
type: integer
description: "Unsolicited preset recall start notification. Command: NOTIFY ssrecall {index}"
- id: command_error
type: enum
values:
- UnknownCommand
- WrongFormat
- InvalidArgument
- UnknownAddress
- UnknownEventID
- TooLongCommand
- AccessDenied
- Busy
- ReadOnly
- NoPermission
- InternalError
description: "Error response. Syntax: ERROR {command} {error_code}"
Variables
variables:
- id: run_mode
type: enum
values:
- emergency
- update
- normal
access: read_write
description: Device run mode. Queried via devstatus runmode, set via devmode command.
- id: encoding_mode
type: enum
values:
- ascii
- utf8
access: read_write
description: Character encoding for responses and notifications. Set via scpmode encoding.
- id: keepalive_interval
type: integer
access: read_write
description: Keepalive timeout in msec (min 1000). Actual timeout = value + 1 second. Set via scpmode keepalive.
- id: current_preset
type: integer
access: read_write
description: Current preset index. Queried via sscurrent, recalled via ssrecall.
Events
events:
- id: runmode_changed
description: "Device run mode changed. NOTIFY devstatus runmode \"{mode}\""
payload_type: enum
payload_values: [emergency, update, normal]
- id: error_alert
description: "Device error/alert occurred or cleared. NOTIFY devstatus error \"{alert}\""
payload_type: string
- id: preset_changed
description: "Current preset changed. NOTIFY sscurrent {index}"
payload_type: integer
- id: preset_recall_started
description: "Preset recall processing started. NOTIFY ssrecall {index}"
payload_type: integer
Macros
macros:
- id: establish_connection
label: Establish Remote Control Connection
steps:
- action: devstatus_runmode_query
notes: "Send devstatus runmode at ≥1s intervals until response received"
- condition: "Response is OK devstatus runmode \"normal\""
notes: "Device ready. Begin sending control commands."
Safety
confirmation_required_for:
- devmode_emergency
interlocks:
- description: "Preset recall (ssrecall) rejected in emergency run mode - device returns AccessDenied error"
# UNRESOLVED: no power-on sequencing or hardware interlock details in source
Notes
- Commands are ASCII strings terminated by LF (0x0A). At least one space separates command name from options and options from each other.
- LF (0x0A) alone can serve as heartbeat/keepalive.
- Up to 8 simultaneous remote controller connections per MCP1.
- Communication start sequence required: controller must poll
devstatus runmodeat ≥1s intervals until device responds withOK devstatus runmode "normal". - Keepalive prevents stale connections after unexpected disconnect. After activation, controller must send any command or LF within timeout or device terminates the connection.
ssinfocommand listed in source table (3-8) but response parsing and index parameter are documented — however the source has a typo showingsssinfoin the example.- Error responses use syntax
ERROR {command} {error_code}.
## Provenance
```yaml
source_domains:
- data.yamaha.com
- europe.yamaha.com
source_urls:
- https://data.yamaha.com/files/download/other_assets/5/2230685/MCP1-remote-V100_en.pdf
- "https://europe.yamaha.com/en/products/contents/proaudio/downloads/technical_docs/index.html?c=proaudio&l=en&p=27"
retrieved_at: 2026-06-02T00:14:05.314Z
last_checked_at: 2026-10-07T13:27:21.959Z
```
## Verification Summary
```yaml
verdict: verified
checked_at: 2026-10-07T13:27:21.959Z
matched_actions: 19
action_count: 19
confidence: medium
summary: "All 19 action units match source commands literally; port 49280 supported; auth honestly UNRESOLVED; spec covers the source catalogue. (4 unresolved item(s) noted in Known Gaps.)"
```
## Known Gaps
```yaml
- "no pinout or physical connector details in source"
- "no power-on sequencing or hardware interlock details in source"
- "IP address assignment method (DHCP vs static) not documented"
- "maximum command length not specified beyond TooLongCommand error code"
```
---
From the AI4AV catalog (https://ai4av.net) · ODbL-1.0