Desktop application for managing QSO (radio contact) personas and credentials with provider integration
This Wails desktop app exposes 14 tools via a Go backend, but lacks MCP protocol compliance entirely. Tools have basic descriptions (avg ~40 chars, well below the 194-char baseline) and minimal parameter documentation. No input schemas are visible in the source, parameters are inferred from function signatures. No output schemas documented. Error handling is absent; tools return raw Go errors. No tool annotations (readOnlyHint, destructiveHint). Naming is inconsistent: some tools use verb_noun (ListPersonas, GetPersona), others use imperative (AddPersona, RemovePersona). Critical security issue: SetCredential accepts secrets as parameters, violating secret-injection pattern. No pagination, no idempotency guarantees, no recovery guidance.
Creates a new persona
Removes credentials from the OS keyring
Removes a provider from a persona
Runs a health check across all personas and providers
Adds a provider to a persona
Returns the currently active persona name
Returns the config directory path (for display in the UI)
Returns masked credential info (no secrets exposed to frontend)
No input schemas visible in source code. All 14 tools lack JSON Schema definitions for parameters.
SetCredential accepts 'secret' parameter containing passwords/API keys. Secrets must never be tool parameters, use server-side injection via environment or vault. Agent traces log all parameters, leaking credentials.
Descriptions are too short (avg 35-50 chars vs 194-char baseline). Examples: 'Returns all personas with health summary info' (47 chars), 'Deletes a persona and all its keyring credentials' (50 chars). Too brief to guide LLM tool selection.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 27 | 2026-07-28+ | v2 |
Returns full details for a single persona
Returns all personas with health summary info
Returns all known providers with their auth types
Deletes a persona and all its keyring credentials
Sets the active persona (writes current.txt)
Stores credentials in the OS keyring for a persona+provider
No output schemas documented. Tools return Go structs (PersonaSummary, Persona, HealthEntry, ProviderInfo) but no schema definitions visible. LLMs cannot plan downstream calls without knowing return field names and types.
No error handling guidance. Tools return raw Go errors (e.g., 'persona not found'). No recovery hints, no categorization (retryable vs fatal), no actionable next steps for LLM.