Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

NinjaOne

OCI · GHCR.IO/WYRE-AI/NINJAONE-MCP

MCP server for NinjaOne RMM — devices, organizations, alerts, and tickets.

+33 this week 42 Trust /100

Last scanned (21 hours ago)

Scores higher than 58% of OCI servers

Category Monitoring and Observability

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security0
  • No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
  • Known CVEs could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
  • Install-script risk not yet assessed.Unverified
  • Dependency health could not be checked: this artifact ships no SBOM or dependency manifest, so there is no dependency list to read.Unverified
Provenance & Transparency45
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (Apache-2.0).Pass
  • Actively maintained (last published 2 days ago).Pass
  • Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
Schema Quality & AI Usability81
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (good).Pass
  • Tool/resource definitions use about 2930 tokens (~75/item across 39 items; 38 tools + 1 resources), lean.Pass
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management13
  • Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage82
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 46% of tool parameters carry a description.Partial
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 38 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 39 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
  • Supports UI / widget rendering.Pass

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 18 Oct 26 0
    • Security disclosure: fail → unverified ▼ functional
  • 17 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

  • 15 Oct 26 +32
    • Injection markers: unverified → pass ▲ security
    • First check of Judged manipulation: pass security
    • Tool coverage: unverified → 100 ▲ functional
    • Schema quality: unverified → 100 ▲ functional
    • MCP protocol: unverified → pass ▲ functional
    • Stability: unverified → 0.03 ▲ functional
    • First check of Schema quality: fail functional
    • First check of Tool coverage: 46 functional
    • First check of Capabilities: pass functional
    • First check of Schema quality: pass functional
    • First check of Schema quality: good functional
    • First check of Destructive annotations: pass functional
    • Package version: v2.4.2 → v2.5.0 functional
  • 14 Oct 26 0
    • Injection markers: unverified → pass ▲ security
    • First check of Judged manipulation: pass security
    • Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window). security
    • Schema quality: unverified → 100 ▲ functional
    • Tool coverage: unverified → 100 ▲ functional
    • MCP protocol: unverified → pass ▲ functional
    • First check of Schema quality: fail functional
    • First check of Destructive annotations: pass functional
    • First check of Tool coverage: 43 functional
    • First check of Capabilities: pass functional
    • First check of Schema quality: pass functional
    • First check of Schema quality: good functional
    • Package version: v2.4.1 → v2.4.2 functional
  • 13 Oct 26 0
    • Security disclosure: unverified → fail ▼ functional
    • Package version: v2.4.0 → v2.4.1 functional
  • 11 Oct 26 9

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 18 Oct 2026 · Analysed oci/ghcr.io/wyre-ai/ninjaone-mcp@v2.5.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem oci
Reason No attestation published

Background: How many MCP packages publish verified provenance →

MCP tools · 38 exposed · ~2,913 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
ninjaone_alerts_get ~29

Get details for a specific alert by its UID

NameTypeReqDescription
alert_uidstringyes–

No output schema declared.

No examples provided.

ninjaone_alerts_list ~77

List active alerts, filterable by severity, organization, or device

NameTypeReqDescription
cursorstring––
device_idnumber––
limitnumber––
organization_idnumber––
severitystring––
source_typestring–e.g., CONDITION, ACTIVITY

No output schema declared.

No examples provided.

ninjaone_alerts_reset ~32

Reset (dismiss) an alert - acknowledges and marks as handled

NameTypeReqDescription
alert_uidstringyes–

No output schema declared.

No examples provided.

ninjaone_alerts_reset_all ~48

Reset all alerts for a device or organization (destructive action)

NameTypeReqDescription
device_idnumber––
organization_idnumber––
severitystring––

No output schema declared.

No examples provided.

ninjaone_alerts_summary ~30

Get alert count summary grouped by severity and/or organization

NameTypeReqDescription
group_bystring––

No output schema declared.

No examples provided.

ninjaone_debug_elicitation_check ~52

TEMPORARY diagnostic for the ninjaone_scripts_run launch smoke test -- remove after use. Issues a server-initiated confirmation prompt and reports exactly what the connected client returned. No side effects.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ninjaone_devices_activities ~39

Get device activity log

NameTypeReqDescription
activity_typestring––
device_idnumberyes–
limitnumber––

No output schema declared.

No examples provided.

ninjaone_devices_alerts ~33

Get active alerts for a device

NameTypeReqDescription
device_idnumberyes–
severitystring––

No output schema declared.

No examples provided.

ninjaone_devices_get ~24

Get device details by ID

NameTypeReqDescription
device_idnumberyes–

No output schema declared.

No examples provided.

ninjaone_devices_get_custom_fields ~25

Get device custom fields

NameTypeReqDescription
device_idnumberyes–

No output schema declared.

No examples provided.

ninjaone_devices_list ~132

List NinjaOne devices, filterable by organization, device class, or online status

NameTypeReqDescription
cursorstring–Pagination cursor from a previous response's cursor field (the last device id).
device_classstring–NinjaOne node class (for example WINDOWS_SERVER, LINUX_WORKSTATION, NMS_SWITCH). LINUX, VMWARE_VM, and NMS are not valid classes.
limitnumber–Max devices to return (default 50). A full page sets hasMore=true and returns a cursor.
onlineboolean––
organization_idnumber––

No output schema declared.

No examples provided.

ninjaone_devices_reboot ~34

Schedule device reboot (destructive action)

NameTypeReqDescription
device_idnumberyes–
reasonstring––

No output schema declared.

No examples provided.

ninjaone_devices_services ~32

List Windows services on a device

NameTypeReqDescription
device_idnumberyes–
statestring––

No output schema declared.

No examples provided.

ninjaone_devices_update_custom_fields ~39

Update device custom fields

NameTypeReqDescription
device_idnumberyes–
fieldsobjectyesCustom field name/value pairs to set

No output schema declared.

No examples provided.

ninjaone_navigate ~166

Discover available NinjaOne tools by domain. Returns tool names and descriptions for the selected domain. All tools are callable at any time — this is a help/discovery aid, not a prerequisite.

NameTypeReqDescription
domainstringyesThe domain to explore: - devices: Device management - manage endpoints, reboot systems, view services, and get device alerts/activities - organizations: Organization management - manage customer acco…

No output schema declared.

No examples provided.

ninjaone_organizations_create ~53

Create new organization

NameTypeReqDescription
descriptionstring––
namestringyes–
node_approval_modestring–How to handle new device registrations
policy_idnumber––

No output schema declared.

No examples provided.

ninjaone_organizations_devices ~237

List devices for one organization. device_class is sent upstream as df=class=<NodeClass> (the filter GET /v2/devices actually applies; a named nodeClass parameter is ignored) and the page is filtered again so a dropped df cannot return other classes. online is sent as the df online/offline predicate and applied to the page. A full page sets hasMore=true and returns a cursor (the last device id on that page). count is matches in this page, not an organization-wide total.

NameTypeReqDescription
cursorstring–Pagination cursor from a previous response's cursor field (the last device id).
device_classstring–NinjaOne node class (for example WINDOWS_SERVER, LINUX_WORKSTATION, NMS_SWITCH). LINUX, VMWARE_VM, and NMS are not valid classes.
limitnumber–Max devices to fetch (default 50). A full page sets hasMore=true and returns a cursor.
onlineboolean–When set, keep only online (true) or offline (false) devices in this page.
organization_idnumberyes–

No output schema declared.

No examples provided.

ninjaone_organizations_get ~25

Get organization details by ID

NameTypeReqDescription
organization_idnumberyes–

No output schema declared.

No examples provided.

ninjaone_organizations_get_custom_fields ~26

Get organization custom fields

NameTypeReqDescription
organization_idnumberyes–

No output schema declared.

No examples provided.

ninjaone_organizations_list ~31

List organizations (customer accounts)

NameTypeReqDescription
cursorstring––
limitnumber––

No output schema declared.

No examples provided.

ninjaone_organizations_locations ~23

List organization locations

NameTypeReqDescription
organization_idnumberyes–

No output schema declared.

No examples provided.

ninjaone_organizations_update_custom_fields ~40

Update organization custom fields

NameTypeReqDescription
fieldsobjectyesCustom field name/value pairs to set
organization_idnumberyes–

No output schema declared.

No examples provided.

ninjaone_scripts_list ~53

List scripts and built-in actions available to run on a device, and the credential roles eligible to run as

NameTypeReqDescription
device_idnumberyes–
langstring–Language for localized script/action names

No output schema declared.

No examples provided.

ninjaone_scripts_run ~237

Run an org-approved script or built-in action on a device (destructive action -- executes code on the customer endpoint). Only scripts the org has pre-approved can run; everything else is refused regardless of this tool's arguments. On HTTP, the caller must already be authenticated (gateway per-request credentials, or a gateway-signed request plus NINJAONE_ALLOW_SERVER_HELD_SCRIPT_EXECUTION for server-held credentials). Confirming the prompt does not authorize the run.

NameTypeReqDescription
confirmboolean–Set true only after you have confirmed with the end user that this script should run on this device. Required when the connected client does not support interactive confirmation prompts.
device_idnumberyes–
idnumber–Script identifier -- required when type is SCRIPT
parametersstring–Parameters passed to the script/action
run_asstring–Credential role/identifier to run as
typestringyesSCRIPT = a custom script (use id); ACTION = a built-in action (use uid)
uidstring–Built-in action identifier (uuid) -- required when type is ACTION

No output schema declared.

No examples provided.

ninjaone_status ~18

Show API credential status and available tool domains

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ninjaone_tickets_add_comment ~46

Add comment to ticket

NameTypeReqDescription
bodystringyes–
publicboolean–visible to customers (default: true)
ticket_idnumberyes–

No output schema declared.

No examples provided.

ninjaone_tickets_attributes_list ~41

List ticket attribute (custom field) definitions and their IDs, for the attributes argument of ninjaone_tickets_create and ninjaone_tickets_update.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ninjaone_tickets_boards_list ~35

List available ticket boards for the tenant. Use this to discover board_id values for ninjaone_tickets_list.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ninjaone_tickets_comments ~62

Get a ticket's log entries (comments and activity). Pass type to narrow the feed, e.g. type=COMMENT for just the conversation.

NameTypeReqDescription
ticket_idnumberyes–
typestring–Return only log entries of this type.

No output schema declared.

No examples provided.

ninjaone_tickets_contacts_list ~29

List ticketing contacts. Each carries the uid used as a ticket's requester_uid.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ninjaone_tickets_create ~325

Create a new ticket. NinjaOne requires a ticket form, so call ninjaone_tickets_forms_list first and pass its id as ticket_form_id.

NameTypeReqDescription
assignee_idnumber–Technician to assign (sent as assignedAppUserId). Discover with ninjaone_tickets_users_list.
attributesarray–Custom field values. Discover attribute IDs with ninjaone_tickets_attributes_list.
descriptionstring–Initial description, stored as the ticket's first log entry. Set description_public=false to keep it internal.
description_publicboolean–Whether the description is visible to the requester (default: true).
device_idnumber–Link the ticket to a device (sent as nodeId).
location_idnumber––
organization_idnumberyesOrganization the ticket belongs to (sent as clientId).
prioritystring–Ticket priority. CRITICAL is a severity, not a priority.
requester_uidstring–UUID of the requesting contact. Discover with ninjaone_tickets_contacts_list.
severitystring––
statusstring–Status ID to open the ticket in. Statuses are per-tenant — use ninjaone_tickets_statuses_list. Defaults to 1000 (New).
subjectstringyesTicket subject (max 200 characters).
tagsarray––
ticket_form_idnumberyesTicket form to create against. Required by NinjaOne — discover IDs with ninjaone_tickets_forms_list.
typestring––

No output schema declared.

No examples provided.

ninjaone_tickets_form_get ~30

Get one ticket form, including its field definitions.

NameTypeReqDescription
form_idnumberyes–

No output schema declared.

No examples provided.

ninjaone_tickets_forms_list ~43

List ticket forms with their fields. Every ticket is created against a form, so use this to find the ticket_form_id for ninjaone_tickets_create.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ninjaone_tickets_get ~25

Get ticket details by ID

NameTypeReqDescription
ticket_idnumberyes–

No output schema declared.

No examples provided.

ninjaone_tickets_list ~311

List tickets from a ticket board, filterable by status, organization, or device. Requires board_id: NinjaOne queries tickets per board and board IDs vary by tenant (board 1 is NOT always the 'All Tickets' board). Discover board IDs with ninjaone_tickets_boards_list first. NOTE: status/organization/device filters are applied client-side within one board page (NinjaOne's board API cannot filter by them server-side), so the response reports `count` (matches in this page) separately from `scanned`, plus `hasMore`/`cursor` — page through until hasMore is false to get every match; never treat one page's count as a board-wide total.

NameTypeReqDescription
board_idnumberyesTicket board to query. Use ninjaone_tickets_boards_list to discover valid IDs.
cursorstring–Pagination cursor from a previous response's cursor field (the board's lastCursorId).
device_idnumber–Filter by linked device (ticket nodeId), matched client-side.
limitnumber–Board page size (default 50). A full page sets hasMore=true and returns a cursor.
organization_idnumber–Filter by organization (ticket clientId), matched client-side.
statusstring–Filter by status, matched client-side against each ticket's status display name. Statuses are configured per tenant — use ninjaone_tickets_statuses_list to see the real names rather than guessing.

No output schema declared.

No examples provided.

ninjaone_tickets_statuses_list ~44

List the tenant's configured ticket statuses with their IDs. Statuses are per-tenant, so read them here rather than assuming names like OPEN or CLOSED.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

ninjaone_tickets_update ~265

Update an existing ticket's fields. NinjaOne's ticket PUT is a full replace and may reject a partial body — if it does, read the ticket with ninjaone_tickets_get and resend its subject, status, organization_id, ticket_form_id, requester_uid and version alongside your changes. It does not accept comments: use ninjaone_tickets_add_comment for those.

NameTypeReqDescription
assignee_idnumber–Technician to assign (sent as assignedAppUserId). Discover with ninjaone_tickets_users_list.
attributesarray––
location_idnumber––
organization_idnumber–Sent as clientId; required when NinjaOne rejects a partial update.
prioritystring–Ticket priority. CRITICAL is a severity, not a priority.
requester_uidstring––
severitystring––
statusstring–Status ID. Statuses are per-tenant — use ninjaone_tickets_statuses_list.
subjectstring––
tagsarray––
ticket_form_idnumber––
ticket_idnumberyes–
typestring––
versionnumber–Ticket version from ninjaone_tickets_get, for optimistic locking.

No output schema declared.

No examples provided.

ninjaone_tickets_users_list ~122

List ticketing users — technicians, end users and contacts. Use this to find the assignee_id (a technician's numeric id) for ninjaone_tickets_create/update.

NameTypeReqDescription
cursornumber–anchorNaturalId of the last user from the previous page.
limitnumber–Records per page (default 50).
organization_idnumber–Restrict to one organization (sent as clientId).
searchstring–Match on first name, last name or email address.
user_typestring––

No output schema declared.

No examples provided.

Install

How do I install the NinjaOne MCP server?

NinjaOne runs locally as a container image, launched with docker run --rm -i -e NINJAONE_CLIENT_ID -e NINJAONE_CLIENT_SECRET -e NINJAONE_REGION -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-ai/ninjaone-mcp:v2.5.0. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

oci · ghcr.io/wyre-ai/ninjaone-mcp

# add to Claude Code
claude mcp add wyre-ai-ninjaone-mcp -- docker run --rm -i -e NINJAONE_CLIENT_ID -e NINJAONE_CLIENT_SECRET -e NINJAONE_REGION -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-ai/ninjaone-mcp:v2.5.0

This image reads NINJAONE_CLIENT_ID, NINJAONE_CLIENT_SECRET, NINJAONE_REGION, MCP_TRANSPORT, AUTH_MODE and LOG_LEVEL. Set them in your client's env block for this server; docker run -e passes each one through to the container.

Common questions

What is the NinjaOne MCP server?

NinjaOne is an MCP server listed in the public MCP registry as io.github.WYRE-AI/ninjaone-mcp. MCP server for NinjaOne RMM, devices, organizations, alerts, and tickets. This page covers its container image (ghcr.io/wyre-ai/ninjaone-mcp).

Is the NinjaOne MCP server safe to use?

NinjaOne scores 42 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the NinjaOne MCP server expose?

NinjaOne exposes 38 tools: ninjaone_navigate, ninjaone_status, ninjaone_debug_elicitation_check, ninjaone_devices_list, ninjaone_devices_get, and 33 more. Their descriptions and schemas cost roughly 2,913 tokens of context every time the server is loaded.

Is the NinjaOne MCP server still maintained?

NinjaOne is still listed as active in the MCP registry. We last reached this channel on 18 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the NinjaOne MCP server under?

NinjaOne declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.