ninjaone-mcp
ninjaone-mcp
NinjaOne RMM-MCP-Server – stellt NinjaOnes Public API v2 (Organizations, Devices, Alerts, Ticketing, Automation/Scripting, Jobs) als MCP-Tools bereit.
Was ist NinjaOne / wann sollte ein Agent dies verwenden
NinjaOne ist eine RMM-Plattform (Remote Monitoring and Management), die MSPs zur Verwaltung der IT-Umgebungen ihrer Kunden einsetzen. Ein Agent sollte dieses MCP für Anfragen wie die folgenden verwenden:
„Wie viele Geräte hat dieser Kunde und welche sind offline?" →
ninjaone_get_organization_devices/ninjaone_get_devices„Gibt es aktive Alerts für dieses Gerät/diese Organisation?" →
ninjaone_get_device_alerts/ninjaone_get_alerts„Welche Tickets sind im Support-Board offen?" →
ninjaone_get_ticket_boards, dannninjaone_get_tickets„Führe die Datenträgerbereinigung auf diesem Gerät aus und sag mir, wann sie fertig ist" →
ninjaone_get_device_scripting_options, um zu bestätigen, was ausführbar ist,ninjaone_run_script_on_device, dannninjaone_get_device_active_jobs, um den Abschluss zu beobachten„Welche Automatisierungsskripte haben wir verfügbar?" →
ninjaone_get_automation_scripts
Überblick
Dieser Server implementiert das Model Context Protocol (Streamable-HTTP-Transport) mit 23 Tools in 5 Gruppen und folgt dabei der MSPbots Vendor MCP Service SOP: zustandslos, keine gespeicherten Anmeldedaten, Authentifizierung per Header bei jeder Anfrage.
Dieses Projekt wurde ausgehend von der Tool-Oberfläche des Community-Projekts wyre-technology/ninjaone-mcp (Organizations/Devices/Alerts/Tickets, hier direkt gegen NinjaOnes REST-API statt gegen sein Node SDK neu implementiert) erstellt und um 5 Automatisierungs-/Skript-/Job-Tools erweitert, die aus NinjaOnes eigener OpenAPI-3.0.1-Spezifikation stammen – jeder unten aufgeführte Endpunkt wurde gegen eine echte NinjaOne-API-Spezifikation geprüft, nicht geraten oder aus einer Sekundärquelle kopiert.
NinjaOne authentifiziert über OAuth2 client_credentials: Die Client-ID und das Secret einer NinjaOne-OAuth2-App vom Typ „API Services" werden unter POST {base_url}/oauth/token gegen ein kurzlebiges Bearer-Token eingetauscht. Dieser Server führt diesen Austausch selbst durch, bei jedem Tool-Aufruf neu – er speichert oder cached niemals ein Token (oder die client_id/das Secret) über Aufrufe hinweg.
Schnellstart
Docker (empfohlen)
docker compose up --buildLokal (uv)
uv sync
python -m ninjaone_mcpHealth-Check
curl http://localhost:8080/health
# {"status": "ok"}Für den Health-Check-Endpunkt sind keine Anmeldedaten erforderlich.
Authentifizierungsparameter
Jede Anfrage an /mcp muss die folgenden HTTP-Header enthalten:
Header | Typ | Erforderlich | Standardwert | Mögliche Werte | Feldbeschreibung | Beispiel |
| string | Erforderlich | Keiner | Keine (Freitext) | Die Client-ID einer NinjaOne-OAuth2-App vom Typ „API Services" (in der NinjaOne-Konsole unter Administration → Apps → API erstellt); dieser Dienst verwendet sie, um ein kurzlebiges Bearer-Token zu erhalten, und speichert sie nie auf der Festplatte. |
|
| string | Erforderlich | Keiner | Keine (Freitext) | Das Client-Secret derselben OAuth2-App. |
|
| string | Optional |
|
| Die NinjaOne-Bereitstellungsregion; sie bestimmt die tatsächliche Basis-URL der Anfragen. |
|
Fehlt einer der beiden erforderlichen Header, wird 401 Unauthorized zurückgegeben.
Umgebungsvariablen
Variable | Default | Description |
|
| Lauschport |
|
| Lauschhost |
Es gibt keine Env-Variable für die Basis-URL – die Basis-URL wird pro Anfrage aus dem X-Ninja-Region-Header abgeleitet (siehe Regionstabelle in config.py).
MCP-Endpunkt
POST http://localhost:8080/mcpVerbinden Sie Ihren MCP-Client mit den folgenden Einstellungen:
Transport:
http(Streamable HTTP)Header:
X-Ninja-Client-Id,X-Ninja-Client-Secret(beide erforderlich),X-Ninja-Region(optional)
Tool-Liste
Tool | Funktion | Parameter |
| Alle Kundenorganisationen auflisten |
|
| Details einer einzelnen Organisation per ID abrufen |
|
| Neue Organisation erstellen |
|
| Standorte einer Organisation auflisten |
|
| Geräte einer Organisation auflisten |
|
| Geräte global auflisten, unterstützt |
|
| Details eines einzelnen Geräts per ID abrufen |
|
| Aktive Alerts eines Geräts abrufen |
|
| Geräteaktivitätsprotokoll abrufen |
|
| Windows-Dienste des Geräts abrufen |
|
| Gerät neu starten (destruktiver Vorgang) |
|
| Aktive Alerts global auflisten |
|
| Einen Alert zurücksetzen/schließen (destruktiver Vorgang) |
|
| Alle Ticket-Boards auflisten | Keine |
| Tickets pro Board auflisten, mit Filter nach Status/Organisation/Gerät |
|
| Neues Ticket erstellen |
|
| Ticket-Felder aktualisieren und/oder Kommentar hinzufügen |
|
| Ticket-Log abrufen (Beschreibung/Kommentare/Änderungshistorie) |
|
| Verfügbare Automatisierungsskripte auflisten | Keine |
| Auf dem Gerät ausführbare Skripte/Aktionen/Anmeldeoptionen abrufen |
|
| Skript oder integrierte Aktion auf dem Gerät ausführen (destruktiver Vorgang) |
|
| Global laufende/wartende Jobs auflisten |
|
| Laufende/wartende Jobs eines Geräts abrufen |
|
Testbeispiel
Ticket-Boards auflisten:
{
"method": "tools/call",
"params": { "name": "ninjaone_get_ticket_boards", "arguments": {} }
}Entsprechender curl-Aufruf gegen den laufenden Server (Streamable-HTTP-MCP-Endpunkt):
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": {} }
}'Ein Skript auf einem Gerät ausführen:
{
"method": "tools/call",
"params": {
"name": "ninjaone_run_script_on_device",
"arguments": { "device_id": 123, "type": "SCRIPT", "script_id": 456 }
}
}API-Referenz
Dokumentation:
https://app.ninjarmm.com/apidocs-beta/core-resources(regionsspezifische Entsprechungen füreu/oc/ca/us2/fed)Authentifizierung: OAuth2-
client_credentials-Grant unterPOST /oauth/token(grant_type,client_id,client_secret,scope), Scopes:monitoring,management,control
Bekannte Lücken / Hinweise zur Implementierung
Endpunkt-Herkunft: 4 der 5 Automatisierungs-/Skript-/Jobs-Endpunkte (
requestScriptingOptions,runScriptOnDevice,getActiveJobs,getDeviceActiveJobs) wurden gegen eine unabhängig beschaffte Kopie der OpenAPI-Spezifikation von NinjaOne gegengeprüft.getAutomationScriptswar in dieser Kopie nicht enthalten (es ist neuer als diese Spezifikationsrevision) — seine genaue/api-Pfadplatzierung wird aus dem bestätigten Muster der anderen 4 abgeleitet, nicht unabhängig verifiziert. Siehe den Kommentar am Anfang vontools/automation.py.ninjaone_get_ticketsfiltert clientseitig: Das Anforderungsschema des Board-Run-Endpunkts von NinjaOne definiert die Parameterfilters/searchCriteria, aber das Community-Projekt wyre-technology berichtet, dass diese in der Praxis 400 zurückgeben — dieses Tool fordert immer eine ungefilterte Seite an und filtert stattdessenstatus/organization_id/device_idclientseitig.Kein Endpunkt zum Abrufen einzelner Tickets oder zum eigenständigen Hinzufügen von Kommentaren: Die Ticketing-API von NinjaOne stellt keinen
GET /ticketing/ticket/{id}bereit — um ein einzelnes Ticket nachzuschlagen, blättere durchninjaone_get_ticketsauf dessen Board. Das Hinzufügen eines Kommentars ist ebenfalls kein separater Endpunkt — es ist in die Parametercomment/comment_publicvonninjaone_update_ticketintegriert, zusammen mit einemPUTauf das Ticket selbst.Der
df-Filter vonninjaone_get_deviceskann stillschweigend verworfen werden von NinjaOne bei der Eingrenzung nach Organisation (ein bekanntes Problem im Community-Projekt) — bevorzugeninjaone_get_organization_devicesfür eine organisationsbezogene Geräteliste.Noch nicht gegen ein Live-NinjaOne-Konto mit echten Anmeldedaten getestet — bisher verifiziert:
tools/listgibt alle 23 Tools mit sauberen Schemas zurück,pytest(15 Tests) besteht, und ein Live-Aufruf mit einer Dummy-client_id/secret erreichte den echten Produktions-/oauth/token-Endpunkt von NinjaOne und erhielt eine echte, wohlgeformte Ablehnung (Client app not exist) zurück, anstatt eines Fehlers wegen fehlerhafter Anfrage — was bestätigt, dass Basis-URL, Token-Endpunkt und Anforderungsformat korrekt sind.
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