MCP server for NinjaOne RMM platform integration, providing tools for device management, alerts, security monitoring, software inventory, and organizational administration
Strong foundation with 25 well-named tools using consistent verb_noun patterns (list_, get_, search_, query_, update_, reset_). All tools have descriptions (avg 95 chars, within 10-1024 range). Input schemas present with type definitions and parameter descriptions. However, output schemas are not documented, responses are serialized JSON without field-level documentation, forcing LLMs to infer structure. Error handling is minimal; no recovery guidance or actionable error messages visible. Security annotations present (ReadOnly, Destructive, Idempotent flags) but no permission gates or audit trail patterns. Pagination implemented consistently across list/query tools with pageSize and cursor parameters.
Get detailed information about a specific device by its ID.
Get custom field values for a specific device.
Get detailed information about a specific organization by its ID.
List active alerts across all devices and organizations. Returns alert severity, message, device, and timestamp.
List all custom field definitions configured in the NinjaOne instance.
List all devices in the NinjaOne instance. Returns device ID, system name, organization, and status.
Output schemas not documented. Tools return Json.Serialize(result) with no field-level documentation. LLMs cannot infer response structure, forcing them to guess which fields exist and their types. This violates pattern:tool and pattern:response-shaper.
No error handling guidance. Tools return raw exceptions or generic success messages. No recovery hints (e.g., 'Try search_devices() if device not found'), no error classification (retryable vs fatal), no actionable error messages with invalid values and constraints.
Destructive operations lack confirmation/dry-run. reset_alert and update_device_custom_fields modify state without a confirmation step. Agents can accidentally reset alerts or corrupt custom fields. Pattern:confirmation-request not implemented.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | <=2025-11-25 | v2 |
List all devices with detailed information including OS, last contact time, and hardware details.
List scheduled and running jobs across the NinjaOne instance. Includes scripted tasks, patching jobs, and maintenance.
List all locations across all organizations, or for a specific organization.
List all organizations in the NinjaOne instance.
List all organizations with detailed information including policies, locations, and settings.
List all known software products tracked by NinjaOne.
List all automation tasks configured in the NinjaOne instance.
Query antivirus protection status across all managed devices. Shows product name, status, and definition age.
Query detected antivirus threats across all managed devices.
Query overall device health status across all managed devices.
Query installed software across all devices. Returns software name, version, install date, and device info.
Query OS patch installation history across devices. Shows what OS updates were installed and when.
Query available OS patches across all managed devices. Shows pending Windows/macOS updates.
Query software patch installation history across devices. Shows what patches were installed and when.
Query available software patches across all devices. Shows pending patches by device.
Query Windows services across all managed devices. Filter by service name or state (RUNNING, STOPPED, PAUSED, UNKNOWN, START_PENDING, STOP_PENDING, PAUSE_PENDING, CONTINUE_PENDING).
Reset/acknowledge a specific alert by its unique identifier.
Search for devices by name or other criteria.
Update custom field values for a specific device. Pass field names and values as a JSON object.
No permission gates or audit trail. Tools lack scope declarations (e.g., 'read:alerts', 'write:devices') and no logging of who called what, when, and with what parameters. Violates pattern:scope-declaration and pattern:audit-trail.
Minimal parameter constraints. Many parameters accept free-form strings (sourceType, deviceFilter, lang) without enums or validation. LLMs can pass invalid values. Pattern:constrained-input not applied.