Connect Claude to classic Mac MPW shell via emulator. Provides MCP tools for classic Macintosh development environment access, including compilation, file operations, screenshots, and shell command execution.
AppleBridge defines 7 tools with complete JSON schemas and detailed descriptions (averaging 280 chars, well above the 194-char baseline). Tool names follow verb_noun convention (mpw_execute, mac_write_file, mac_read_file, mac_list_files, mac_compile, mac_screenshot, mac_https_get). Schemas include proper type definitions and required fields. However, descriptions are verbose essays optimized for human readers, not LLM selection, they bury key intent under operating lore. Parameter descriptions are present but inconsistent in clarity. Error handling is documented in descriptions but not structured as recovery guides. No tool annotations (readOnlyHint/destructiveHint) despite clear risk levels (WRITE vs READ_ONLY marked in source). Output schemas are not formally documented.
Compile a C source file with MPW's SC, verified by the object file. `success` means the object file is on disk afterwards — NOT that the command returned 0. SC is silent on success and on failure, and its exit status cannot cross the bridge, so the artefact is the only honest oracle. Returns `verified` (was a check possible at all), `errors` and `warnings` from the compiler's own diagnostics, and `remedies` — the project rule that applies to a diagnostic, e.g. a source file with no TEXT type (the usual result of Duplicate out of `Unix:`) names the `SetFile -t TEXT -c 'MPS '` fix. When no object appeared, and only then, ToolServer is probed once: the resulting `toolserver_alive` separates "ToolServer is gone" from "ToolServer is alive and rejected your input". Output defaults to source.o (foo.c -> foo.o). Passing -o inside `options` hides the path from this tool, which then reports `verified: false` rather than checking a guess.
Fetch an https:// URL FROM THE GUEST — the classic Mac does the TLS itself. Drives `httpsget`, a 68K application (Retro68 + Crypto Ancienne) that speaks TLS 1.2/1.3 over the MacTCP driver API, verifies the server's certificate chain against a built-in root bundle (13 public roots; subject checked against the host name), performs an HTTP/1.0 GET and streams the response to a file. This tool resolves the host name on the host side (the app takes an IP), writes the request file, launches the app, waits for its log to carry this request's nonce, and reads the response back. Expect seconds, not milliseconds: on an emulated 68030 a verified TLS 1.3 handshake is 3–6 s (a HelloRetryRequest to P-521 plus three RSA verifies), a P-256/X25519 handshake under a second; real hardware is slower again. The reply carries the guest's own timings in ticks (60/s) so the cost is visible. Redirects are NOT followed — a 3xx comes back as such with its Location. The body is returned as text when the content type is text/* or JSON (decoded per its charset), otherwise base64. A certificate that does not verify e
Descriptions are verbose essays (280+ chars) optimized for human readers, not LLM selection. Key intent ('Execute MPW command', 'Write file') is buried under operating lore and gotchas. LLMs need 50-200 char summaries stating WHAT, WHEN, and WHY to use the tool.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels marked in source (WRITE vs READ_ONLY). LLMs cannot infer which tools are safe to retry or have side effects.
Output schemas are not formally documented. Callers cannot predict what fields to expect (e.g., mac_compile returns 'verified', 'errors', 'warnings', 'remedies', 'toolserver_alive', but this is only in prose, not schema).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
List files in a Mac directory. Returns detailed file listing including type, creator, size, and dates. Path uses : separator and should end with : for directories.
Read a text file from the Mac filesystem. Path uses : separator. Returns file content as string. Uses MPW's Catenate command internally.
Capture a screenshot of the emulated Mac screen. Returns a base64-encoded PNG of the current desktop. Pass `region` as [x, y, width, height] (screen pixels, origin top-left, screen is 1024x768) to capture only that rectangle — the guest crops BEFORE the transfer (daemon 0.8d46+), so a dialog-sized region costs a fraction of a full frame on the bridge, not just in the reply. Consecutive full-screen captures send only the rows that changed (row delta), so the second look at an unchanged screen is nearly free. The reply's `encoding` (raw/packbits/delta), `wire_bytes` and `elapsed_ms` say what the capture cost on the guest->host leg.
Write a text file to the Mac filesystem. Path uses : separator (e.g., "MeinMac:Temp:myfile.c"). Content is converted to MacRoman with CR line endings. Goes through the daemon's native WRITEFILE verb, so it needs no ToolServer and multi-line content is safe. Returns the byte count actually sent, which differs from len(content) when a character does not survive MacRoman.
Execute a command in MPW/ToolServer on the classic Mac. The raw escape hatch: the command is sent exactly as written and never rewritten. That also means `status: 0` here says only that the Apple Event was DELIVERED — an MPW tool's own exit status never crosses the bridge, and its stderr stays inside ToolServer. `SC`, `Asm`, `Link`, `Rez` and `SetFile` print nothing on success and nothing on failure, so an empty reply from one of them is not evidence of anything. A `hint` field is attached when that applies. To get a real answer, either verify the artefact (`Exists <path>`), or capture diagnostics with MPW's `≥` operator — as TWO commands, never one line: SC file.c -o file.o ≥ err.txt (one call) Catenate err.txt (the next call) Both on one line comes back empty. Never `2>&1`; it crashes the shell. For a compile, prefer `mac_compile`, which does all of this and judges by the object file. Use MPW syntax: - Paths use : separator (e.g., "MeinMac:Folder:File.c") - Common commands: Directory, Files, Echo, SC (compile), ILink (link) - ToolServer returns stdout; MPW Shell replies empty (its output goes to the Worksheet window instead) Examples: - Directory - show current directory - Files "MeinMac:Temp:" - list files - Echo "hello" > "MeinMac:Temp:test.txt" - write file
Error handling is described in prose but not structured as recovery guides. Descriptions mention 'ToolServer is gone' vs 'ToolServer is alive and rejected' but do not tell LLMs what action to take next (retry, ask user, abort).
mac_https_get description is truncated mid-sentence ('A certificate that does not verify e'). Incomplete descriptions prevent LLMs from understanding tool behavior and constraints.