Skip to main content
Glama
nickbeentjes

mac-audio-router-mcp

by nickbeentjes

mac-audio-router-mcp

An MCP server that gives AI agents full control over macOS audio routing, device management, volume, and multi-zone playback.

Built for environments where an AI assistant needs to manage audio across multiple outputs (HDMI TVs, Bluetooth speakers, AirPlay devices, satellite speakers) and multiple microphone inputs — without any manual intervention.

Status: Early release. Tested on macOS 15 (Sequoia) with Apple Silicon. Contributions welcome.

Installation

npm install mac-audio-router-mcp

For full device switching (recommended):

brew install switchaudio-osx

Prerequisites

  • macOS 12+ (Monterey or later)

  • Node.js 18+

  • Optional: SwitchAudioSource for device switching beyond built-in outputs

Related MCP server: Automation MCP

Quickstart

Add to your MCP client configuration:

{
  "mcpServers": {
    "audio": {
      "command": "npx",
      "args": ["mac-audio-router-mcp"]
    }
  }
}

For Claude Desktop, add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "audio": {
      "command": "npx",
      "args": ["mac-audio-router-mcp"]
    }
  }
}

For OpenClaw, add to your gateway config:

{
  tools: [{
    type: "mcp",
    command: "npx",
    args: ["mac-audio-router-mcp"]
  }]
}

The agent can now discover and call audio tools. Try:

"What audio devices are connected?"

"Route the audio output to the Bluetooth speaker."

"Set the volume to 40%."

"Say 'dinner is ready' on the salon speaker, then switch back to HDMI."

Tools

Status & Discovery

Tool

Description

get_audio_status

Full system snapshot: devices, zones, processes, volume, routing

list_audio_devices

All connected input/output devices with transport type (Bluetooth, HDMI, USB, AirPlay, built-in)

list_audio_zones

Configured audio zones and their assignments

list_audio_processes

Processes currently using audio hardware

Routing

Tool

Parameters

Description

set_output_device

device_name

Route system output to a named device

set_input_device

device_name

Set the active microphone

activate_zone

zone_id

Apply a pre-configured zone's routing, volume, and device settings

Volume

Tool

Parameters

Description

get_volume

Current volume level (0–100)

set_volume

level

Set volume (0–100)

mute

muted

Mute or unmute output

Playback

Tool

Parameters

Description

play_audio

file_path, volume?

Play a WAV/MP3/AAC/AIFF file

speak_text

text, voice?, rate?

Text-to-speech via macOS say

route_and_play

device_name, action, content, volume?, restore_device?

Atomic: switch device, play/speak, optionally restore

Native Daemon (low-latency)

These tools require the audiod native daemon (CoreAudio HAL in C, sub-millisecond response):

Tool

Parameters

Description

hog_device

device_name, release?

Take/release exclusive access to a device (prevents other apps using it)

set_device_volume

device_name, level

Set volume on a specific device, not just the system default

Zone Management

Tool

Parameters

Description

configure_zone

zone_id, name, description?, output_device?, input_device?, volume?

Create or update a named audio zone

activate_zone

zone_id

Switch all routing to match a zone's configuration

Native Daemon

For sub-millisecond audio control, build and run the native audiod daemon. It talks directly to CoreAudio HAL in C — no AppleScript, no SwitchAudioSource, no subprocess spawning.

cd native
make
./audiod              # listens on /tmp/audiod.sock

The MCP server auto-detects the daemon at startup. When connected, all device operations go through the Unix socket instead of system commands.

Latency comparison:

Operation

System commands

Native daemon

List devices

~2,000ms

~0.2ms

Switch output

~200ms

~0.2ms

Get volume

~150ms

~0.1ms

Set volume

~150ms

~0.1ms

The daemon protocol is newline-delimited JSON over a Unix socket:

# List all devices
echo '{"cmd":"list_devices"}' | nc -U /tmp/audiod.sock

# Switch output
echo '{"cmd":"set_output","name":"SAMSUNG"}' | nc -U /tmp/audiod.sock

# Set volume (0-100)
echo '{"cmd":"set_volume","level":60}' | nc -U /tmp/audiod.sock

# Per-device volume
echo '{"cmd":"set_volume","device":"Mac mini Speakers","level":40}' | nc -U /tmp/audiod.sock

# Take exclusive mic access
echo '{"cmd":"hog","device":"AIWA","release":false}' | nc -U /tmp/audiod.sock

Every response includes _us (microseconds elapsed) for profiling.

Architecture

┌─────────────────────────────────────────────────────┐
│  AI Agent (Claude, GPT, etc.)                       │
│  "Route TTS to the Bluetooth speaker in the salon"  │
└──────────────┬──────────────────────────────────────┘
               │ MCP (stdio / JSON-RPC)
┌──────────────▼──────────────────────────────────────┐
│  mac-audio-router-mcp         (TypeScript)          │
│                                                     │
│  Tools:                                             │
│  ├─ get_audio_status    (system snapshot)            │
│  ├─ list_audio_devices  (CoreAudio enumeration)     │
│  ├─ set_output_device   (route output)              │
│  ├─ set_input_device    (select mic)                │
│  ├─ set_volume / mute   (volume control)            │
│  ├─ configure_zone      (multi-room setup)          │
│  ├─ activate_zone       (switch routing preset)     │
│  ├─ play_audio          (file playback)             │
│  ├─ speak_text          (TTS)                       │
│  └─ route_and_play      (atomic route + play)       │
│                                                     │
│  Primary: Unix socket to audiod daemon               │
│  Fallback: system commands (osascript, afplay, say)  │
└──────────────┬──────────────────────────────────────┘
               │ Unix domain socket (/tmp/audiod.sock)
┌──────────────▼──────────────────────────────────────┐
│  audiod                           (C, ~500 lines)   │
│                                                     │
│  CoreAudio HAL direct access:                       │
│  ├─ AudioObjectGetPropertyData    (enumeration)     │
│  ├─ AudioObjectSetPropertyData    (routing)         │
│  ├─ kAudioDevicePropertyVolumeScalar (volume)       │
│  ├─ kAudioDevicePropertyHogMode   (exclusive lock)  │
│  └─ Device change notifications   (auto-refresh)    │
│                                                     │
│  Response times: 0.1–0.3ms typical                  │
└──────────────┬──────────────────────────────────────┘
               │
┌──────────────▼──────────────────────────────────────┐
│  macOS CoreAudio                                    │
│                                                     │
│  Devices:                                           │
│  ├─ Built-in speakers / headphone jack              │
│  ├─ HDMI / DisplayPort (TVs, monitors)              │
│  ├─ Bluetooth (speakers, headphones)                │
│  ├─ AirPlay (HomePod, Apple TV, smart speakers)     │
│  ├─ USB audio interfaces                            │
│  └─ Virtual (Aggregate, BlackHole, Loopback)        │
└─────────────────────────────────────────────────────┘

Multi-Zone Example

Configure zones for a vessel, smart home, or studio — then let the agent switch between them:

// The agent can do this via tool calls:

// 1. Configure zones
configure_zone({ zone_id: "salon", name: "Salon", output_device: "AIWA AWWS01", volume: 60 })
configure_zone({ zone_id: "bridge", name: "Bridge", output_device: "Samsung TV", volume: 40 })
configure_zone({ zone_id: "cockpit", name: "Cockpit", output_device: "JBL Clip", volume: 80 })

// 2. Route TTS to a specific zone
route_and_play({
  device_name: "AIWA AWWS01",
  action: "speak",
  content: "Anchor watch: wind has shifted to 15 knots from the northwest.",
  restore_device: "Samsung TV"
})

// 3. Switch zones
activate_zone({ zone_id: "bridge" })

Extending

Custom Device Matching

The server identifies device transport types (Bluetooth, HDMI, etc.) by name pattern matching. To add custom patterns, edit the inferTransportType function in src/audio.ts.

Persistent Zone Configuration

Zones are stored in memory by default. To persist across restarts, set the MAC_AUDIO_ROUTER_ZONES environment variable to a JSON file path:

{
  "mcpServers": {
    "audio": {
      "command": "npx",
      "args": ["mac-audio-router-mcp"],
      "env": {
        "MAC_AUDIO_ROUTER_ZONES": "/path/to/zones.json"
      }
    }
  }
}

AirPlay & Apple TV

AirPlay devices appear as standard output devices in macOS. The agent can route to them using set_output_device with the AirPlay device name. For Apple TV, ensure the Mac is connected via AirPlay in System Settings first.

Satellite / Multi-Room

For complex multi-room setups:

  1. Use macOS Aggregate Devices or Multi-Output Devices (via Audio MIDI Setup) to create virtual devices that span multiple physical outputs

  2. Configure each as a zone

  3. The agent can then activate zones to control entire room groupings

Development

git clone https://github.com/nickbeentjes/mac-audio-router-mcp.git
cd mac-audio-router-mcp
npm install
npm run build

Test with the MCP Inspector:

npm run inspect

Run directly:

node build/index.js

Troubleshooting

Issue

Solution

set_output_device fails

Install SwitchAudioSource: brew install switchaudio-osx

Bluetooth device not listed

Pair the device in System Settings > Bluetooth first

AirPlay device not listed

Connect to it once via System Settings > Sound > Output

Volume doesn't change

Some HDMI devices control volume independently

get_audio_status is slow

system_profiler can take 2-3s; install SwitchAudioSource for faster enumeration

Contributing

See CONTRIBUTING.md.

License

Released under the MIT License.

Available Tools

16 tools
activate_zoneB

Switch the system audio routing to match a pre-configured zone's settings

ParametersJSON Schema
NameRequiredDescriptionDefault
zone_idYesZone identifier to activate

TDQS

B3.3/5.0
Behavior2/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 disclosure burden. It doesn't indicate whether this is a mutating operation (it clearly is), what happens if the zone_id is invalid, whether the change is reversible, whether it requires specific permissions, or what the resulting audio state will be. For a system-routing mutation with zero annotation coverage, this is a significant gap in behavioral context.

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?

A single concise sentence that front-loads the action (Switch) and target (system audio routing). No filler, no repetition, no wasted clauses.

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

Completeness3/5

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

For a single-parameter mutation tool with no annotations and no output schema, the description is adequate for basic invocation but incomplete. It doesn't surface error handling, side effects on other audio routes, or what 'pre-configured zone settings' entail. The 100% schema coverage helps, but a mutation with zero annotations needs more than a one-liner.

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?

Schema description coverage is 100% with a single well-described parameter (zone_id, 'Zone identifier to activate'). The description adds minimal meaning beyond the schema, which is appropriate given the schema already documents the parameter fully. Baseline 3 is correct 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.

Purpose4/5

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

States a specific verb (Switch) and resource (system audio routing) scoped to a pre-configured zone. This distinguishes it reasonably well from siblings like configure_zone (which configures rather than activates) and set_output_device (which targets a single device, not a saved zone). Clear and specific, though it could more explicitly contrast with configure_zone.

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

Usage Guidelines3/5

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

The description implies usage by referencing 'pre-configured zone's settings', suggesting this applies an existing configuration rather than creating one. However, it does not explicitly state when to use this versus configure_zone or list_audio_zones, nor does it mention prerequisites like whether a zone must already be configured. Usage context is implied but not spelled out.

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

configure_zoneC

Create or update an audio zone with a specific output device, input device, and volume level. Zones let you manage multi-room or multi-purpose audio routing.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesHuman-readable zone name
volumeNoZone volume level
zone_idYesUnique zone identifier (e.g., 'salon', 'bridge', 'cockpit')
descriptionNoWhat this zone is used for
input_deviceNoInput device (microphone) name to assign to this zone
output_deviceNoOutput device name to assign to this zone

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It implies upsert behavior via 'create or update', but says nothing about whether omitting a parameter on update leaves it unchanged or clears it, whether the operation is reversible, what permissions are required, or what is returned. For a mutation tool with zero annotation coverage, that is a significant gap.

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

Conciseness4/5

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

Two compact sentences with no redundancy, and the core action is front-loaded. The second sentence about multi-room routing is mild context that could be trimmed but does help frame the domain.

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

Completeness2/5

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

The tool has six parameters, upsert semantics, no annotations, and no output schema, yet the description never clarifies update-vs-create behavior, partial-update rules, or failure modes. An agent could call it but would not know the consequences of omitting optional fields.

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?

Schema description coverage is 100%, so every one of the six parameters (including the required zone_id and name) is already documented in the schema. The description echoes output device, input device, and volume but adds no format, constraint, or default information beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description states a clear verb pair (create or update) and a specific resource (audio zone), plus the fields it manages (output device, input device, volume). It does not, however, differentiate itself from siblings like set_output_device, set_input_device, set_volume, or activate_zone, which overlap heavily with the operations it describes.

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

Usage Guidelines2/5

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

There is no guidance on when to use this composite tool versus the granular siblings (set_volume, set_output_device, set_input_device). The presence of 'Create or update' hints at lifecycle use but never states prerequisites, exclusions, or the alternative tools an agent should prefer for single-field changes.

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

get_audio_statusB

Get complete audio system status: all devices, zones, active processes, volume, and routing

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations exist, so the description carries the full behavioral burden. It implies a read-only, exhaustive snapshot via 'complete' and 'active processes', but says nothing about cost/latency, whether inactive or disconnected devices are included, required permissions, or whether the result is a consistent point-in-time capture. For a system-wide status tool this is a substantial gap.

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?

A single front-loaded sentence with the verb first and the returned surface enumerated at the end. No filler, no redundancy.

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?

With no output schema, the description does the work of enumerating the return surface (devices, zones, processes, volume, routing), which is the main thing an agent needs. The missing piece is sibling differentiation and any hint about read safety or cost, but for a zero-parameter read the definition is largely sufficient.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. The sentence usefully frames the scope of the no-argument call as covering the whole system.

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

Purpose4/5

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

The description states a specific verb ('Get') and resource ('audio system status') and enumerates the returned contents (devices, zones, processes, volume, routing). This is clear on its own, but it never distinguishes itself from siblings like list_audio_devices, list_audio_zones, list_audio_processes, or get_volume, which cover overlapping parts of the same state.

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

Usage Guidelines2/5

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

There is no when-to-use guidance. An agent cannot tell from the text whether to call this aggregate snapshot or the narrower list_* and get_volume siblings, nor whether this should be preferred for a full-state read. Usage is only implied by the 'complete' framing.

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

get_volumeA

Get the current system output volume level (0-100)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It discloses the return range (0-100), which is genuinely useful behavioral context for a getter, and 'Get the current' strongly implies a non-mutating read. However, it says nothing about permissions, side effects, or which device/zone the volume pertains to.

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?

A single front-loaded sentence naming the resource and the value range, with no filler. Nothing to trim.

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 zero-parameter read tool with no output schema, the description supplies the one thing an agent needs — the 0-100 scale of the returned level. It does not clarify the scope of 'system' (global vs. device vs. zone) despite siblings for zones and devices, which is a minor gap.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing to document; baseline 4 applies. The description correctly focuses on the return value scale instead of inventing parameter detail.

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

Purpose4/5

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

States a specific verb and resource (get current system output volume level) and adds the value scale (0-100), which distinguishes it from the mutation siblings like set_volume. It does not explicitly contrast itself with get_audio_status or set_device_volume, which would have made the routing unambiguous.

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

Usage Guidelines2/5

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

There is no statement of when to call this versus set_volume, get_audio_status, or set_device_volume. Usage is only implied by the verb 'get'. With 15 sibling tools in the same audio domain, some routing guidance was warranted.

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

hog_deviceB

Take exclusive access to an audio device (prevents other apps from using it). Requires the native audiod daemon.

ParametersJSON Schema
NameRequiredDescriptionDefault
releaseNoSet to true to release exclusive access
device_nameYesDevice name to take exclusive access to

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations present, the description carries the full behavioral burden. It does disclose two valuable traits beyond the schema: the exclusive-access side effect that blocks other apps, and a hard dependency on the native audiod daemon. However, it omits whether the lock is reversible or how it is released, permission requirements, and failure modes.

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?

Two tight sentences: the primary action and its effect come first, followed by the environmental prerequisite. Nothing is redundant or padded.

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 two-parameter, no-output-schema tool with no annotations, the description covers purpose, side effect, and a key runtime prerequisite (audiod daemon), which is close to sufficient. It could be more complete by touching on reversibility/release behavior, which the schema parameter implies but the description never frames.

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?

Schema description coverage is 100%, so both parameters (device_name and the release flag) are already documented in the schema, giving a baseline of 3. The description adds no parameter-level detail such as device-name format or how release interacts with the hog, so it does not exceed that baseline.

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

Purpose4/5

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

The description pairs a specific verb ('take exclusive access') with a clear resource ('an audio device') and clarifies the consequence ('prevents other apps from using it'). It is easily distinguished from read-oriented siblings like get_audio_status or list_audio_devices, though it never explicitly contrasts itself with device-selection tools like set_output_device or set_input_device.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance, and no alternatives are named. The reader can infer that this is for gaining exclusive control, but the description never states the conditions under which hogging is preferable to ordinary device selection, nor when to avoid it.

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

list_audio_devicesA

List all audio input and output devices connected to this Mac, including Bluetooth, HDMI, USB, AirPlay, and built-in devices

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full disclosure burden. It conveys useful scope (which device families appear) but says nothing about ordering, whether disconnected/paired-but-inactive devices are included, or that the call is a side-effect-free read. Reasonable but not rich.

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?

One front-loaded sentence with no filler. The verb+resource leads and the enumeration is the only elaboration, and it earns its place by bounding scope.

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 parameterless list tool with no output schema, the description adequately covers what will be returned (input and output devices across several connection types). It stops short of describing the shape of each returned entry, which is a minor gap.

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

Parameters4/5

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

Zero parameters, so there is nothing for the description to explain; baseline 4 applies. Schema coverage is moot here.

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

Purpose4/5

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

States a specific verb (list) and resource (audio input/output devices on this Mac) with concrete scope, enumerating the connection types covered. It implicitly distinguishes itself from siblings like list_audio_zones and list_audio_processes by naming the device domain, though it never names an alternative explicitly.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of the obvious alternative siblings (list_audio_zones, list_audio_processes, get_audio_status) that an agent might pick instead. The purpose is self-evident, but nothing in the text routes the agent.

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

list_audio_processesA

List processes currently using audio hardware (players, browsers, voice apps)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.6/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full behavioral burden. It discloses that the list is of active consumers (a transient live state), which is useful. However, it omits permissions, ordering, and whether the result is point-in-time or continuously updated.

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?

A single front-loaded sentence with no filler; every word contributes to identifying the resource and its scope.

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

Completeness3/5

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

For a no-param, no-annotation, no-output-schema read tool, the description is minimally adequate. It does not describe the return shape (e.g., per-process identifiers) or when the snapshot is taken, leaving minor gaps.

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

Parameters4/5

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

Zero parameters, so baseline 4 applies. No parameter information is needed and none is missing.

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

Purpose4/5

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

Combines a specific verb ('List') with the resource ('processes currently using audio hardware') and enumerates concrete examples (players, browsers, voice apps). Clearly distinguishable from siblings like list_audio_devices, which enumerates hardware, not consumers of it.

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

Usage Guidelines3/5

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

The 'currently using' phrasing implies a live-snapshot use case, but there is no explicit when-to-use, prerequisites, or named alternative. Usage is inferable but not stated.

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

list_audio_zonesB

List configured audio zones and their current routing assignments

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. The verb 'List' implies a read-only, non-destructive operation, which covers the most important trait, but nothing is said about permissions, side effects, or result shape for a tool with zero annotations.

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?

A single front-loaded sentence with no wasted words. The verb and resource come first, and the return scope is appended efficiently.

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

Completeness3/5

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

With no output schema, the description is the only source of return-value information, and it only hints at 'routing assignments' without describing the shape of a zone record. For a simple no-arg list tool this is minimally adequate but leaves a real gap.

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

Parameters4/5

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

The tool takes no parameters, so there are no semantics to document; baseline is 4. The description correctly implies a parameterless, unfiltered listing.

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

Purpose4/5

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

States a specific verb ('List') and a distinct resource ('configured audio zones') plus the extra scope of what is returned ('current routing assignments'). This clearly separates it from siblings like list_audio_devices and list_audio_processes, though it does not name any sibling explicitly.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of alternatives such as list_audio_devices or get_audio_status. The agent must infer the context entirely from the resource noun.

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

muteB

Mute or unmute the system audio output

ParametersJSON Schema
NameRequiredDescriptionDefault
mutedYestrue to mute, false to unmute

TDQS

B3.3/5.0
Behavior3/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 does convey the useful trait that the operation is a reversible toggle ('mute or unmute'), but says nothing about permissions, whether state persists, or what is returned.

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?

A single front-loaded sentence with zero filler; the operation is stated before any qualification and nothing is wasted.

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

Completeness3/5

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

For a one-parameter toggle with no output schema, the description covers the core action adequately. It is thin on usage context and return behavior, but the simplicity of the tool keeps it from being seriously inadequate.

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?

Schema coverage is 100% and the boolean 'muted' parameter is fully documented in the schema itself ('true to mute, false to unmute'). The description adds no syntax or semantics beyond that, so the baseline of 3 applies.

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

Purpose4/5

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

The description states a specific verb pair (mute/unmute) and a clear resource (system audio output), so the agent immediately knows the operation. It does not, however, distinguish this from siblings like set_volume or set_device_volume, which could also silence output.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as set_volume(0) or set_device_volume. The agent must infer the use case purely from the verb.

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

play_audioB

Play an audio file through the current default output device. Supports WAV, MP3, AAC, AIFF.

ParametersJSON Schema
NameRequiredDescriptionDefault
volumeNoPlayback volume (0-100)
file_pathYesAbsolute path to the audio file

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It states the output device and supported formats, but omits whether playback blocks, how errors are handled, whether it interrupts current audio, or what the return value is.

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?

Two sentences, front-loaded with the core action, with no redundant or wasted wording. The supported-format note is compact and useful.

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

Completeness3/5

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

For a simple playback tool, the description covers purpose, output device, and supported formats. However, with no annotations and no output schema, it lacks behavioral and usage context that an agent might need to call it confidently in varied situations.

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?

Schema description coverage is 100%, so both parameters are already documented in the schema. The description adds no additional syntax, constraints, or meaning for file_path or volume, making the baseline score appropriate.

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 ('Play an audio file') and scopes it to the current default output device, which distinguishes it from sibling tools like route_and_play and speak_text. It also lists supported formats, giving a precise sense of what the tool handles.

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

Usage Guidelines2/5

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

The description implies when the tool is useful but gives no explicit when-to-use guidance, prerequisites, or alternatives. It does not mention route_and_play, speak_text, or any condition that would select a different sibling.

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

route_and_playB

Switch output to a specific device, then play an audio file or speak text. Atomic operation for targeted audio delivery.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesWhether to play a file or speak text
volumeNoVolume level
contentYesFile path (for play) or text (for speak)
device_nameYesOutput device to route to
restore_deviceNoDevice to switch back to after playback

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions switching output (a side effect) but does not explain whether the original device is restored automatically, whether the switch is permanent if restore_device is omitted, what permissions are required, or how failures are handled. Behavioral context is minimal.

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?

Two short sentences, front-loaded with the core action, and the second sentence adds a key differentiating trait. No wasted words; every sentence earns its place.

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

Completeness2/5

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

Given a mutation tool with five parameters, three required, no annotations, and no output schema, the description is too brief. It omits usage guidance, alternatives, and behavioral details such as what happens to the original output device or whether the operation is reversible, leaving significant gaps for an agent.

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?

Schema description coverage is 100%, so the schema already documents all five parameters including their types, enum, and constraints. The description adds no parameter-level meaning beyond what the schema provides, so the baseline of 3 applies.

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?

The description states a specific compound verb ('Switch output... then play... or speak') and resource, and the phrase 'Atomic operation' explicitly distinguishes it from using set_output_device and play_audio/speak_text separately. An agent can tell this tool apart from its siblings without opening the schema.

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

Usage Guidelines3/5

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

The phrase 'Atomic operation for targeted audio delivery' implies a usage condition—use when you need routing and playback to happen as one atomic step—but it does not state when not to use it or name alternative tools like set_output_device plus play_audio. Usage is implied rather than explicit.

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

set_device_volumeA

Set volume on a specific device (not just the default). Requires the native audiod daemon.

ParametersJSON Schema
NameRequiredDescriptionDefault
levelYesVolume level 0-100
device_nameYesDevice name

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations present, the description carries the full burden, and it does supply one real behavioral fact: the tool requires the native audiod daemon. However, it omits failure behavior when the daemon is absent, whether the operation is reversible or affects mute state, and permission requirements. The prerequisite is valuable but the disclosure is thin for a mutation 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?

Two short sentences, zero padding, with the scoping distinction front-loaded before the prerequisite. 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 two-parameter tool with full schema coverage, the description covers purpose, scope, and the key environmental prerequisite. It lacks any indication of error behavior or return effect, but no output schema is expected and nothing needed to invoke the tool correctly is missing.

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?

Schema description coverage is 100%, so both parameters (device_name, level with its 0-100 range) are already documented in the schema. The description adds only the notion of a 'specific device' and no format or syntax detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Set volume on a specific device') and implicitly distinguishes itself from the sibling set_volume by noting it targets a named device rather than the default. It does not explicitly name the sibling, but the parenthetical scoping makes the intended operation unambiguous.

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 '(not just the default)' gives clear context for when to choose this tool over the default-volume variant, effectively routing the agent. It stops short of explicitly naming set_volume or stating exclusions/conditions, so it does not reach a 5.

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

set_input_deviceA

Set the active microphone / audio input device by name. Use list_audio_devices first to see available devices.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_nameYesExact name of the input device

TDQS

A3.8/5.0
Behavior2/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, and it discloses almost nothing beyond the action itself. It does not say whether the choice persists across restarts, what happens on an unknown device name, whether it interrupts active playback, or whether any permission is required for a mutation of global audio state.

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?

Two short sentences, zero waste, with the action front-loaded and the discovery step immediately after. Nothing could be trimmed without losing information.

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-parameter setter with a fully documented schema and no output schema, the description covers the action and the discovery prerequisite well. The main residual gap is failure behavior for an invalid or unavailable device name, which an agent would likely want before calling.

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?

Schema coverage is 100% and the single parameter's 'Exact name of the input device' description is complete, so the schema does the heavy lifting. The description's 'by name' adds a redundant hint rather than new syntax or format guidance; baseline 3 applies.

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 (Set) and resource (active microphone / audio input device) and pins the identifier type (by name). The 'input' qualifier cleanly separates it from the sibling set_output_device.

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?

Gives an explicit prerequisite workflow: 'Use list_audio_devices first to see available devices,' which routes the agent to the discovery sibling. It does not state when not to use it or what happens if the device is already active, so it falls short of a full 5.

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

set_output_deviceA

Route system audio output to a specific device by name. Use list_audio_devices first to see available devices.

ParametersJSON Schema
NameRequiredDescriptionDefault
device_nameYesExact name of the output device (e.g., 'Samsung TV', 'AIWA AWWS01')

TDQS

A3.8/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full behavioral burden. It says the tool routes audio output but does not disclose whether the change is persistent, what happens if the device is unavailable, whether it affects other streams, or any permission requirements.

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?

Two short sentences with the action front-loaded and the prerequisite guidance immediately after. Every sentence earns its place with no redundancy.

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 simple single-parameter setter with full schema coverage and no output schema, the description covers the core purpose and the key prerequisite. It could still be more complete by noting behavior on invalid device names or whether the routing is persistent, but it is adequate.

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?

Schema description coverage is 100%, and the schema itself documents the single device_name parameter with examples. The description only restates 'by name' and does not add syntax, format, or matching semantics beyond what the schema already provides.

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 ('Route') and resource ('system audio output') with a clear scope modifier ('to a specific device by name'). This clearly distinguishes it from sibling tools like set_input_device, set_volume, and set_device_volume.

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?

Explicitly tells the agent to call list_audio_devices first to discover valid device names, which is a clear prerequisite. It does not describe when not to use this tool or name alternative routing tools, so it lacks the full when/when-not/alternatives guidance of a 5.

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

set_volumeC

Set the system output volume level

ParametersJSON Schema
NameRequiredDescriptionDefault
levelYesVolume level from 0 (silent) to 100 (maximum)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It does not state whether the change persists across sessions, how it interacts with mute or per-device volume, whether it requires any permission, or what happens on out-of-range input. For a mutation tool with zero annotation coverage this is a notable gap.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, which is appropriately sized for a one-parameter setter. It is efficient, though it is minimal to the point of omitting useful distinctions.

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

Completeness3/5

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

For a trivial one-parameter setter with full schema coverage and no output schema, the description is adequate to invoke the tool. It falls short on context the sibling set cannot supply: the scope of 'system' output versus per-device or per-zone volume.

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?

Schema description coverage is 100%; the 'level' parameter is fully documented in the schema, including the 0 (silent) to 100 (maximum) range. The description adds no meaning beyond the schema, so the baseline of 3 applies.

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

Purpose4/5

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

States a specific verb (set) and resource (system output volume level), which is clearly distinguishable from get_volume. However, it does not differentiate itself from the sibling set_device_volume, so an agent cannot tell from the description alone whether this targets the whole system or a specific device.

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

Usage Guidelines2/5

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

No guidance on when to use this versus set_device_volume, set_output_device, or mute. There are no stated preconditions, no exclusions, and no mention of the obvious alternatives among the siblings.

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

speak_textB

Speak text aloud using macOS text-to-speech on the current output device

ParametersJSON Schema
NameRequiredDescriptionDefault
rateNoSpeech rate in words per minute
textYesText to speak
voiceNomacOS voice name (default: Daniel). Use 'say -v ?' to list available voices.

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden; it discloses the platform (macOS), that output is audible speech, and that it targets the current output device. It does not say whether the call blocks until speech finishes, what happens if no device is set, or what is returned, leaving real gaps for a side-effecting 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?

A single front-loaded sentence with the action and mechanism stated immediately and no filler. Nothing could be trimmed without losing information.

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 simple three-parameter, single-required-field tool with full schema coverage and no output schema, the description covers the essentials of what gets performed and where. The only remaining gap is blocking/return behavior, which is minor at this complexity level.

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?

Schema description coverage is 100%, so rate, text, and voice (including the Daniel default and the 'say -v ?' hint) are already fully documented in the schema. The description adds no parameter meaning beyond that, making the baseline 3 appropriate.

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

Purpose4/5

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

States a specific verb (speak) and resource (text) plus the mechanism (macOS text-to-speech) and target (current output device). It is distinguishable from most siblings, though it never explicitly contrasts itself with audio-playing siblings like play_audio or route_and_play.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus alternatives such as play_audio or route_and_play, and no prerequisites or exclusions. Usage is only inferable from the purpose sentence itself.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv0.1.0
    • First observedactivate_zone
    • First observedconfigure_zone
    • First observedget_audio_status
    • First observedget_volume
    • First observedhog_device
    • First observedlist_audio_devices
    • First observedlist_audio_processes
    • First observedlist_audio_zones
    • First observedmute
    • First observedplay_audio
    • First observedroute_and_play
    • First observedset_device_volume
    • First observedset_input_device
    • First observedset_output_device
    • First observedset_volume
    • First observedspeak_text

TDQS

A3.5/5.0

Scored across 16 tools

Disambiguation4/5

Most tools target distinct resources and actions (device routing, volume, zones, playback, listing). Some overlap exists between set_volume/set_device_volume and play_audio vs route_and_play, but descriptions clarify the distinction (default vs specific device, atomic combined operation).

Naming Consistency5/5

All tools use consistent snake_case verb_noun or verb forms (set_output_device, configure_zone, list_audio_devices, play_audio). The list_* family is uniform and predictable throughout.

Tool Count4/5

16 tools is slightly heavy but each maps to a genuine audio-routing operation. The set is well-scoped with no obviously redundant tools, though it sits near the upper end of the comfortable range.

Completeness4/5

Covers the core lifecycle: device selection, volume, mute, zone create/update/activate, playback, TTS, status, and discovery listing. Minor gap: no delete_zone operation to remove configured zones, but otherwise the surface is solid.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables Claude and other AI assistants to interact with your computer's audio system, allowing for recording from microphones and playing audio through speakers.
    9
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables AI assistants to automate macOS desktop tasks including mouse control, keyboard input, screenshots, window management, and UI interaction.
    7 npm
    415
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Give AI agents deep control over macOS — windows, audio, Bluetooth, Spaces, Focus mode, and 200+ OS APIs — through one MCP server.
    17 npm
    1
    MIT