An MCP server for managing and launching applications with persistent storage
SALO MCP has 3 tools with basic definitions but significant quality gaps. All tools have descriptions (10-40 chars, below the 50-200 char baseline for LLM optimization) and input schemas are present but minimal. list_apps has no parameters; add_app and launch_app have typed parameters with descriptions. However, descriptions are too terse to guide LLM selection effectively. Output schemas are not documented. Error handling returns structured responses but lacks recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk profiles (launch_app is IRREVERSIBLE). Parameter descriptions are present but generic. No pagination, no batch operations, no idempotency guarantees documented.
Add a new application to the registry
Launch an application by name
List all registered applications
Descriptions are too short (10-40 chars vs. 50-200 char baseline). 'List all registered applications' and 'Launch an application by name' lack context for when/why to use each tool and what they return. LLMs cannot reliably select tools without richer descriptions.
launch_app is marked IRREVERSIBLE but has no tool annotation (destructiveHint) in the schema. Agents cannot distinguish safe from dangerous operations. The tool should declare its risk profile in the MCP schema.
Output schemas are not documented. list_apps returns List[Dict] but the structure of each dict is not specified. add_app and launch_app return {success, error?} but the LLM must infer the shape. Agents need explicit output schema to plan downstream calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 56 | 2026-07-28+ | v2 |
Error handling returns {success: false, error: string} but does not guide recovery. 'App not found' should suggest 'Call list_apps() to see available applications.' Agents need actionable next steps, not bare error messages.
add_app accepts 'notes' as a free-form string with no length limit or format constraint. No validation documented. Parameter descriptions should specify expected format, length, and constraints to prevent invalid input from LLMs.