Skip to main content
Glama

SuperOps.ai MCP Server

MCP server for Claude that provides tools to interact with the SuperOps.ai PSA/RMM platform using their GraphQL API.

One-Click Deployment

Deploy to DO

Deploy to Cloudflare Workers

Operator note — GitHub Packages authentication. This package is published to the @wyre-ai scope on GitHub Packages, which requires an authentication token on every install (GitHub Packages has no anonymous reads, even for public packages). Create a GitHub Personal Access Token with the read:packages scope and supply it to the cloud builder:

  • Cloudflare Workers — set a build variable named NODE_AUTH_TOKEN to your PAT.

  • DigitalOcean App Platform — set a build-time secret named GITHUB_TOKEN to your PAT.

For local installs, run export NODE_AUTH_TOKEN=$(gh auth token) before npm install.

Related MCP server: ninjaone-mcp

Features

  • Decision Tree Architecture: Navigate to domains (clients, tickets, assets, technicians) to see relevant tools

  • Lazy Loading: Domain modules load on-demand for faster startup

  • Full CRUD Operations: List, get, create, and update entities

  • GraphQL Support: Use custom queries for advanced operations

  • Interactive Ticket Card (MCP Apps): ticket results render as an interactive card in MCP Apps hosts — neutral by default, brandable via window.__BRAND__ injection or MCP_BRAND_* env vars

Interactive Ticket Card (MCP Apps)

superops_tickets_get renders as an interactive card in MCP Apps hosts (Claude Desktop/web) with an in-card "Add note" round-trip via superops_tickets_add_note that always posts internal-only notes (isPublic: false); plain-JSON behavior is unchanged in other hosts. The card is neutral by default and brandable via window.__BRAND__ injection or MCP_BRAND_* env vars (MCP_BRAND_NAME, MCP_BRAND_LOGO_URL, MCP_BRAND_PRIMARY_COLOR, MCP_BRAND_ACCENT_COLOR, MCP_BRAND_BG, MCP_BRAND_TEXT) — no rebuild needed.

Installation

# The @wyre-ai scope lives on GitHub Packages and needs a token to install:
export NODE_AUTH_TOKEN=$(gh auth token)
npm install @wyre-ai/superops-mcp

Configuration

Set the following environment variables:

export SUPEROPS_API_TOKEN="your-api-token"
export SUPEROPS_SUBDOMAIN="yourcompany"
export SUPEROPS_REGION="us"  # or "eu" for EU region

Getting Your API Token

  1. Log in to SuperOps.ai

  2. Click settings icon > "My Profile"

  3. Navigate to "API token" tab

  4. Click "Generate token"

  5. Copy and securely store the token

Usage with Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "superops": {
      "command": "npx",
      "args": ["@wyre-ai/superops-mcp"],
      "env": {
        "SUPEROPS_API_TOKEN": "your-api-token",
        "SUPEROPS_SUBDOMAIN": "yourcompany",
        "SUPEROPS_REGION": "us"
      }
    }
  }
}

Available Domains & Tools

Navigation

  • superops_navigate - Navigate to a domain

  • superops_back - Return to main menu

  • superops_test_connection - Test API connectivity

Clients Domain

  • superops_clients_list - List clients with filters

  • superops_clients_get - Get client details

  • superops_clients_search - Search clients by name

Tickets Domain

  • superops_tickets_list - List tickets with filters

  • superops_tickets_get - Get ticket details

  • superops_tickets_create - Create a new ticket

  • superops_tickets_update - Update ticket status/assignment

  • superops_tickets_add_note - Add note to ticket

  • superops_tickets_log_time - Log time on ticket

Assets Domain

  • superops_assets_list - List assets/endpoints

  • superops_assets_get - Get asset details

  • superops_assets_software - Get software inventory

  • superops_assets_patches - Get patch status

Technicians Domain

  • superops_technicians_list - List technicians

  • superops_technicians_get - Get technician details

  • superops_technicians_groups - List technician groups

Custom Domain

  • superops_custom_query - Run custom GraphQL query

  • superops_custom_mutation - Run custom GraphQL mutation

Example Usage

User: What tools are available?
Claude: Use superops_navigate to select a domain...

User: Navigate to tickets
Claude: [calls superops_navigate with domain: "tickets"]
Now in tickets domain. Available tools: superops_tickets_list, superops_tickets_get...

User: Show open high priority tickets
Claude: [calls superops_tickets_list with status: ["Open"], priority: ["High"]]
Here are the open high priority tickets...

Rate Limits

SuperOps.ai API has a rate limit of 800 requests per minute per API token.

Pagination

SuperOps uses page-based pagination, not cursors. List tools take page (1-indexed, default 1) and pageSize (default 50, max 100), and return a listInfo block with page, pageSize, totalCount and hasMore.

hasMore is tri-state: true when another page exists, null — never false — when it does not. Loop on hasMore === true, or page off totalCount; looping until hasMore === false never terminates.

Filtering

Filters are condition clauses of { attribute, operator, value }, and they compose — { joinOperator: "and" | "or", operands: [ … ] } nests recursively. Operators verified against a live tenant:

Operator

Value

is, isNot, contains, notContains, startsWith, endsWith

string

includes, notIncludes

array

equals and in are rejected by the API. includes matches a value whole while contains matches a substring — filtering an OS platform with includes: ["Windows"] matches nothing, because SuperOps stores "Microsoft Windows 10 Pro".

Two things to know, because neither reports an error:

  • Filtering on a value outside a field's real set returns zero rows, not an error. An empty result may mean a bad value, not an empty tenant.

  • Filtering on a JSON column (software) rather than a path into it (software.name) also returns zero rows silently.

Use superops_custom_query for filter semantics the standard tools don't express.

Schema conformance

schema/superops.graphql is a vendored copy of the SuperOps GraphQL schema:

# Authoritative — generated from live introspection
SUPEROPS_API_TOKEN=... SUPEROPS_SUBDOMAIN=... node scripts/fetch-schema.mjs

# No credentials? Falls back to scraping the published API reference
node scripts/fetch-schema.mjs

Prefer introspection, and note the committed schema is already the introspected one. The published docs declare 276 types / 76 queries / 63 mutations where the live API reports 404 / 116 / 83, omit deprecations entirely, and declare two types that do not exist live (FieldType, TicketType) — validating against those would pass documents the API rejects.

src/domains/graphql-schema.test.ts validates every GraphQL document in src/ against it on each npm test, so a query referencing a field SuperOps does not define fails in CI rather than at runtime. Regenerate the schema after a SuperOps API change and re-run the tests.

License

Apache-2.0

Support

For issues and feature requests, please visit the GitHub repository.

Available Tools

22 tools
superops_assets_getA

Get detailed information for a specific asset: hardware identity (manufacturer, model, serial number), platform and OS version, network details (public IP, primary MAC, gateway, domain), agent version and patch status. SuperOps does not expose CPU, memory or disk figures on the asset record — use superops_custom_query with getAssetSummary or getAssetDiskDetails for those.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetIdYesThe unique asset ID

TDQS

A4.5/5.0
Behavior4/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 clearly notes a key behavioral limitation: SuperOps does not expose CPU, memory, or disk figures on the asset record, and it directs the agent to an alternative. This is valuable context, though it does not discuss read-only status, permissions, or rate limits.

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?

Two tightly written sentences. The first front-loads the purpose and enumerated data, while the second cleanly handles the limitation and alternative. No redundant or filler content.

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

Completeness5/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 tool with no output schema, the description fully compensates by listing the returned fields and setting expectations about unavailable data. Nothing essential is missing for an agent to call and interpret the result.

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 the lone parameter (assetId) is already fully documented in the schema. The description implies a specific asset is required but adds no format or syntax detail beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('Get detailed information for a specific asset') and enumerates the exact data returned (hardware identity, OS, network, agent version, patch status). It clearly distinguishes from list-type siblings by specifying 'a specific asset' and explicitly routes missing CPU/memory/disk data to a different tool.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool (fetching detailed info for one asset) and when not to use it (CPU, memory, or disk figures), naming the alternative tool (superops_custom_query) and the specific queries needed. This gives the agent a clear decision boundary.

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

superops_assets_listA

List assets (endpoints) in SuperOps.ai RMM. Supply any combination of status, platform and clientId; several filters are combined with AND. listInfo.hasMore is true when a further page exists and null (never false) when it does not, so treat null as the end or page against totalCount.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-based (default: 1, max: 2147483647)
statusNoFilter by asset status, matched whole and case-insensitively. Observed values are "ONLINE" and "OFFLINE"; SuperOps validates the value at runtime, so a status this tenant uses but the list omits still works.
clientIdNoFilter by client account ID — the `accountId` inside an asset's `client` object, as returned by superops_clients_list.
pageSizeNoResults per page (default: 50, max: 100)
platformNoSubstring of the platform string, matched case-insensitively. SuperOps stores a full OS name ("Microsoft Windows 10 Pro", "darwin"), so pass a fragment such as "Windows" or "darwin" rather than a whole name.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the non-obvious AND-combination semantics of the filters and the unusual pagination contract where listInfo.hasMore is null (never false) at the end. It omits permission/auth or rate-limit context, but for a read-only list tool the pagination quirk is the highest-value behavioral detail.

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?

Three sentences, zero padding, and the core purpose is front-loaded before the filtering and pagination guidance. Every sentence carries information an agent needs.

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

Completeness4/5

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

No output schema exists, so the description reasonably steps in to explain the pagination return signal (listInfo.hasMore). Combined with the high schema coverage for parameters, an agent has enough to call it correctly, though the overall response shape is only partially sketched.

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?

Schema description coverage is 100%, so the baseline is 3, and the description earns above it by adding the filter-combination logic (multiple filters are ANDed) that the schema does not state. It doesn't add per-parameter format detail, but that is already covered by the schema.

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

Purpose5/5

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

States a specific verb and resource ('List assets (endpoints)') with the product context ('in SuperOps.ai RMM'). The parenthetical clarifies that 'assets' means endpoints, which distinguishes it from siblings like superops_assets_software and superops_assets_patches.

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

Usage Guidelines4/5

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

Tells the agent how to invoke it ('Supply any combination of status, platform and clientId; several filters are combined with AND'), which is clear operational context. However, it never names when to prefer this over sibling tools such as superops_assets_get or the software/patches variants.

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

superops_assets_patchesA

Get patch status and patch details for a specific asset: title, KB numbers, category, severity, approval status and installation status. installationStatus and severity may be combined; they are joined with AND. For a one-word roll-up of the asset's overall patch health instead of the per-patch list, use superops_custom_query with getAssetPatchStatus.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-based (default: 1, max: 2147483647)
assetIdYesThe unique asset ID
pageSizeNoResults per page (default: 50, max: 100)
severityNoFilter by one or more patch severities, each matched whole and case-insensitively. Observed values are "Others" and "Recommended"; SuperOps validates them at runtime, so other severities may exist.
installationStatusNoFilter by patch installation status, matched whole and case-insensitively. Observed values are "Installed" and "NewOrMissing" — note this is the install state, not the separate `approvalStatus` (Approved/Pending).

TDQS

A4.4/5.0
Behavior3/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. It discloses that installationStatus and severity are joined with AND, but says nothing about pagination behavior, permissions, or result ordering despite a page/pageSize interface.

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?

Three sentences, front-loaded with the core purpose, followed by filter-combination semantics and then the alternative routing. No filler and every sentence carries information.

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

Completeness4/5

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

For a read-only listing with no output schema and no annotations, the description is largely complete: it lists returned fields and names the alternative tool. It stops short of describing pagination or result limits, which is the only notable gap.

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?

Schema coverage is 100%, so the baseline is 3, but the description earns extra credit by explaining non-obvious semantics the schema does not express: how installationStatus and severity combine, and the distinct grouping of approval status versus install state.

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

Purpose5/5

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

States a specific verb (Get) and resource (patch status and patch details for a specific asset) and enumerates the exact returned fields (title, KB numbers, category, severity, approval status, installation status). It also names the sibling alternative (superops_custom_query with getAssetPatchStatus), so an agent can distinguish it without opening either schema.

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

Usage Guidelines5/5

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

Explicitly routes the agent: use this for the per-patch list, and use superops_custom_query with getAssetPatchStatus for a one-word roll-up of overall health. The condition that selects the alternative is stated, not left to inference, and the AND combination of filters is clarified.

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

superops_assets_softwareB

Get the software inventory for a specific asset: name, version, install date, bit version and install path.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-based (default: 1, max: 2147483647)
searchNoSubstring of the software name, matched case-insensitively. Matches the name only, not the manufacturer.
assetIdYesThe unique asset ID
pageSizeNoResults per page (default: 50, max: 100)

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It implies a read-only retrieval and lists the fields returned, which is useful, but it never mentions that results are paginated or that search only matches the software name, nor any permission or rate-limit considerations.

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?

One sentence, front-loaded with the verb and resource, and the field list is packed directly after the colon with zero filler.

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

Completeness4/5

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

With no output schema, the description usefully substitutes by enumerating the returned fields (name, version, install date, bit version, install path). Only the pagination behavior and the scope of the search filter are left unaddressed, and both are covered by the input schema.

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 page, search, assetId and pageSize all documented in the schema itself, so the baseline is 3. The description adds no parameter-level detail (e.g., that search is substring/case-insensitive) beyond what the schema already states.

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 ('Get') and resource ('software inventory') and enumerates the returned fields, so the agent knows exactly what the tool fetches. It does not, however, differentiate itself from the nearby superops_assets_patches or superops_assets_get siblings, which have similarly shaped 'for a specific asset' semantics.

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 named alternative. The agent must infer from the word 'software' that this is the sibling to pick over assets_patches; nothing in the text routes it.

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

superops_clients_getA

Get detailed information for a specific client by their account ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountIdYesThe unique account ID of the client

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description carries the transparency burden. 'Get' implies a read-only operation, and 'detailed information' suggests the return is a rich client object. However, it does not disclose what happens for an invalid/unknown accountId, rate limits, or the exact fields returned.

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?

The description is one short, front-loaded sentence with no filler. Every word adds clarity about the target and lookup key.

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

Completeness4/5

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

For a single-required-parameter read tool with full schema coverage, the description is nearly complete: the agent can correctly call it with accountId. The only gap is that 'detailed information' does not enumerate the returned fields, and there is no output schema to fill that 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?

The input schema covers 100% of the parameter with 'The unique account ID of the client,' so the baseline is 3. The description only restates the accountId parameter ('by their account ID') without adding format, source, or validation details.

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 uses a clear verb and resource: 'Get detailed information for a specific client.' The qualifier 'specific client' and 'by their account ID' help separate it from collection-style siblings like clients_list and clients_search, though it does not name those alternatives explicitly.

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

Usage Guidelines4/5

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

It states a definite context: use this when you have a client's account ID and need detailed information for that one client. It does not mention exclusion criteria or the list/search siblings, but the precondition is clear from the phrase 'by their account ID.'

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

superops_clients_listB

List clients (accounts) in SuperOps.ai. Results are paginated with page/pageSize. Supplying both stage and status narrows to clients matching both.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-based (default: 1, max: 2147483647)
stageNoFilter by stage: Active, Inactive, or Prospect. Combined with status if both are given. Your tenant may rename or extend this list.
statusNoFilter by status. Status is a sub-state of stage: Paid and Unpaid belong to stage Active; New, Negotiation, Won and Lost belong to stage Prospect. Stage Inactive has no statuses. Pairing a status with a stage it does not belong to matches nothing. Your tenant may rename or extend this list.
pageSizeNoResults per page (default: 50, max: 100)

TDQS

B3.4/5.0
Behavior3/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 does disclose pagination behavior and the stage/status AND semantics, which is genuinely useful, but says nothing about read-only nature, permission requirements, rate limits, or whether tenant-renamed stages/statuses affect filtering outcomes beyond the schema's own note.

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 short sentences with no filler, and the core action is front-loaded. Slightly more could be trimmed since the pagination and filter sentences largely duplicate schema content, but structure is clean.

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?

With no output schema and no annotations, the description should do more work: it does not describe the shape of returned client records or whether pagination metadata (total counts) is returned. Pagination and filtering are covered, but an agent calling it blind still lacks return-value expectations.

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 the schema already documents page, pageSize, stage, and status in detail. The description's restatement that supplying both stage and status narrows results adds only marginal value over the schema's own 'Combined with status if both are given' note. 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: 'List clients (accounts) in SuperOps.ai', clarifying that 'clients' and 'accounts' are the same entity. However, it never distinguishes itself from the sibling superops_clients_search, leaving the agent to infer which list-style tool to pick.

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?

Provides implicit usage context via pagination and the stage/status combination rule, but offers no when-to-use guidance or explicit alternative (e.g., use search when you need text matching). The agent must infer the boundary with superops_clients_search on its own.

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

superops_custom_mutationB

Run a custom GraphQL mutation against the SuperOps.ai API. For advanced write operations not covered by standard tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
mutationYesThe GraphQL mutation string
variablesNoVariables to pass to the mutation

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It mentions 'write operations,' which implies mutation, but it does not warn about potential destructiveness, irreversibility, required permissions, or side effects of executing arbitrary GraphQL mutations. This is a significant gap for a tool that can run any mutation.

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?

The description is two short sentences with no redundancy. The core action is front-loaded, and the usage qualification follows efficiently. Every word earns its place.

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 low-level, open-ended mutation tool with no annotations and no output schema, the description is too thin. It does not explain what the response will look like, warn about the risks of arbitrary mutations, or clarify that variables are optional. An agent receives only the barest sketch of how to use this safely or effectively.

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 the baseline is 3. The description adds no new meaning about the parameters beyond what the schema already states; it merely labels the action as a mutation. It is adequate but provides no additional semantic value.

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 clear verb ('Run'), resource ('SuperOps.ai API'), and operation type ('GraphQL mutation'), and specifies it is for advanced write operations. It does not explicitly name the sibling superops_custom_query, but the mutation/query distinction is implicit in the GraphQL terms, giving adequate differentiation from standard tools.

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

Usage Guidelines4/5

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

The phrase 'For advanced write operations not covered by standard tools' conveys when this tool should be used and implies that standard tools should be the first choice. It does not explicitly enumerate alternatives or state when not to use it, falling slightly short of explicit when/when-not guidance.

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

superops_custom_queryA

Run a custom GraphQL query against the SuperOps.ai API. For advanced use cases not covered by standard tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesThe GraphQL query string
variablesNoVariables to pass to the query

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure, but it only states the high-level action. It does not disclose whether queries are read-only, what happens on invalid GraphQL, error behavior, rate limits, or authentication requirements. The term 'query' hints at a read operation but is not 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?

Two concise sentences with no filler. The first sentence front-loads the core action, and the second states the use case. Every sentence contributes meaningful information.

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?

This is a raw GraphQL execution tool with no annotations and no output schema, so the description needs to supply more operational context to be complete. It lacks guidance on response shape, error conditions, query scope limitations, or how it relates to custom_mutation. The current description is adequate for identifying the tool but not for safely invoking it in advanced scenarios.

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 the schema already explaining 'The GraphQL query string' and 'Variables to pass to the query'. The description adds context about the API and advanced use, but it does not provide additional parameter-level meaning beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

Description states a specific action ('Run a custom GraphQL query') and scope ('against the SuperOps.ai API'). It also differentiates from standard sibling tools by noting it is for advanced use cases not covered by them. The distinction from the sibling custom_mutation is implied by the GraphQL query/mutation vocabulary, which is sufficient.

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

Usage Guidelines4/5

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

The phrase 'For advanced use cases not covered by standard tools' clearly indicates when to use this tool and implies that standard tools should be preferred for ordinary operations. It does not explicitly mention custom_mutation as the alternative for write operations, so the guidance is good but not exhaustive.

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

superops_navigateA

Discover available SuperOps.ai tools by domain. Returns tool names and descriptions for the selected domain. All tools are callable at any time — this is a help/discovery aid, not a prerequisite.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesThe domain to explore: - clients: Client/company management - list, get, search accounts and company information - tickets: Ticket management - list, get, create tickets and manage support workflow - assets: Asset management - list and get hardware/software assets, endpoint inventory - technicians: Technician management - list and get support staff and technician information - custom: Custom queries - execute advanced GraphQL queries with full API access

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It explains that the tool returns tool names and descriptions, and it clarifies the non-gating nature ('All tools are callable at any time — this is a help/discovery aid, not a prerequisite'). This is meaningful behavioral context beyond the 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?

The description is two sentences, each earning its place: the first states purpose and output, the second removes a common misconception about prerequisite behavior. It is front-loaded and contains no filler.

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

Completeness4/5

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

For a single-parameter discovery tool with no output schema, the description covers purpose, return content, and a key behavioral caveat. It does not detail the exact response structure, but that is not necessary for an agent to invoke and interpret a help/discovery tool.

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 domain parameter has detailed descriptions for each enum value, so the schema fully explains parameter semantics. The tool description itself adds no additional parameter meaning, which is appropriate given the rich schema.

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

Purpose5/5

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

The description states a specific verb ('Discover'), a resource ('available SuperOps.ai tools'), and a scope ('by domain'). It also explicitly states what is returned ('tool names and descriptions'), making it clearly distinct from the operational sibling tools like superops_tickets_get or superops_clients_list.

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

Usage Guidelines4/5

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

The description positions this as a help/discovery aid, making its intended use clear. It also explicitly states it is not a prerequisite for other tools, which prevents an agent from incorrectly treating navigation as a required step. It does not explicitly list alternatives, but the siblings are operationally different.

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

superops_statusB

Show credentials status and available domains

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/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 of behavioral disclosure. It only states that the tool shows status, with no detail on what states are reported, whether this is a live check or cached data, or what the response contains. This is minimal and leaves behavioral expectations vague.

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?

The description is a single short phrase with no wasteful content. The key resources are presented immediately and clearly for a zero-parameter status tool.

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 and has no parameters, but there is no output schema and no explanation of what 'credentials status' or 'available domains' means in practice. An agent knows roughly what it will see, but not the shape or semantics of the returned data, which limits completeness.

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, so there are no parameter semantics to document. The baseline of 4 applies because the description need not compensate for undocumented 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?

The description names a specific operation ('show') and two concrete resources ('credentials status' and 'available domains'). It is clear enough to distinguish this from data-retrieval and mutation siblings, though it doesn't explicitly contrast itself with similar tools like superops_test_connection.

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 is provided about when to call this tool versus alternatives. The description does not mention typical use cases, prerequisites, or exclusions, so an agent must infer when 'status' is needed.

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

superops_technicians_getA

Get detailed information for a specific technician by their user ID. SuperOps has no single-technician endpoint, so this filters the technician list to that ID. Returns the technician's contact details plus their role as {roleId, name} and their group roster as an array of {groupId, name}; designation, businessFunction, team and reportingManager are null unless the tenant assigns them. Skills, ticket counts and response-time metrics are not available from SuperOps.

ParametersJSON Schema
NameRequiredDescriptionDefault
technicianIdYesThe unique technician user ID

TDQS

A4.5/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so well: it discloses the filtered-list implementation quirk, the exact return shape (contact details, role as {roleId, name}, group roster array), and that designation, businessFunction, team and reportingManager are null unless the tenant assigns them. It also proactively rules out skills, ticket counts and response-time metrics, which prevents wasted follow-up calls.

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?

Three sentences, all load-bearing: purpose first, implementation caveat second, return shape and unavailable fields last. No padding or restatement of the name.

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

Completeness5/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 must convey return semantics, and it does so completely, including the null-unless-assigned fields and the explicitly unavailable metrics. Nothing an agent needs to call and interpret this tool is missing.

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 there is a single required parameter, so the schema already documents technicianId as the unique technician user ID. The description adds no format or syntax detail beyond that, which is the correct baseline when the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb and resource ('Get detailed information for a specific technician by their user ID'), and explicitly differentiates itself from the list sibling by explaining SuperOps has no single-technician endpoint and this filters the list. An agent can distinguish it from superops_technicians_list without opening either schema.

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

Usage Guidelines4/5

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

Clear context for retrieval of one technician's details, and the implementation note implies the list tool is the alternative for multiple records. It does not explicitly say 'use technicians_list to enumerate' or state prerequisites, so it falls short of full when/when-not guidance.

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

superops_technicians_groupsA

List technician groups/teams in SuperOps.ai. Returns every group's ID and name — SuperOps exposes no description, member count or member roster for a group, and the endpoint is neither paginated nor filterable. These are the same groups that appear in a technician's groups field, so a group ID from here identifies the group a technician belongs to.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does so unusually well: it discloses the exact return shape (ID and name only), that no description/member count/roster is exposed, and that the endpoint is neither paginated nor filterable. These are precisely the behavioral traits an agent needs and cannot infer elsewhere.

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?

Three tight sentences, front-loaded with the purpose, then the return shape and limitations, then the relationship to the technician groups field. Every sentence earns its place with no filler.

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

Completeness5/5

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

No output schema exists, and the description compensates by stating exactly what is returned (ID and name) and what is not available. For a zero-parameter, unpaginated read tool, nothing an agent needs is missing.

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 (0 params, schema coverage 100%), so per the rubric the baseline is 4. There is nothing to document and the description correctly adds no parameter detail.

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

Purpose5/5

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

States a specific verb (List) and resource (technician groups/teams in SuperOps.ai), and the resource is clearly distinct from siblings like superops_technicians_list and superops_technicians_get. An agent can tell what this returns without opening the schema.

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

Usage Guidelines4/5

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

The description explains the practical use case: these groups match the groups field on a technician, so a group ID from here identifies a technician's group. That is clear contextual guidance, though it stops short of explicitly naming alternatives or stating when NOT to call it.

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

superops_technicians_listA

List technicians (agents) in SuperOps.ai, sorted by name. Optionally narrow the list with a search term, matched as a substring against both name and email. SuperOps does not expose an active/inactive flag, ticket counts or last-login times for technicians. Each technician's role comes back as {roleId, name} and their groups as an array of {groupId, name}; designation, businessFunction, team and reportingManager are null unless the tenant assigns them. listInfo.hasMore is true when a further page exists and null when it is not — it is never false, so page against totalCount. Use superops_custom_query for filters beyond a name search.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-based (default: 1, max: 2147483647)
searchNoSubstring matched against the technician's name or email address
pageSizeNoResults per page (default: 50, max: 100)

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and delivers: it discloses the absence of active/inactive flags, ticket counts, and last-login data, and warns that listInfo.hasMore is null (never false) so callers must page against totalCount. These are non-obvious behavioral traits that cannot be inferred from the schema.

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?

Front-loads purpose and sorting, then layers search behavior, return shape, and pagination caveats. Dense but nearly every sentence carries distinct information; slightly long but justified by the missing output schema.

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

Completeness5/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 must carry return semantics, and it does: role as {roleId, name}, groups as {groupId, name}, and which fields are null unless assigned. Combined with pagination guidance, it is complete enough to call correctly.

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?

Schema coverage is 100% so the baseline is 3, but the description adds meaning by specifying that 'search' matches as a substring against both name and email, and that results are sorted by name. It adds value beyond the schema field descriptions.

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

Purpose5/5

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

States a specific verb and resource ('List technicians (agents) in SuperOps.ai, sorted by name') and clarifies the sort order. The scope (name/email substring search) distinguishes it from the plural sibling tools like superops_technicians_get and superops_technicians_groups.

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

Usage Guidelines4/5

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

Explicitly routes overflow filtering to 'superops_custom_query' for filters beyond a name search, giving a clear when-to-use alternative. It doesn't address when to prefer superops_technicians_get for a single record, but that distinction is obvious from the name.

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

superops_technicians_lookupsA

List the roles, teams, designations, business functions and technician groups defined in this SuperOps tenant, each as {id, name}. These are the values a technician's role, team, designation, businessFunction and groups fields refer to. Use this to turn a name a user gave you ("the Sales team", "Admin role") into the ID SuperOps filters on, then pass that ID to superops_custom_query — getTechnicianList accepts a condition on the role and groups attributes. Takes no arguments.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/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 that the tool takes no arguments, that it queries 'this SuperOps tenant,' and that it returns id/name pairs — useful behavioral context for a lookup. It does not discuss whether results are cached, whether they can be empty, or any tenant/permission scoping, but for a zero-arg read-only catalog listing, the essential behavior 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?

Front-loaded with the primary purpose in the first sentence, followed by the mapping rationale and a concrete usage chain. Slightly long, but every sentence earns its place by explaining what is returned, why those values matter, and how to use the result. No filler.

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

Completeness5/5

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

For a zero-arg lookup with no output schema, no annotations, and absent schema parameter details, the description fully compensates: it enumerates the categorical data returned, clarifies the {id, name} shape, explains the foreign-key relationship to technician fields, and directs the agent to the consuming tool with a concrete filter example. An agent has everything needed to call and use it correctly.

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, so per the rubric the baseline is 4. The description reinforces this with 'Takes no arguments,' which is accurate and helpful, though no additional parameter semantics are possible.

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

Purpose5/5

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

Starts with a specific verb+resource: 'List the roles, teams, designations, business functions and technician groups.' It enumerates exactly what entity types are returned and clarifies the output shape as {id, name}. This distinguishes it from siblings like superops_technicians_list and superops_technicians_groups, which presumably return technicians or only groups, not this catalog of lookup values.

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

Usage Guidelines5/5

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

Explicitly states when to use it: to 'turn a name a user gave you ... into the ID SuperOps filters on,' and then names the downstream tool superops_custom_query with a concrete condition example (getTechnicianList accepts a condition on the role and groups attributes). This is a complete when/why/next-step chain, leaving no ambiguity about its role as a name-to-ID resolver.

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

superops_test_connectionA

Test the connection to SuperOps.ai API using configured credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.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 burden of behavioral disclosure. It states that the tool tests the connection using credentials, but it does not disclose whether this is a read-only operation, what happens on success or failure, or whether any side effects or network calls are made beyond the basic implication of a test.

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?

The description is a single clear sentence with no filler. It immediately communicates the tool's purpose and the prerequisite of configured credentials, making every word valuable.

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

Completeness4/5

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

Given the tool's simplicity — no parameters, no output schema, no complex behavior — the description is largely complete for an agent to understand the operation. It could be improved by clarifying the expected result format or relationship to 'superops_status', but the core use case is sufficiently covered.

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, so the baseline is 4. The description adds no parameter-specific detail, but none is needed because the input schema is empty and fully covered.

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 clearly states a specific action ('Test the connection') and the target resource ('SuperOps.ai API'), making the tool's purpose obvious. It does not explicitly differentiate itself from the sibling tool 'superops_status', which may also involve connectivity checks, so it stops short of a 5.

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 'using configured credentials' implies the tool is meant for verifying API connectivity with existing credentials. However, there is no explicit guidance about when to use this tool versus alternatives like 'superops_status' or when not to use it.

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

superops_tickets_add_noteA

Add a note to a ticket. Can be internal or public (visible to client).

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesNote content
isPublicNoWhether the note is visible to the client — maps to SuperOps' PUBLIC/PRIVATE note privacy (default: false, i.e. PRIVATE)
ticketIdYesThe ticket ID

TDQS

A3.6/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 mentions that notes can be internal or public, but this visibility detail is already covered in the schema's isPublic parameter description. It does not disclose other behavioral traits such as permission requirements, notification side effects, or whether notes can be edited or deleted.

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?

Two short sentences, front-loaded with the action and followed by the key public/internal distinction. There is no wasted wording.

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

Completeness4/5

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

The tool is simple, the schema is fully documented, and there is no output schema to explain. The description conveys the main purpose and the public/internal distinction. It is not fully complete because it omits usage guidance and behavioral side effects, but the core context is sufficient for invocation.

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 well documented. The description mentions internal/public notes, which corresponds to isPublic, but adds no syntax, format, or mapping detail beyond what the schema provides. Baseline 3 is appropriate.

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

Purpose5/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: 'Add a note to a ticket.' It clearly distinguishes this action from sibling operations like superops_tickets_update and superops_tickets_log_time, which modify or log rather than add notes.

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 implied by the action itself, and the second sentence adds context about internal versus public visibility. However, it does not explicitly state when to prefer this tool over alternatives such as updating a ticket or logging time, nor does it give exclusions or prerequisites.

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

superops_tickets_createB

Create a new ticket in SuperOps.ai. Status, priority, category and subcategory are free-text strings that must match the values configured in your SuperOps tenant.

ParametersJSON Schema
NameRequiredDescriptionDefault
impactNoTicket impact. SuperOps ships with: High, Medium, Low. Your tenant may rename or extend this list.
siteIdNoClient site ID
sourceNoHow the ticket originated (default: INTEGRATION)INTEGRATION
statusNoInitial status; defaults to the tenant's default status. SuperOps ships with: Open, On Hold, Resolved, Closed, Waiting on third party. Your tenant may rename or extend this list.
subjectYesTicket subject/title
urgencyNoTicket urgency. SuperOps ships with: High, Medium, Low. Your tenant may rename or extend this list.
categoryNoService category name. SuperOps ships with: Database, Hardware, Help, Network, Software. Your tenant may rename or extend this list.
clientIdYesClient account ID
priorityNoTicket priority. SuperOps ships with: Critical, High, Medium, Low, Very Low. Your tenant may rename or extend this list.
descriptionNoDetailed description of the issue
requestTypeNoRequest type, e.g. Incident or Service Request
requesterIdNoUser ID of the client user reporting the issue
subcategoryNoService subcategory name; must be one of the subcategories defined under the chosen category.
techGroupIdNoGroup ID of the technician group to assign
technicianIdNoUser ID of the technician to assign

TDQS

B3.3/5.0
Behavior3/5

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

No annotations exist, so the description carries full burden. It usefully discloses one real constraint—status/priority/category/subcategory are free-text and must match tenant-configured values—but omits permissions/auth needs, side effects, whether the ticket is auto-assigned, and any response semantics for a 15-param mutation.

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?

Two tight sentences, purpose front-loaded in the first clause and the constraint note second. Every sentence earns its place with no filler.

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?

With 15 parameters, no output schema, and no annotations, the description is thin: it never says what the call returns (e.g., the created ticket ID) or what happens on failure. Parameter documentation is complete via schema, so it is minimum-viable but not sufficient for a mutation of this complexity.

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 the schema already documents all 15 parameters richly (including enum and per-field tenant notes). The description's note about free-text match requirements marginally reinforces four fields but adds little beyond what the schema already provides.

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 ('Create a new ticket in SuperOps.ai'), which plainly contrasts with siblings like superops_tickets_update, superops_tickets_get, and superops_tickets_list. It is clear, though it never names an alternative to further sharpen the distinction.

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/when-not guidance and no mention of alternatives such as tickets_update for existing tickets or add_note for follow-ups. The agent must infer the appropriate context (a genuinely new ticket) from the verb alone.

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

superops_tickets_getA

Get detailed information for a specific ticket by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
ticketIdYesThe unique ticket ID

TDQS

A3.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 must carry behavioral disclosure. It communicates a read/get operation but adds no detail on response structure, error behavior (e.g., unknown ticket ID), permissions, or what 'detailed information' includes.

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 concise sentence with no filler; key information is front-loaded and every word contributes.

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 get-by-ID tool, the description and schema are enough for selection and invocation. However, with no output schema and no annotations, the phrase 'detailed information' is vague about what the agent will receive, which leaves some uncertainty.

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%: ticketId is described as 'The unique ticket ID'. The description's 'by its ID' reinforces this but adds no new semantic detail, so it meets the baseline.

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

Purpose5/5

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

States a specific verb ('get'), a resource ('ticket'), and the selection criterion ('by its ID'). This clearly distinguishes it from list-oriented siblings like superops_tickets_list.

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

Usage Guidelines4/5

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

The 'by its ID' phrasing establishes when to use the tool: when the caller has a known ticket ID and wants details. It does not explicitly name alternatives or exclude list/search flows, but the context is sufficient for most agents.

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

superops_tickets_listA

List tickets in SuperOps.ai. Results are paginated with page/pageSize. All supplied filters are combined: a ticket must match every one of status, priority, clientId and technicianId that you provide, and within status and priority it may match any of the listed values.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number, 1-based (default: 1, max: 2147483647)
statusNoFilter by status(es). SuperOps ships with: Open, On Hold, Resolved, Closed, Waiting on third party. Your tenant may rename or extend this list. Values must match it exactly.
clientIdNoFilter by client account ID
pageSizeNoResults per page (default: 50, max: 100)
priorityNoFilter by priority(ies). SuperOps ships with: Critical, High, Medium, Low, Very Low. Your tenant may rename or extend this list.
technicianIdNoFilter by assigned technician user ID

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It usefully discloses pagination via page/pageSize and the AND-across-filters / OR-within-array matching rule, which is non-obvious behavior. However, it says nothing about permission requirements, default sort order, or whether a total count is returned, leaving notable behavioral gaps for an unannotated tool.

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?

Three tight sentences with zero filler. The core action is front-loaded, pagination is stated next, and the filter-combination rule follows; every sentence carries distinct information.

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

Completeness4/5

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

For a six-parameter list tool with no output schema and no annotations, the description covers the essentials an agent needs: scope, paging, and filter-combination logic. It stops short of describing the returned ticket shape, default ordering, or total-count behavior, which would complete the picture.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema by specifying the boolean combination semantics: every provided filter must match, while status and priority accept any of the listed values. That disambiguates how multiple array values interact, which the schema alone does not state.

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 opens with a specific verb+resource pair ('List tickets in SuperOps.ai'), so the agent immediately knows this is a read/list operation on the tickets collection. It does not, however, explicitly distinguish itself from siblings like superops_tickets_get or superops_tickets_search, so it falls short of the top band.

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: listing tickets is self-evidently what the tool is for, and the filter-combination sentence hints at when each filter applies. There is no explicit statement of when to choose this over superops_tickets_get, superops_custom_query, or a search-style sibling, and no exclusions or prerequisites are given.

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

superops_tickets_log_timeB

Log a worklog entry against a ticket. SuperOps records quantity (not a raw minute count) against the service item's unit — typically hours.

ParametersJSON Schema
NameRequiredDescriptionDefault
qtyYesQuantity of work in the service item's unit, typically hours, e.g. "1.5"
notesNoDescription of work performed
billableNoWhether the time is billable (default: true)
ticketIdYesThe ticket ID to log the work against
unitPriceNoOverride the service item's unit price
afterHoursNoWhether the work was performed after hours (default: false)
billDateTimeNoWhen the work was performed, ISO 8601 (default: now)
technicianIdNoUser ID of the technician who performed the work (defaults to the API token's user)
serviceItemIdNoService catalog item ID to bill the work against

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It usefully discloses that quantity is recorded against the service item's unit (typically hours) rather than raw minutes, which is a non-obvious behavioral trait. However, it omits mutation side effects, permission requirements, and defaults, leaving significant gaps for a write operation.

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?

Two tightly written sentences with zero waste. The core action is front-loaded, followed by a critical nuance about quantity semantics.

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 nine-parameter mutation tool with no annotations and no output schema, the description is fairly thin. It covers the key quantity nuance but does not address side effects, required permissions, or default behaviors that an agent should understand before invoking a write operation.

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 the schema already documents all nine parameters. The description reinforces the quantity/unit semantics for qty but adds no new parameter meaning beyond the schema. Baseline 3 is appropriate when the schema does the heavy lifting.

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: logging a worklog entry against a ticket. This is clearly distinct from siblings like add_note or update. However, it does not explicitly differentiate itself from those siblings or name the alternative tool for time logging.

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 mention of alternatives. The context is implied by 'log a worklog entry' but the description does not help an agent decide between this and other ticket mutation tools.

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

superops_tickets_updateA

Update an existing ticket - change status, priority, assignment, or category. Free-text resolution notes belong in superops_tickets_add_note; only the tenant's configured resolutionCode can be set here.

ParametersJSON Schema
NameRequiredDescriptionDefault
impactNoNew impact. SuperOps ships with: High, Medium, Low. Your tenant may rename or extend this list.
statusNoNew status. SuperOps ships with: Open, On Hold, Resolved, Closed, Waiting on third party. Your tenant may rename or extend this list.
subjectNoNew subject/title
urgencyNoNew urgency. SuperOps ships with: High, Medium, Low. Your tenant may rename or extend this list.
categoryNoNew service category name. SuperOps ships with: Database, Hardware, Help, Network, Software. Your tenant may rename or extend this list.
priorityNoNew priority. SuperOps ships with: Critical, High, Medium, Low, Very Low. Your tenant may rename or extend this list.
ticketIdYesThe ticket ID to update
requestTypeNoNew request type, e.g. Incident or Service Request
subcategoryNoNew service subcategory name; must be one of the subcategories defined under the chosen category.
techGroupIdNoGroup ID of the technician group to assign
technicianIdNoUser ID of the technician to assign
resolutionCodeNoResolution code, for resolving/closing tickets. SuperOps ships with: Permanent Fix, Workaround, Resolved by Requester, Exception. Your tenant may rename or extend this list.

TDQS

A4.1/5.0
Behavior3/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. It discloses the resolutionCode-only constraint on the resolution path, which is genuinely useful, but says nothing about partial-update semantics (are omitted fields left unchanged?), required permissions, validity of status transitions, or reversibility for what is a mutation tool.

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?

Two sentences, zero filler, with the core capability front-loaded and the disambiguation constraint second. Every clause carries information the agent needs.

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 12-parameter mutation tool with no annotations and no output schema, the description covers what can be changed and the resolution nuance, but omits partial-update behavior, permission requirements, and any indication of success/failure response. Adequate but with clear gaps.

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?

Schema description coverage is 100%, so the baseline is 3, and the description earns an increment by clarifying that only the tenant-configured resolutionCode belongs here while free-text resolution content must go elsewhere. It does not clarify the assignment pair (technicianId vs techGroupId) or the category/subcategory dependency beyond what the schema states.

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

Purpose5/5

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

States a specific verb (update) plus resource (existing ticket) and enumerates the mutable facets: status, priority, assignment, category. The second sentence distinguishes this tool from superops_tickets_add_note, so an agent can route without opening either schema.

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

Usage Guidelines4/5

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

Gives an explicit when-not with the alternative named: free-text resolution notes go to superops_tickets_add_note, and only a configured resolutionCode may be set here. It does not cover update vs. superops_tickets_create or prerequisites, but the boundary case that most easily causes misuse is handled.

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. 14 tool updatesv2.0.2
    • Changedsuperops_assets_list9 fields changed
      • changedInput schema / properties / clientId / description
        Previous value: -"Filter by client account ID"New value: +"Filter by client account ID — the `accountId` inside an asset's `client` object, as returned by superops_clients_list."
      • removedInput schema / properties / cursor
        Removed value: -{
        -  "description": "Pagination cursor for fetching next page",
        -  "type": "string"
        -}
      • removedInput schema / properties / max
        Removed value: -{
        -  "default": 100,
        -  "description": "Maximum number of results (default: 100, max: 500)",
        -  "type": "number"
        -}
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number, 1-based (default: 1, max: 2147483647)",
        +  "type": "number"
        +}
      • addedInput schema / properties / pageSize
        Added value: +{
        +  "default": 50,
        +  "description": "Results per page (default: 50, max: 100)",
        +  "type": "number"
        +}
      • changedInput schema / properties / platform / description
        Previous value: -"Filter by platform: Windows, macOS, or Linux"New value: +"Substring of the platform string, matched case-insensitively. SuperOps stores a full OS name (\"Microsoft Windows 10 Pro\", \"darwin\"), so pass a fragment such as \"Windows\" or \"darwin\" rather than a whole name."
      • removedInput schema / properties / platform / enum
        Removed value: -[
        -  "Windows",
        -  "macOS",
        -  "Linux"
        -]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by status: Online, Offline, or Maintenance"New value: +"Filter by asset status, matched whole and case-insensitively. Observed values are \"ONLINE\" and \"OFFLINE\"; SuperOps validates the value at runtime, so a status this tenant uses but the list omits still works."
      • removedInput schema / properties / status / enum
        Removed value: -[
        -  "Online",
        -  "Offline",
        -  "Maintenance"
        -]
    • Changedsuperops_assets_patches5 fields changed
      • addedInput schema / properties / installationStatus
        Added value: +{
        +  "description": "Filter by patch installation status, matched whole and case-insensitively. Observed values are \"Installed\" and \"NewOrMissing\" — note this is the install state, not the separate `approvalStatus` (Approved/Pending).",
        +  "type": "string"
        +}
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number, 1-based (default: 1, max: 2147483647)",
        +  "type": "number"
        +}
      • addedInput schema / properties / pageSize
        Added value: +{
        +  "default": 50,
        +  "description": "Results per page (default: 50, max: 100)",
        +  "type": "number"
        +}
      • changedInput schema / properties / severity / description
        Previous value: -"Filter by severity levels: Critical, Important, Moderate, Low"New value: +"Filter by one or more patch severities, each matched whole and case-insensitively. Observed values are \"Others\" and \"Recommended\"; SuperOps validates them at runtime, so other severities may exist."
      • removedInput schema / properties / status
        Removed value: -{
        -  "description": "Filter patches by status: Pending, Installed, or Failed",
        -  "enum": [
        -    "Pending",
        -    "Installed",
        -    "Failed"
        -  ],
        -  "type": "string"
        -}
    • Changedsuperops_assets_software4 fields changed
      • removedInput schema / properties / max
        Removed value: -{
        -  "default": 100,
        -  "description": "Maximum number of results (default: 100)",
        -  "type": "number"
        -}
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number, 1-based (default: 1, max: 2147483647)",
        +  "type": "number"
        +}
      • addedInput schema / properties / pageSize
        Added value: +{
        +  "default": 50,
        +  "description": "Results per page (default: 50, max: 100)",
        +  "type": "number"
        +}
      • changedInput schema / properties / search / description
        Previous value: -"Search term to filter software by name"New value: +"Substring of the software name, matched case-insensitively. Matches the name only, not the manufacturer."
    • Changedsuperops_clients_list8 fields changed
      • removedInput schema / properties / cursor
        Removed value: -{
        -  "description": "Pagination cursor for fetching next page",
        -  "type": "string"
        -}
      • removedInput schema / properties / max
        Removed value: -{
        -  "default": 50,
        -  "description": "Maximum number of results (default: 50, max: 500)",
        -  "type": "number"
        -}
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number, 1-based (default: 1, max: 2147483647)",
        +  "type": "number"
        +}
      • addedInput schema / properties / pageSize
        Added value: +{
        +  "default": 50,
        +  "description": "Results per page (default: 50, max: 100)",
        +  "type": "number"
        +}
      • changedInput schema / properties / stage / description
        Previous value: -"Filter by stage: Lead, Prospect, Customer, or Churned"New value: +"Filter by stage: Active, Inactive, or Prospect. Combined with status if both are given. Your tenant may rename or extend this list."
      • removedInput schema / properties / stage / enum
        Removed value: -[
        -  "Lead",
        -  "Prospect",
        -  "Customer",
        -  "Churned"
        -]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by status: Active, Inactive, or Archived"New value: +"Filter by status. Status is a sub-state of stage: Paid and Unpaid belong to stage Active; New, Negotiation, Won and Lost belong to stage Prospect. Stage Inactive has no statuses. Pairing a status with a stage it does not belong to matches nothing. Your tenant may rename or extend this list."
      • removedInput schema / properties / status / enum
        Removed value: -[
        -  "Active",
        -  "Inactive",
        -  "Archived"
        -]
    • Changedsuperops_clients_search4 fields changed
      • removedInput schema / properties / max
        Removed value: -{
        -  "default": 20,
        -  "description": "Maximum number of results (default: 20)",
        -  "type": "number"
        -}
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number, 1-based (default: 1, max: 2147483647)",
        +  "type": "number"
        +}
      • addedInput schema / properties / pageSize
        Added value: +{
        +  "default": 50,
        +  "description": "Results per page (default: 50, max: 100)",
        +  "type": "number"
        +}
      • changedInput schema / properties / query / description
        Previous value: -"Search term to find clients by name or email domain"New value: +"Substring to match against the client name or any of its email domains"
    • Changedsuperops_technicians_get1 field changed
      • changedInput schema / properties / technicianId / description
        Previous value: -"The unique technician ID"New value: +"The unique technician user ID"
    • Changedsuperops_technicians_groups1 field changed
      • removedInput schema / properties / max
        Removed value: -{
        -  "default": 50,
        -  "description": "Maximum number of results (default: 50)",
        -  "type": "number"
        -}
    • Changedsuperops_technicians_list7 fields changed
      • removedInput schema / properties / activeOnly
        Removed value: -{
        -  "default": true,
        -  "description": "Show only active technicians (default: true)",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / cursor
        Removed value: -{
        -  "description": "Pagination cursor for fetching next page",
        -  "type": "string"
        -}
      • removedInput schema / properties / max
        Removed value: -{
        -  "default": 50,
        -  "description": "Maximum number of results (default: 50, max: 500)",
        -  "type": "number"
        -}
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number, 1-based (default: 1, max: 2147483647)",
        +  "type": "number"
        +}
      • addedInput schema / properties / pageSize
        Added value: +{
        +  "default": 50,
        +  "description": "Results per page (default: 50, max: 100)",
        +  "type": "number"
        +}
      • addedInput schema / properties / search
        Added value: +{
        +  "description": "Substring matched against the technician's name or email address",
        +  "type": "string"
        +}
      • removedInput schema / properties / teamId
        Removed value: -{
        -  "description": "Filter by team/group ID",
        -  "type": "string"
        -}
    • Addedsuperops_technicians_lookups
    • Changedsuperops_tickets_add_note1 field changed
      • changedInput schema / properties / isPublic / description
        Previous value: -"Whether the note is visible to the client (default: false)"New value: +"Whether the note is visible to the client — maps to SuperOps' PUBLIC/PRIVATE note privacy (default: false, i.e. PRIVATE)"
    • Changedsuperops_tickets_create16 fields changed
      • addedInput schema / properties / category
        Added value: +{
        +  "description": "Service category name. SuperOps ships with: Database, Hardware, Help, Network, Software. Your tenant may rename or extend this list.",
        +  "type": "string"
        +}
      • removedInput schema / properties / categoryName
        Removed value: -{
        -  "description": "Service category name",
        -  "type": "string"
        -}
      • addedInput schema / properties / impact
        Added value: +{
        +  "description": "Ticket impact. SuperOps ships with: High, Medium, Low. Your tenant may rename or extend this list.",
        +  "type": "string"
        +}
      • changedInput schema / properties / priority / description
        Previous value: -"Ticket priority: Low, Medium, High, or Critical"New value: +"Ticket priority. SuperOps ships with: Critical, High, Medium, Low, Very Low. Your tenant may rename or extend this list."
      • removedInput schema / properties / priority / enum
        Removed value: -[
        -  "Low",
        -  "Medium",
        -  "High",
        -  "Critical"
        -]
      • addedInput schema / properties / requestType
        Added value: +{
        +  "description": "Request type, e.g. Incident or Service Request",
        +  "type": "string"
        +}
      • removedInput schema / properties / requesterEmail
        Removed value: -{
        -  "description": "Email of the person reporting the issue",
        -  "type": "string"
        -}
      • addedInput schema / properties / requesterId
        Added value: +{
        +  "description": "User ID of the client user reporting the issue",
        +  "type": "string"
        +}
      • addedInput schema / properties / siteId
        Added value: +{
        +  "description": "Client site ID",
        +  "type": "string"
        +}
      • addedInput schema / properties / source
        Added value: +{
        +  "default": "INTEGRATION",
        +  "description": "How the ticket originated (default: INTEGRATION)",
        +  "enum": [
        +    "FORM",
        +    "AGENT",
        +    "EMAIL",
        +    "AI",
        +    "PHONE",
        +    "INTEGRATION",
        +    "SCHEDULE",
        +    "CONTRACT_REMINDER",
        +    "CONTRACT",
        +    "INSTANT_MESSAGING"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / status
        Added value: +{
        +  "description": "Initial status; defaults to the tenant's default status. SuperOps ships with: Open, On Hold, Resolved, Closed, Waiting on third party. Your tenant may rename or extend this list.",
        +  "type": "string"
        +}
      • addedInput schema / properties / subcategory
        Added value: +{
        +  "description": "Service subcategory name; must be one of the subcategories defined under the chosen category.",
        +  "type": "string"
        +}
      • addedInput schema / properties / techGroupId
        Added value: +{
        +  "description": "Group ID of the technician group to assign",
        +  "type": "string"
        +}
      • removedInput schema / properties / techGroupName
        Removed value: -{
        -  "description": "Name of the technician group to assign",
        -  "type": "string"
        -}
      • addedInput schema / properties / technicianId
        Added value: +{
        +  "description": "User ID of the technician to assign",
        +  "type": "string"
        +}
      • addedInput schema / properties / urgency
        Added value: +{
        +  "description": "Ticket urgency. SuperOps ships with: High, Medium, Low. Your tenant may rename or extend this list.",
        +  "type": "string"
        +}
    • Changedsuperops_tickets_list9 fields changed
      • removedInput schema / properties / assigneeId
        Removed value: -{
        -  "description": "Filter by assigned technician ID",
        -  "type": "string"
        -}
      • removedInput schema / properties / cursor
        Removed value: -{
        -  "description": "Pagination cursor for fetching next page",
        -  "type": "string"
        -}
      • removedInput schema / properties / max
        Removed value: -{
        -  "default": 50,
        -  "description": "Maximum number of results (default: 50, max: 500)",
        -  "type": "number"
        -}
      • addedInput schema / properties / page
        Added value: +{
        +  "default": 1,
        +  "description": "Page number, 1-based (default: 1, max: 2147483647)",
        +  "type": "number"
        +}
      • addedInput schema / properties / pageSize
        Added value: +{
        +  "default": 50,
        +  "description": "Results per page (default: 50, max: 100)",
        +  "type": "number"
        +}
      • changedInput schema / properties / priority / description
        Previous value: -"Filter by priority(ies): Low, Medium, High, Critical"New value: +"Filter by priority(ies). SuperOps ships with: Critical, High, Medium, Low, Very Low. Your tenant may rename or extend this list."
      • changedInput schema / properties / status / description
        Previous value: -"Filter by status(es): Open, In Progress, Pending, Resolved, Closed"New value: +"Filter by status(es). SuperOps ships with: Open, On Hold, Resolved, Closed, Waiting on third party. Your tenant may rename or extend this list. Values must match it exactly."
      • addedInput schema / properties / technicianId
        Added value: +{
        +  "description": "Filter by assigned technician user ID",
        +  "type": "string"
        +}
      • removedInput schema / properties / unassigned
        Removed value: -{
        -  "description": "Show only unassigned tickets",
        -  "type": "boolean"
        -}
    • Changedsuperops_tickets_log_time12 fields changed
      • addedInput schema / properties / afterHours
        Added value: +{
        +  "default": false,
        +  "description": "Whether the work was performed after hours (default: false)",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / billDateTime
        Added value: +{
        +  "description": "When the work was performed, ISO 8601 (default: now)",
        +  "type": "string"
        +}
      • removedInput schema / properties / description
        Removed value: -{
        -  "description": "Description of work performed",
        -  "type": "string"
        -}
      • removedInput schema / properties / duration
        Removed value: -{
        -  "description": "Time spent in minutes",
        -  "type": "number"
        -}
      • addedInput schema / properties / notes
        Added value: +{
        +  "description": "Description of work performed",
        +  "type": "string"
        +}
      • addedInput schema / properties / qty
        Added value: +{
        +  "description": "Quantity of work in the service item's unit, typically hours, e.g. \"1.5\"",
        +  "type": "string"
        +}
      • addedInput schema / properties / serviceItemId
        Added value: +{
        +  "description": "Service catalog item ID to bill the work against",
        +  "type": "string"
        +}
      • addedInput schema / properties / technicianId
        Added value: +{
        +  "description": "User ID of the technician who performed the work (defaults to the API token's user)",
        +  "type": "string"
        +}
      • changedInput schema / properties / ticketId / description
        Previous value: -"The ticket ID"New value: +"The ticket ID to log the work against"
      • addedInput schema / properties / unitPrice
        Added value: +{
        +  "description": "Override the service item's unit price",
        +  "type": "string"
        +}
      • removedInput schema / properties / workType
        Removed value: -{
        -  "description": "Type of work (e.g., Remote Support, On-site, Phone)",
        -  "type": "string"
        -}
      • changedInput schema / required
        Previous value: -[
        -  "ticketId",
        -  "duration"
        -]New value: +[
        +  "ticketId",
        +  "qty"
        +]
    • Changedsuperops_tickets_update16 fields changed
      • removedInput schema / properties / assigneeId
        Removed value: -{
        -  "description": "ID of technician to assign",
        -  "type": "string"
        -}
      • addedInput schema / properties / category
        Added value: +{
        +  "description": "New service category name. SuperOps ships with: Database, Hardware, Help, Network, Software. Your tenant may rename or extend this list.",
        +  "type": "string"
        +}
      • addedInput schema / properties / impact
        Added value: +{
        +  "description": "New impact. SuperOps ships with: High, Medium, Low. Your tenant may rename or extend this list.",
        +  "type": "string"
        +}
      • changedInput schema / properties / priority / description
        Previous value: -"New priority: Low, Medium, High, Critical"New value: +"New priority. SuperOps ships with: Critical, High, Medium, Low, Very Low. Your tenant may rename or extend this list."
      • removedInput schema / properties / priority / enum
        Removed value: -[
        -  "Low",
        -  "Medium",
        -  "High",
        -  "Critical"
        -]
      • addedInput schema / properties / requestType
        Added value: +{
        +  "description": "New request type, e.g. Incident or Service Request",
        +  "type": "string"
        +}
      • removedInput schema / properties / resolution
        Removed value: -{
        -  "description": "Resolution notes (for resolving/closing tickets)",
        -  "type": "string"
        -}
      • addedInput schema / properties / resolutionCode
        Added value: +{
        +  "description": "Resolution code, for resolving/closing tickets. SuperOps ships with: Permanent Fix, Workaround, Resolved by Requester, Exception. Your tenant may rename or extend this list.",
        +  "type": "string"
        +}
      • changedInput schema / properties / status / description
        Previous value: -"New status: Open, In Progress, Pending, Resolved, Closed"New value: +"New status. SuperOps ships with: Open, On Hold, Resolved, Closed, Waiting on third party. Your tenant may rename or extend this list."
      • removedInput schema / properties / status / enum
        Removed value: -[
        -  "Open",
        -  "In Progress",
        -  "Pending",
        -  "Resolved",
        -  "Closed"
        -]
      • addedInput schema / properties / subcategory
        Added value: +{
        +  "description": "New service subcategory name; must be one of the subcategories defined under the chosen category.",
        +  "type": "string"
        +}
      • addedInput schema / properties / subject
        Added value: +{
        +  "description": "New subject/title",
        +  "type": "string"
        +}
      • addedInput schema / properties / techGroupId
        Added value: +{
        +  "description": "Group ID of the technician group to assign",
        +  "type": "string"
        +}
      • removedInput schema / properties / techGroupName
        Removed value: -{
        -  "description": "Name of technician group to assign",
        -  "type": "string"
        -}
      • addedInput schema / properties / technicianId
        Added value: +{
        +  "description": "User ID of the technician to assign",
        +  "type": "string"
        +}
      • addedInput schema / properties / urgency
        Added value: +{
        +  "description": "New urgency. SuperOps ships with: High, Medium, Low. Your tenant may rename or extend this list.",
        +  "type": "string"
        +}
  2. 19 tool updatesv1.6.3
    • Addedsuperops_assets_get
    • Addedsuperops_assets_list
    • Addedsuperops_assets_patches
    • Addedsuperops_assets_software
    • Addedsuperops_clients_get
    • Addedsuperops_clients_list
    • Addedsuperops_clients_search
    • Addedsuperops_custom_query
    • Addedsuperops_navigate
    • Addedsuperops_status
    • Addedsuperops_technicians_get
    • Addedsuperops_technicians_groups
    • Addedsuperops_technicians_list
    • Addedsuperops_test_connection
    • Addedsuperops_tickets_add_note
    • Addedsuperops_tickets_create
    • Addedsuperops_tickets_get
    • Addedsuperops_tickets_list
    • Addedsuperops_tickets_log_time
  3. 19 tool updatesv1.6.0
    • Removedsuperops_assets_get
    • Removedsuperops_assets_list
    • Removedsuperops_assets_patches
    • Removedsuperops_assets_software
    • Removedsuperops_clients_get
    • Removedsuperops_clients_list
    • Removedsuperops_clients_search
    • Removedsuperops_custom_query
    • Removedsuperops_navigate
    • Removedsuperops_status
    • Removedsuperops_technicians_get
    • Removedsuperops_technicians_groups
    • Removedsuperops_technicians_list
    • Removedsuperops_test_connection
    • Removedsuperops_tickets_add_note
    • Removedsuperops_tickets_create
    • Removedsuperops_tickets_get
    • Removedsuperops_tickets_list
    • Removedsuperops_tickets_log_time
  4. 21 tool updatesv1.2.5
    • First observedsuperops_assets_get
    • First observedsuperops_assets_list
    • First observedsuperops_assets_patches
    • First observedsuperops_assets_software
    • First observedsuperops_clients_get
    • First observedsuperops_clients_list
    • First observedsuperops_clients_search
    • First observedsuperops_custom_mutation
    • First observedsuperops_custom_query
    • First observedsuperops_navigate
    • First observedsuperops_status
    • First observedsuperops_technicians_get
    • First observedsuperops_technicians_groups
    • First observedsuperops_technicians_list
    • First observedsuperops_test_connection
    • First observedsuperops_tickets_add_note
    • First observedsuperops_tickets_create
    • First observedsuperops_tickets_get
    • First observedsuperops_tickets_list
    • First observedsuperops_tickets_log_time
    • First observedsuperops_tickets_update

TDQS

A3.7/5.0

Scored across 22 tools

Disambiguation4/5

Most tools target a clearly distinct resource+action (clients_list/get/search, tickets_list/get/create/update, assets_*), and descriptions clarify boundaries well. The only mild overlap is superops_technicians_groups vs superops_technicians_lookups, since both expose group data, but the descriptions explicitly distinguish a group roster from a lookup of role/team/group IDs.

Naming Consistency4/5

Strong, predictable pattern of superops_<entity>_<action> (clients_list, tickets_create, assets_get, technicians_groups) in consistent snake_case. A few utility tools (status, test_connection, custom_query, custom_mutation, navigate) drop the entity segment, but they remain snake_case and readable.

Tool Count4/5

22 tools is on the heavier side, but they span four distinct domains (clients, tickets, assets, technicians), so roughly 5 per resource family is well-scoped. Each tool serves a genuine operation, and the escape-hatch tools (custom_query/mutation) reduce the need for more granular endpoints.

Completeness4/5

Tickets have full lifecycle coverage (list, get, create, update, add_note, log_time); assets cover identity, software and patches; technicians cover list/get/groups/lookups. Clients are read-only (no create/update) and there is no ticket delete, but custom_query/custom_mutation provide a workaround for the gaps.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server for the NinjaOne RMM platform, enabling tools to manage devices, organizations, alerts, jobs, and policies through NinjaOne's API.
    26
    Apache 2.0
  • F
    license
    B
    quality
    A
    maintenance
    An MCP server for CIPP (Community IT Professionals Platform), enabling MSPs to manage Microsoft 365 tenants, users, policies, and security settings through CIPP's API.
    47
    11
    -