AgentBridge
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@AgentBridgelist all windows on my Classic Mac"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
AgentBridge
Let AI talk to your Classic Mac.
AgentBridge is a native Classic Mac OS application that lets AI agents (like Claude) interact with Mac OS 7–9 through structured commands and responses. It works on real hardware and emulators — no modifications to your Mac required.
Drop AgentBridge into a shared folder, launch it on your Mac, and an AI agent can list windows, open apps, type text, read the clipboard, browse files, and more — all through a simple text-based protocol.
How It Works
┌──────────────────────┐
│ Claude / AI Agent │
│ │ │
│ MCP Protocol │
│ │ │
│ MCP Server (Node) │
│ │ │
│ Shared Folder I/O │
└────────┬─────────────┘
│ reads/writes text files
│
┌────┴──────────────────────────┐
│ Shared Volume (NAS / AFP / │
│ SMB / emulator extfs) │
│ │
│ AgentBridge-MyMac/ │
│ ├── inbox/ ← commands in │
│ ├── outbox/ ← responses out │
│ ├── assets/ ← file staging │
│ └── heartbeat │
└────┬──────────────────────────┘
│
┌────────┴─────────────────────────┐
│ Classic Mac OS 7 / 8 / 9 │
│ │
│ AgentBridge.app │
│ - Polls inbox for commands │
│ - Executes via Mac Toolbox │
│ - Writes responses to outbox │
│ - Heartbeat every 2 seconds │
└──────────────────────────────────┘The transport is just a folder. How that folder is shared between the AI and the Mac is up to you:
NAS/file server (AFP or SMB) — multiple Macs and your modern computer all mount the same share
Emulator shared folder — BasiliskII and SheepShaver both support host directory sharing
Any other shared filesystem — if both sides can read and write files, it works
No SSH. No special drivers. No modifications to your Mac's system. AgentBridge is a regular application — launch it, quit it, done.
Related MCP server: macos-mcp
MCP Tools Reference
The MCP server exposes these tools to AI agents. If the fleet has only one target, the target parameter is optional on all tools.
System & Status
classic_mac_list_targets
List all configured Classic Mac targets and their status (heartbeat alive/dead).
No parameters.
classic_mac_ping
Health check — returns pong if AgentBridge is responding.
Parameter | Required | Description |
| No | Target ID or alias |
classic_mac_heartbeat
Read the heartbeat file — shows uptime, front app, free memory, timestamp.
Parameter | Required | Description |
| No | Target ID or alias |
classic_mac_get_about
System information — OS version, machine type, RAM, free memory, uptime.
Parameter | Required | Description |
| No | Target ID or alias |
Windows & Processes
classic_mac_list_windows
Enumerate all visible windows across all applications. Returns window index, title, bounds (left,top,right,bottom), and front/back layer.
Parameter | Required | Description |
| No | Target ID or alias |
classic_mac_get_front_window
Get details about the frontmost window — title, bounds, owning app.
Parameter | Required | Description |
| No | Target ID or alias |
classic_mac_list_processes
List running applications with name, creator code, PID, and memory partition.
Parameter | Required | Description |
| No | Target ID or alias |
Menus
classic_mac_list_menus
List the menu bar entries for the frontmost application.
Parameter | Required | Description |
| No | Target ID or alias |
classic_mac_get_menu_items
Get items within a specific menu by name.
Parameter | Required | Description |
| No | Target ID or alias |
| Yes | Menu title (e.g. "File", "Edit") |
classic_mac_menu_select
Activate a menu item by name. Works for items with keyboard shortcuts.
Parameter | Required | Description |
| No | Target ID or alias |
| Yes | Menu title |
| Yes | Menu item name |
Mouse & Keyboard
classic_mac_click
Click at screen coordinates.
Parameter | Required | Description |
| No | Target ID or alias |
| Yes | X coordinate (pixels from left) |
| Yes | Y coordinate (pixels from top) |
| No | Number of clicks (default 1, use 2 for double-click) |
classic_mac_mouse_move
Move the cursor without clicking.
Parameter | Required | Description |
| No | Target ID or alias |
| Yes | X coordinate |
| Yes | Y coordinate |
classic_mac_mouse_drag
Click and drag from one point to another.
Parameter | Required | Description |
| No | Target ID or alias |
| Yes | Start X |
| Yes | Start Y |
| Yes | End X |
| Yes | End Y |
classic_mac_type_text
Type a string of text into the frontmost application.
Parameter | Required | Description |
| No | Target ID or alias |
| Yes | Text to type |
classic_mac_key_press
Press a single key with optional modifiers.
Parameter | Required | Description |
| No | Target ID or alias |
| Yes | Key name: single character, or |
| No | Comma-separated: |
Clipboard
classic_mac_get_clipboard
Read the current clipboard text contents.
Parameter | Required | Description |
| No | Target ID or alias |
classic_mac_set_clipboard
Set the clipboard text contents.
Parameter | Required | Description |
| No | Target ID or alias |
| Yes | Text to place on clipboard |
Application Control
classic_mac_launch_app
Launch an application by HFS path or creator code.
Parameter | Required | Description |
| No | Target ID or alias |
| No* | HFS path (e.g. |
| No* | 4-character creator code (e.g. |
*One of path or creator is required.
classic_mac_activate_app
Bring a running application to the front.
Parameter | Required | Description |
| No | Target ID or alias |
| Yes | Application name |
classic_mac_quit_app
Send a quit Apple Event to a running application.
Parameter | Required | Description |
| No | Target ID or alias |
| Yes | Application name |
classic_mac_send_appleevent
Send a generic Apple Event to a running application.
Parameter | Required | Description |
| No | Target ID or alias |
| Yes | Target app name or 4-char creator code |
| Yes | Event type: |
Files & Volumes
classic_mac_get_volumes
List all mounted volumes with name, free space, and total size.
Parameter | Required | Description |
| No | Target ID or alias |
classic_mac_list_folder
List contents of a folder by HFS path. Returns name, type code, creator code, size, and whether each item is a folder.
Parameter | Required | Description |
| No | Target ID or alias |
| Yes | HFS path (e.g. |
Compatibility
Environment | Architecture | OS Versions | Status |
68k Macs | 68k | System 7.0–8.1 | ✅ Tested on System 7.6.1 |
PowerPC Macs | PowerPC | Mac OS 8.5–9.2.2 | Builds, untested |
BasiliskII | 68k | System 7.0–8.1 | ✅ Tested on System 7.6.1 |
SheepShaver | PowerPC | Mac OS 8.5–9.2.2 | Builds, untested |
AgentBridge requires System 7.0 or later (for Apple Events support).
Quick Start
Pre-built Binaries
Download from the Releases page:
AgentBridge-68k.bin— MacBinary for 68k Macs (System 7–8.1)AgentBridge-68k.dsk— HFS disk image for 68k Macs (System 7–8.1)AgentBridge-ppc.bin— MacBinary for PowerPC Macs (OS 8.5–9.2.2)AgentBridge-ppc.dsk— HFS disk image for PowerPC Macs (OS 8.5–9.2.2)
Setup
Create a shared folder accessible to both your Mac and your modern computer. This can be a NAS share, an emulator's host directory, or any shared filesystem.
Create the directory structure inside the shared folder:
AgentBridge/ └── AgentBridge-YourMacName/ ├── inbox/ ├── outbox/ └── assets/Copy AgentBridge into the folder alongside inbox/outbox/assets.
Launch AgentBridge on the Classic Mac. It will automatically find its folder and start polling for commands.
Send a test command from your modern computer:
printf "BRIDGE 1.0.1\rSEQ 00001\rCMD ping\rTS 20260308T170000\r---\r" > /path/to/shared/AgentBridge-YourMacName/inbox/C00001.msgRead the response:
cat /path/to/shared/AgentBridge-YourMacName/outbox/R00001.msg | tr '\r' '\n'You should see
RESULT pongandSTATUS ok.
Multiple Macs
Each Mac gets its own subfolder with its own copy of AgentBridge:
NAS Share/
└── AgentBridge/
├── AgentBridge-SE30/ ← Mac SE/30 running System 7
│ ├── AgentBridge (app)
│ ├── inbox/
│ ├── outbox/
│ └── assets/
├── AgentBridge-G4/ ← Power Mac G4 running OS 9
│ ├── AgentBridge (app)
│ ├── inbox/
│ ├── outbox/
│ └── assets/
└── AgentBridge-BasiliskII/ ← Emulator
├── AgentBridge (app)
├── inbox/
├── outbox/
└── assets/AgentBridge uses its own launch location as its working directory — no configuration needed.
MCP Server
The MCP server exposes AgentBridge commands as tools for AI agents like Claude. It's a Node.js TypeScript server that communicates via stdio (standard MCP transport).
Install via npm
npm install -g classic-mac-mcpOr run directly with npx (no install needed):
npx -y classic-mac-mcp --config /path/to/fleet.jsonInstall from source
git clone https://github.com/SeanFDZ/agentbridge.git
cd agentbridge
npm install
npm run buildConfiguration
Create a fleet.json file to point at your shared folders:
{
"fleet": [
{
"id": "my-classic-mac",
"alias": "Classic Mac",
"arch": "68k",
"os_version": "7.6.1",
"shared_folder": "/Volumes/NASShare/AgentBridge/AgentBridge-MyMac"
}
]
}Claude Desktop
Add to your Claude Desktop config (claude_desktop_config.json):
{
"mcpServers": {
"classic-mac": {
"command": "npx",
"args": ["-y", "classic-mac-mcp", "--config", "/path/to/fleet.json"]
}
}
}Or if you installed from source:
{
"mcpServers": {
"classic-mac": {
"command": "node",
"args": ["/path/to/agentbridge/dist/server.js", "--config", "/path/to/agentbridge/config/fleet.json"]
}
}
}Protocol
AgentBridge uses a line-oriented key-value text protocol designed for Classic Mac constraints:
No JSON — parseable with ~50 lines of C, zero dynamic memory allocation
CR line endings (Classic Mac native)
MacRoman text encoding (translated to UTF-8 by the MCP server)
32KB max message size
Files named
C00001.msg(commands) andR00001.msg(responses)
Command Format
Commands are text files written to the inbox/ directory, named C{seq}.msg (e.g. C00001.msg). Sequence numbers are zero-padded to 5 digits.
BRIDGE 1.0.1
SEQ 00042
CMD list_windows
TS 20260308T153022
---All lines are KEY value pairs, terminated by --- on its own line. Line endings are CR (0x0D, Classic Mac native). Text encoding is MacRoman (the MCP server handles UTF-8 conversion). Multi-line text uses + continuation lines after the TEXT key. Maximum message size is 32KB.
Response Format
Responses appear in the outbox/ directory as R{seq}.msg, matching the command's sequence number. AgentBridge deletes command files after processing; the MCP server deletes response files after reading.
BRIDGE 1.0.1
SEQ 00042
STATUS ok
COUNT 2
WINDOW 1|?|Untitled|10,40,400,300|front
WINDOW 2|?||0,0,640,480|back
TS 20260308T153022
---STATUS is either ok or error. On error, ERRCODE and ERRMSG fields provide details. Multi-value responses (windows, processes, volumes, files, menu items) use repeated keys (WINDOW, PROCESS, VOLUME, FILEENTRY, MENUBAR, MENUITEM) with pipe-delimited fields.
Heartbeat
AgentBridge writes a heartbeat file in its working directory every ~2 seconds:
BRIDGE 1.0.1
UPTIME 218
TICKS 240498
FRONTAPP Finder
FREEMEM 4096
TS 20260308T173113
---The MCP server monitors the heartbeat file's modification time to determine if AgentBridge is alive.
Building from Source
git clone https://github.com/SeanFDZ/agentbridge.git
cd agentbridge
npm install
npm run buildRequires Node.js 20+.
AgentBridge binaries are available as pre-built downloads — source code is not distributed.
Project Structure
agentbridge/
├── src/ # MCP server (TypeScript, GPLv3)
│ ├── server.ts # MCP tool definitions and handlers
│ ├── fleet.ts # Fleet registry
│ ├── types.ts # Type definitions
│ └── bridge/
│ └── client.ts # Shared folder I/O client
└── config/
└── fleet.json # Fleet configurationDesign Principles
No host-side dependencies. AgentBridge does everything through the Mac Toolbox. There's no SSH, no screen capture, no input injection at the host OS level. This means it works identically on real hardware and emulators.
No system modifications. AgentBridge is a regular application. It doesn't modify your System Folder, install extensions, or change boot configuration. Launch it, quit it, delete it — your Mac is untouched.
Transport agnostic. The protocol is just text files in a folder. How that folder is shared (NAS, AFP, SMB, emulator extfs, USB drive, carrier pigeon) is not AgentBridge's concern.
Cooperative multitasking citizen. AgentBridge yields CPU via WaitNextEvent() every cycle. Other apps run normally.
Stateless commands. Every command is self-contained. The MCP server can crash and restart without the Mac side needing to know.
Credits
AgentBridge 1.0.1 Sean Lavigne © 2026 Falling Data Zone, LLC
Built with Retro68 by Wolfgang Thaller.
Also From Falling Data Zone
MacMind — a single-layer transformer neural network implemented entirely in HyperTalk, trained and running on a Macintosh SE/30. Proof that 1987 scripting can do machine learning.
More apps at apps.fallingdata.zone.
License
This project has two components with separate licenses:
MCP Server (TypeScript, src/ directory) — GNU General Public License v3.0 — free to use, modify, and distribute under GPL terms.
AgentBridge.app (Classic Mac application, source in classic-mac-src/) — modified PolyForm Noncommercial 1.0.0. © 2026 Falling Data Zone, LLC. Pre-built binaries are available for download.
Protocol — the AgentBridge protocol as documented in this README is open.
Available Tools
23 toolsclassic_mac_activate_appA
Bring a running application to the front. Requires AgentBridge.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name (e.g. 'SimpleText') | |
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
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 describes the core behavior (bringing an app to front) but does not disclose what happens if the app is not running, or if the activation fails. The description is adequate for a simple operation but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two short sentences. It is front-loaded with the essential purpose and includes a prerequisite. Every word earns its place without any filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema and full parameter documentation, the description is fairly complete. It specifies the action and a prerequisite. It could mention that the app must already be running, but that is implied. Overall, it provides sufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters having clear descriptions. The tool description adds no additional meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Bring a running application to the front') with a specific verb and resource. It distinguishes from sibling tools like classic_mac_launch_app (which starts an app) and classic_mac_quit_app (which quits an app).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: to activate an already running application. It mentions a prerequisite ('Requires AgentBridge') but does not explicitly state when not to use it or name alternatives. The context is clear enough for a straightforward tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_clickB
Click at screen coordinates on a Classic Mac target. Coordinates are relative to the Mac's screen.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate | |
| y | Yes | Y coordinate | |
| button | No | Mouse button (1=left, default 1) | |
| clicks | No | Number of clicks (1 or 2, default 1) | |
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations to compensate. Description only says 'click' without disclosing that button, clicks, or target parameters affect behavior. For a tool with multiple parameters, more detail is needed (e.g., click-and-release, double-click support).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no redundant information. Front-loaded with the core action and coordinate explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, no annotations, and 5 parameters but description is minimal. Missing information about return values, prerequisites (target must be online), and coordination with other mouse tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 5 parameters with descriptions (100% coverage). Description adds minimal value beyond stating coordinates are screen-relative. No elaboration on button or clicks beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action (click), resource (screen coordinates on Classic Mac target), and distinguishes from siblings like move or type. The verb+resource combination is specific.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives. With 21 sibling tools, explicit context (e.g., 'use this to perform a click instead of a move or key press') would help an agent decide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_get_aboutA
Get system information about a Classic Mac target: OS version, machine type, RAM, free memory, AgentBridge uptime. Requires AgentBridge.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
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 mentions 'Requires AgentBridge' as a prerequisite and lists the information returned, but does not disclose side effects, authorization needs, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long with no wasted words. It is front-loaded with the purpose and followed by specific details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple information retrieval tool with no output schema, the description adequately explains what is returned. However, it lacks usage guidance or error scenarios, which would make it more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the single parameter 'target' has a description). However, the tool description does not add any additional meaning or usage hints beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get' and the resource 'system information' and lists specific items (OS version, machine type, RAM, free memory, AgentBridge uptime). This distinguishes it from sibling tools that perform actions like clicking or listing windows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives or when not to use it. It only states what it does, without contextual cues like prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_get_clipboardC
Read the clipboard (scrap) contents as text. Requires AgentBridge.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must carry full behavioral disclosure. It only mentions 'Requires AgentBridge' and reading text, but does not state if the operation is read-only, has side effects, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two short sentences, front-loading the action. It avoids unnecessary words, but could be slightly more structured with separate sections.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with one parameter and no output schema, the description covers the basic purpose but lacks details like return format, error handling, or behavior when clipboard is empty. It is minimally viable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single optional parameter. The description does not add further meaning beyond the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads clipboard contents as text, using a specific verb and resource. It distinguishes from sibling classic_mac_set_clipboard, which writes. However, it lacks a title and could further clarify what 'scrap' means.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives is provided. The description does not mention scenarios where reading the clipboard is appropriate or any prerequisites beyond 'Requires AgentBridge'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_get_front_windowA
Get detailed info about the frontmost window: title, app, bounds. Requires AgentBridge.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states 'Get detailed info' implying read-only, but does not explicitly confirm no side effects, required permissions, or potential errors. The phrase 'Requires AgentBridge' is a prerequisite, not a behavioral trait. Some transparency is present but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loading the purpose and key outputs. Every word contributes meaning; no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lists the specific information returned (title, app, bounds), which is sufficient for a simple query tool. It does not describe the return format (e.g., JSON), but given the simplicity and no output schema, this is acceptable. The sibling context shows many similar tools, but this one is self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers the one parameter ('target') with description 'Target ID or alias. Optional if only one target is configured.' The tool description does not mention this parameter or add any extra meaning. Since schema description coverage is 100%, baseline is 3, and the description provides no additional value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets detailed info about the frontmost window, listing title, app, and bounds. It uses a specific verb ('Get') and resource ('front window'), distinguishing it from sibling tools like classic_mac_list_windows (which lists all windows) and classic_mac_get_menu_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives. It mentions 'Requires AgentBridge' but provides no guidance on when to use this tool over classic_mac_list_windows (e.g., for the front window vs. all windows). Usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_get_volumesA
List mounted volumes (disks) with free and total space. Requires AgentBridge.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It adds the 'Requires AgentBridge' dependency but does not disclose read-only nature, potential errors, or other behavioral traits. It provides some transparency but is incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, efficient, and front-loaded. Every word adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool, the description is adequate but lacks details on return format (units) and error conditions. It meets minimum viability but has gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with one parameter already described. The description does not add meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'mounted volumes (disks)' with specific data returned ('free and total space'). It uniquely identifies the tool among siblings like list_windows and list_processes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Requires AgentBridge' as a prerequisite but does not provide guidance on when to use this tool versus alternatives or specify exclusions. Usage context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_heartbeatA
Read the heartbeat status of a Classic Mac target. Returns uptime, front app, free memory, and whether the bridge is alive.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It states the tool is a read operation and lists the returned fields, which is adequate but lacks details about potential side effects, failure modes, or performance characteristics. The term 'Read' implies non-destructiveness, but more explicit behavior (e.g., network dependency, real-time nature) would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two efficient sentences: the first states the core purpose, and the second lists the return data. No extraneous words, perfect front-loading of the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with one optional parameter and no output schema, the description covers the essential information: what it does and what it returns. It omits error handling or usage notes, but given the low complexity, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of the parameter (target) with a description, so the baseline is 3. The tool description adds no additional meaning beyond what the schema already provides, simply mentioning 'Classic Mac target' which echoes the resource description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Read') and resource ('heartbeat status of a Classic Mac target'), and lists specific return values (uptime, front app, free memory, bridge alive). This distinguishes it from siblings like classic_mac_ping which also checks aliveness but without the detailed state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool versus alternatives such as classic_mac_ping or classic_mac_list_targets. No explicit context, prerequisites, or exclusions are mentioned, leaving the agent without criteria for tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_key_pressA
Press a key with optional modifiers. Use for keyboard shortcuts (e.g. Cmd+S to save) and special keys (return, escape, arrows).
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key name: a-z, 0-9, return, tab, escape, space, delete, left, right, up, down, f1-f12, or any single character | |
| target | No | Target ID or alias. Optional if only one target is configured. | |
| modifiers | No | Comma-separated modifiers: cmd, opt, shift, ctrl |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses pressing keys with modifiers but lacks details on side effects, failure behavior, permissions, or targeting context (e.g., need for focused target). Basic transparency but could be more thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise, front-loaded sentences with no wasted words. Core action and examples provided efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple key press tool with 3 parameters all described. Missing return value information (e.g., success/failure) but overall sufficient given tool simplicity and schema richness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds examples of keys and modifiers (e.g., Cmd+S) but does not significantly extend beyond schema descriptions. No additional semantics for the target parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Press a key with optional modifiers' and gives specific examples like Cmd+S, return, escape, arrows. It distinguishes from sibling tools like classic_mac_type_text and classic_mac_click.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear use cases (keyboard shortcuts, special keys) and an example (Cmd+S), but does not explicitly state when not to use it or compare with alternatives like type_text or click. Implicit guidance is present but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_launch_appA
Launch an application on the Classic Mac by path or creator code. Creator codes are 4-character identifiers (e.g. 'ttxt' for SimpleText, 'WILD' for HyperCard). Requires AgentBridge.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | HFS path to application (e.g. 'Macintosh HD:Applications:SimpleText') | |
| target | No | Target ID or alias. Optional if only one target is configured. | |
| creator | No | 4-character creator code (e.g. 'ttxt', 'WILD', 'CWIE') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It says 'Launch an application' but does not disclose what happens if the app is already running, potential side effects, permissions, or return behavior. This is insufficient 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states the purpose, second explains creator codes. No wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description does not mention return values (e.g., success, PID). For a launch tool, this is a notable gap. However, all parameters are documented and sibling context is clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and description adds context: creator codes are 4-character identifiers with examples, path is HFS path, target is optional. This adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it launches an application by path or creator code, with examples of creator codes. It is specific and distinct from siblings like 'activate_app' (which activates an already running app) and 'quit_app'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions 'Requires AgentBridge' as a prerequisite and implies two methods (path or creator code). However, it does not explicitly state when to use one over the other or when to consider alternatives like 'activate_app'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_list_folderB
List contents of a folder on the Classic Mac. Returns file names, types, creator codes, and sizes. Path uses ':' as separator (e.g. 'Macintosh HD:Documents'). Requires AgentBridge.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | HFS path using ':' separator (e.g. 'Macintosh HD:System Folder') | |
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries full burden. It mentions 'Requires AgentBridge' but omits permissions, side effects, error behavior, or whether it modifies state. Return values are listed but not behavioral traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences covering purpose, output, and path format. No wasted words, front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, description adequately covers return values and path syntax. Could mention error handling or path validation, but remains complete for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; description adds context on path separator and return values but does not add significant new meaning beyond schema. Baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists folder contents on Classic Mac, specifies return values (file names, types, creator codes, sizes), and notes the path separator. It distinguishes from siblings like classic_mac_list_volumes or classic_mac_list_targets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives (e.g., list_targets, list_windows). The description does not mention scenarios or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_list_processesA
List running applications on a Classic Mac target. Returns app name, creator code, PID, and memory partition. Requires AgentBridge.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the return fields (app name, creator code, PID, memory partition) and the AgentBridge requirement. No negative side effects are implied, which is appropriate for a read-only listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no superfluous information. The description is front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with one optional parameter and no output schema, the description adequately covers the purpose, return values, and a key prerequisite. It could note whether system processes are included, but overall it is complete enough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the schema already describes the 'target' parameter. The description adds no additional meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List') and the resource ('running applications on a Classic Mac target'), distinguishing it from sibling tools like classic_mac_list_windows and classic_mac_launch_app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. It only mentions a prerequisite ('Requires AgentBridge') but offers no context for selection among sibling listing tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_list_targetsA
List all Classic Mac targets in the fleet with their current status, including architecture, OS version, and whether AgentBridge is alive.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It describes output but does not explicitly state read-only nature or other behavioral traits (e.g., rate limits, side effects). Being a list operation, it is likely non-destructive, but this is implied rather than stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, front-loaded sentence with no wasted words. Efficiently conveys purpose and output content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple listing tool with no output schema; description covers returned fields (architecture, OS version, alive status). No omitted information for its complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, so schema covers 100% of specifications. Description adds no parameter info because none exist. Baseline 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states verb 'List', resource 'Classic Mac targets', and includes specific fields (architecture, OS version, AgentBridge alive). Distinct from sibling tools like classic_mac_ping or classic_mac_list_windows.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance. While context implies it is for overview, alternatives like classic_mac_ping for specific targets are not mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_list_windowsA
List all visible windows on a Classic Mac target. Returns window title, owning application, screen bounds, and layer order. Requires AgentBridge.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses the read-only nature (listing windows) and specific return fields (title, app, bounds, layer order). No hidden behaviors or contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with front-loaded purpose and additional details. Every word serves a clear function; no redundancy or vague phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately specifies return content. However, it could mention ordering or pagination details. Still sufficiently complete for a list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema describes the 'target' parameter with 100% coverage. The tool description does not add further meaning to the parameter beyond what the schema already provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all visible windows on a Classic Mac target' with specific verb and resource, and distinguishes from sibling tool 'classic_mac_get_front_window' which targets a single window.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, though the sibling tool set suggests differentiation. It does mention a prerequisite ('Requires AgentBridge') but lacks explicit exclusion or context guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_mouse_dragB
Click and drag from one point to another.
| Name | Required | Description | Default |
|---|---|---|---|
| x1 | Yes | Start X | |
| x2 | Yes | End X | |
| y1 | Yes | Start Y | |
| y2 | Yes | End Y | |
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behaviors but only says 'click and drag'. It omits whether it simulates mouse down/move/up, coordinate system (screen vs window), timing, or blocking behavior. This is insufficient for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence front-loading the action. Every word is necessary; no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (5 params, no output schema, no annotations), the description is too sparse. It fails to explain the drag simulation, coordinate system, or optional target usage, leaving the agent with incomplete context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with basic descriptions (Start X, End X, etc.). The tool description adds 'from one point to another' but no new semantic detail beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('click and drag') and the resource ('from one point to another'), which distinguishes it from siblings like classic_mac_click (just click) and classic_mac_mouse_move (move without clicking).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool vs alternatives, prerequisites, or scenarios where it applies. An agent has no context to decide between drag, click, or move.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_mouse_moveB
Move the cursor to screen coordinates without clicking.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate | |
| y | Yes | Y coordinate | |
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description does not disclose important behavioral details such as whether coordinates are absolute or relative, what happens with out-of-bounds coordinates, or if mouse events are generated. It only states 'without clicking'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that directly communicates the tool's purpose. It is concise and front-loaded, with no superfluous information. However, it could benefit from slightly more detail without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description is incomplete. It fails to specify coordinate units, screen vs. window coordinates, or behavior with multiple displays. For a mouse movement tool, these details are important for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for x, y, and target. The description adds no additional meaning to the parameters beyond what the schema already provides, resulting in a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Move the cursor') and the resource ('to screen coordinates without clicking'). It effectively distinguishes the tool from siblings like classic_mac_click (clicking) and classic_mac_mouse_drag (dragging).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies it is for moving without clicking, but it does not explicitly state when to use it versus alternatives or clarify when the optional 'target' parameter is needed. No guidelines on coordinate system or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_pingB
Ping a Classic Mac target to check if AgentBridge is responding.
| Name | Required | Description | Default |
|---|---|---|---|
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavior fully. It only states the purpose but omits details such as whether the tool is read-only, what the response looks like, or side effects like network timeouts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single-sentence description is maximally concise and front-loads the purpose. Every word is meaningful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should indicate return values (e.g., boolean or error). It lacks details on success/failure indicators, timeout behavior, or how to interpret results, making it incomplete for a diagnostic tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'target' is fully described in the schema (100% coverage). The tool description adds no extra meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Ping' and the resource 'Classic Mac target' with the explicit purpose 'to check if AgentBridge is responding.' This distinguishes it from sibling tools like classic_mac_list_targets or classic_mac_launch_app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for connectivity testing before other operations, but does not explicitly state when to use vs. alternatives (e.g., classic_mac_heartbeat) or provide when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_quit_appB
Quit a running application by name. Requires AgentBridge.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name (e.g. 'SimpleText') | |
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It only states the requirement for AgentBridge but does not describe what happens if the app is not running, multiple instances, or whether the quit is graceful versus forceful, leaving significant gaps 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences and front-loaded with the action. It is efficient, though it sacrifices some informativeness for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (2 parameters, no output schema), the description is minimally adequate but lacks completeness. It does not mention error handling, return values, or behavioral nuances, which are especially needed since no annotations exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (both parameters described in schema). The description adds no additional meaning beyond the schema; it merely restates the parameter descriptions, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Quit') and resource ('a running application by name'), which is specific and distinguishes it from sibling tools like classic_mac_launch_app or classic_mac_activate_app.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only mentions 'Requires AgentBridge' but provides no guidance on when to use this tool versus alternatives, such as force quitting or using system commands, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_send_appleeventC
Send a generic Apple Event to an application. TARGET is app name or creator code, EVENT is the event type (e.g. 'oapp'). Requires AgentBridge.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | Target app name or creator code | |
| event | Yes | Apple Event type (e.g. 'oapp', 'odoc') | |
| params | No | Optional event parameters | |
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavioral traits. It only states the action without side effects, permissions, error handling, or state changes. Sending a generic Apple Event can alter application state and may require specific privileges, which are not mentioned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with no redundant information. It front-loads the core action and includes key details (target, event, dependency) without waste, earning every sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of sending Apple Events and the lack of output schema or annotations, the description is incomplete. It omits success indicators, error handling, return behavior, and contextual constraints, leaving the agent inadequately informed for proper invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds examples ('oapp') and clarifies target as app name/creator code, but mostly restates schema. It provides minimal extra semantic value beyond structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool sends a generic Apple Event to an application, specifying the verb 'send' and resource 'Apple Event'. It provides example event types ('oapp'), but does not explicitly distinguish from sibling tools, though their names suggest different operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like specific app control tools (e.g., classic_mac_launch_app). The description lacks indications of prerequisites beyond 'Requires AgentBridge' and does not mention situations where this tool should not be used.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_set_clipboardA
Set the clipboard (scrap) to the given text. Useful for pasting content into Classic Mac applications. Requires AgentBridge.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to place on clipboard | |
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavior. Mentions 'Requires AgentBridge' but does not disclose that the clipboard is overwritten or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no extraneous words. Front-loaded with the action and purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one required parameter and optional target, the description is nearly complete. Could mention overwriting behavior, but not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Parameter descriptions in schema cover 100% of the parameters. The tool description adds no additional semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'Set' and resource 'clipboard (scrap)' with a specific action. Differentiates from the sibling tool `classic_mac_get_clipboard` by being the write operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context: 'Useful for pasting content into Classic Mac applications.' Does not explicitly exclude alternative tools like `classic_mac_type_text` or `classic_mac_menu_select`.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
classic_mac_type_textB
Type text on a Classic Mac target. Characters are typed one by one. Make sure the correct text field or application is focused first.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to type | |
| target | No | Target ID or alias. Optional if only one target is configured. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions character-by-character typing (implying sequential keystroke simulation), but omits details like error handling, timeout, or behavior when no focus is present. This leaves significant ambiguity for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loading the core action and then a usage tip. Every sentence is essential, and there is no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no output schema, the description is adequate but lacks completeness about return values, error cases, and behavior when the target is invalid. The focus prerequisite is helpful, but more context would improve reliability.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters have schema descriptions (100% coverage), so the baseline is 3. The description adds the behavioral nuance 'characters are typed one by one' which relates to the `text` parameter, providing marginal added value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it types text on a Classic Mac target and specifies the character-by-character nature. It distinguishes from the sibling `classic_mac_key_press` implicitly, but does not explicitly differentiate its use case from pressing individual keys.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a prerequisite ('make sure the correct text field or application is focused first') but does not explain when to use this tool versus alternatives like `classic_mac_key_press` or what the limitations are (e.g., cannot type special keys).
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.
23 tool updates
v1.0.2- First observed
classic_mac_activate_app - First observed
classic_mac_click - First observed
classic_mac_get_about - First observed
classic_mac_get_clipboard - First observed
classic_mac_get_front_window - First observed
classic_mac_get_menu_items - First observed
classic_mac_get_volumes - First observed
classic_mac_heartbeat - First observed
classic_mac_key_press - First observed
classic_mac_launch_app - First observed
classic_mac_list_folder - First observed
classic_mac_list_menus - First observed
classic_mac_list_processes - First observed
classic_mac_list_targets - First observed
classic_mac_list_windows - First observed
classic_mac_menu_select - First observed
classic_mac_mouse_drag - First observed
classic_mac_mouse_move - First observed
classic_mac_ping - First observed
classic_mac_quit_app - First observed
classic_mac_send_appleevent - First observed
classic_mac_set_clipboard - First observed
classic_mac_type_text
TDQS
Scored across 23 tools
Every tool has a clearly distinct purpose, from system info to UI interaction. No two tools overlap in functionality.
All tools follow a consistent 'classic_mac_' prefix with verb_noun snake_case pattern (e.g., classic_mac_list_targets, classic_mac_click).
23 tools cover a comprehensive range of operations for Classic Mac targets without being excessive. Each tool serves a clear need.
Covers system info, process/app control, UI automation, clipboard, file listing, and Apple Events. Minor gaps like file creation/deletion or reading file contents, but core remote control scenarios are well-supported.
Maintenance
Related MCP Connectors
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Shared memory and actions for Claude, Kiro, OpenAI, Cursor, and other MCP-compatible AI clients.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to automate macOS desktop tasks including mouse control, keyboard input, screenshots, window management, and UI interaction.7 npm415MIT
- AlicenseNot gradedqualityAmaintenanceA lightweight MCP server that bridges AI agents and macOS, enabling automation of file navigation, application control, UI interaction, browser automation, and system operations.176MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to control macOS applications through the Accessibility API, AppleScript, and CGEvents, providing structured text output of UI elements and actions without needing screenshots.MIT
- FlicenseNot gradedqualityDmaintenancemacOS MCP server that enables AI agents to directly control the host OS, including mouse, keyboard, windows, files, and accessibility automation for computer-use workflows.1-