ninjaone-mcp
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-заголовки:
Заголовок | Тип | Обязателен? | По умолчанию | Допустимые значения | Описание поля | Пример |
| строка | обязателен | нет | нет (произвольный текст) | Client ID OAuth2-приложения NinjaOne типа «API Services» (создается в NinjaOne в разделе Administration → Apps → API), этот сервис использует его для получения кратковременного bearer-токена и никогда не сохраняет его на диск. |
|
| строка | обязателен | нет | нет (произвольный текст) | Client Secret того же OAuth2-приложения. |
|
| строка | необязателен |
|
| Регион развертывания NinjaOne, определяет фактический base URL. |
|
Отсутствие любого из обязательных заголовков возвращает 401 Unauthorized.
Переменные окружения
Переменная | По умолчанию | Описание |
|
| Порт прослушивания |
|
| Хост прослушивания |
Переменной окружения для 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(необязательный)
Список инструментов
Инструмент | Описание | Параметры |
| Список всех клиентских организаций |
|
| Получить детали организации по ID |
|
| Создать новую организацию |
|
| Список местоположений (location) организации |
|
| Список устройств организации |
|
| Глобальный список устройств с поддержкой фильтра |
|
| Получить детали устройства по ID |
|
| Активные оповещения устройства |
|
| Журнал активности устройства |
|
| Список служб Windows устройства |
|
| Перезагрузка устройства (разрушающая операция) |
|
| Глобальный список активных оповещений |
|
| Сброс/закрытие оповещения (разрушающая операция) |
|
| Список всех досок тикетов | нет |
| Список тикетов по доске с фильтрами по статусу/организации/устройству |
|
| Создать новый тикет |
|
| Обновить поля тикета и/или добавить комментарий |
|
| Журнал тикета (описание/комментарии/история изменений) |
|
| Список доступных сценариев автоматизации | нет |
| Список сценариев/встроенных действий/вариантов учетных данных, доступных на устройстве |
|
| Запуск сценария или встроенного действия на устройстве (разрушающая операция) |
|
| Глобальный список выполняющихся/ожидающих задач |
|
| Список выполняющихся/ожидающих задач на устройстве |
|
Пример тестирования (Пример теста)
Список досок тикетов:
{
"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/tokenNinjaOne и получил настоящий, корректно сформированный отказ (Client app not exist), а не ошибку о некорректном запросе — что подтверждает правильность базового URL, конечной точки токена и формата запроса.
This server cannot be installed
Maintenance
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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