Skip to main content
Glama
MSPbotsAI

ninjaone-mcp

by MSPbotsAI

ninjaone-mcp

NinjaOne RMM MCP-сервер — предоставляет Public API v2 NinjaOne (Organizations, Devices, Alerts, Ticketing, Automation/Scripting, Jobs) в виде MCP-инструментов.

Что такое NinjaOne / когда агенту это использовать

NinjaOne — это RMM-платформа (удаленный мониторинг и управление), которую MSP используют для управления ИТ-инфраструктурой клиентов. Агенту следует обращаться к этому MCP для запросов, например:

  • «Сколько устройств у этого клиента и какие из них офлайн?» → ninjaone_get_organization_devices / ninjaone_get_devices

  • «Есть ли активные оповещения для этого устройства/организации?» → ninjaone_get_device_alerts / ninjaone_get_alerts

  • «Какие тикеты открыты на доске поддержки?» → ninjaone_get_ticket_boards, затем ninjaone_get_tickets

  • «Запустить очистку диска на этом устройстве и сообщить, когда она завершится» → ninjaone_get_device_scripting_options для проверки доступных действий, ninjaone_run_script_on_device, затем ninjaone_get_device_active_jobs для отслеживания завершения

  • «Какие сценарии автоматизации у нас доступны?» → ninjaone_get_automation_scripts

Обзор

Этот сервер реализует Model Context Protocol (транспорт Streamable HTTP) с 23 инструментами в 5 группах, следуя Vendor MCP Service SOP от MSPbots: без сохранения состояния, без хранения учетных данных, аутентификация по заголовкам в каждом запросе.

Этот проект был создан на основе инструментов сообщества wyre-technology/ninjaone-mcp (organizations/devices/alerts/tickets, переработанных здесь напрямую через REST API NinjaOne, а не через его Node SDK) и расширен 5 инструментами автоматизации/скриптов/задач, взятыми из собственной спецификации OpenAPI 3.0.1 NinjaOne — каждая конечная точка ниже была проверена по реальной спецификации API NinjaOne, а не угадана или скопирована из вторичного источника.

NinjaOne аутентифицируется через OAuth2 client_credentials: client ID + secret OAuth2-приложения NinjaOne типа «API Services» обмениваются на кратковременный bearer-токен по адресу POST {base_url}/oauth/token. Этот сервер выполняет обмен самостоятельно, заново при каждом вызове инструмента — он никогда не хранит и не кэширует токен (или client_id/secret) между вызовами.

Быстрый старт

Docker (рекомендуется)

docker compose up --build

Локально (uv)

uv sync
python -m ninjaone_mcp

Проверка здоровья

curl http://localhost:8080/health
# {"status": "ok"}

Для конечной точки проверки здоровья учетные данные не требуются.

Описание параметров аутентификации (Аутентификация)

Каждый запрос к /mcp должен содержать следующие HTTP-заголовки:

Заголовок

Тип

Обязателен?

По умолчанию

Допустимые значения

Описание поля

Пример

X-Ninja-Client-Id

строка

обязателен

нет

нет (произвольный текст)

Client ID OAuth2-приложения NinjaOne типа «API Services» (создается в NinjaOne в разделе Administration → Apps → API), этот сервис использует его для получения кратковременного bearer-токена и никогда не сохраняет его на диск.

X-Ninja-Client-Id: <client_id>

X-Ninja-Client-Secret

строка

обязателен

нет

нет (произвольный текст)

Client Secret того же OAuth2-приложения.

X-Ninja-Client-Secret: <client_secret>

X-Ninja-Region

строка

необязателен

us

us, eu, oc, ca, us2, fed

Регион развертывания NinjaOne, определяет фактический base URL.

X-Ninja-Region: eu

Отсутствие любого из обязательных заголовков возвращает 401 Unauthorized.

Переменные окружения

Переменная

По умолчанию

Описание

MCP_HTTP_PORT

8080

Порт прослушивания

MCP_HTTP_HOST

0.0.0.0

Хост прослушивания

Переменной окружения для base URL нет — base URL определяется для каждого запроса из заголовка X-Ninja-Region (см. таблицу регионов в config.py).

Конечная точка MCP

POST http://localhost:8080/mcp

Подключите ваш MCP-клиент с помощью:

  • Транспорт: http (Streamable HTTP)

  • Заголовки: X-Ninja-Client-Id, X-Ninja-Client-Secret (оба обязательны), X-Ninja-Region (необязательный)

Список инструментов

Инструмент

Описание

Параметры

ninjaone_get_organizations

Список всех клиентских организаций

limit?, after?

ninjaone_get_organization

Получить детали организации по ID

organization_id (обязателен)

ninjaone_create_organization

Создать новую организацию

name (обязателен), description?, node_approval_mode?, tags?, template_organization_id?

ninjaone_get_organization_locations

Список местоположений (location) организации

organization_id (обязателен)

ninjaone_get_organization_devices

Список устройств организации

organization_id (обязателен), limit?, after?

ninjaone_get_devices

Глобальный список устройств с поддержкой фильтра df

df?, limit?, after?

ninjaone_get_device

Получить детали устройства по ID

device_id (обязателен)

ninjaone_get_device_alerts

Активные оповещения устройства

device_id (обязателен)

ninjaone_get_device_activities

Журнал активности устройства

device_id (обязателен), activity_type?, status?, older_than?, newer_than?, limit?

ninjaone_get_device_services

Список служб Windows устройства

device_id (обязателен), name?, state?

ninjaone_reboot_device

Перезагрузка устройства (разрушающая операция)

device_id (обязателен), mode? ("NORMAL"/"FORCED", по умолчанию NORMAL), reason?

ninjaone_get_alerts

Глобальный список активных оповещений

source_type?, df?

ninjaone_reset_alert

Сброс/закрытие оповещения (разрушающая операция)

alert_uid (обязателен), activity_note?

ninjaone_get_ticket_boards

Список всех досок тикетов

нет

ninjaone_get_tickets

Список тикетов по доске с фильтрами по статусу/организации/устройству

board_id (обязателен), status?, organization_id?, device_id?, limit?, cursor?

ninjaone_create_ticket

Создать новый тикет

summary (обязателен), organization_id (обязателен), description?, device_id?, location_id?, ticket_form_id?, status?, priority?, severity?, type?

ninjaone_update_ticket

Обновить поля тикета и/или добавить комментарий

ticket_id (обязателен), summary?, status?, priority?, assignee_id?, comment?, comment_public?

ninjaone_get_ticket_log_entries

Журнал тикета (описание/комментарии/история изменений)

ticket_id (обязателен), entry_type?

ninjaone_get_automation_scripts

Список доступных сценариев автоматизации

нет

ninjaone_get_device_scripting_options

Список сценариев/встроенных действий/вариантов учетных данных, доступных на устройстве

device_id (обязателен)

ninjaone_run_script_on_device

Запуск сценария или встроенного действия на устройстве (разрушающая операция)

device_id (обязателен), type (обязателен, "SCRIPT"/"ACTION"), script_id?, action_uid?, parameters?, run_as?

ninjaone_get_active_jobs

Глобальный список выполняющихся/ожидающих задач

job_type?, df?

ninjaone_get_device_active_jobs

Список выполняющихся/ожидающих задач на устройстве

device_id (обязателен)

Пример тестирования (Пример теста)

Список досок тикетов:

{
  "method": "tools/call",
  "params": { "name": "ninjaone_get_ticket_boards", "arguments": {} }
}

Эквивалентная команда curl для запущенного сервера (конечная точка MCP со streamable HTTP):

curl -X POST http://localhost:8080/mcp \
  -H "Content-Type: application/json" \
  -H "X-Ninja-Client-Id: <client_id>" \
  -H "X-Ninja-Client-Secret: <client_secret>" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": { "name": "ninjaone_get_ticket_boards", "arguments": {} }
  }'

Запуск сценария на устройстве:

{
  "method": "tools/call",
  "params": {
    "name": "ninjaone_run_script_on_device",
    "arguments": { "device_id": 123, "type": "SCRIPT", "script_id": 456 }
  }
}

Справочник по API

  • Документация: https://app.ninjarmm.com/apidocs-beta/core-resources (аналоги для регионов eu/oc/ca/us2/fed)

  • Аутентификация: OAuth2 client_credentials на POST /oauth/token (grant_type, client_id, client_secret, scope), области: monitoring, management, control

Известные ограничения / Примечания по реализации

  • Происхождение конечных точек: 4 из 5 конечных точек автоматизации/скриптов/заданий (requestScriptingOptions, runScriptOnDevice, getActiveJobs, getDeviceActiveJobs) были перепроверены по независимо полученной копии OpenAPI-спецификации NinjaOne. getAutomationScripts отсутствовал в этой копии (он новее той редакции спецификации) — его точное расположение в пути /api выведено по подтверждённому шаблону остальных 4, а не проверено независимо. См. комментарий в начале tools/automation.py.

  • ninjaone_get_tickets фильтрует на стороне клиента: схема запроса конечной точки досок NinjaOne определяет параметры filters/searchCriteria, но, по сообщениям проекта сообщества wyre-technology, на практике они возвращают 400 — этот инструмент всегда запрашивает нефильтрованную страницу и фильтрует status/organization_id/device_id на стороне клиента.

  • Нет отдельной конечной точки получения одного тикета или добавления комментария: API тикетов NinjaOne не предоставляет GET /ticketing/ticket/{id} — чтобы найти один тикет, нужно пролистывать ninjaone_get_tickets по его доске. Добавление комментария также не является отдельной конечной точкой — оно включено в параметры comment/comment_public инструмента ninjaone_update_ticket, наряду с PUT по самому тикету.

  • Фильтр df в ninjaone_get_devices может быть молча отброшен NinjaOne при ограничении по организации (известная проблема в проекте сообщества) — для списка устройств в рамках организации предпочтительнее использовать ninjaone_get_organization_devices.

  • Пока не протестировано на живом аккаунте NinjaOne с реальными учётными данными — на данный момент проверено: tools/list возвращает все 23 инструмента с чистыми схемами, pytest (15 тестов) проходит, а живой вызов с фиктивными client_id/secret достиг реальной производственной конечной точки /oauth/token NinjaOne и получил настоящий, корректно сформированный отказ (Client app not exist), а не ошибку о некорректном запросе — что подтверждает правильность базового URL, конечной точки токена и формата запроса.

-
license - not tested
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform

  • MCP Server for agents to onboard, pay, and provision services autonomously with InFlow

  • MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MSPbotsAI/ninjaone-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server