Ninjaone Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Ninjaone Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A Model Context Protocol (MCP) server for interacting with NinjaOne, featuring a decision tree architecture for efficient tool loading.
[!IMPORTANT] Before you click: this server depends on@wyre-technology/node-ninjaone, which is hosted on the GitHub Packages npm registry. GitHub Packages has no anonymous access — even though the package is public, everynpm installneeds a token. The cloud builder runsnpm installfor you, so you must give it one, or the build fails withnpm error 401 Unauthorized ... npm.pkg.github.com.
>
1. Create a GitHub Personal Access Token with theread:packagesscope (classic token). Any GitHub account works — you do not need to be a member of thewyre-technologyorg to read its public packages. 2. Add it as a build variable when prompted by the deploy flow: - Cloudflare Workers → set a build variable named `NODE_AUTH_TOKEN` to your PAT (Workers → Settings → Build → Variables and Secrets). - DigitalOcean App Platform → set an encrypted env var named `GITHUB_TOKEN` with scope Build Time to your PAT (the.do/app.yamlalready declares it).
[!NOTE] Both targets run the full MCP server. DigitalOcean builds the Docker image and serves it over HTTP; Cloudflare Workers serves the same server via the SDK's Web Standard Streamable HTTP transport (src/worker.ts). After deploying, set your NinjaOne credentials as secrets —NINJAONE_CLIENT_ID,NINJAONE_CLIENT_SECRET, and optionallyNINJAONE_REGION— or setAUTH_MODE=gatewayto take credentials per-request fromX-Ninja-*headers. The MCP endpoint is/mcp;/healthis an unauthenticated liveness probe.
This MCP server uses a hierarchical tool loading approach instead of exposing all tools upfront:
ninjaone_navigate)This architecture provides:
This package is published to the GitHub Packages npm registry, which requires a token even for public packages. Authenticate once, then install:
# Authenticate npm to GitHub Packages (token needs the read:packages scope)
export NODE_AUTH_TOKEN=$(gh auth token) # or a PAT with read:packages
npm install @wyre-technology/ninjaone-mcpThe repo's .npmrc already points the @wyre-technology scope at GitHub Packages and reads the token from NODE_AUTH_TOKEN, so no further config is needed. The same applies to npx @wyre-technology/ninjaone-mcp below. Prefer a zero-setup option? Use the prebuilt container image (ghcr.io/wyre-technology/ninjaone-mcp) or the .mcpb bundle attached to each release.
Set the following environment variables:
| Variable | Required | Description |
|---|---|---|
NINJAONE_CLIENT_ID | Yes | OAuth 2.0 Client ID |
NINJAONE_CLIENT_SECRET | Yes | OAuth 2.0 Client Secret |
NINJAONE_REGION | No | Region: us (default), eu, or oc |
| Region | Base URL |
|---|---|
us | https://app.ninjarmm.com |
eu | https://eu.ninjarmm.com |
oc | https://oc.ninjarmm.com |
# Set credentials
export NINJAONE_CLIENT_ID="your-client-id"
export NINJAONE_CLIENT_SECRET="your-client-secret"
export NINJAONE_REGION="us"
# Run the server
npx @wyre-technology/ninjaone-mcpAdd to your Claude Desktop claude_desktop_config.json:
{
"mcpServers": {
"ninjaone": {
"command": "npx",
"args": ["@wyre-technology/ninjaone-mcp"],
"env": {
"NINJAONE_CLIENT_ID": "your-client-id",
"NINJAONE_CLIENT_SECRET": "your-client-secret",
"NINJAONE_REGION": "us"
}
}
}
}docker build -t ninjaone-mcp .
docker run -e NINJAONE_CLIENT_ID=xxx -e NINJAONE_CLIENT_SECRET=xxx -e NINJAONE_REGION=us ninjaone-mcpManage endpoints, reboot devices, view services and alerts.
Tools:
ninjaone_devices_list - List devices with filtersninjaone_devices_get - Get device detailsninjaone_devices_reboot - Schedule a device rebootninjaone_devices_services - List Windows services on a deviceninjaone_devices_alerts - Get device-specific alertsninjaone_devices_activities - View device activity logManage customer organizations and their resources.
Tools:
ninjaone_organizations_list - List organizationsninjaone_organizations_get - Get organization detailsninjaone_organizations_create - Create a new organizationninjaone_organizations_locations - List organization locationsninjaone_organizations_devices - List devices for an organizationView and manage alerts across all devices.
Tools:
ninjaone_alerts_list - List alerts with filtersninjaone_alerts_reset - Reset/dismiss a single alertninjaone_alerts_reset_all - Reset all alerts for a device or organizationninjaone_alerts_summary - Get alert count summaryManage service tickets.
Tools:
ninjaone_tickets_list - List tickets with filtersninjaone_tickets_get - Get ticket detailsninjaone_tickets_create - Create a new ticketninjaone_tickets_update - Update an existing ticketninjaone_tickets_add_comment - Add a comment to a ticketninjaone_tickets_comments - Get ticket commentsAlways available:
ninjaone_navigate - Select a domain to work withninjaone_status - Show current state and credential statusninjaone_back - Return to main menu (when in a domain)User: Check my devices
Claude: [calls ninjaone_navigate with domain="devices"]
-> Navigated to devices domain. Available tools: ...
User: List all Windows servers
Claude: [calls ninjaone_devices_list with device_class="WINDOWS_SERVER"]
-> [device list results]
User: Now show me alerts
Claude: [calls ninjaone_back]
-> Navigated back to main menu.
[calls ninjaone_navigate with domain="alerts"]
-> Navigated to alerts domain.NinjaOne uses OAuth 2.0 for authentication. You need to:
The client library handles token refresh automatically.
Apache-2.0
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.