
NinjaOne
io.github.wyre-technology由 GitHub 帳號 wyre-technology 發布v2.2.9更新於 Oct 24, 2026
MCP server for NinjaOne RMM — devices, organizations, alerts, and tickets.
概覽
讓助理瀏覽與管理 NinjaOne RMM 資料:裝置、組織、警示和服務工單。
- 可以做什麼
- 透過一個導覽工具把助理連接到 NinjaOne 的遠端監控與管理 API,一次只載入一個領域:裝置、組織、警示或工單。裝置工具可列出與檢視端點、安排重新開機、讀取 Windows 服務、活動記錄和自訂欄位。警示工具可列出、彙總和重設警示;工單工具可列出看板、表單、狀態和聯絡人,並建立、更新工單與新增留言。狀態工具會顯示目前狀態和憑證情形。
- 適用情境
- 適合 IT 團隊和託管服務供應商,讓助理不必開啟 NinjaOne 主控台就能查詢裝置、警示和工單,或執行重新開機、重設警示、建立與更新工單等日常操作。
- 執行需求
- 以本機程序方式透過 stdio 執行,通常使用 npx 或容器映像。需要一個採用用戶端憑證授權的 NinjaOne OAuth 2.0 API 應用程式,透過 NINJAONE_CLIENT_ID 和 NINJAONE_CLIENT_SECRET 提供,可選 NINJAONE_REGION 和 NINJAONE_SCOPES。由於 npm 套件託管在 GitHub Packages,安裝時需要具備 read:packages 權限的 GitHub 權杖。需要能連線至 NinjaOne API 的網路。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 NinjaOne,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。
其他 MCP 客戶端
參照 儲存庫 中的啟動說明。
README
NinjaOne MCP Server
A Model Context Protocol (MCP) server for interacting with NinjaOne, featuring a decision tree architecture for efficient tool loading.
One-Click Deployment
[!IMPORTANT] Before you click: this server depends on
@wyre-ai/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.
- Create a GitHub Personal Access Token with the
read:packagesscope (classic token). Any GitHub account works — you do not need to be a member of thewyre-aiorg to read its public packages.- Add it as a build variable when prompted by the deploy flow:
- Cloudflare Workers → set a build variable named
NODE_AUTH_TOKENto your PAT (Workers → Settings → Build → Variables and Secrets).- DigitalOcean App Platform → set an encrypted env var named
GITHUB_TOKENwith scope Build Time to your PAT (the.do/app.yamlalready declares it).
[Deploy to Cloudflare Workers]
[!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. HTTP also requiresCONDUIT_S2S_SECRETand a validX-Gateway-S2Ssignature on/mcp(see HTTP authentication). The MCP endpoint is/mcp;/healthis an unauthenticated liveness probe.
Architecture
This MCP server uses a hierarchical tool loading approach instead of exposing all tools upfront:
- Navigation Phase: Initially exposes only a navigation tool (
ninjaone_navigate) - Domain Selection: User selects a domain (devices, organizations, alerts, tickets)
- Domain Tools: Server exposes domain-specific tools after selection
- Lazy Loading: Domain handlers and the NinjaOne client are loaded on-demand
This architecture provides:
- Reduced cognitive load (fewer tools to choose from)
- Faster initial load times
- Better organization of related operations
- Clear navigation state
Installation
This package is published to the GitHub Packages npm registry, which requires a token even for public packages. Authenticate once, then install:
The repo's .npmrc already points the @wyre-ai scope at GitHub Packages and
reads the token from NODE_AUTH_TOKEN, so no further config is needed. The same applies
to npx @wyre-ai/ninjaone-mcp below. Prefer a zero-setup option? Use the prebuilt
container image (ghcr.io/wyre-ai/ninjaone-mcp) or the .mcpb bundle attached to
each release.
Configuration
Copy .env.example and set the variables below.
/health and /healthz stay unauthenticated and do not read credentials. The stdio transport does not use CONDUIT_S2S_SECRET.
HTTP authentication
With MCP_TRANSPORT=http and CONDUIT_S2S_SECRET set, every /mcp request must include:
v1 is HMAC-SHA256 of the ASCII string t=<unix seconds> (the same t= prefix that is sent in the header), keyed with CONDUIT_S2S_SECRET, and hex-encoded. The timestamp must be within 300 seconds of the server clock. A missing or invalid header returns 401 before any vendor credential is read. The secret value is never written to logs.
In AUTH_MODE=gateway, /mcp also requires X-Ninja-Client-ID and X-Ninja-Client-Secret (X-Ninja-Region is optional). Those headers are the only credential source for that request. A request missing them returns 401 and does not fall back to NINJAONE_CLIENT_ID / NINJAONE_CLIENT_SECRET.
MCP_ALLOW_INSECURE_DEV=1 skips the X-Gateway-S2S check for local development and forces the listener onto 127.0.0.1. A non-loopback MCP_HTTP_HOST, including 0.0.0.0, is ignored in that mode and the override is logged.
NinjaOne API Regions
Usage
Running Standalone
Claude Desktop Configuration
Add to your Claude Desktop claude_desktop_config.json:
Docker
The image listens on 0.0.0.0 inside the container (MCP_HTTP_HOST) and defaults to AUTH_MODE=gateway. Publish the port on loopback and pass the S2S secret. In gateway mode, NinjaOne credentials arrive on each request as X-Ninja-* headers; they are not read from the environment.
Compose refuses to start when CONDUIT_S2S_SECRET is unset, defaults AUTH_MODE to gateway, publishes 127.0.0.1:8080:8080, and does not inject NINJAONE_CLIENT_ID or NINJAONE_CLIENT_SECRET:
Single-tenant HTTP (AUTH_MODE=env) still requires the S2S secret, then uses NINJAONE_CLIENT_ID and NINJAONE_CLIENT_SECRET:
Local HTTP without a secret is development-only. It binds 127.0.0.1 only and logs a warning:
Sign each /mcp request with X-Gateway-S2S as described in HTTP authentication. In gateway mode, also send X-Ninja-Client-ID and X-Ninja-Client-Secret.
Available Domains
Devices
Manage endpoints, reboot devices, view services and alerts.
Tools:
ninjaone_devices_list- List devices, filterable by organization, device class, and online status. Paginated: a full page returnshasMore: trueand acursorto pass back for the next page.ninjaone_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 logninjaone_devices_get_custom_fields- Get device custom fieldsninjaone_devices_update_custom_fields- Update device custom fields
Organizations
Manage 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 organization.device_classis sent upstream asdf=class=<NodeClass>and applied to each page. The response is{ devices, count, hasMore, cursor }, not a bare array.ninjaone_organizations_get_custom_fields- Get organization custom fieldsninjaone_organizations_update_custom_fields- Update organization custom fields
Alerts
View and manage alerts across all devices.
Tools:
ninjaone_alerts_list- List alerts with filtersninjaone_alerts_get- Get a single alert by UID (renders as an interactive card in MCP Apps hosts)ninjaone_alerts_reset- Reset/dismiss a single alertninjaone_alerts_reset_all- Reset all alerts for a device or organizationninjaone_alerts_summary- Get alert count summary
Features:
- Interactive Alert Card (MCP Apps, SEP-1865):
ninjaone_alerts_getrenders as an interactive card in MCP Apps hosts (Claude Desktop/web) with an in-card "Reset alert" round-trip vianinjaone_alerts_reset; neutral by default, brandable viawindow.__BRAND__injection orMCP_BRAND_*env vars; plain-JSON behavior is unchanged in other hosts
Tickets
Manage service tickets.
Tools:
ninjaone_tickets_list- List tickets from a board (requiresboard_id;status/organization_id/device_idfilters are applied client-side, see notes below)ninjaone_tickets_get- Get ticket detailsninjaone_tickets_create- Create a new ticket (requires aticket_form_id)ninjaone_tickets_update- Update an existing ticket's fieldsninjaone_tickets_add_comment- Add a comment to a ticketninjaone_tickets_comments- Get ticket log entries, optionally filtered bytypeninjaone_tickets_boards_list- List ticket boards (to discoverboard_idvalues)ninjaone_tickets_forms_list- List ticket forms (to discoverticket_form_idvalues)ninjaone_tickets_form_get- Get one ticket form with its field definitionsninjaone_tickets_statuses_list- List the tenant's configured ticket statusesninjaone_tickets_attributes_list- List ticket attribute (custom field) definitionsninjaone_tickets_contacts_list- List ticketing contacts (forrequester_uid)ninjaone_tickets_users_list- List technicians, end users and contacts (forassignee_id)
Note: NinjaOne queries tickets per board, and board IDs vary by tenant — board 1 is not always the "All Tickets" board, so
ninjaone_tickets_listrequires an explicitboard_idrather than silently guessing one. Discover IDs withninjaone_tickets_boards_list.Note: Ticket statuses, forms and attributes are configured per tenant. Read the real IDs with
ninjaone_tickets_statuses_list,ninjaone_tickets_forms_listandninjaone_tickets_attributes_listrather than assuming fixed names.priorityisNONE/LOW/MEDIUM/HIGH—CRITICALis aseverity, not a priority.Note: NinjaOne's board-run API cannot filter tickets by status, organization, or device server-side (attempting to throws a generic
Bad request).ninjaone_tickets_listtherefore applies those filters client-side within one board page. The response separatescount(matches in this page) fromscanned(tickets examined) and includeshasMore/cursor— page through untilhasMoreisfalseto get every match, and never treat a single page'scountas a board-wide total. Status is matched against each ticket's status display name, so pass a name the tenant actually uses —ninjaone_tickets_statuses_listshows them.Similarly,
ninjaone_devices_listfilters byorganization_idthrough NinjaOne's dedicated per-organization endpoint (the generaldf=orgdevice filter is unreliable and can silently return the full fleet). That endpoint documents no device-class query parameter.ninjaone_devices_list(when an organization is set) andninjaone_organizations_devicesstill senddevice_classupstream asdf=class=<NodeClass>(a namednodeClassparameter is ignored) and apply class and online filters to each page.countis matches in the page; keep paging whilehasMoreis true.device_classuses NinjaOne node classes (LINUX_WORKSTATION,VMWARE_VM_HOST,NMS_SWITCH, …) —LINUX,VMWARE_VM, andNMSare not valid.
Navigation Tools
Always 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)
Example Workflow
Authentication
NinjaOne uses OAuth 2.0 for authentication. You need to:
- Log in to your NinjaOne dashboard
- Go to Administration > Apps > API
- Create a new API application (application platform: API Services, grant type Client Credentials)
- Grant it the scopes you need — see below
- Note the Client ID and Client Secret
- Configure the environment variables
The client library handles token refresh automatically.
OAuth scopes
By default the server requests monitoring management. Which scopes you actually
need depends on what you use:
If your API app is granted fewer scopes than the default, set NINJAONE_SCOPES
to match. NinjaOne rejects a token request that asks for a scope the app was
never granted — it returns 400 invalid_scope rather than narrowing the grant —
so the failure happens at the token exchange and every tool call fails, including
reads. For a monitoring-only app:
Values may be comma- or space-separated and are case-insensitive. In gateway
deployments the same value can be supplied per request via the X-Ninja-Scopes
header.
License
Apache-2.0
來源:README.md,提交 91decbc
工具
0版本歷史
1- v2.2.9最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分