Skip to main content
Glama

Server Details

Cloud Macs with Xcode for AI agents: run commands, build and test iOS apps, see and use the screen.

Ownership verified
Status
Healthy
Uptime
100.0% over 24 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.8/5.0

Scored across 20 tools

Disambiguation4/5

Most tools target clearly distinct resources and actions, but several adjacent areas require careful reading: screenshot_mac, open_mac_desktop, and mac_recording all concern viewing/using the screen, while create_mac_link and get_mac_file_link form a link lifecycle that could be confused. get_mac_checkout is also misleadingly named because it creates a checkout link rather than retrieving one.

Naming Consistency4/5

The dominant pattern is verb_mac_noun or verb_mac, with good snake_case consistency throughout. Deviations like mac_input and mac_recording (noun-first) and install_secrets/report_issue/request_secret (no mac qualifier) prevent a perfect score, but the set remains largely predictable.

Tool Count3/5

Twenty tools is heavy for the apparent scope, even though the domain is broad and most tools map to distinct operations. This lands in the borderline range where consolidation or clearer grouping would improve discoverability.

Completeness4/5

Coverage is strong across session lifecycle, command execution and job control, file read/write/link transfer, GUI input, screenshots, recording, secrets, credits, and support. Minor gaps exist, such as no explicit directory listing or file delete and no dedicated secret deletion/list operation, but these are mostly workable via exec_mac and session details.

Available Tools

20 tools
cancel_mac_jobStop a command on a MacA
Destructive
Inspect

Stops a running command and everything it started: SIGTERM, a second, then SIGKILL. It comes back exited with reason cancelled, its output so far still readable; a command that already ended comes back unchanged (cancelled: false). For a hung build, an endless test run or a server no longer needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesCommand job ID (job_…) returned by exec_mac.
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only flag destructiveHint=true and idempotentHint=false; the description goes well beyond them by disclosing the exact escalation (SIGTERM, a one-second grace, then SIGKILL), the resulting state (exited/cancelled), that partial output remains readable, and the no-op case for an already-finished command.

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 with zero filler, and the most decision-relevant fact (what gets killed and how) is front-loaded.

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

Completeness5/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 compensates by describing the return state ('comes back exited with reason cancelled', 'cancelled: false'), and it covers the destruction semantics an agent needs before firing a destructive call.

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 job_id and session_id are already fully documented in the schema; the description adds no further parameter meaning (e.g., session scoping rules). Baseline 3 applies when the schema carries the load.

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 ('Stops a running command and everything it started') and scopes the blast radius to the process tree, which clearly separates it from exec_mac and get_mac_job among the siblings.

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 concrete when-to-use conditions: 'For a hung build, an endless test run or a server no longer needed.' It does not name an alternative tool or state when not to cancel, but the trigger scenarios are clear enough to route the agent.

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

exec_macRun a command on a MacA
Destructive
Inspect

Runs an argv command on the Mac as the agent user. Waits up to wait_seconds (default 20, max 50): a command that ends in time returns exit_code, stdout and stderr (first 64 KiB each); a longer one returns a job that keeps running (get_mac_job). Shell syntax needs ["/bin/bash", "-lc", "..."]. A command is at most 64 KiB. The same request_key and arguments return the same job, never a second run. A command ends with what it started; ["nomac-service", "start", "api", "--", ...] keeps a server running.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoFolder to run in: relative to the workspace (the default), ~/… or absolute, such as ~/drive/src/app.
argvYesCommand and arguments, for example ["bash", "-lc", "xcodebuild -list"].
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.
request_keyYesIdempotency key you choose (8-128 letters, digits and - _ . :). Repeat a lost call with the same key and arguments; a new key is new work.
wait_secondsNoWait this long (0-50, default 20; 40 for builds and tests) for the command to finish and return its output in this call.
timeout_secondsNoStop the command after this many seconds (1-3600, default 300). Builds and test runs: up to an hour.

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint, openWorldHint, idempotentHint=false), the description discloses output truncation (first 64 KiB each of stdout/stderr), the 64 KiB command cap, job continuation semantics, and that the same request_key+arguments return the same job rather than a second run. This is rich behavioral context an agent needs to invoke it safely.

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?

The core action is front-loaded and each sentence carries distinct information (timeout behavior, job fallback, shell syntax, size limits, idempotency, process lifetime). It is dense but none of the content is redundant, though the final sentence takes a second read to parse.

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

Completeness5/5

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

For a complex 6-parameter tool with no output schema, the description covers what returns on success (exit_code, stdout, stderr), what happens when it doesn't finish (a job retrieved via get_mac_job), the size limits, and idempotency. Nothing essential to calling it 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 the schema already documents all six parameters with defaults, ranges and formats. The description reinforces wait_seconds behavior and request_key idempotency but adds little per-parameter detail beyond what the schema already states, making the baseline 3 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?

The first sentence states a specific verb and resource: 'Runs an argv command on the Mac as the agent user.' It also distinguishes the tool from siblings by naming get_mac_job for commands that outlive the wait window, so an agent can tell exec_mac apart from job-retrieval tools without opening a schema.

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?

It gives concrete when-to-use guidance: wait_seconds default/max, get_mac_job for longer commands, ['/bin/bash', '-lc', '...'] for shell syntax, and the nomac-service pattern for long-running servers. Context is clear, though it doesn't state explicit exclusions (e.g. when to prefer write_mac_file over running a command).

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

extend_macKeep a Mac running longerAInspect

Raises a running Mac's time limit by minutes (default 60, up to 8 hours since it started) and its spend cap with it: for a stop_notice at the time limit or spend cap, or a build that needs longer. It adds no credit; the Mac bills $0.80 an hour while it runs.

ParametersJSON Schema
NameRequiredDescriptionDefault
minutesNoMinutes to add to the time limit, 1-480. Default 60.
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare this is a non-destructive, non-idempotent write (readOnlyHint=false, destructiveHint=false, idempotentHint=false). The description adds real behavioral value beyond that: it clarifies no credit is added, that the spend cap moves with the time limit, and that the Mac bills $0.80/hour while running. It does not describe failure modes (e.g., extending a Mac that isn't running).

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?

Dense but front-loaded: the core action leads and the cost caveat trails. The colon-separated clause list is slightly run-on, but every clause (default, cap, cost) carries 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?

With only two fully-documented parameters and no output schema, the definition covers what an agent needs to invoke it, including cost implications. It omits what happens if the Mac is not running or what the response returns, which are minor given the simple surface.

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%, so both parameters are already fully documented, including defaults, bounds (1-480), and the ses_ pattern. The description restates the default of 60 and the 8-hour ceiling but adds no syntax or semantics beyond the schema.

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 precise verb+resource+effect: it raises a running Mac's time limit by minutes and raises the spend cap with it. An agent can distinguish this from siblings like start_mac, stop_mac, or get_mac_session without opening any schema.

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 concrete triggering conditions: a stop_notice at the time limit or spend cap, or a build that needs longer. It does not explicitly name an alternative tool or a when-not-to-use case, but the usage context is clear.

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

get_mac_checkoutGet Mac credit payment linkAInspect

Creates a checkout link for prepaid Mac credit, for the human to open and pay in their browser; it never charges anything itself. Credit comes in $10 packs (12.5 hours each), 1 to 10 per purchase, never expires, and bigger purchases earn bonus credit; the answer says what to suggest. The same request_key returns the same checkout.

ParametersJSON Schema
NameRequiredDescriptionDefault
packsNoNumber of $10 packs, 1-10 (default 1), from the human's budget or expected hours
request_keyYesIdempotency key you choose (8-128 letters, digits and - _ . :). Repeat a lost call with the same key and arguments; a new key is new work.

TDQS

A3.9/5.0
Behavior4/5

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

Goes well beyond the annotations by disclosing that the tool never charges anything itself, that credit comes in $10 packs (12.5 hours), never expires, and earns bonus credit at higher tiers, plus that the response 'says what to suggest'. The keyed idempotency statement ('the same request_key returns the same checkout') sits in mild tension with idempotentHint=false, though the description's 'a new key is new work' framing explains the annotation.

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?

Front-loads the core action and side-effect disclaimer in the first clause, then packs constraints, pricing, and idempotency into a dense but readable single block. Slightly overstuffed — the pricing/tier detail is close to surplus for tool selection — but every sentence carries 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 2-parameter tool with no output schema, it covers the action, the side-effect boundary, the pricing model, idempotency, and hints at the response content ('the answer says what to suggest'). Remaining gaps are minor, e.g. checkout link lifetime or whether human presence is required.

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%, so both parameters are already documented and the baseline is 3. The description adds only marginal meaning over the schema (hours-per-pack and bonus context for 'packs'), while request_key semantics largely restate the schema.

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 concrete verb and resource: it 'Creates a checkout link for prepaid Mac credit', which usefully corrects the misleading 'get_' name and clarifies it 'never charges anything itself.' It does not explicitly name or route against siblings such as get_mac_credits or create_mac_link, so it stops short of full differentiation.

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 clear context for use: the link is 'for the human to open and pay in their browser', and it explains the purchase shape (1-10 packs per purchase). There are no exclusions or named alternatives, e.g. what to call when the human just wants to see an existing balance.

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

get_mac_creditsGet Mac credit balanceA
Read-only
Inspect

Returns the prepaid Mac credit: spendable dollars and spendable_seconds (the Mac time it buys), amounts held by a running Mac, pricing, recent purchases and first_purchase. Under an hour left, it adds low_credit with what to buy. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the trailing 'Read-only' adds no credit. However, the description goes beyond them by disclosing the conditional low_credit field with purchase guidance when under an hour remains, plus the set of returned fields in the absence of an output schema.

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 dense but front-loaded sentences: the primary return payload comes first, the conditional low_credit behavior second, and the trailing 'Read-only' is the only expendable clause. No filler.

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

Completeness5/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 carries the full burden of describing return values and does so thoroughly (spendable dollars, spendable_seconds and its meaning, held amounts, pricing, recent purchases, first_purchase, conditional low_credit). An agent knows exactly what to expect from a call.

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 the schema imposes no burden and the baseline is 4. There is nothing further the description could meaningfully add on this dimension.

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 ('Returns the prepaid Mac credit') and enumerates the concrete contents of that resource (spendable dollars, spendable_seconds, held amounts, pricing, purchases). This clearly separates it from siblings like get_mac_checkout, get_mac_job, and get_mac_session.

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?

Usage is implied rather than stated: an agent can infer this is the balance-check tool, and the 'under an hour left' clause hints at a pre-flight check before exec_mac or start_mac. But no explicit when-to-use, prerequisites, or named alternatives are given.

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

get_mac_jobGet Mac command statusA
Read-only
Inspect

Returns a command's state (running, exited or failed) and exit code, and once it has ended its stdout and stderr (first 64 KiB each, with a cursor when more follows). stream with cursor reads a chunk from any point, also while it runs. wait_seconds (up to 40) waits for it to end, so one call replaces a polling loop. It never runs the command again. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoByte offset to read from: next_cursor of the last read (default 0)
job_idYesCommand job ID (job_…) returned by exec_mac.
streamNoRead this stream as a chunk from cursor, also while the command runs
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.
wait_secondsNoWait up to this long (0-40) for a running command to finish, instead of polling.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds real behavioral context beyond that: 64 KiB truncation per stream, a cursor returned when more data follows, the 40s wait cap, and the guarantee it will not re-run the command. It omits details like ordering/consistency of stream reads, keeping it short of 5.

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?

Dense but front-loaded: state/exit code/streams come first, then the cursor and wait mechanics, then the read-only guarantee. Every sentence carries distinct information with no padding.

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

Completeness5/5

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

No output schema exists, so the description correctly explains what is returned (state, exit code, stdout/stderr, cursor). Combined with the annotations covering the safety profile and the 100% schema coverage, an agent has everything needed to call it correctly.

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%, so all five parameters are already documented in the schema. The description reinforces cursor/stream/wait_seconds behavior and adds the nuance that streaming works 'also while it runs,' but adds little beyond the schema's own parameter text. 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 and resource: returns a command's state (running, exited, failed), exit code, and stdout/stderr. An agent can immediately distinguish it from exec_mac (which runs commands) because the description explicitly says it never runs the command again.

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?

Explains the two usage modes clearly: stream+cursor to read chunks (even while running) and wait_seconds to avoid a polling loop. It also clarifies the read-only, non-re-executing nature. It stops short of naming alternative sibling tools (e.g. cancel_mac_job) or exclusions, so not a 5.

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

get_mac_sessionGet Mac sessionA
Read-only
Inspect

Returns a Mac session: state (queued, provisioning, ready, stopping, stopped or failed), cost, deadlines and cleanup_confirmed; once ready, also the image (macOS, Xcode, Simulator runtimes, tools), the secrets and signing files installed on it by name, and the Mac's account and drive. wait_seconds (up to 40) waits for a starting or stopping Mac to change state. include adds the account's recent sessions, its drive (space, versions, saves) or its secret names. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoAlso return the account's: sessions (its 20 newest, to find a Mac after a lost answer), drive (~/drive: space, versions, saves), secrets (names only, not values)
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.
wait_secondsNoWait up to this long (0-40) for a starting or stopping session to change state, instead of polling.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower, yet the description still adds value: it enumerates the state machine values, discloses that the call can block for up to 40 seconds, and notes that installed secrets are returned by name only, not values. It omits error/not-found behavior, which is the main remaining 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?

It is a single dense paragraph that front-loads the return shape before moving to the two behavioral parameters, and nearly every clause carries information. It is longer than a minimal definition and reads as a run-on of semicolon-joined clauses, which costs a point but not much.

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 correctly carries the return-value burden and does so thoroughly, including conditional content ('once ready, also the image...'). It stops short of covering failure modes and whether/when the returned image data is absent, which would round out a read tool with three optional parameters.

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 all three parameters are already documented in the schema, including the include enum rationale and the session_id default of 'the account's running Mac.' The description largely restates that material (wait window, include contents) rather than adding new syntax or constraints, so the 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?

It states a precise verb and resource ('Returns a Mac session') and then enumerates the returned payload: state with its full enum, cost, deadlines, cleanup_confirmed, and the ready-state image/secrets/drive. That level of detail distinguishes it from siblings like get_mac_checkout or get_mac_job without opening either schema.

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?

It gives real usage context: 'wait_seconds (up to 40) waits for a starting or stopping Mac to change state' (i.e. use this instead of polling) and 'include adds the account's recent sessions... to find a Mac after a lost answer.' It does not, however, name an alternative tool or state when a sibling such as get_mac_checkout is the better choice.

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

install_secretsInstall secrets on a MacA
Destructive
Inspect

Installs the account's secrets and signing identities on a running Mac now: every-Mac secrets, the on-request ones named in names, and removes deleted ones. A Mac gets every-Mac secrets on its own when it becomes ready; call this after the human adds or changes one.

ParametersJSON Schema
NameRequiredDescriptionDefault
namesNoSecrets set to only when asked to install too, by name; every-Mac secrets are always installed
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description nonetheless adds useful detail beyond them: it removes deleted secrets, installs on a running Mac immediately, and is a manual trigger after human changes.

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 tight sentences, front-loaded with the action and scope before the nuance. No filler, though the second sentence could be marginally tighter.

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 mutating tool with no output schema, the description covers what it does, when to invoke it, and the destructive/removal side effect. It omits edge cases such as behavior when no Mac is running, but nothing critical is missing for correct invocation.

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%, so both names and session_id are already documented in the schema. The description echoes the names semantics ('on-request ones named in names') but adds no syntax, format, or behavior beyond what the schema provides, and does not mention session_id at all – baseline 3.

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 (installs), concrete resources (secrets and signing identities) and a precise scope (on a running Mac, now). It is clearly separable from sibling request_secret, which requests rather than installs.

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 trigger: 'call this after the human adds or changes one,' and explains the alternative path (a Mac gets every-Mac secrets automatically on ready), which tells the agent when NOT to call. It stops short of naming a competing tool explicitly, so 4 rather than 5.

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

mac_inputType and click on a MacA
Destructive
Inspect

Sends real keyboard and mouse input, as a person at the Mac would, also on the lock screen and in password dialogs. action: type (text), key (keys such as return or cmd+q), click, move or scroll (x, y), password (types the login password into the focused field), unlock (a locked screen) or size. Answers with a screenshot unless screenshot is false. A retry types again.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoFor click, move and scroll: from the left, as in screenshot_mac's image (1440 wide).
yNoFor click, move and scroll: from the top, as in screenshot_mac's image (900 high).
keysNoFor key: names or combinations, pressed in order, like ["cmd+a", "backspace"]
textNoFor type: up to 500 characters; for longer text, pbcopy it with exec_mac, then key cmd+v
stepsNoFor scroll: negative up, positive down
actionYestype, key, click, move, scroll, password (types the Mac's login password), unlock (opens a locked screen) or size.
buttonNoFor click: left (default) or right.
doubleNoFor click: true for a double click.
screenshotNofalse skips the screenshot taken after the input (default true).
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructive=true, openWorld=true and non-idempotent, so the safety profile is covered. The description adds genuinely non-redundant traits: it operates on the lock screen and in password dialogs, it returns a screenshot unless suppressed, and 'a retry types again' warns that repeating the call duplicates input rather than being idempotent.

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 front-loaded sentences that state capability, then action-to-parameter mapping, with zero filler. The action list is dense but each item earns its place by mapping an enum value to its parameter.

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?

There is no output schema, and the description compensates by stating that the call answers with a screenshot unless screenshot=false. For a 10-parameter, open-world GUI automation tool the coverage is solid, though coordinate scaling and session defaulting are left to the schema.

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?

With 100% schema description coverage, the baseline is 3, and the description largely restates what the schema already documents (action meanings, screenshot toggling, x/y coordinate reference). It adds no syntax or format detail beyond the schema.

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?

It names a specific verb and resource ('Sends real keyboard and mouse input, as a person at the Mac would') and immediately scopes the capability to the lock screen and password dialogs, which separates it from shell-oriented siblings like exec_mac. The action enumeration makes the full surface of the tool visible 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 Guidelines4/5

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

It tells the agent the concrete situations this tool is for (lock screen, password dialogs, GUI interaction) and even routes one case away: long text should be pbcopy'd with exec_mac and pasted with cmd+v. It does not state an explicit when-not against exec_mac for general command execution, 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.

mac_recordingRecord a Mac's screenAInspect

Records the Mac's screen as an MP4. action start begins it (target screen, the default, or simulator for the iOS Simulator's window) and returns at once; it stops by itself after max_seconds. action stop saves it and returns its length, size and a download link (url for a browser, download_url for curl) that keeps working after the Mac stops; a repeat is safe. One recording at a time; stopping the Mac deletes an unsaved one.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNostart: where to save the MP4 on the Mac (default /tmp/nomac-recordings/)
actionYesstart or stop the recording
targetNostart: screen (default), the whole desktop, or simulator, the iOS Simulator's window
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.
max_secondsNostart: stop by itself after this many seconds (1-1800, default 300)

TDQS

A4.1/5.0
Behavior5/5

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

Adds substantial context beyond annotations: it discloses the two-phase lifecycle (start returns immediately, stop finalizes), the auto-stop behavior after max_seconds, that the download link persists after the Mac stops, a concurrency limit ('one recording at a time'), and a data-loss risk ('stopping the Mac deletes an unsaved one'). None of this is inferable from the annotations.

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?

Front-loaded with the purpose, then organized by action (start vs stop) followed by constraints. It is information-dense and mostly earns its sentences, though the middle is somewhat run-on with parenthetical asides.

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

Completeness5/5

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

Despite no output schema, the description covers the return values of stop (length, size, url for browser, download_url for curl), the persistence of the link, and the full stateful lifecycle. An agent has everything needed to invoke start and stop correctly and to handle the results.

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 all five parameters (path, action, target, session_id, max_seconds) are already fully documented in the schema. The description restates target and max_seconds semantics but adds no new syntax or format detail 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 + resource: 'Records the Mac's screen as an MP4,' which is unambiguous and inherently distinguishable from the static-image sibling screenshot_mac. It stops short of naming or contrasting any sibling explicitly, so it falls just below a 5.

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?

Clearly explains the two operating modes: action start begins and returns at once, action stop saves and returns metadata. It gives the context for choosing start vs stop and screen vs simulator, but offers no guidance on when to use this tool instead of screenshot_mac or other capture tools.

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

open_mac_desktopOpen Mac desktopA
Read-only
Inspect

Returns a link to the Mac's full desktop in the human's browser, with mouse and keyboard, for seeing or clicking something on it (Xcode, the Simulator, a sign-in window). They sign in to nomac.app to open it; it disconnects after 15 minutes without input. Works on a ready Mac. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the annotations, the description discloses that a human signs in at nomac.app, that the link is browser-based with mouse and keyboard, and that the session disconnects after 15 minutes without input. This adds useful behavioral context on auth flow and timeout. It does not cover all possible operational details, but with annotations already declaring read-only safety, the additional disclosure is substantive.

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?

The description is compact and front-loaded: it leads with what is returned and why, then adds sign-in, timeout, readiness, and safety details in a tight sequence. There is no wasted text.

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

Completeness5/5

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

For a single-parameter tool with full schema coverage and no output schema, the description covers what the tool returns, who interacts with it, the timeout behavior, and the readiness prerequisite. An agent has enough to call it appropriately without needing more.

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?

There is only one optional parameter, and the schema already documents session_id with 100% coverage. The description does not add format or semantic detail beyond what the schema provides, so the baseline 3 is 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?

The description gives a specific verb and resource: it returns a browser link to the Mac desktop with mouse and keyboard. It clearly frames the tool as human-interactive rather than agent-executed, which helps distinguish it from siblings like exec_mac and screenshot_mac, though it does not explicitly name an alternative.

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?

It states the intended use case clearly: seeing or clicking things like Xcode, the Simulator, or a sign-in window. It also notes the prerequisite that the Mac must be ready. It stops short of naming when-not-to-use cases or explicit alternatives, so it is strong but not exhaustive.

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

read_mac_fileRead a file on a MacA
Read-only
Inspect

Reads a file on the Mac, up to max_bytes (default 1 MiB, max 3 MiB): text as text, PNG, JPEG, GIF and WebP whole as an image, other files as base64; a larger binary file comes back as its size and details only. Relative paths are in the workspace. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile to read. Relative paths are in the session workspace; ~ is the home folder.
max_bytesNoRead at most this many bytes (default 1 MiB, max 3 MiB).
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's trailing 'Read-only' is confirmatory rather than additive. It does add real behavioral context beyond annotations: format-dependent return shapes (text vs image vs base64), the truncation-to-metadata fallback for oversized binaries, and the default/max byte caps.

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 dense sentence with the return modes front-loaded after the core action. Every clause carries information (size caps, format branches, path resolution, safety), and there is no filler.

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?

Since there is no output schema, the description must explain return values and it does thoroughly via the format branches. It omits error behavior (missing file, permission denial) and whether truncation is signalled, which are minor gaps for a read-only tool.

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 every parameter is documented in the schema, including the same default/max byte values and path-resolution note the description repeats. Baseline 3 is appropriate since the description adds essentially nothing new for parameters.

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+resource (reads a file on the Mac) and disambiguates from the sibling write_mac_file by scope and read-only nature. An agent can distinguish it from get_mac_file_link and screenshot_mac from the stated behavior alone.

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?

Usage is implied by the tool name and the described return modes, but there is no explicit when/when-not guidance or pointer to siblings (e.g., use get_mac_file_link for large binaries, or screenshot_mac for screen content). The agent must infer the alternative.

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

report_issueReport an issue to NoMac supportAInspect

Sends NoMac support an error the tools could not resolve, with the Mac (session_id, job_id) or build (ref_id) it is about; repeats are merged, and email asks for a direct reply. kind feedback sends a note instead. Without description, returns support's replies.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoproblem (default): an error for support to answer. feedback: a note on what got in the way or was missing; it needs no answer. Leave out code, secrets and personal data.
emailNoOptional address for a direct reply from NoMac support. Only when the user asks for one.
job_idNoCommand job ID (job_…) the issue is about.
ref_idNoBuild ID or other NoMac reference the issue is about.
session_idNoMac session ID (ses_…) the issue is about.
descriptionNoWhat went wrong, including the tool, arguments and error you saw. Omit it to read replies to earlier reports.

TDQS

A4.2/5.0
Behavior4/5

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

Goes well beyond the annotations: it discloses that repeats are merged, that supplying email requests a direct reply from support, and that omitting the description turns the same tool into a read of support's replies — an important non-obvious dual behaviour for a tool flagged readOnlyHint=false. It does not say whether reports are visible to other users or what happens after submission, so it stops short of a 5.

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?

Three short sentences front-load the action and pack in the dedup rule, email semantics, feedback variant and read mode with no filler. The compressed semicolon style is dense but every clause carries a distinct fact.

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 correctly covers the return behaviour (support's replies when called without a description). The only gap is that with zero required parameters it never states the minimum viable call — e.g. whether at least one of description or an identifier is needed to file versus read.

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%, so each parameter is already documented in the schema; the description mainly restates the Mac-vs-build split for session_id/job_id versus ref_id. It adds the useful framing that these identify what the issue is about, but no format or mutual-exclusion guidance beyond the schema. 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 and resource (sends NoMac support an error) plus the payload it carries (session_id/job_id for a Mac, ref_id for a build), so the agent knows exactly what the call does. No sibling tool overlaps this purpose, and the feedback variant and read-replies mode are distinguished inline.

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?

"An error the tools could not resolve" gives a clear trigger condition, and "kind feedback sends a note instead" routes the alternative case. What is missing is an explicit when-not (e.g. don't file reports for ordinary user input mistakes) and whether identifiers are truly optional.

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

request_secretAsk the person for a secretAInspect

Creates a link where the human enters a secret in their browser, so its value never passes through the chat: a token, a .env value, a .p12 or a config file. The link works once, within 24 hours, with no NoMac account. Once entered, new Macs receive it, and install_secrets puts it on a running one.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindYesvariable: one line of text, set as an environment variable on the Mac; file: any bytes, stored as a file
nameYesA variable's name (letters, digits, underscores, like SENTRY_AUTH_TOKEN) or a file's name (like GoogleService-Info.plist)
deliveryNoevery_mac (default) or on_request: only when install_secrets names it
descriptionYesWhat the person should enter and why, in plain words; shown to them on the page
destinationNoFiles only: where on the Mac, like ~/.netrc

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare the generic safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=false). The description goes well beyond them with lifecycle facts an agent could not otherwise infer: the link is single-use, expires in 24 hours, requires no account, and its value never transits the chat.

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 dense sentences, zero filler. The core mechanism (browser link, never through chat) is front-loaded, and the delivery behavior follows in the second sentence where it belongs.

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 multi-step, asynchronous human-in-the-loop tool with no output schema, the description covers the important mechanics: what is produced, its lifetime, who receives it, and the follow-up tool for running Macs. The one gap is not stating what the agent receives back (presumably the link to hand to the human), which is the agent's immediate next step.

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 every parameter, including both enums and the destination field. The description's concrete examples (token, .env value, .p12, config file) loosely illustrate the kind enum but add no syntax or format 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.

Purpose5/5

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

The description states a specific action and artifact: it 'Creates a link where the human enters a secret in their browser,' and immediately distinguishes this from the sibling install_secrets, which 'puts it on a running one.' An agent can tell this apart from the exec/write/read siblings without inspecting any schema.

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?

It gives clear contextual routing: new Macs automatically receive the secret, while already-running Macs require install_secrets. It does not state explicit exclusions versus siblings like mac_input for one-off prompts, but the use context (out-of-band secret entry, never through chat) is unambiguous.

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

screenshot_macSee a Mac's screenA
Read-only
Inspect

Returns the Mac's screen as an image: target screen (default) is the 1440x900 desktop, whose pixels are mac_input's coordinates; target simulator is the booted iOS Simulator. Also returns front_app, screen_locked, an open dialog with its buttons and next_step, and the JPEG's path on the Mac. Works on a ready Mac. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoscreen (default): the whole macOS desktop. simulator: the booted iOS Simulator's display.
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), so the bar is lower; the description adds genuine context beyond them by listing what is returned (front_app, screen_locked, open dialog with buttons/next_step, JPEG path) and the 1440x900 resolution and coordinate mapping. It stops short of explaining latency, caching, or freshness behavior.

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 front-loaded sentences that lead with the core action, then the return payload and prerequisite. Every clause earns its place, with no redundant restatement of the title.

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?

There is no output schema, so the description correctly compensates by enumerating the return fields and the JPEG path. Combined with the target modes and the 'ready Mac' prerequisite, an agent has enough to invoke it correctly, though return semantics (e.g., when a dialog is present vs null) remain implicit.

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?

Schema coverage is 100% so the baseline is 3, but the description adds real meaning beyond the schema: it specifies that target=screen is the 1440x900 desktop whose pixels map to mac_input's coordinates, and that simulator is the booted iOS Simulator. This coordinate-mapping detail is not present in the schema.

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 ('Returns the Mac's screen as an image') and enumerates both target modes with their scope. It also positions itself against the sibling mac_input by noting the screen pixels are mac_input's coordinates, so an agent can tell what it does and how it relates to neighbors.

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?

Gives a prerequisite ('Works on a ready Mac') and explains the two target choices, which implies when each is appropriate. However, it never names an alternative tool or an explicit when-not condition (e.g., screenshot vs mac_recording), leaving routing to inference.

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

start_macStart a cloud MacAInspect

Starts a cloud Mac with macOS, Xcode and the iOS Simulator, billed from prepaid credit at $0.80 an hour by the minute; it is usually ready within a minute (get_mac_session with wait_seconds). It is fully enabled for the agent: no administrator prompts, and the login password is in $NOMAC_MAC_PASSWORD; access opts out. The account's drive at ~/drive is on it, kept between sessions. Answers insufficient_credit when credit is short, and session_limit_reached with the running Mac's id while one runs. The same request_key returns the same Mac.

ParametersJSON Schema
NameRequiredDescriptionDefault
accessNoOptional, over the account's defaults (fully enabled): prompts ask keeps macOS's usual prompts; permissions grants apps privacy permissions at start, also one built later ({"com.example.App": ["camera"]} or "all"); gatekeeper off or on; drive none starts without ~/drive.
limitsNoOptional caps: max_duration_seconds (60-28800, default 2 hours), spend_cap_microunits (USD × 1,000,000, default $5) and idle_timeout_seconds (60-3600, default 10 minutes). It stops at the first it reaches: past 6 hours 15 minutes, raise the spend cap too (8 hours is $6.40).
parallelNotrue starts a second Mac beside the running one (for accounts that bought credit, while NoMac has one to spare), without the account's drive.
public_keyNoOptional SSH public key (ed25519, RSA 2048+ or P-256), for SSH; exec_mac needs none.
request_keyYesIdempotency key you choose (8-128 letters, digits and - _ . :). Repeat a lost call with the same key and arguments; a new key is new work.

TDQS

A4.5/5.0
Behavior5/5

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

Discloses cost model ($0.80/hour billed by the minute from prepaid credit), expected readiness time, no admin prompts, the password location in $NOMAC_MAC_PASSWORD, drive persistence, and the exact error strings (insufficient_credit, session_limit_reached with the running Mac's id). This is far beyond what the annotations convey.

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?

Dense with semicolons but front-loaded: purpose and cost land first, then readiness, security, persistence, and failure modes. Nearly every clause carries actionable information, though the run-on packing pushes toward the upper limit of readable density.

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 and a mutation tool, the description carries the burden well by naming success timing, error codes, and credit implications. It lacks details on what the response object looks like (id vs. session), which is the one remaining 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?

Schema description coverage is already 100%, so the baseline is 3, but the description adds real semantics: request_key idempotency ('same request_key returns the same Mac', 'a new key is new work'), parallel starting without the account's drive, and limit tuning guidance ('past 6 hours 15 minutes, raise the spend cap too').

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?

Opens with a specific verb+resource ('Starts a cloud Mac') and immediately specifies the image contents (macOS, Xcode, iOS Simulator), which cleanly separates it from siblings like stop_mac, extend_mac, and get_mac_session. An agent can pick this tool 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 Guidelines4/5

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

Gives clear operational context: readiness is checked via get_mac_session with wait_seconds, and the parallel flag is named as the route to a second Mac. It never states explicit when-not-to-use rules or direct alternatives, but the surrounding guidance is strong enough to route correctly.

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

stop_macStop and delete a MacA
Destructive
Inspect

Stops a Mac and deletes it with all its files except ~/drive, which is saved for the next Mac; billing ends. get_mac_session then shows cleanup_confirmed. Cannot be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=false, yet the description goes further: it names what survives (~/drive), what is destroyed (all other files), the billing consequence, the observable confirmation path via get_mac_session, and that the action is irreversible. That is substantive context beyond the structured hints.

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 dense sentence chain that front-loads the destructive action and then layers consequences in order of importance. No filler, no restatement of the title or annotations.

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

Completeness5/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 supplies the return signal (get_mac_session showing cleanup_confirmed), plus destruction scope, preserved data, billing effect, and irreversibility. An agent has everything needed to invoke this safely without further exploration.

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 single optional session_id is fully documented in the schema, so the description adds nothing about parameters. Baseline 3 is appropriate when the schema carries the full parameter burden.

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 pair and resource ('Stops a Mac and deletes it'), immediately distinguishing it from start_mac, exec_mac, and the read-oriented get_mac_* siblings. The scope of destruction is defined inline, so an agent knows exactly what operation this is.

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 the terminal use case (irreversible teardown) but never states when to choose this over alternatives, nor does it name a sibling tool for a softer stop. Context is clear but there are no explicit exclusions or alternative routing.

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

write_mac_fileWrite a file on a MacB
Destructive
Inspect

Writes a file of up to 3 MiB on the Mac: content as text, or content_base64. Relative paths are in the workspace; ~ is home. Creates missing folders and replaces a file in one step; executable marks a script. Safe to repeat.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile to write. Relative paths are in the session workspace; ~ is the home folder.
contentNoThe file's text (UTF-8). Use content_base64 instead for binary files.
executableNoMake the file executable (for scripts).
session_idNoMac session ID (ses_…). Optional: without it, the account's running Mac.
content_base64NoThe file's bytes as base64, for binary files.

TDQS

B3.3/5.0
Behavior1/5

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

The description ends with 'Safe to repeat', but annotations declare idempotentHint=false (and destructiveHint=true). Claiming repeat-safety directly conflicts with the structured idempotency signal, so the description misleads on retry behavior even though its other disclosures (folder creation, replacement, 3 MiB cap, executable) are useful.

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?

Front-loaded with the verb and size limit, and every clause (path resolution, folder creation, replacement, executable, repeat-safety) carries information. Slightly dense semicolon stacking keeps it just short of ideal.

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?

Annotations cover readOnly/destructive/openWorld, the schema is fully described, and there is no output schema, so the description need only add behavior — which it does (size cap, path semantics, folder creation, replacement). The one gap is that the retry/idempotency claim is wrong, and no auth/permission context is given.

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 path, content, content_base64, executable, and session_id are already fully documented in the schema, closely mirroring the description's wording. The description adds the 3 MiB content cap and the text-vs-base64 choice, but largely repeats structured data, so the 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 and resource ('Writes a file ... on the Mac') plus a concrete constraint (up to 3 MiB). The wording clearly distinguishes it from the sibling read_mac_file and from exec_mac without needing 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?

It routes the agent between the two content modes ('content as text, or content_base64'), which is useful selection guidance, but gives no explicit when-to-use versus siblings (e.g., read_mac_file, exec_mac) and no when-not conditions. Usage is implied rather than stated.

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. 1 tool update
    • Changedget_mac_session1 field changed
      • changedInput schema / properties / include / description
        Previous value: -"Also return the account's: sessions (its 20 newest, to find a Mac after a lost answer), drive (~/drive: space, versions, saves), secrets (names, never values)"New value: +"Also return the account's: sessions (its 20 newest, to find a Mac after a lost answer), drive (~/drive: space, versions, saves), secrets (names only, not values)"
  2. 17 tool updates
    • Removedcreate_mac_download_link
    • Addedcreate_mac_link
    • Removedcreate_mac_upload_link
    • Changedexec_mac3 fields changed
      • changedInput schema / properties / argv / description
        Previous value: -"Command and arguments as an array, for example [\"bash\", \"-lc\", \"xcodebuild -list\"]. Runs as the agent user in the workspace directory."New value: +"Command and arguments, for example [\"bash\", \"-lc\", \"xcodebuild -list\"]."
      • changedInput schema / properties / cwd / description
        Previous value: -"The folder to run in: relative to the workspace, or ~/… and absolute paths anywhere on the Mac (for example ~/drive/src/app). Default: the workspace."New value: +"Folder to run in: relative to the workspace (the default), ~/… or absolute, such as ~/drive/src/app."
      • changedInput schema / properties / request_key / description
        Previous value: -"Idempotency key you choose: 8-128 letters, digits, dashes, underscores, dots or colons. Retry a lost response with the same key and identical arguments; use a new key for new work."New value: +"Idempotency key you choose (8-128 letters, digits and - _ . :). Repeat a lost call with the same key and arguments; a new key is new work."
    • Changedget_mac_checkout2 fields changed
      • changedInput schema / properties / packs / description
        Previous value: -"Number of $10 packs, 1-10. Pick from the human's stated budget or expected hours; 3+ packs earn bonus credit. Default 1."New value: +"Number of $10 packs, 1-10 (default 1), from the human's budget or expected hours"
      • changedInput schema / properties / request_key / description
        Previous value: -"Idempotency key you choose: 8-128 letters, digits, dashes, underscores, dots or colons. Retry a lost response with the same key and identical arguments; use a new key for new work."New value: +"Idempotency key you choose (8-128 letters, digits and - _ . :). Repeat a lost call with the same key and arguments; a new key is new work."
    • Removedget_mac_drive
    • Changedget_mac_job2 fields changed
      • addedInput schema / properties / cursor
        Added value: +{
        +  "description": "Byte offset to read from: next_cursor of the last read (default 0)",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / stream
        Added value: +{
        +  "description": "Read this stream as a chunk from cursor, also while the command runs",
        +  "enum": [
        +    "stdout",
        +    "stderr"
        +  ],
        +  "type": "string"
        +}
    • Changedget_mac_session1 field changed
      • addedInput schema / properties / include
        Added value: +{
        +  "description": "Also return the account's: sessions (its 20 newest, to find a Mac after a lost answer), drive (~/drive: space, versions, saves), secrets (names, never values)",
        +  "items": {
        +    "enum": [
        +      "sessions",
        +      "drive",
        +      "secrets"
        +    ],
        +    "type": "string"
        +  },
        +  "maxItems": 3,
        +  "minItems": 1,
        +  "type": "array"
        +}
    • Removedlist_mac_sessions
    • Removedlist_secrets
    • Changedmac_input2 fields changed
      • changedInput schema / properties / x / description
        Previous value: -"For click, move and scroll: points from the left edge, as in screenshot_mac's image (1440 wide)."New value: +"For click, move and scroll: from the left, as in screenshot_mac's image (1440 wide)."
      • changedInput schema / properties / y / description
        Previous value: -"For click, move and scroll: points from the top edge, as in screenshot_mac's image (900 high)."New value: +"For click, move and scroll: from the top, as in screenshot_mac's image (900 high)."
    • Addedmac_recording
    • Removedread_mac_output
    • Changedreport_issue3 fields changed
      • removedInput schema / properties / email / format
        Removed value: -"email"
      • removedInput schema / properties / email / pattern
        Removed value: -"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      • changedInput schema / properties / kind / description
        Previous value: -"problem (default): an error the tools could not resolve, for support to answer. feedback: a note for NoMac about what got in the way, failed, was missing from the Mac or the tools, or would have saved time; it needs no answer. Leave out code, secrets and personal data."New value: +"problem (default): an error for support to answer. feedback: a note on what got in the way or was missing; it needs no answer. Leave out code, secrets and personal data."
    • Changedstart_mac8 fields changed
      • changedInput schema / properties / access / description
        Previous value: -"Optional, over the account's saved defaults. A Mac is fully enabled for the agent by default (no administrator password prompts; privacy prompts and password dialogs answered on the Mac; a screen that never locks). { prompts: \"ask\" } keeps macOS's usual prompts for this session; { permissions: { \"com.example.App\": [\"camera\", \"microphone\"] } } (or \"all\") grants an app privacy permissions at start, also one built later; gatekeeper off or on asks for Gatekeeper's state (get_mac_session's account.gatekeeper says what the Mac has)."New value: +"Optional, over the account's defaults (fully enabled): prompts ask keeps macOS's usual prompts; permissions grants apps privacy permissions at start, also one built later ({\"com.example.App\": [\"camera\"]} or \"all\"); gatekeeper off or on; drive none starts without ~/drive."
      • changedInput schema / properties / access / properties / permissions / additionalProperties / anyOf
        Previous value: -[
        -  {
        -    "enum": [
        -      "all"
        -    ],
        -    "type": "string"
        -  },
        -  {
        -    "items": {
        -      "enum": [
        -        "camera",
        -        "microphone",
        -        "contacts",
        -        "calendars",
        -        "reminders",
        -        "photos",
        -        "photos-add",
        -        "media-library",
        -        "speech-recognition",
        -        "bluetooth",
        -        "desktop",
        -        "documents",
        -        "downloads",
        -        "removable-volumes",
        -        "network-volumes"
        -      ],
        -      "type": "string"
        -    },
        -    "maxItems": 15,
        -    "minItems": 1,
        -    "type": "array"
        -  }
        -]New value: +[
        +  {
        +    "enum": [
        +      "all"
        +    ],
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "enum": [
        +        "camera",
        +        "microphone",
        +        "contacts",
        +        "calendars",
        +        "reminders",
        +        "photos",
        +        "photos-add",
        +        "media-library",
        +        "speech-recognition",
        +        "bluetooth",
        +        "desktop",
        +        "documents",
        +        "downloads",
        +        "removable-volumes",
        +        "network-volumes"
        +      ],
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • removedInput schema / properties / access / properties / permissions / propertyNames / pattern
        Removed value: -"^[A-Za-z0-9][A-Za-z0-9.-]{0,154}$"
      • changedInput schema / properties / limits / description
        Previous value: -"Optional caps for this session: max_duration_seconds (60-28800), spend_cap_microunits (USD × 1,000,000) and idle_timeout_seconds (60-3600). Defaults: 2 hours, $5, 10 minutes idle. The session stops at whichever cap it reaches first: $5 covers 6 hours 15 minutes, so a session longer than that also needs a higher spend cap (8 hours is $6.40)."New value: +"Optional caps: max_duration_seconds (60-28800, default 2 hours), spend_cap_microunits (USD × 1,000,000, default $5) and idle_timeout_seconds (60-3600, default 10 minutes). It stops at the first it reaches: past 6 hours 15 minutes, raise the spend cap too (8 hours is $6.40)."
      • changedInput schema / properties / parallel / description
        Previous value: -"true starts a second Mac beside the account's running one, for an account that has bought credit, while NoMac has a Mac to spare; it runs without the account's drive. Without it, a start while a Mac runs answers session_limit_reached with that Mac's id, so the agent can use that Mac."New value: +"true starts a second Mac beside the running one (for accounts that bought credit, while NoMac has one to spare), without the account's drive."
      • changedInput schema / properties / public_key / description
        Previous value: -"Optional SSH public key (ed25519, RSA 2048+ or P-256) for direct SSH access. Omit when you only use exec_mac."New value: +"Optional SSH public key (ed25519, RSA 2048+ or P-256), for SSH; exec_mac needs none."
      • removedInput schema / properties / public_key / pattern
        Removed value: -"^(ssh-ed25519|ssh-rsa|ecdsa-sha2-nistp256) [A-Za-z0-9+/]+={0,2}(?: [^\\r\\n\\x00]*)?$"
      • changedInput schema / properties / request_key / description
        Previous value: -"Idempotency key you choose: 8-128 letters, digits, dashes, underscores, dots or colons. Retry a lost response with the same key and identical arguments; use a new key for new work."New value: +"Idempotency key you choose (8-128 letters, digits and - _ . :). Repeat a lost call with the same key and arguments; a new key is new work."
    • Removedstart_mac_recording
    • Removedstop_mac_recording
  3. 44 tool updates
    • Changedcancel_mac_job2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "job_id"
        -]New value: +[
        +  "job_id"
        +]
    • Removedconnect_status
    • Changedcreate_mac_download_link2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "path"
        -]New value: +[
        +  "path"
        +]
    • Changedcreate_mac_upload_link2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "path"
        -]New value: +[
        +  "path"
        +]
    • Changedexec_mac2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "request_key",
        -  "argv"
        -]New value: +[
        +  "request_key",
        +  "argv"
        +]
    • Changedextend_mac2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • removedInput schema / required
        Removed value: -[
        -  "session_id"
        -]
    • Removedfetch_to_mac
    • Removedget_feedback
    • Changedget_mac_job2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "job_id"
        -]New value: +[
        +  "job_id"
        +]
    • Changedget_mac_session2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • removedInput schema / required
        Removed value: -[
        -  "session_id"
        -]
    • Removedget_metadata
    • Removedget_metadata_schema
    • Removedget_refund_status
    • Removedget_review
    • Removedget_screenshot_upload
    • Removedget_store_capabilities
    • Removedget_store_operation
    • Removedget_testflight
    • Changedinstall_secrets2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • removedInput schema / required
        Removed value: -[
        -  "session_id"
        -]
    • Changedmac_input2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "action"
        -]New value: +[
        +  "action"
        +]
    • Removedmanage_testflight
    • Removednotarize
    • Changedopen_mac_desktop2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • removedInput schema / required
        Removed value: -[
        -  "session_id"
        -]
    • Removedprepare_review_reply
    • Removedpublish
    • Changedread_mac_file2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "path"
        -]New value: +[
        +  "path"
        +]
    • Changedread_mac_output2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "job_id"
        -]New value: +[
        +  "job_id"
        +]
    • Removedread_store
    • Removedreset_mac_drive
    • Removedreview_lint
    • Changedscreenshot_mac2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • removedInput schema / required
        Removed value: -[
        -  "session_id"
        -]
    • Removedsend_to_testflight
    • Removedset_metadata
    • Removedset_project_connection
    • Removedset_subscription_prices
    • Removedset_up_signing
    • Changedstart_mac_recording2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • removedInput schema / required
        Removed value: -[
        -  "session_id"
        -]
    • Changedstop_mac2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • removedInput schema / required
        Removed value: -[
        -  "session_id"
        -]
    • Changedstop_mac_recording2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • removedInput schema / required
        Removed value: -[
        -  "session_id"
        -]
    • Removedupdate_review
    • Removedupdate_store
    • Removedupload_screenshots
    • Removedupload_store_asset
    • Changedwrite_mac_file2 fields changed
      • changedInput schema / properties / session_id / description
        Previous value: -"Mac session ID (ses_…) returned by start_mac or list_mac_sessions."New value: +"Mac session ID (ses_…). Optional: without it, the account's running Mac."
      • changedInput schema / required
        Previous value: -[
        -  "session_id",
        -  "path"
        -]New value: +[
        +  "path"
        +]
  4. 53 tool updates
    • Changedcancel_mac_job2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedconnect_status2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedcreate_mac_download_link2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedcreate_mac_upload_link2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedexec_mac2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedextend_mac2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedfetch_to_mac2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_feedback2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_mac_checkout2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_mac_credits2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_mac_drive2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_mac_file_link2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_mac_job2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_mac_session2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_metadata2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_metadata_schema2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_refund_status2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_review2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_screenshot_upload2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_store_capabilities2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_store_operation2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedget_testflight2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedinstall_secrets2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedlist_mac_sessions2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedlist_secrets2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedmac_input2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedmanage_testflight2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changednotarize2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedopen_mac_desktop2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedprepare_review_reply2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedpublish2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedread_mac_file2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedread_mac_output2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedread_store2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedreport_issue2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedrequest_secret2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedreset_mac_drive2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedreview_lint2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedscreenshot_mac2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedsend_to_testflight2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedset_metadata2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedset_project_connection2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedset_subscription_prices2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedset_up_signing2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedstart_mac2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedstart_mac_recording2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedstop_mac2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedstop_mac_recording2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedupdate_review2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedupdate_store2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedupload_screenshots2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedupload_store_asset2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
    • Changedwrite_mac_file2 fields changed
      • removedInput schema / $schema
        Removed value: -"http://json-schema.org/draft-07/schema#"
      • changedOutput schema / (root)
        Previous value: -{
        -  "$schema": "http://json-schema.org/draft-07/schema#",
        -  "additionalProperties": {},
        -  "description": "The JSON response of the NoMac API for this operation",
        -  "properties": {
        -    "error": {
        -      "additionalProperties": {},
        -      "description": "Present only when the call failed",
        -      "properties": {
        -        "code": {
        -          "description": "Stable machine-readable error code, for example insufficient_credit",
        -          "type": "string"
        -        },
        -        "message": {
        -          "description": "What went wrong and what to do next",
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "code",
        -        "message"
        -      ],
        -      "type": "object"
        -    }
        -  },
        -  "type": "object"
        -}New value: +null
  5. 6 tool updates
    • Removedbuild
    • Removedcheck_project
    • Removedget_billing_status
    • Removedget_failure
    • Removedpush_project
    • Removedstatus
  6. 1 tool update
    • Addedextend_mac
  7. 1 tool update
    • Changedreport_issue1 field changed
      • addedInput schema / properties / kind
        Added value: +{
        +  "description": "problem (default): an error the tools could not resolve, for support to answer. feedback: a note for NoMac about what got in the way, failed, was missing from the Mac or the tools, or would have saved time; it needs no answer. Leave out code, secrets and personal data.",
        +  "enum": [
        +    "problem",
        +    "feedback"
        +  ],
        +  "type": "string"
        +}
  8. 1 tool update
    • Changedstart_mac1 field changed
      • addedInput schema / properties / parallel
        Added value: +{
        +  "description": "true starts a second Mac beside the account's running one, for an account that has bought credit, while NoMac has a Mac to spare; it runs without the account's drive. Without it, a start while a Mac runs answers session_limit_reached with that Mac's id, so the agent can use that Mac.",
        +  "type": "boolean"
        +}
  9. 1 tool update
    • Changedupload_screenshots2 fields changed
      • addedInput schema / properties / images / items / properties / link
        Added value: +{
        +  "type": "string"
        +}
      • changedInput schema / properties / images / items / required
        Previous value: -[
        -  "filename",
        -  "data"
        -]New value: +[
        +  "filename"
        +]
  10. 1 tool update
    • Addedset_subscription_prices
  11. 2 tool updates
    • Addedcancel_mac_job
    • Changedexec_mac1 field changed
      • addedInput schema / properties / cwd
        Added value: +{
        +  "description": "The folder to run in: relative to the workspace, or ~/… and absolute paths anywhere on the Mac (for example ~/drive/src/app). Default: the workspace.",
        +  "maxLength": 1024,
        +  "minLength": 1,
        +  "type": "string"
        +}
  12. 1 tool update
    • Changedset_up_signing1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"The project folder on the Mac, relative to the workspace (default: the workspace itself)"New value: +"The project folder on the Mac: relative to the workspace (default: the workspace itself), or from home, such as ~/drive/src/app"
  13. 3 tool updates
    • Changedexec_mac3 fields changed
      • changedInput schema / properties / timeout_seconds / description
        Previous value: -"Stop the command after this many seconds (1-600, default 300)."New value: +"Stop the command after this many seconds (1-3600, default 300). Builds and test runs: up to an hour."
      • changedInput schema / properties / timeout_seconds / maximum
        Previous value: -600New value: +3600
      • changedInput schema / properties / wait_seconds / description
        Previous value: -"Wait this long (0-50, default 20) for the command to finish and return its output in this call."New value: +"Wait this long (0-50, default 20; 40 for builds and tests) for the command to finish and return its output in this call."
    • Changedget_mac_job1 field changed
      • addedInput schema / properties / wait_seconds
        Added value: +{
        +  "description": "Wait up to this long (0-40) for a running command to finish, instead of polling.",
        +  "maximum": 40,
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • Changedget_mac_session1 field changed
      • addedInput schema / properties / wait_seconds
        Added value: +{
        +  "description": "Wait up to this long (0-40) for a starting or stopping session to change state, instead of polling.",
        +  "maximum": 40,
        +  "minimum": 0,
        +  "type": "integer"
        +}
  14. 2 tool updates
    • Addedget_mac_drive
    • Addedreset_mac_drive
  15. 1 tool update
    • Changedstart_mac1 field changed
      • addedInput schema / properties / access / properties / drive
        Added value: +{
        +  "enum": [
        +    "account",
        +    "none"
        +  ],
        +  "type": "string"
        +}

Publisher details

Operator
NoMac · Publisher source
Vendor relationship
First-party · Publisher source
Trust center
Not available
Restrictions
Sign in with a NoMac account (OAuth). Starting a Mac needs prepaid credit, sold in $10 packs at $0.80 an hour. App Store and TestFlight tools also need the user's App Store Connect API key. · Publisher source

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables AI agents to control real iPhones and simulators on macOS, allowing for UI interaction, testing, and automation.
    56 npm
    91
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    High-performance MCP server for iOS development and test automation. Gives AI coding assistants direct access to iOS simulators with sub-20ms screenshots, UI interaction, building, testing, and an intelligent operator mode.
    8
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Blitz-mcp gives AI agents full control over iOS/macOS development — boot simulators, interacts with physical iPhones, browse databases, trigger builds, and submit apps to App Store Connect via 30+ MCP tools.
    1,760
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources