Skip to main content
Glama
NinjaOne MCP Server

NinjaOne MCP Server

NinjaOne MCP Server

A comprehensive Model Context Protocol (MCP) server that integrates NinjaOne RMM with Claude. Manage devices, automate IT tasks, handle ticketing, monitor patch status, and execute remote scriptsβ€”all through natural language conversation with Claude AI.

What is an MCP? A Model Context Protocol server extends Claude's capabilities by providing access to external systems and APIs. This server bridges Claude and NinjaOne, enabling AI-powered IT management.

✨ Key Features

πŸ–₯️ Device Management

  • List, search, and get detailed information about devices

  • Monitor device status, health, and connectivity

  • Track active alerts and notifications

  • Search devices using NinjaOne filter syntax

πŸš€ Device Actions

  • Reboot devices (graceful or forced)

  • Execute scripts and built-in actions remotely

  • Automate IT tasks across your infrastructure

πŸ”§ Patch & Software Management

  • View OS and software patch status

  • Track patch compliance

  • Inventory installed software across devices

  • Identify outdated or vulnerable software

🎫 Ticketing System

  • Create support tickets programmatically

  • Query existing tickets

  • Update ticket information

  • Add comments and notes

πŸ“Š Reporting & Monitoring

  • Device health reports

  • Antivirus status across fleet

  • Organization-wide reporting

  • Custom queries via generic API access

πŸ” Enterprise Security

  • OAuth 2.0 authentication with automatic token refresh

  • No credentials in version control (environment variables only)

  • Full support for NinjaOne's security model

  • TypeScript for type safety

βš™οΈ Production Ready

  • Node.js 20 LTS

  • Comprehensive error handling

  • Pagination support for large datasets

  • 20+ API tools for complete NinjaOne integration


Related MCP server: datto-rmm-mcp

πŸš€ Quick Start

Prerequisites

  • Node.js 20 LTS or higher (Download)

  • npm (included with Node.js)

  • NinjaOne account with API access

  • Claude Desktop (for MCP integration)

Installation (5 minutes)

  1. Clone the repository:

git clone https://github.com/SoroushAlamdari/ninjaone-mcp.git
cd ninjaone-mcp
  1. Install dependencies:

npm install
  1. Build the server:

npm run build
  1. Configure NinjaOne credentials (see OAuth Setup below)


πŸ” OAuth Setup (Required)

This server uses OAuth 2.0 client credentials flow for secure API access. Follow these steps:

Step 1: Create OAuth Application in NinjaOne

  1. Log into your NinjaOne Dashboard

  2. Go to Admin/Settings β†’ API β†’ Client app IDs

  3. Click + Create application

  4. Fill in the form:

    • Application platform: API Services (machine-to-machine)

    • Name: Claude MCP (or your preferred name)

    • Scopes: Check Monitoring, Management, Control

    • Allowed grant types: Check Client credentials

  5. Click Create and copy the generated credentials

Step 2: Add Credentials to Environment

Create a .env file in the project root:

cp .env.example .env

Edit .env and add your credentials:

NINJA_CLIENT_ID=<your_client_id_here>
NINJA_CLIENT_SECRET=<your_client_secret_here>
NINJA_API_BASE_URL=https://your-instance.ninjarmm.com

⚠️ Security: Never commit .env or token.json to version control. .gitignore covers both. Keep real values out of .env.example β€” it is committed.

How tokens are handled

  • On start the server loads token.json if present, otherwise requests a token with client credentials.

  • Before each API call it renews the token if it is within a minute of expiry, and if NinjaOne still answers 401 it renews once and retries.

  • Every new token is saved to token.json, so restarts don't break the connection.

Alternative: browser login (Web app + refresh token)

If you can only use a Web client app, enable the Authorization code and Refresh token grants on it, then run once:

node get-oauth-token.js

Open the printed link, sign in, and the token (with refresh token) is saved to token.json. The script reads credentials from .env or from your Claude Desktop config. If NinjaOne answers Invalid scope offline_access, the app isn't allowed refresh tokens β€” use the API Services app above instead.


πŸ€– Claude Desktop Integration

Windows Setup

  1. Edit Claude Desktop config:

    • Open: C:\Users\YourUsername\AppData\Roaming\Claude\claude_desktop_config.json

    • Or use: %APPDATA%\Claude\claude_desktop_config.json

  2. Add this to the mcpServers section:

{
  "mcpServers": {
    "ninjaone-mcp": {
      "command": "node",
      "args": [
        "C:\\Users\\YourUsername\\ninjaone-mcp\\dist\\index.js"
      ],
      "env": {
        "NINJA_CLIENT_ID": "<your_client_id>",
        "NINJA_CLIENT_SECRET": "<your_client_secret>",
        "NINJA_API_BASE_URL": "https://your-instance.ninjarmm.com"
      }
    }
  }
}

macOS Setup

  1. Edit Claude Desktop config:

    • Run: nano ~/.claude/claude_desktop_config.json

  2. Add MCP configuration (same structure as Windows above, using macOS paths):

{
  "mcpServers": {
    "ninjaone-mcp": {
      "command": "node",
      "args": [
        "/Users/YourUsername/ninjaone-mcp/dist/index.js"
      ],
      "env": {
        "NINJA_CLIENT_ID": "<your_client_id>",
        "NINJA_CLIENT_SECRET": "<your_client_secret>",
        "NINJA_API_BASE_URL": "https://your-instance.ninjarmm.com"
      }
    }
  }
}

3. Start Using It

  1. Close and reopen Claude Desktop

  2. Look for the NinjaOne connector in the Connectors panel

  3. Start using the tools:

    "List all my devices"
    "Show me critical alerts"
    "Get patch status for my servers"
    "Create a ticket for offline devices"
    "Run an inventory scan on all workstations"

Verification Checklist

  • NinjaOne MCP appears in Claude Desktop Connectors list

  • All 20+ tools are visible (no "no tools available" message)

  • Test with: "List my devices"

  • Devices appear in the response


πŸ“š Available Tools (20+ API Functions)

Device Management (5 tools)

Tool

Purpose

list_devices

List all devices with pagination and filtering

get_device

Get detailed information about a specific device

search_devices

Search devices using NinjaOne filter syntax

get_device_alerts

Get active alerts for a device

get_all_alerts

Get all active alerts across your fleet

Device Actions (2 tools)

Tool

Purpose

reboot_device

Reboot a device (graceful or forced shutdown)

run_script

Execute a script or built-in action on a device

Patch Management (2 tools)

Tool

Purpose

get_os_patches

View OS patch status for a device

get_software_patches

View software patch status for a device

Software & Inventory (1 tool)

Tool

Purpose

get_device_software

View installed software on a device

Ticketing (4 tools)

Tool

Purpose

create_ticket

Create a new support ticket

get_ticket

Retrieve ticket details

update_ticket

Update ticket information and status

add_ticket_comment

Add a comment to a ticket

Organization & Contacts (3 tools)

Tool

Purpose

list_organizations

List all organizations

get_organization

Get organization details

list_contacts

List all contacts in your account

Reports & Monitoring (2 tools)

Tool

Purpose

get_device_health

Generate a device health report

get_antivirus_status

Get antivirus status across all devices

Advanced/Generic API (2 tools)

Tool

Purpose

api_get

Make a GET request to any NinjaOne API endpoint

api_post

Make a POST request to any NinjaOne API endpoint


πŸ’¬ Example Use Cases

Ask Claude any of these:

"List all my devices and show their status"
"Which devices haven't checked in for more than 24 hours?"
"Show me all critical and high-severity alerts"
"Get patch compliance report for all Windows servers"
"Create a ticket for all offline devices"
"Search for all devices with antivirus disabled"
"Run a compliance script on all workstations in Location XYZ"
"Show me devices running outdated versions of software"
"Get a summary of device health across the organization"
"Which devices need OS updates?"

πŸ“‘ API Methods & Endpoints

All tools communicate with NinjaOne API v2.0 using the following base URL:

https://<your-instance>.ninjarmm.com/api/v2

Authentication Header

All requests include:

Authorization: Bearer <access_token>
Content-Type: application/json

Tool Reference with API Methods

Tool

HTTP Method

Endpoint

Description

list_devices

GET

/devices

Retrieve paginated device list

get_device

GET

/devices/{id}

Get single device details

search_devices

GET

/devices?filter=...

Search using filter syntax

get_device_alerts

GET

/devices/{id}/alerts

Get alerts for device

get_all_alerts

GET

/alerts

Get all active alerts

reboot_device

POST

/devices/{id}/reboot

Initiate device reboot

run_script

POST

/devices/{id}/scripts

Execute script on device

get_os_patches

GET

/devices/{id}/patches/os

Get OS patch status

get_software_patches

GET

/devices/{id}/patches/software

Get software patch status

get_device_software

GET

/devices/{id}/software

Get installed software

create_ticket

POST

/tickets

Create support ticket

get_ticket

GET

/tickets/{id}

Get ticket details

update_ticket

PATCH

/tickets/{id}

Update ticket

add_ticket_comment

POST

/tickets/{id}/comments

Add ticket comment

list_organizations

GET

/organizations

List all organizations

get_organization

GET

/organizations/{id}

Get org details

list_contacts

GET

/contacts

List all contacts

get_device_health

GET

/reports/device-health

Get device health report

get_antivirus_status

GET

/reports/antivirus

Get antivirus report

api_get

GET

/{path}

Custom GET request

api_post

POST

/{path}

Custom POST request

Example API Calls

List Devices (with pagination):

curl -X GET "https://your-instance.ninjarmm.com/api/v2/devices?pageNo=1&pageSize=50" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json"

Get Device Details:

curl -X GET "https://your-instance.ninjarmm.com/api/v2/devices/12345" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Search Devices with Filter:

curl -X GET "https://your-instance.ninjarmm.com/api/v2/devices?filter=status=online" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Create a Ticket:

curl -X POST "https://your-instance.ninjarmm.com/api/v2/tickets" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Device Offline",
    "description": "Device XYZ is offline",
    "priority": "high"
  }'

Reboot a Device:

curl -X POST "https://your-instance.ninjarmm.com/api/v2/devices/12345/reboot" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "graceful"}'

NinjaOne API Documentation

For complete API reference and additional endpoints:


πŸ› οΈ Development

Build Production Code

npm run build

Watch Mode (Auto-rebuild on changes)

npm run dev

Type Checking

npm run type-check

Run Tests

npm test

Project Structure

ninjaone-mcp/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ index.ts           # MCP server entry point
β”‚   β”œβ”€β”€ api-client.ts      # NinjaOne API wrapper
β”‚   β”œβ”€β”€ oauth.ts           # OAuth 2.0 handling
β”‚   β”œβ”€β”€ tools.ts           # Tool definitions
β”‚   └── types.ts           # TypeScript interfaces
β”œβ”€β”€ dist/                  # Compiled JavaScript (auto-generated)
β”œβ”€β”€ package.json
β”œβ”€β”€ tsconfig.json
└── README.md

πŸ”’ Security Best Practices

βœ… Do:

  • βœ… Use .env file for credentials (already in .gitignore)

  • βœ… Rotate OAuth credentials regularly

  • βœ… Limit API scopes to what you need

  • βœ… Use strong, unique client secrets

  • βœ… Monitor API usage in NinjaOne

❌ Don't:

  • ❌ Commit .env file to version control

  • ❌ Share credentials or secrets

  • ❌ Use credentials in code or logs

  • ❌ Store secrets in comments

  • ❌ Log sensitive information


πŸ› Troubleshooting

"NinjaOne MCP connector not appearing in Claude Desktop"

  • Verify dist/index.js exists: ls dist/

  • Rebuild: npm run build

  • Check JSON syntax: Use jsonlint.com

  • Close and fully reopen Claude Desktop (don't just restart)

  • Check file paths match your installation

"Invalid or missing credentials"

  • Verify credentials in .env file (not in config file)

  • Check for extra spaces or quotes in values

  • Regenerate credentials in NinjaOne if unsure

  • Ensure API application has correct scopes: Monitoring, Management, Control

"Cannot find module errors"

  • Run: npm install

  • Delete node_modules folder and reinstall: rm -rf node_modules && npm install

"node: command not found"

  • Verify Node.js 20+ is installed: node --version

  • On Windows, use full path or add Node to PATH

  • On macOS/Linux, ensure /usr/local/bin is in PATH

Enable Debug Logging

Set environment variable and rebuild:

export DEBUG=1    # Linux/macOS
set DEBUG=1       # Windows
npm run build

πŸ“– API Documentation

For detailed NinjaOne API documentation:


πŸ“„ License

MIT License - See LICENSE file for details

Free to use, modify, and distribute.


🀝 Contributing

Contributions welcome! Please:

  1. Fork the repository

  2. Create a feature branch

  3. Test your changes

  4. Submit a pull request


πŸ’‘ Support


πŸ“Š Project Stats

  • Language: TypeScript

  • Runtime: Node.js 20 LTS

  • API Integration: NinjaOne RMM v2.0

  • Protocol: Model Context Protocol (MCP)

  • Authentication: OAuth 2.0

  • Tools: 20+

Available Tools

21 tools
add_ticket_commentC

Add a comment to a ticket

NameRequiredDescriptionDefault
commentYesComment text
ticket_idYesThe ticket ID

TDQS

C2.6/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing beyond the bare action. It does not say whether the comment is attributed to the caller, whether it notifies watchers, whether comments are editable or deletable afterwards, or what the call returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single short sentence is front-loaded and waste-free, but its brevity reflects under-specification rather than disciplined editing. There is no structure to speak of for a mutating operation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write operation with no annotations and no output schema, the definition leaves critical gaps: success/failure behavior, side effects on ticket state or notifications, and any permission requirements are all unstated. Given the tool's complexity is low, only minimal context is needed, but even that is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with both ticket_id and comment documented, so the schema already explains the inputs. The description adds nothing about ID format, comment length limits or accepted content, which is the baseline 3 for fully documented parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (add) and resource (comment on a ticket), which is clearly distinct from the sibling create_ticket, update_ticket and get_ticket tools. It stops short of differentiating itself explicitly, but the action is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this instead of update_ticket or create_ticket, no preconditions such as ticket state or required permissions, and no mention of alternatives. The agent must infer the usage context entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

api_getC

Make a generic GET request to any NinjaOne API endpoint

NameRequiredDescriptionDefault
pathYesAPI endpoint path (e.g., /v2/devices)

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states this is a GET, but does not disclose authentication requirements, rate limits, error behavior, response shape, or whether arbitrary paths may expose sensitive data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. It clearly communicates the core operation without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an unrestricted API passthrough with no annotations and no output schema, the description is missing important context about permissions, error handling, and when dedicated tools should be preferred. It is enough to understand the basic mechanism but not enough to use it safely and correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: the path parameter is documented with an example in the schema. The description adds only that any endpoint is allowed, without format constraints or path validation rules, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('GET') and resource ('NinjaOne API endpoint'), and implicitly contrasts with the api_post sibling. However, it does not distinguish itself from the many dedicated get_* tools such as get_device or get_ticket.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this generic endpoint versus the dedicated sibling tools like get_device, list_devices, or get_ticket. The agent must infer that this is a fallback for endpoints without a dedicated tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

api_postC

Make a generic POST request to any NinjaOne API endpoint

NameRequiredDescriptionDefault
dataYesRequest body
pathYesAPI endpoint path

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations at all, so the description carries the full burden for what is a write operation. It says nothing about authentication requirements, whether arbitrary writes can be destructive or irreversible, rate limits, or error behavior on an invalid path or body. For an unannotated raw-POST escape hatch, that is a substantial omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the verb and resource come first. It is not padded, though its brevity is a symptom of the missing guidance rather than a virtue here.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, a nested request body, and fully arbitrary endpoint targeting, the definition leaves out too much an agent needs before calling: path formatting conventions, auth assumptions, and what a call actually returns or how failures surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters carry descriptions ('API endpoint path', 'Request body'), so the schema does the heavy lifting. The description adds no extra meaning such as path format, versioning prefix, or body shape, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: a POST request to a NinjaOne API endpoint. This clearly separates it from api_get (read) and from the purpose-built siblings like reboot_device or create_ticket. The only shortfall is that 'any endpoint' leaves the scope open, which is inherent to an escape-hatch tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to reach for this tool instead of a dedicated sibling such as create_ticket or reboot_device, nor on when it should be avoided. 'Generic ... any endpoint' hints it is a fallback, but the agent has to infer that with no statement of prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_ticketC

Create a new support ticket

NameRequiredDescriptionDefault
titleYesTicket title
priorityNoTicket priority
descriptionNoTicket description

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, yet says nothing about required fields, permissions, side effects (notifications?), or what is returned on success. For a mutation tool with zero annotation coverage this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the verb and resource front-loaded and zero bloat. It is efficient, though its brevity is partly under-specification rather than disciplined density.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A 3-parameter mutation tool with no annotations and no output schema needs at least a note on required fields, side effects, or the resulting ticket. The description leaves the agent without enough context to call it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so 'title', 'priority', and 'description' are already documented in the schema and the description adds nothing beyond them. Baseline 3 applies when the schema does all the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Create') and resource ('support ticket'), so the agent knows exactly what the tool does. It does not differentiate itself from siblings like get_ticket or update_ticket, but the create-vs-read-vs-update distinction is implicit in the verb.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to create a ticket versus when to use update_ticket or add_ticket_comment on an existing one, and no prerequisites or context for ticket creation. The agent must infer usage from the sibling names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_all_alertsB

Get all active alerts across all devices

NameRequiredDescriptionDefault
pageNoNoPage number for pagination
pageSizeNoNumber of alerts per page

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the 'active' filter, which is real behavioral information, but says nothing about pagination limits, default page size, total counts, or retry/rate-limit behavior for what could be a very large fleet-wide result set.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the scope constraint ('across all devices') is stated immediately. It is arguably under-specified rather than padded, which is the better failure mode for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description is the only source of behavioral context, and it omits result shape, pagination semantics, and result volume expectations for a potentially unbounded fleet-wide query. Adequate to identify the tool, not adequate to invoke it safely at scale.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both pagination parameters, so the schema already does the explanatory work. The description adds no guidance on defaults, maximum page size, or whether omitting the params returns everything, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Get') plus resource ('all active alerts') plus scope ('across all devices'), which implicitly separates it from the sibling get_device_alerts. It does not explicitly name the sibling, but an agent can tell this is the fleet-wide listing versus the per-device variant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'across all devices' implies the usage context (use this for org-wide triage, get_device_alerts for one device), but there is no explicit when-to-use or when-not statement, and no mention of whether results should normally be paginated through.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_antivirus_statusC

Get antivirus status report

NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about read-only safety, scope of the report, whether results are per-device or organization-wide, or what data is included. For a zero-parameter aggregate query, the scope of what is returned is precisely the missing behavior an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler and the action front-loaded. It is efficient, though its brevity reflects under-specification rather than disciplined editing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should at least sketch what the status report contains and at what granularity; it does neither. With zero annotations and zero parameters, the description is the only channel for context and it provides almost none.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The empty schema is internally consistent with the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get antivirus status report'), so the basic action is understandable. However, it gives no scope (fleet-wide vs. single device) and does not differentiate itself from nearby siblings such as get_device_health, get_device_alerts, or get_all_alerts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when this tool should be used versus get_device_health, get_device_alerts, or get_all_alerts, nor any prerequisite or exclusion. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_deviceB

Get detailed information about a specific device

NameRequiredDescriptionDefault
device_idYesThe device ID from NinjaOne

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it says nothing about what 'detailed information' includes, whether it errors on unknown IDs, or whether any auth scope is needed. The read-only nature is only weakly implied by 'Get'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short, front-loaded sentence with no waste. It is efficient, though its brevity is achieved by omitting information rather than by tight phrasing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description should say roughly what comes back and whether the ID must be discovered first. 'Detailed information' leaves an agent guessing about the payload.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter's description already names NinjaOne as the ID source. The tool description adds nothing beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: retrieve details for one specific device. The word "specific" implicitly distinguishes it from list_devices and search_devices, but it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the lookup-by-ID path rather than a bulk listing. No explicit when-to-use vs when-to-use-something-else guidance, and no mention that device_id must come from list_devices/search_devices.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_device_alertsB

Get active alerts for a specific device

NameRequiredDescriptionDefault
device_idYesThe device ID

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden. The word 'active' hints at a filter (excluding resolved/dismissed alerts) but this is never defined, and nothing is said about permissions, pagination, or what the response contains for a read tool with no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the scope constraint front-loaded and no filler. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read this is close to adequate, but with no annotations and no output schema the description should say what 'active' means and roughly what comes back. It leaves the return shape and the definition of 'active' entirely unspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter (device_id) with 100% schema description coverage, so the schema already covers it. The description adds nothing beyond confirming the alert scope is device-level; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get active alerts') scoped to a device, which implicitly separates it from the sibling get_all_alerts. It never names that sibling explicitly, so the differentiation is left partly to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of get_all_alerts as the alternative for cross-device queries, and no preconditions stated. The agent must infer routing from the word 'specific device' alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_device_healthB

Get device health report

NameRequiredDescriptionDefault

No parameters

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden and discloses almost nothing: not whether this is a snapshot or historical trend, not what metrics are returned, not whether permissions are required, and not whether it is expensive or rate-limited. 'Report' hints at an aggregate payload but the agent cannot predict shape or cost.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or redundancy. It is arguably too terse given the total absence of annotations, but nothing in it is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and no parameters at all, the description is the only source of information about this tool β€” yet it says nothing about the return contents, the targeting of the device, or the safety profile. An agent cannot call this confidently or know what it will receive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema is empty (0 parameters) and schema coverage is 100%, so the baseline is 4 and there are no parameters for the description to explain. The only residual concern is that with zero parameters it is unclear which device the report targets, which is a completeness issue rather than a parameter-documentation one.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('device health report'), so the agent knows this is a read of health data rather than raw device attributes. However, it never differentiates itself from near-neighbors like get_device, get_device_alerts, or get_antivirus_status, and never defines what 'health' comprises.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusions, and no mention of the obvious alternatives (get_device_alerts, get_antivirus_status, get_os_patches) that also surface device condition data. The agent must infer selection purely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_device_softwareC

Get software inventory for a device

NameRequiredDescriptionDefault
device_idYesThe device ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it only implies read-only behavior via the word 'Get'. It says nothing about permissions, pagination, result freshness, or whether the inventory is truncated for large devices.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler β€” nothing wasted, but also nothing beyond the minimum. Brevity here is efficient rather than padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with zero annotations, no output schema, and no documentation of what 'software inventory' contains (application names, versions, install dates?), the description is too thin. An agent cannot predict the response shape or scope before calling it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single required parameter with 100% schema description coverage, so the schema already handles it; the description adds no format, sourcing, or lookup hints beyond 'for a device'. Baseline 3 applies per the high-coverage rule.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Get software inventory for a device'), which is clearly distinguishable from write operations like reboot_device or run_script. However, it doesn't differentiate from adjacent device read tools such as get_device or get_os_patches, so the agent must infer the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no prerequisites, and no pointer to alternatives despite many device-related siblings (get_device_health, get_antivirus_status, get_os_patches). The only usage signal is the implicit 'pass a device_id to get its software'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_organizationC

Get organization details

NameRequiredDescriptionDefault
org_idYesThe organization ID

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden and it discloses nothing. It does not confirm this is a read-only operation, mention permission/auth requirements, or indicate what happens when the org_id is unknown (error vs empty).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three words, front-loaded, with zero filler or repetition. It is efficient, though the terseness borders on under-specification rather than true economy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivial single-parameter getter the description is minimally adequate, but with no output schema and no indication of what "details" comprises, the agent cannot anticipate the response shape. A short clause on returned fields or error behavior would close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is exactly one parameter with 100% schema description coverage, so the schema already documents org_id. The description adds no format hints (e.g., UUID vs numeric ID) or constraints beyond that, making the baseline 3 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description has a verb ("Get") and a resource ("organization details"), which is better than a tautology, but "details" is vague about what is actually returned. It also does nothing to distinguish itself from the sibling list_organizations, so an agent must infer that this one takes a single org_id and returns one record.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus list_organizations, nor any prerequisite or context. The agent must infer from the required org_id alone that this fetches a single organization rather than enumerating them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_os_patchesC

Get OS patches status for a device

NameRequiredDescriptionDefault
device_idYesThe device ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, and it contributes almost nothing beyond 'status' β€” no indication of what status fields are returned, whether results are cached, whether auth or permissions are required, or whether missing patches are included.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, which is appropriate in size. It is arguably too terse rather than too long, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter read tool with no output schema this is nearly adequate, but the word 'status' is left undefined and there is no behavioral or scoping context. A sentence on what the status covers and how it differs from software patches would close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema documents device_id, so the baseline of 3 applies. The phrase 'for a device' merely restates the required parameter without adding format or source-of-ID context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get OS patches status') scoped to a device, which is clearly actionable. However, it does not distinguish itself from the sibling get_software_patches, leaving the OS-vs-software patch scope ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus get_software_patches or get_device_software, nor any stated prerequisites. The agent must infer the choice from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_software_patchesC

Get software patches status for a device

NameRequiredDescriptionDefault
device_idYesThe device ID

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure and does not state that this is a read-only operation, whether results are paginated or complete, or what shape the patch status takes (installed vs missing, counts, timestamps).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. It is efficient, though its brevity contributes to the missing differentiation and behavioral detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A read tool with no annotations and no output schema needs the description to explain the return content and how it differs from get_os_patches; neither is covered. For an agent choosing among several patch/software tools, this is under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema description coverage is 100%, so the schema already documents device_id fully. The description's 'for a device' merely echoes that; baseline 3 applies since no additional semantics are needed or added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (get) and resource (software patches) scoped to a device, which is clearer than a bare name restatement. However, it never distinguishes itself from the sibling get_os_patches (or get_device_software), so an agent cannot tell from the text alone which patch tool applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisite, and no mention of the obvious alternative get_os_patches. The agent is left to guess between two similarly named patch tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_ticketC

Get ticket details

NameRequiredDescriptionDefault
ticket_idYesThe ticket ID

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing about read-only safety, required permissions, error behavior for missing tickets, or what 'details' includes. For a tool with zero annotation coverage, this is a substantial gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded and wastes no words, but its brevity reflects under-specification rather than efficiency. It could easily carry one more sentence of routing or return-value context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should explain what a 'ticket detail' record contains and how it differs from list-oriented siblings. Neither is covered, leaving the agent to guess at the return payload.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single ticket_id parameter is documented in the schema itself, so the baseline of 3 applies. The description adds no meaning beyond the schema, such as ID format or source of the ID.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("Get ticket details"), so the basic operation is identifiable. However, it offers no differentiation from sibling tools like create_ticket, update_ticket, or add_ticket_comment, and 'details' is left undefined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this tool versus its siblings, no prerequisites, and no mention of what happens with an invalid or unknown ticket_id. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_contactsB

List all contacts

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, but it only states the basic action. It does not disclose return format, ordering, pagination, whether deleted or blocked contacts are included, or any side effects. The read-only nature is implied but never explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded phrase with no wasted wording. Every word contributes to meaning, and the description is appropriately sized for a tool with no parameters and no complex behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool, the description is minimally sufficient, but it lacks any clarification of what 'contacts' means in context, what the returned data looks like, or how it relates to get_contact and get_user. It is adequate but leaves a few practical gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema confirms this with 100% coverage. Since there is nothing to document, the description does not need to add parameter-level detail. Baseline 4 is appropriate for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('List') and resource ('contacts'), clearly identifying the action. It distinguishes from get_contact by pluralizing 'all contacts', but it does not explicitly name or route to the sibling alternative for a single contact.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance about when to use this tool instead of get_contact, get_user, or list_chats. There is no context for selecting this tool over alternatives, so the agent must infer from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_devicesC

List all devices in the NinjaOne system with optional pagination and filtering

NameRequiredDescriptionDefault
filterNoDevice filter query
pageNoNoPage number for pagination
pageSizeNoNumber of devices per page

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full behavioral burden and discloses almost nothing: not that it is a safe read-only operation, not the return shape, not what pagination defaults apply, and not whether results are scoped to an organization or the whole tenant. Only the mention of 'optional pagination and filtering' hints at behavior at all.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with no filler, and the core action plus scope are front-loaded. Its brevity edges into under-specification rather than waste, so it is efficient but thin.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-required-param list tool with full schema coverage and no output schema, this is minimally adequate. The biggest missing piece is the 'filter' query syntax, which an agent cannot derive from the schema's one-line 'Device filter query' label and which the description does not supply.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters are already documented in structured form, which sets the baseline at 3. The description restates that pagination and filtering exist but adds no syntax for the 'filter' query string or sensible defaults for pageNo/pageSize, so it adds nothing over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List all devices') and scopes it to the NinjaOne system, so the operation is unambiguous. However, it never distinguishes itself from close siblings like search_devices or get_device, leaving the agent to infer that those are narrower lookup paths.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'with optional pagination and filtering' implies the parameters are discretionary but gives no when-to-use or when-not-to-use guidance. With search_devices and get_device as siblings, the description should say which one to reach for, and it says nothing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_organizationsC

List all organizations

NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full disclosure burden, yet it says nothing about permissions, whether the result is scoped to the caller's memberships, pagination, or result size. For an unannotated list tool this leaves meaningful behavioral questions unanswered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no waste and the verb/resource front-loaded. It is appropriately sized, though it leaves no room for the scope qualifier that would help.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivial zero-parameter list operation the description is adequate, but with no output schema and no annotations nothing tells the agent what a returned organization looks like or whether results are paginated or filtered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; the description cannot add parameter meaning and does not mislead about inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('List') and resource ('organizations'), which is clear enough. However, it says nothing about scope (all orgs the caller can see? all orgs in the tenant?) and does not distinguish it from the sibling get_organization, so an agent gets only a bare minimum of differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, and no mention of the closely related get_organization sibling that fetches a single org. The agent must infer that this is the enumeration counterpart.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reboot_deviceC

Reboot a device

NameRequiredDescriptionDefault
modeNoReboot mode: force or graceful
device_idYesThe device ID to reboot

TDQS

C2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing about downtime, service interruption, required permissions, or the real-world impact of force vs graceful mode. It is effectively silent on behavior beyond the verb itself.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single phrase is front-loaded and waste-free, but this is under-specification rather than conciseness. Nothing in the sentence earns its place because it duplicates the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a disruptive operation with no annotations and no output schema, the description should at least cover impact and the force/graceful distinction. As written, an agent cannot judge risk or side effects before invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both device_id and the force/graceful enum documented in the schema, so baseline 3 applies. The description adds no meaning beyond it, notably omitting the operational consequences of each mode.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Reboot a device" merely restates the tool name reboot_device; it adds no scope, target, or distinguishing detail. It does not differentiate from siblings like run_script or get_device_health, though the verb+resource pairing is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus alternatives (run_script, get_device_health) or preconditions for rebooting. The agent is left to infer everything about appropriate selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_scriptC

Run a script or built-in action on a device

NameRequiredDescriptionDefault
device_idYesThe device ID
script_idYesScript ID or built-in action name
parametersNoScript parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and discloses almost nothing: it doesn't say whether execution is synchronous or asynchronous, whether it waits for completion, what is returned (script exit code, stdout, status object), whether it is destructive or requires elevated permissions, or whether calls can be retried safely. Only the implicit 'this performs an execution' signal is conveyed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no filler and the core action front-loaded. It is efficient, though the brevity borders on under-specification for an execution tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that executes arbitrary scripts on a device with a nested free-form parameters object, no annotations, and no output schema, the description should explain execution semantics, return behavior, and risk. Almost all of that is missing, leaving the agent unable to predict the outcome of a call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so device_id, script_id, and the free-form parameters object are already documented, and the baseline of 3 applies. The description adds no extra meaning, such as expected shape or examples of the nested parameters object or how built-in action names differ from script IDs in practice.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run a script or built-in action on a device'), which is enough to distinguish it from read-only siblings like get_device or list_devices. The dual scope ('script or built-in action') slightly blurs whether it overlaps with actions like reboot_device, but the core purpose is clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus siblings, even though reboot_device and api_post are plausible alternatives for executing actions on a device. No prerequisites, no constraints, no exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_devicesC

Search for devices using filter syntax

NameRequiredDescriptionDefault
filterYesDevice filter query (e.g., 'nodeName=DESKTOP-XYZ' or 'status=online')

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden and falls short: it doesn't confirm read-only behavior, describe the result shape, mention pagination, result caps, or supported filter operators beyond the schema's two examples. For a search endpoint, the absence of any result-limit or matching-semantics detail is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. It is efficient, though the brevity edges into under-specification for a tool with sibling alternatives.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one required parameter, no output schema), so the schema does most of the work. Still, the description leaves the list-vs-search distinction and any result-set behavior unaddressed, which matters given list_devices sitting next to it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already documents the single 'filter' parameter with two concrete examples. The phrase 'filter syntax' in the description adds almost nothing beyond the schema, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Search') and resource ('devices'), so the basic operation is unambiguous. However, it never distinguishes this from the sibling tool list_devices, leaving the agent to guess whether searching and listing differ in filtering capability or result scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus list_devices or get_device, and no prerequisites or exclusions are stated. The agent must infer that 'search' means server-side filtering, which is a guess rather than a documented rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_ticketC

Update a ticket

NameRequiredDescriptionDefault
titleNoNew title
statusNoNew status
ticket_idYesThe ticket ID
descriptionNoNew description

TDQS

C2.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, and it discloses nothing. It does not say whether this is a partial update (omitting fields leaves them unchanged) or a full replace, whether extra permissions are required, whether changes are reversible, or what the response contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single four-word sentence with no padding, and the core verb is front-loaded. Its brevity, however, comes from under-specification rather than discipline, so it earns no more than a middling score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with four parameters, zero annotation coverage, and no output schema, the description is far too thin. An agent cannot tell whether the call returns the updated ticket, how partial updates are handled, or what failure modes exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all four parameters (title, status, ticket_id, description) are documented inline, so the schema does the heavy lifting. The description adds no meaning beyond the schema, which is the baseline case for a 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Update a ticket" names a specific verb and resource, so an agent knows the general operation. But it adds essentially nothing beyond the tool name and gives no differentiation from siblings such as create_ticket, get_ticket, or add_ticket_comment, nor does it indicate which aspects of a ticket are updatable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites or permissions, and no routing to alternatives like create_ticket for new tickets or add_ticket_comment for comments. An agent must infer everything about selection from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 21 tool updatesv1.0.0
    • First observedadd_ticket_comment
    • First observedapi_get
    • First observedapi_post
    • First observedcreate_ticket
    • First observedget_all_alerts
    • First observedget_antivirus_status
    • First observedget_device
    • First observedget_device_alerts
    • First observedget_device_health
    • First observedget_device_software
    • First observedget_organization
    • First observedget_os_patches
    • First observedget_software_patches
    • First observedget_ticket
    • First observedlist_contacts
    • First observedlist_devices
    • First observedlist_organizations
    • First observedreboot_device
    • First observedrun_script
    • First observedsearch_devices
    • First observedupdate_ticket

TDQS

C2.8/5.0

Scored across 21 tools

Disambiguation3/5

Most specific tools target distinct resources and actions, but generic api_get/api_post overlap with nearly every read/create tool, and list_devices versus search_devices has fuzzy boundaries. Descriptions help, but an agent could reasonably misselect between generic and specific tools or between list and search.

Naming Consistency4/5

Nearly all tools use a predictable snake_case verb_noun pattern such as list_devices, get_ticket, create_ticket, and run_script. api_get and api_post are minor deviations since they read as resource_verb rather than verb_resource, but overall the naming is consistent.

Tool Count4/5

At 21 tools this is above the typical 3-15 range, but NinjaOne is a broad RMM domain covering devices, alerts, patches, software, tickets, organizations, health, antivirus, and contacts. The tools mostly earn their place, though the generic api_* tools add some redundancy.

Completeness3/5

Core areas are covered for devices, alerts, patches, software, tickets, organizations, health, antivirus, and contact listing, but there are notable lifecycle gaps such as no list_tickets, no contact get/create/update/delete, and no organization create/update. The generic api_get/api_post partially mitigate these gaps but do not cover full CRUD because they only expose GET and POST.

Maintenance

ActivityMaintained
ResponsivenessOutdated data

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP clients to interact with NinjaOne, providing tools for managing devices, organizations, alerts, and tickets. Uses a decision tree architecture to load domain-specific tools on demand.
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables Claude to interact with Datto RMM accounts for device, alert, site, and quick job management through natural language.
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables management of NinjaOne devices, organizations, alerts, and tickets through natural language, using a navigation-based tool selection for efficient interaction.
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to interact with the NinjaOne platform for managing devices, organizations, alerts, and tickets through a decision-tree tool-loading architecture.
    Apache 2.0