MCP server that discovers macOS scriptable apps and generates tools from sdef files
Critical gaps across all dimensions. The 'execute' tool has a basic description but lacks output schema documentation. Dynamic tools (command, list, get, get_application) are inferred from generator.ts rather than explicitly registered with full schemas visible in source. Parameter descriptions exist but are generic and lack constraints (e.g., 'varies' type for param_* is not a valid JSON Schema type). No error handling guidance, no output structure documentation, and no security considerations for executing arbitrary code. The server exposes code execution as a tool parameter without dry-run or confirmation patterns, creating irreversible risk.
Dynamically generated tools from macOS scriptable app commands. Each command from discovered apps becomes a tool with the pattern [appname]_[commandname]. Tools call executor.dispatch() with operation 'command' and metadata including appId, method name, direct parameters, and named parameters.
Dynamically generated tool to get application-level properties from macOS scriptable apps. Pattern: [appname]_get_application. Returns root application properties and hints about contained elements.
Dynamically generated tools to get a single object from macOS scriptable apps. Pattern: [appname]_get_[classname]. Retrieves by index, name, or id.
Dynamically generated tools to list collections from macOS scriptable apps. Pattern: [appname]_list_[plural]. Returns array of objects with specified properties.
Execute AppleScript or JXA (JavaScript for Automation) code on the macOS host.
No output schema documentation for any tool. LLMs cannot plan downstream calls or extract required fields. 'execute' returns unstructured script output; dynamic tools return JSON arrays but structure is undocumented.
Dynamic tools inferred from generator.ts, not explicitly visible in tool registration. Tool definitions cannot be verified from source code.
Parameter type 'varies' is not valid JSON Schema. param_* parameters lack concrete type definitions, making validation impossible.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 37 | 2026-07-28+ | v2 |
No error handling guidance. Irreversible operations (execute, command) provide no recovery hints. LLM cannot distinguish retryable vs fatal errors or know what to do on failure.
execute tool accepts arbitrary code as a string parameter with no dry-run, confirmation, or sandbox isolation. Irreversible operations lack confirmation-request pattern.