nable-rmm-mcp
N-able RMM MCP server — exposes the N-able RMM Data Extraction API as MCP tools.
Naming note: this integration is called "N-able RMM" in app.mspbots.ai (
sys_integration.subject_code = SOLARWIND— it was originally SolarWinds RMM). N-able's own public developer docs call the same product "N-sight" (https://developer.n-able.com/n-sight/docs/...). This is a different product from N-able N-Central, which is a separate integration in app.mspbots.ai with its own API. This server wraps N-sight/N-able RMM only.
MSPbots Connector
The MCP Gateway built for MSPs: visible, controlled, and your data stays where it belongs.
MSPbots Connector gives your AI clients one MCP URL to reach your entire MSP stack (RMM, PSA, documentation, security, finance), and gives you control over who can call which tool and a record of everything that was called.
Hosted service: connect.mspbots.ai · Free to use.
Why Connector

| Visible | Every tool call is logged: who, which vendor, when. Usage dashboard, CSV export, SIEM streaming. |
| Controlled | Role-based, per-tool allowlist. Deny by default. |
| Protected | Credentials encrypted per record. AI clients never see your vendor passwords or tokens. |
| MSP-native | Built for the MSP stack only: RMM, PSA, documentation, security, finance. |
Quick start
- Sign up at connect.mspbots.ai.
- Connect your vendors. Pick from 150+ connectors and authorize each one on the vendor's own page, or bring your own API keys. No extra vendor accounts needed.
- Set access. Create roles and decide which tools each role may call. Nothing is allowed until you allow it.
- Add your MCP URL to your AI client. Copy the URL from your Connector dashboard into Claude, ChatGPT, Cursor, VS Code, Gemini, Codex, or any MCP-capable client.
- Ask your AI to do real work, and watch every call appear in the audit log.
Features
Unified gateway
- One MCP URL for all your AI clients
- 150+ connectors across the MSP stack
- Custom MCP servers supported, free
- Authorization happens on each vendor's own page; the AI never sees passwords or tokens
- Bring your own credentials: use the vendor API keys you already have
- Multiple accounts per app; connect once, reuse across AI clients
- Tool search: finds the right action for the task
- One sign-in; vendor credentials are injected behind the scenes and OAuth tokens refresh automatically
Visibility
- Audit log for every tool call (who, which vendor, when)
- Usage dashboard: call volume, top vendors, error rate, per-user activity
- Export audit logs to CSV, or stream to Loki, Graylog, or LogScale (SIEM)
- Optional recording of tool arguments and result summaries (off by default, enabled per organization)
Control
- Per-role, per-tool allowlist, deny by default
- owner / admin / member roles
- SCIM provisioning with Entra ID, Okta, JumpCloud, and Google Workspace
Security
- Credentials encrypted one record at a time (AES-256-GCM, per-record key)
- AI clients authenticate with OAuth 2.1 + PKCE
- Vendor responses are scanned for prompt-injection patterns and returned as structured data. This is one layer of defense, not a guarantee against every attack.
- Static egress IP for customer firewall and API allowlisting
Pricing
Free.
Links: connect.mspbots.ai · mspbots.ai
Overview
This server implements the Model Context Protocol (Streamable HTTP/SSE transport) and wraps the N-sight API (the API behind the "N-able RMM" integration). It follows the MSPbots Vendor MCP Service SOP: stateless, no stored credentials, per-request header authentication.
The underlying API itself authenticates via an apikey query parameter and returns XML. This server never stores that key — the caller passes it per-request via a header, and every tool response is the XML converted to JSON for readability.
Quick Start
Docker (recommended)
docker compose up --build
The server starts on http://localhost:8080.
Local (uv)
uv sync
python -m nable_rmm_mcp
Health Check
curl http://localhost:8080/health
# {"status": "ok"}
No token is required for the health endpoint.
Authentication
Every request to /mcp must include the following HTTP headers. Header naming mirrors the fields on the existing "N-able RMM" integration form in app.mspbots.ai (API Token / URL).
| Header | Type | Required | Default | Allowed values | Description | Example |
|---|---|---|---|---|---|---|
X-Nable-Api-Token |
string | Required | None | None (free text) | N-able RMM API key, generated at Settings > General Settings > API > Generate. If the key is restricted to a client group, calls only return data for clients in that group. | X-Nable-Api-Token: <your_api_key> |
X-Nable-Server |
string | Optional | NABLE_BASE_URL environment variable (default https://www.am.remote.management) |
See the list of 11 regional servers below | N-able RMM is split into 11 independent servers by the region an account belongs to. Without this header the environment variable default is used; when the gateway serves tenants from multiple regions at once, it is overridden per request. | X-Nable-Server: https://www.systemmonitor.co.uk |
The 11 allowed values of X-Nable-Server (region -> Base URL):
| Region | Base URL |
|---|---|
| Americas (default) | https://www.am.remote.management |
| Asia | https://wwwasia.system-monitor.com |
| Australia | https://www.system-monitor.com |
| Europe | https://wwweurope1.systemmonitor.eu.com |
| France | https://wwwfrance.systemmonitor.eu.com |
| France1 | https://wwwfrance1.systemmonitor.eu.com |
| Germany | https://wwwgermany1.systemmonitor.eu.com |
| Ireland | https://wwwireland.systemmonitor.eu.com |
| Poland | https://wwwpoland1.systemmonitor.eu.com |
| United Kingdom | https://www.systemmonitor.co.uk |
| United States | https://www.systemmonitor.us |
Missing X-Nable-Api-Token returns 401 Unauthorized. N-able RMM also caps automated calls at 60 requests/minute per key — this server does not throttle for you, so pace bulk calls accordingly.
Environment Variables
| Variable | Default | Description |
|---|---|---|
MCP_HTTP_PORT |
8080 |
Listening port |
MCP_HTTP_HOST |
0.0.0.0 |
Listening host |
NABLE_BASE_URL |
https://www.am.remote.management |
Default regional server; override per-request with X-Nable-Server |
MCP Endpoint
POST http://localhost:8080/mcp
Connect your MCP client with:
- Transport:
http(Streamable HTTP / SSE) - Headers:
X-Nable-Api-Token: <api_key>(required),X-Nable-Server: <base_url>(optional)
Tool List
16 tools, covering the full public N-sight API reference plus the 4 endpoints already in production use under app.mspbots.ai's "N-able RMM" integration (Device Monitoring Details, Drive Space History, Patch, Performance History).
Clients & Sites
| Tool | Description | Parameters |
|---|---|---|
nable_rmm_get_clients |
List all clients visible to this API key | devicetype? ("server"/"workstation"/"mobile_device") |
nable_rmm_get_sites |
List all sites under a client | clientid (required, int) |
nable_rmm_create_client |
Create a new client (write operation) | name (required), timezone?, officehoursemail?, officehourssms?, outofofficehoursemail?, outofofficehourssms? |
nable_rmm_create_site |
Create a new site under a client (write operation) | clientid (required), sitename (required), router1?, router2?, workstationtemplate?, servertemplate? |
Devices
| Tool | Description | Parameters |
|---|---|---|
nable_rmm_get_devices_at_client |
List devices across all sites of a client by device type | clientid (required), devicetype (required, "server"/"workstation"/"mobile_device") |
nable_rmm_get_servers |
List server devices under a site with online/check status | siteid (required, int) |
nable_rmm_get_workstations |
List workstation devices under a site with online/check status | siteid (required, int) |
nable_rmm_get_agentless_assets |
List agentless (scan-discovered) assets under a site (N-able has marked this feature as deprecated) | siteid (required, int) |
nable_rmm_get_device_monitoring_details |
Get detailed monitoring information for a single device | deviceid (required, int) |
Checks, Patch & Performance
| Tool | Description | Parameters |
|---|---|---|
nable_rmm_get_failing_checks |
List currently failing checks | clientid?, check_type? ("checks"/"tasks"/"random") |
nable_rmm_get_checks |
List all checks configured on a device | deviceid (required, int) |
nable_rmm_get_check_config |
Get the detailed configuration of a single check (structure varies by check type/OS) | checkid (required, int) |
nable_rmm_get_outages |
List outage records for a device (open, or closed within the last 61 days) | deviceid (required, int) |
nable_rmm_get_drive_space_history |
Disk space check history (filtered from list_checks by check_type 1003/1004; N-sight has no dedicated service) | deviceid (required, int) |
nable_rmm_get_patch_list |
List all patches on a device with status/severity | deviceid (required, int) |
nable_rmm_get_performance_history |
Historical performance metrics for a device (bandwidth/disk/CPU/memory/NIC) | deviceid (required, int), interval (required, int, must be 15 or 60), since? |
Test Example
List all servers at a site:
{
"method": "tools/call",
"params": {
"name": "nable_rmm_get_servers",
"arguments": { "siteid": 12345 }
}
}
Equivalent curl against the running server (streamable HTTP MCP endpoint):
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-H "X-Nable-Api-Token: <api_key>" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "nable_rmm_get_servers",
"arguments": { "siteid": 12345 }
}
}'
Expected shape of a successful result (the underlying XML response, converted to JSON; fields abbreviated):
{
"content": [
{
"type": "text",
"text": "{\n \"created\": \"2026-03-15T10:00:00+00:00\",\n \"host\": \"...\",\n \"status\": \"OK\",\n \"items\": {\n \"server\": [ { \"serverid\": \"9001\", \"name\": \"DC01\", \"online\": \"1\", \"status_247\": \"5\", \"os\": \"Windows Server 2022\" } ]\n }\n}"
}
]
}
API Reference
Verified Against a Live Account
All 14 read tools have been exercised end-to-end against a real N-able RMM account (US region) and returned real data, including edge cases N-able's public docs left ambiguous:
nable_rmm_get_performance_history'sintervalparameter is required (not optional as the docs example implied) and only accepts15or60— confirmed via the API's own validation error (Invalid "interval": must be 15 or 60 (minutes)).nable_rmm_get_agentless_assetsreturns emptyitemson this account, consistent with N-able's note that the feature is deprecated.
The two write tools (nable_rmm_create_client, nable_rmm_create_site) were not exercised against the live account to avoid creating real data in a production customer's N-able RMM tenant — verify these against a disposable test account before relying on them.
Known Gaps / Not Implemented
get_site_installation_package— returns a binary installer download rather than structured data, not practical as an MCP tool.