Model Context Protocol server for SOTI MobiControl — operate Android/iOS/Windows/rugged MDM fleets with AI agents (Claude Code, Cursor, Cline, Continue).
Strong foundation with 18 well-named tools, comprehensive schemas, and clear descriptions. All tools have descriptions (avg 156 chars, within 10-1024 baseline). Input schemas are complete with types and constraints. Naming follows verb_noun convention (soti_list_*, soti_get_*, soti_send_*, soti_wipe_*). However, several parameter descriptions lack actionable detail (e.g., 'filter' params reference SOTI syntax without examples), and some tools accept opaque IDs without human-friendly alternatives. Error handling is present but generic. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification.
Assigns a profile (policy) to one or more device groups, devices, or a filter expression.
Returns compliance status for a device, a group, or the whole fleet. Use scope='device' with deviceId for per-device incidents.
Returns full details for a single device, including hardware, OS, and enrollment state.
Lists applications installed on a device, with pagination, ordering, and filtering.
Returns the last known GPS or cellular-derived location for a device. Use soti_send_command with action='Locate' to request a fresh fix.
Lists devices that are members of a specific device group (recurses into subgroups by default). Paginated.
Filter parameter descriptions lack actionable syntax. 'SOTI filter string in Property:Value,Property:Value form' and 'SOTI advanced filter expression' reference external docs without examples or constraints. LLMs cannot infer valid filter syntax from these descriptions.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk stratification. soti_wipe_device is marked DESTRUCTIVE but lacks destructiveHint annotation; soti_send_command and app management tools lack idempotentHint despite idempotencyKey support.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2025-06-18+ | v2 |
Triggers installation of a managed application on a device. Asynchronous — SOTI returns no body; downstream status appears in the device's installedApplications list.
Lists recent compliance and alert policies. SOTI emits alerts via compliance policies — this returns the active set so you can correlate against device incidents.
Lists devices in the SOTI MobiControl fleet. Optionally filter by group path or property filter. Returns a paginated array of device summaries.
Lists the SOTI MobiControl device group hierarchy. Returns groups, paths, and reference IDs.
Lists active configuration profiles (SOTI 'profiles'), optionally filtered by name, device family, or status.
Enters kiosk lockdown mode on a device (sends EnableKioskMode). Reversed via soti_release_device.
Moves a device to a different device group. Optionally clears device-level advanced settings so the new group's settings apply.
Releases kiosk lockdown on a device (sends DisableKioskMode).
Searches devices using SOTI's advanced filter syntax (operators: CONTAINS, =, !=, >, <, AND, OR). Scopable by group path with optional subgroup recursion.
Sends a SOTI device action to a single device (e.g. CheckIn, Lock, Locate, RemoteRing). For destructive operations (Wipe / FactoryReset) use soti_wipe_device, which requires explicit confirmation.
Uninstalls a managed application from a device.
DESTRUCTIVE: Performs a full factory reset on the specified device. Requires confirm=true. Cannot be undone — all user data, accounts, and (on Android) the SOTI agent itself may be removed.
Opaque ID parameters (deviceId, applicationId, policyReferenceId) lack human-friendly alternatives. Users say 'lock device named POS-1' but tools require system IDs. No lookup tools provided to resolve names to IDs, forcing multi-step agent workflows.
Parameter descriptions for 'idempotencyKey' are null or missing. soti_install_app, soti_uninstall_app, soti_lockdown_device, soti_release_device, soti_wipe_device, and soti_move_device all have idempotencyKey with null description, violating the requirement that every parameter must have a non-empty description.
Error handling is generic. No recovery guidance in tool descriptions (e.g., 'If device not found, try soti_search_devices'). No indication of which errors are retryable vs. user-fixable. Agents cannot self-correct on failures.