Summary

The McIntosh CR106 is a multi-zone preamplifier controllable via RS-232 and TCP/IP. Commands use ASCII packet format enclosed in parentheses. Up to 5 units can be linked with 6 zones each and 6 groups. Auto-status updates notify the control system of state changes.

Transport

protocols:
  - serial
  - tcp
addressing:
  port: 57012
serial:
  baud_rate: 115200
  data_bits: 8
  parity: none
  stop_bits: 1
  flow_control: none
auth:
  type: none  # inferred: no auth procedure in source

Traits

- powerable     # PWR command
- queryable     # QRY, ZQY, GQY commands
- routable      # ZIA, GIA input selection
- levelable     # ZVL volume, ZBA balance, ZTB/ZTT tone, ITL/ZBT/ZST trim

Actions

# Core commands - no unit/zone prefix
- id: query
  label: Query All
  kind: action
  command: "(QRY)"
  params: []

- id: status_enable
  label: Status Enable
  kind: action
  command: "(STA {param})"
  params:
    - name: enabled
      type: enum
      values: ["1", "0"]
      description: "'1' = On, '0' = Off - enables automatic status messages on state change"

- id: power
  label: Power
  kind: action
  command: "(PWR {param})"
  params:
    - name: state
      type: enum
      values: ["1", "0"]
      description: "'1' = On, '0' = Off - all non-Power commands return FAILED_PRECONDITION when Off"

- id: display_brightness
  label: Display Brightness
  kind: action
  command: "(TDB {param})"
  params:
    - name: level
      type: enum
      values: ["1", "2", "3", "4"]
      description: "'1'=25%, '2'=50%, '3'=75%, '4'=100%"

- id: meter_lights
  label: Meter Lights
  kind: action
  command: "(TML {param})"
  params:
    - name: state
      type: enum
      values: ["1", "0"]
      description: "'1' = On, '0' = Off"

# Input commands - format: (CMD unit_id input_id [param])
- id: input_trim_level
  label: Input Trim Level
  kind: action
  command: "(ITL {unit_id} {input_id} {level})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: input_id
      type: integer
      description: "Input ID, 0-9 (0=None, 1=AUX1, 2=AUX2, 3=AUX3, 4=AUX4, 5=COAX1, 6=COAX2, 7=OPT1, 8=OPT2, 9=Bluetooth)"
    - name: level
      type: string
      description: "-10 to 10, step 0.5dB"

- id: bt_pair
  label: Bluetooth Pair
  kind: action
  command: "(IBT {unit_id} {input_id})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: input_id
      type: integer
      description: "Must be Bluetooth input (9)"

# Zone commands - format: (CMD unit_id zone_id [param])
- id: zone_query
  label: Zone Query
  kind: action
  command: "(ZQY {unit_id} {zone_id})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6"

- id: zone_select
  label: Zone Select
  kind: action
  command: "(ZNS {unit_id} {zone_id})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6 - sets display zone context"

- id: volume
  label: Zone Volume
  kind: action
  command: "(ZVL {unit_id} {zone_id} {param})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6"
    - name: value
      type: string
      description: "'U'=Up 1%, 'D'=Down 1%, '0'-'100'=Set %"

- id: mute
  label: Zone Mute
  kind: action
  command: "(ZMT {unit_id} {zone_id} {param})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6"
    - name: state
      type: enum
      values: ["1", "0"]
      description: "'1' = Mute, '0' = Unmute"

- id: zone_input_select
  label: Zone Input Selection
  kind: action
  command: "(ZIA {unit_id} {zone_id} {src_unit_id} {input_id})"
  params:
    - name: unit_id
      type: integer
      description: "Target Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6"
    - name: src_unit_id
      type: integer
      description: "Source Unit ID for input"
    - name: input_id
      type: integer
      description: "Input ID, 0-9"

- id: balance
  label: Zone Balance
  kind: action
  command: "(ZBA {unit_id} {zone_id} {param})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6"
    - name: value
      type: string
      description: "'L'=Left 1dB, 'R'=Right 1dB, '-50'-'50'=Set (neg=Left, pos=Right)"

- id: b_channel_trim
  label: B Channel Trim Level
  kind: action
  command: "(ZBT {unit_id} {zone_id} {level})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6"
    - name: level
      type: string
      description: "-10 to 10, step 0.5dB"

- id: sub_trim
  label: Subwoofer Trim Level
  kind: action
  command: "(ZST {unit_id} {zone_id} {level})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6"
    - name: level
      type: string
      description: "-10 to 10, step 0.5dB"

- id: tone_bass
  label: Tone Bass
  kind: action
  command: "(ZTB {unit_id} {zone_id} {param})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6"
    - name: value
      type: string
      description: "'U'=Up 1dB, 'D'=Down 1dB, '-12'-'12'=Set"

- id: tone_treble
  label: Tone Treble
  kind: action
  command: "(ZTT {unit_id} {zone_id} {param})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6"
    - name: value
      type: string
      description: "'U'=Up 1dB, 'D'=Down 1dB, '-12'-'12'=Set"

- id: equalizer
  label: Equalizer
  kind: action
  command: "(ZEQ {unit_id} {zone_id} {param})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6"
    - name: preset
      type: enum
      values: ["0", "1", "2", "3", "4", "5", "6"]
      description: "'0'=Off, '1'=Music, '2'=Music II, '3'=Relaxed, '4'=Tilt, '5'=Action, '6'=Action+Movie"

- id: high_pass
  label: Zone High Pass
  kind: action
  command: "(ZHP {unit_id} {zone_id} {param})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6"
    - name: value
      type: string
      description: "'0'=Disable, '1'=Enable, '40'-'120'=Set Hz"

- id: low_pass
  label: Zone Low Pass
  kind: action
  command: "(ZLP {unit_id} {zone_id} {param})"
  params:
    - name: unit_id
      type: integer
      description: "Unit/Link ID, 1-5"
    - name: zone_id
      type: integer
      description: "Zone ID, 1-6"
    - name: value
      type: string
      description: "'0'=Disable, '1'=Enable, '40'-'120'=Set Hz"

# Group commands - format: (CMD group_id [params])
- id: group_query
  label: Group Query
  kind: action
  command: "(GQY {group_id})"
  params:
    - name: group_id
      type: integer
      description: "Group ID, 1-6; omit to list all current group IDs"

- id: group_volume
  label: Group Volume
  kind: action
  command: "(GVL {group_id} {param})"
  params:
    - name: group_id
      type: integer
      description: "Group ID, 1-6"
    - name: value
      type: string
      description: "'U'=Up 1%, 'D'=Down 1%, '0'-'100'=Set %"

- id: group_mute
  label: Group Mute
  kind: action
  command: "(GMT {group_id} {param})"
  params:
    - name: group_id
      type: integer
      description: "Group ID, 1-6"
    - name: state
      type: enum
      values: ["1", "0"]
      description: "'1' = Mute, '0' = Unmute"

- id: group_input_select
  label: Group Input Selection
  kind: action
  command: "(GIA {group_id} {unit_id} {input_id})"
  params:
    - name: group_id
      type: integer
      description: "Group ID, 1-6"
    - name: unit_id
      type: integer
      description: "Source Unit ID"
    - name: input_id
      type: integer
      description: "Input ID, 0-9"

- id: group_create
  label: Create Group
  kind: action
  command: "(GMK {zones})"
  params:
    - name: zones
      type: string
      description: "Space-separated 'ij' pairs where i=Unit ID, j=Zone ID, e.g. '12 22 31 54'"

- id: group_delete
  label: Delete Group
  kind: action
  command: "(GRM {group_id})"
  params:
    - name: group_id
      type: integer
      description: "Group ID, 1-6"

- id: group_update_zones
  label: Update Group Zones
  kind: action
  command: "(GUZ {group_id} {zones})"
  params:
    - name: group_id
      type: integer
      description: "Group ID, 1-6"
    - name: zones
      type: string
      description: "Space-separated 'ij' pairs where i=Unit ID, j=Zone ID"

Feedbacks

- id: power_state
  type: enum
  values: ["1", "0"]
  description: "PWR query response - '1'=On, '0'=Off"

- id: status_enable_state
  type: enum
  values: ["1", "0"]
  description: "STA query response"

- id: display_brightness
  type: enum
  values: ["1", "2", "3", "4"]
  description: "TDB query response"

- id: meter_lights_state
  type: enum
  values: ["1", "0"]
  description: "TML query response"

- id: zone_volume
  type: integer
  description: "ZVL query response - 0-100%"

- id: zone_mute_state
  type: enum
  values: ["1", "0"]
  description: "ZMT query response"

- id: zone_balance
  type: integer
  description: "ZBA query response - -50 to 50"

- id: zone_equalizer
  type: enum
  values: ["0", "1", "2", "3", "4", "5", "6"]
  description: "ZEQ query response"

- id: zone_high_pass
  type: string
  description: "ZHP query - returns enable state + frequency, e.g. (ZHP 1 3 0 50)"

- id: zone_low_pass
  type: string
  description: "ZLP query - returns enable state + frequency, e.g. (ZLP 4 2 1 70)"

- id: error_response
  type: enum
  values: ["ERR 2", "ERR 3", "ERR 9", "ERR 12"]
  description: "ERR 2=Unknown, ERR 3=Invalid Argument, ERR 9=Failed Precondition, ERR 12=Unimplemented"

Variables

# UNRESOLVED: no settable continuous parameters distinct from the actions above

Events

- id: auto_status_update
  description: "When STA is enabled, the CR106 automatically transmits status messages when its state changes - allows control system to maintain current preamplifier state"
- id: boot_info
  description: "On AC connection, CR106 sends model number (CR106), serial number, and firmware version"
- id: command_echo
  description: "After processing a command, CR106 echoes the same command as acknowledgement; sends error message if invalid"

Macros

# UNRESOLVED: no multi-step sequences described in source

Safety

confirmation_required_for: []
interlocks: []
# Note: PWR Off causes all non-Power commands to return FAILED_PRECONDITION error
# UNRESOLVED: no safety warnings or interlock procedures found in source

Notes

  • Packet format: ASCII (CMD params) with optional CR/LF suffix
  • Parameters prefixed by space (0x20); no parameter = query current status
  • Up to 5 linked units (Unit ID 1–5), 6 zones per unit, 6 groups
  • RS-232 hardware: 3.5mm TRS cable — Tip=TXD, Ring=RXD, Sleeve=Ground
  • Compatible with Crestron, AMX, Savant, Control4 control systems
  • Disabled inputs/zones return FAILED_PRECONDITION
  • Group Create (GMK) omits group_id — other group commands include it
  • Source mentions TCP/IP port 57012 but section header says "RS232" — likely shared port for both transports

Provenance

source_domains:
  - mcintoshlabs.com
  - scribd.com
source_urls:
  - https://www.mcintoshlabs.com/-/media/Files/mcintoshlabs/DocumentMaster/us/CR106-External-Control.pdf
  - https://www.scribd.com/document/942837415/McIntosh-RS232ControlApplicationNote
retrieved_at: 2026-05-15T15:03:27.174Z
last_checked_at: 2026-06-02T22:09:39.092Z

Verification Summary

verdict: verified
checked_at: 2026-06-02T22:09:39.092Z
matched_actions: 27
action_count: 27
confidence: medium
summary: "All 27 spec actions traced to source (dip-safe re-verify). (7 unresolved item(s) noted in Known Gaps.)"

Known Gaps

- "\"Universal Discrete Functions\" family name appears to be a database artifact; actual product is CR106"
- "no settable continuous parameters distinct from the actions above"
- "no multi-step sequences described in source"
- "no safety warnings or interlock procedures found in source"
- "firmware version compatibility range not stated"
- "\"Universal Discrete Functions\" family name may be a database artifact; actual product is CR106"
- "max concurrent connection count over TCP/IP not stated"

From the AI4AV catalog (https://ai4av.net) · ODbL-1.0