Skip to main content
Glama

Servicenow Api

CLI or API | MCP | Agent

PyPI - Version MCP Server PyPI - Downloads GitHub Repo stars GitHub forks GitHub contributors PyPI - License GitHub GitHub last commit (by committer) GitHub pull requests GitHub closed pull requests GitHub issues GitHub top language GitHub language count GitHub repo size GitHub repo file count (file type) PyPI - Wheel PyPI - Implementation

Version: 2.4.0

Documentation — Installation, deployment, and usage across the API, CLI, MCP, and A2A agent interfaces are maintained in the official documentation.


Related MCP server: now-sdk-ext-mcp

Overview

Servicenow Api is a production-grade Agent and Model Context Protocol (MCP) server designed to interface directly with Python ServiceNow API Wrapper.


Key Features

  • Consolidated Action-Routed MCP Tools: Minimizes token overhead and eliminates tool bloat in LLM contexts by grouping methods into optimized, togglable tool modules.

  • Enterprise-Grade Security: Complete support for Eunomia policies, OIDC token delegation, and granular execution context tracking.

  • Integrated Graph Agent: Built-in Pydantic AI agent supporting the Agent Control Protocol (ACP) and standard Web interfaces (AG-UI).

  • Native Telemetry & Tracing: Out-of-the-box OpenTelemetry exports and native Langfuse tracing.


CLI or API

This agent wraps the Python ServiceNow API Wrapper API. The operator can interact with it programmatically or via its integrated execution entrypoints.

Detailed instructions on how to use the underlying API wrappers, extended schema bindings, and developer SDK references are maintained in docs/index.md.


MCP

This server use dynamic Action-Routed tools to optimize token overhead and maximize IDE compatibility.

Tool surface — MCP_TOOL_MODE

Set MCP_TOOL_MODE (in the shared ~/.config/agent-connector-sdk/config.json or env) to choose the surface:

  • condensed (default) — the action-routed tools below (servicenow_<domain>(action, params_json)).

  • verbose — one named, documented 1:1 tool per API method (servicenow_get_cmdb_instance(...)), tagged verbose.

  • both — register both sets.

Filter the verbose set with --tools tag:verbose / MCP_ENABLED_TAGS=verbose. See the agent-connector-sdk guide MCP Tool Modes for details.

Available MCP Tools

The table below is auto-generated from the MCP server — do not edit by hand.

Condensed action-routed tools (MCP_TOOL_MODE=condensed)

MCP Tool

Toggle Env Var

Description

servicenow_account

ACCOUNTTOOL

Manage servicenow account operations.

servicenow_activity_subscriptions

ACTIVITY_SUBSCRIPTIONSTOOL

Manage servicenow activity subscriptions operations.

servicenow_aggregate

AGGREGATETOOL

Manage servicenow aggregate operations.

servicenow_application

APPLICATIONTOOL

Manage servicenow application operations.

servicenow_attachment

ATTACHMENTTOOL

Manage servicenow attachment operations.

servicenow_auth

AUTHTOOL

Manage servicenow auth operations.

servicenow_batch

BATCHTOOL

Manage servicenow batch operations.

servicenow_change_management

CHANGE_MANAGEMENTTOOL

Manage servicenow change management operations.

servicenow_cicd

CICDTOOL

Manage servicenow cicd operations.

servicenow_cilifecycle

CILIFECYCLETOOL

Manage servicenow cilifecycle operations.

servicenow_cmdb

CMDBTOOL

Manage servicenow cmdb operations.

servicenow_custom_api

CUSTOM_APITOOL

Manage servicenow custom api operations.

servicenow_data_classification

DATA_CLASSIFICATIONTOOL

Manage servicenow data classification operations.

servicenow_devops

DEVOPSTOOL

Manage servicenow devops operations.

servicenow_email

EMAILTOOL

Manage servicenow email operations.

servicenow_flows

FLOWSTOOL

Manage servicenow flows operations.

servicenow_hr

HRTOOL

Manage servicenow hr operations.

servicenow_import_sets

IMPORT_SETSTOOL

Manage servicenow import sets operations.

servicenow_incidents

INCIDENTSTOOL

Manage servicenow incidents operations.

servicenow_ingest_incidents

MISCTOOL

Natively ingest ServiceNow incidents into epistemic-graph as typed :Incident nodes.

servicenow_knowledge_management

KNOWLEDGE_MANAGEMENTTOOL

Manage servicenow knowledge management operations.

servicenow_metricbase

METRICBASETOOL

Manage servicenow metricbase operations.

servicenow_plugins

PLUGINSTOOL

Manage servicenow plugins operations.

servicenow_ppm

PPMTOOL

Manage servicenow ppm operations.

servicenow_problem

PROBLEMTOOL

Manage servicenow problem management operations.

servicenow_product_inventory

PRODUCT_INVENTORYTOOL

Manage servicenow product inventory operations.

servicenow_sdk

SDKTOOL

Scaffold, build, and deploy a ServiceNow Studio scoped app via the now-sdk CLI.

servicenow_service_qualification

SERVICE_QUALIFICATIONTOOL

Manage servicenow service qualification operations.

servicenow_source_control

SOURCE_CONTROLTOOL

Manage servicenow source control operations.

servicenow_table_api

TABLE_APITOOL

Manage servicenow table api operations.

servicenow_testing

TESTINGTOOL

Manage servicenow testing operations.

servicenow_update_sets

UPDATE_SETSTOOL

Manage servicenow update sets operations.

Verbose 1:1 API-mapped tools (MCP_TOOL_MODE=verbose or both)

MCP Tool

Toggle Env Var

Description

servicenow_activate_plugin

DEVOPSTOOL

Activate a plugin based on the provided plugin_id.

servicenow_add_ci_lifecycle_action

CMDBTOOL

Adds a specified CI action to a specified list of CIs.

servicenow_add_table_record

SYSTEMTOOL

Add a new record to the specified table.

servicenow_api_request

SYSTEMTOOL

Invoke the api_request operation.

servicenow_app_repo_install

DEVOPSTOOL

Install an application from the repository based on the provided parameters.

servicenow_app_repo_publish

DEVOPSTOOL

Publish an application to the repository based on the provided parameters.

servicenow_app_repo_rollback

DEVOPSTOOL

Rollback an application in the repository based on the provided parameters.

servicenow_apply_remote_source_control_changes

OTHERTOOL

Apply remote source control changes based on the provided parameters.

servicenow_approve_change_request

CHANGETOOL

Approve or reject a change request.

servicenow_batch_install

OTHERTOOL

Initiate a batch installation with the provided parameters.

servicenow_batch_install_result

OTHERTOOL

Get the result of a batch installation based on the provided result ID.

servicenow_batch_request

OTHERTOOL

Sends multiple REST API requests in a single call.

servicenow_batch_rollback

OTHERTOOL

Rollback a batch installation based on the provided rollback ID.

servicenow_calculate_standard_change_request_risk

CHANGETOOL

Calculate and update the risk of a standard change request.

servicenow_check_change_request_conflict

CHANGETOOL

Check for conflicts in a change request.

servicenow_check_ci_lifecycle_compat_actions

CMDBTOOL

Determines whether two specified CI actions are compatible.

servicenow_check_ci_lifecycle_lease_expired

CMDBTOOL

Determines whether the lease has expired for the requester.

servicenow_check_ci_lifecycle_not_allowed_action

CMDBTOOL

Determines whether a specified CI action is not allowed.

servicenow_check_ci_lifecycle_not_allowed_ops_transition

CMDBTOOL

Determines whether an operational state transition is allowed.

servicenow_check_ci_lifecycle_requestor_valid

CMDBTOOL

Determines whether the specified user is a valid requester.

servicenow_check_devops_change_control

DEVOPSTOOL

Checks if the orchestration task is under change control.

servicenow_check_devops_step_mapping

DEVOPSTOOL

Verifies that the information being passed is valid for the creation of an orchestration task.

servicenow_check_service_qualification

OTHERTOOL

Creates a technical service qualification request.

servicenow_collect_graph_for_roots

CMDBTOOL

Invoke the collect_graph_for_roots operation.

servicenow_combo_suite_scan

OTHERTOOL

Initiate a suite scan for a combo based on the provided combo_sys_id.

servicenow_create_change_request

CHANGETOOL

Create a new change request.

servicenow_create_change_request_ci_association

CHANGETOOL

Create associations between a change request and configuration items (CIs).

servicenow_create_change_request_task

CHANGETOOL

Create a new task associated with a change request.

servicenow_create_cmdb_instance

CMDBTOOL

Creates a single configuration item (CI).

servicenow_create_cmdb_relation

CMDBTOOL

Adds an inbound and/or outbound relation to the specified CI.

servicenow_create_incident

INCIDENTTOOL

Create a new incident record.

servicenow_create_problem

PROBLEMTOOL

Create a new problem record.

servicenow_delete_attachment

OTHERTOOL

Invoke the delete_attachment operation.

servicenow_delete_change_request

CHANGETOOL

Delete a change request.

servicenow_delete_change_request_conflict_scan

CHANGETOOL

Delete conflict scan information associated with a change request.

servicenow_delete_change_request_task

CHANGETOOL

Delete a task associated with a change request.

servicenow_delete_ci_lifecycle_action

CMDBTOOL

Removes a configuration item (CI) action for a list of CIs.

servicenow_delete_cmdb_relation

CMDBTOOL

Deletes the relation for the specified configuration item (CI).

servicenow_delete_incident

INCIDENTTOOL

Delete an incident record.

servicenow_delete_problem

PROBLEMTOOL

Delete a problem record.

servicenow_delete_product_inventory

OTHERTOOL

Deletes a specified product inventory record.

servicenow_delete_table_record

SYSTEMTOOL

Delete a record from the specified table.

servicenow_extend_ci_lifecycle_lease

CMDBTOOL

Extends the specified CI action's lease expiration time.

servicenow_full_scan

OTHERTOOL

Initiate a full instance scan.

servicenow_get_account

OTHERTOOL

Invoke the get_account operation.

servicenow_get_activity_subscriptions

OTHERTOOL

Invoke the get_activity_subscriptions operation.

servicenow_get_application

OTHERTOOL

Get information about an application.

servicenow_get_attachment

OTHERTOOL

Invoke the get_attachment operation.

servicenow_get_change_request

CHANGETOOL

Retrieve details of a specific change request.

servicenow_get_change_request_ci

CHANGETOOL

Retrieve the configuration item (CI) associated with a change request.

servicenow_get_change_request_conflict

CHANGETOOL

Retrieve conflict information associated with a change request.

servicenow_get_change_request_models

CHANGETOOL

Retrieve change request models based on specified parameters.

servicenow_get_change_request_nextstate

CHANGETOOL

Retrieve the next state of a specific change request.

servicenow_get_change_request_schedule

CHANGETOOL

Retrieve the schedule of a change request based on CI sys ID.

servicenow_get_change_request_tasks

CHANGETOOL

Retrieve tasks associated with a specific change request.

servicenow_get_change_request_worker

CHANGETOOL

Retrieve details of a change request worker.

servicenow_get_change_requests

CHANGETOOL

Retrieve change requests based on specified parameters.

servicenow_get_ci_lifecycle_active_actions

CMDBTOOL

Returns a list of active CI actions for the specified CI.

servicenow_get_ci_lifecycle_status

CMDBTOOL

Returns the current operational state for the specified CI.

servicenow_get_cmdb

CMDBTOOL

Get Configuration Management Database (CMDB) information based on specified parameters.

servicenow_get_cmdb_instance

CMDBTOOL

Returns attributes and relationship information for a specified CI record.

servicenow_get_cmdb_instances

CMDBTOOL

Returns the available configuration items (CI) for a specified CMDB class.

servicenow_get_data_classification

OTHERTOOL

Invoke the get_data_classification operation.

servicenow_get_devops_change_info

DEVOPSTOOL

Retrieves change request details for a specified orchestration pipeline execution.

servicenow_get_devops_code_schema

DEVOPSTOOL

Returns the schema object for a specified code resource.

servicenow_get_devops_onboarding_status

DEVOPSTOOL

Returns the current status of the specified onboarding event.

servicenow_get_devops_orchestration_schema

DEVOPSTOOL

Returns the schema object for a specified orchestration resource.

servicenow_get_devops_plan_schema

DEVOPSTOOL

Returns the schema object for a specific plan.

servicenow_get_featured_knowledge_article

KNOWLEDGETOOL

Get featured Knowledge Base articles.

servicenow_get_flow_metadata

SYSTEMTOOL

Fetch rich metadata for any flow/subflow.

servicenow_get_hr_profile

OTHERTOOL

Invoke the get_hr_profile operation.

servicenow_get_import_set

OTHERTOOL

Get details of a specific import set record.

servicenow_get_incident

INCIDENTTOOL

Retrieve details of a specific incident record.

servicenow_get_incidents

INCIDENTTOOL

Retrieve details of incident records.

servicenow_get_knowledge_article

KNOWLEDGETOOL

Get Knowledge Base article.

servicenow_get_knowledge_article_attachment

KNOWLEDGETOOL

Get Knowledge Base article attachment.

servicenow_get_knowledge_articles

KNOWLEDGETOOL

Get all Knowledge Base articles.

servicenow_get_most_viewed_knowledge_articles

KNOWLEDGETOOL

Get most viewed Knowledge Base articles.

servicenow_get_problem

PROBLEMTOOL

Retrieve details of a specific problem record.

servicenow_get_problems

PROBLEMTOOL

Retrieve details of problem records.

servicenow_get_product_inventory

OTHERTOOL

Retrieves a list of all product inventories.

servicenow_get_service_qualification

OTHERTOOL

Retrieves a technical qualification request by ID or list all.

servicenow_get_standard_change_request_model

CHANGETOOL

Retrieve details of a standard change request model.

servicenow_get_standard_change_request_template

CHANGETOOL

Retrieve details of a standard change request template.

servicenow_get_standard_change_request_templates

CHANGETOOL

Retrieve standard change request templates based on specified parameters.

servicenow_get_stats

SYSTEMTOOL

Invoke the get_stats operation.

servicenow_get_table

SYSTEMTOOL

Get records from the specified table based on provided parameters.

servicenow_get_table_record

SYSTEMTOOL

Get a specific record from the specified table.

servicenow_import_repository

DEVOPSTOOL

Import a repository based on the provided parameters.

servicenow_ingest_cmdb_data

CMDBTOOL

Inserts records into the Import Set table associated with the data source.

servicenow_insert_cost_plans

OTHERTOOL

Creates cost plans.

servicenow_insert_import_set

OTHERTOOL

Insert a new record into the specified import set.

servicenow_insert_multiple_import_sets

OTHERTOOL

Insert multiple records into the specified import set.

servicenow_insert_project_tasks

OTHERTOOL

Creates a project and associated project tasks.

servicenow_instance_scan_progress

OTHERTOOL

Get progress information for an instance scan based on the provided progress ID.

servicenow_metricbase_insert

OTHERTOOL

Invoke the metricbase_insert operation.

servicenow_patch_cmdb_instance

CMDBTOOL

Replaces attributes in the specified CI record (PATCH).

servicenow_patch_table_record

SYSTEMTOOL

Partially update a record in the specified table.

servicenow_point_scan

OTHERTOOL

Initiate a point instance scan based on the provided parameters.

servicenow_process_service_qualification_result

OTHERTOOL

Processes a technical service qualification result.

servicenow_progress

OTHERTOOL

Get progress information based on the provided progress ID.

servicenow_refresh_auth_token

SYSTEMTOOL

Refresh the authentication token

servicenow_refresh_change_request_impacted_services

CHANGETOOL

Refresh impacted services for a change request.

servicenow_register_ci_lifecycle_operator

CMDBTOOL

Registers an operator for a non-workflow user.

servicenow_register_devops_artifact

DEVOPSTOOL

Enables orchestration tools to register artifacts into a ServiceNow instance.

servicenow_rollback_plugin

DEVOPSTOOL

Rollback a plugin based on the provided plugin_id.

servicenow_run_test_suite

OTHERTOOL

Run a test suite based on the provided parameters.

servicenow_send_email

SYSTEMTOOL

Invoke the send_email operation.

servicenow_set_ci_lifecycle_status

CMDBTOOL

Sets the operational state for a specified list of CIs.

servicenow_suite_scan

OTHERTOOL

Initiate a suite scan based on the provided suite_sys_id and sys_ids.

servicenow_unregister_ci_lifecycle_operator

CMDBTOOL

Unregisters an operator for non-workflow users.

servicenow_update_change_request

CHANGETOOL

Update details of a change request.

servicenow_update_change_request_first_available

CHANGETOOL

Update the schedule of a change request to the first available slot.

servicenow_update_change_request_task

CHANGETOOL

Update details of a task associated with a change request.

servicenow_update_cmdb_instance

CMDBTOOL

Updates the specified CI record (PUT).

servicenow_update_incident

INCIDENTTOOL

Update an existing incident record.

servicenow_update_problem

PROBLEMTOOL

Update an existing problem record.

servicenow_update_set_back_out

DEVOPSTOOL

Backs out an installation operation that was performed on an update set with a given sys_id.

servicenow_update_set_commit

DEVOPSTOOL

Commits an update set with a given sys_id.

servicenow_update_set_commit_multiple

DEVOPSTOOL

Commits multiple update sets in a single request according to the order that they're provided.

servicenow_update_set_create

DEVOPSTOOL

Creates a new update set and inserts the new record in the Update Sets [sys_update_set] table.

servicenow_update_set_preview

DEVOPSTOOL

Previews an update set to check for any conflicts and retrieve progress information about the update set operation.

servicenow_update_set_retrieve

DEVOPSTOOL

Retrieves an update set with a given sys_id and allows you to remove the existing retrieved update set from the instance.

servicenow_update_table_record

SYSTEMTOOL

Fully update a record in the specified table.

servicenow_upload_attachment

OTHERTOOL

Upload a file as an attachment on a table record.

servicenow_workflow_to_mermaid

SYSTEMTOOL

Generates a Mermaid diagram representing the relationships between ServiceNow flows and subflows.

32 action-routed tool(s) · 126 verbose 1:1 tool(s). Each is enabled unless its <DOMAIN>TOOL toggle is set false; MCP_TOOL_MODE selects the surface (intent default — the six verb-tools, granular set loaded on demand · condensed action-routed · verbose 1:1 · both). Auto-generated — do not edit.

Detailed tool schemas, parameter shapes, and validation constraints are preserved in docs/usage.md.

Dynamic Tool Selection & Visibility

This MCP server supports dynamic toolset selection and visibility filtering at runtime. This allows the operator to restrict the set of exposed tools to prevent blowing up the LLM's context window.

The operator can configure tool filtering via multiple input channels:

  • CLI Arguments: Pass --tools or --toolsets (or their disabled counterparts --disabled-tools and --disabled-toolsets) during startup.

  • Environment Variables: Define standard environment variables:

    • MCP_ENABLED_TOOLS / MCP_DISABLED_TOOLS

    • MCP_ENABLED_TAGS / MCP_DISABLED_TAGS

  • HTTP SSE Request Headers: Pass custom headers during transport initialization:

    • x-mcp-enabled-tools / x-mcp-disabled-tools

    • x-mcp-enabled-tags / x-mcp-disabled-tags

  • HTTP SSE Request Query Parameters: Append query parameters directly to the operator's transport connection URL:

    • ?tools=tool1,tool2

    • ?tags=tag1

When query strings or parameters are provided, an LLM-free Knowledge Graph resolution layer (using DynamicToolOrchestrator) matches query intents against known tool tags, names, or descriptions, with safe fallback and automated 24-hour background cache refreshing.


MCP Configuration Examples

Install the connector-focused [mcp] extra. Examples use servicenow-api[mcp] to add FastMCP / FastAPI through agent-connector-sdk[mcp]; the required Agent Utilities core still carries epistemic-graph[full]. The [agent-runtime] extra additionally enables model orchestration.

stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)

{
  "mcpServers": {
    "servicenow-mcp": {
      "command": "uvx",
      "args": [
        "--from",
        "servicenow-api[mcp]",
        "servicenow-mcp"
      ],
      "env": {
        "MCP_TOOL_MODE": "intent",
        "ACCOUNTTOOL": "True",
        "ACTIVITY_SUBSCRIPTIONSTOOL": "True",
        "AGGREGATETOOL": "True",
        "APPLICATIONTOOL": "True",
        "ATTACHMENTTOOL": "True",
        "AUTHTOOL": "True",
        "BATCHTOOL": "True",
        "CHANGE_MANAGEMENTTOOL": "True",
        "CICDTOOL": "True",
        "CILIFECYCLETOOL": "True",
        "CMDBTOOL": "True",
        "CUSTOM_APITOOL": "True",
        "DATA_CLASSIFICATIONTOOL": "True",
        "DELEGATED_SCOPES": "api",
        "DEVOPSTOOL": "True",
        "EMAILTOOL": "True",
        "FLOWSTOOL": "True",
        "HRTOOL": "True",
        "IMPORT_SETSTOOL": "True",
        "INCIDENTSTOOL": "True",
        "KNOWLEDGE_MANAGEMENTTOOL": "True",
        "METRICBASETOOL": "True",
        "MISCTOOL": "True",
        "OPENAPI_CLIENT_ID": "your_openapi_client_id_here",
        "OPENAPI_CLIENT_SECRET": "your_openapi_client_secret_here",
        "OPENAPI_PASSWORD": "your_openapi_password_here",
        "OPENAPI_USERNAME": "your_openapi_username_here",
        "PLUGINSTOOL": "True",
        "PPMTOOL": "True",
        "PROBLEMTOOL": "True",
        "PRODUCT_INVENTORYTOOL": "True",
        "SDKTOOL": "True",
        "SDK_WORKDIR": "/data/servicenow-sdk-workspace",
        "SERVICENOW_CLIENT_SECRET": "your_servicenow_client_secret_here",
        "SERVICENOW_GRANT_TYPE": "password",
        "SERVICENOW_INSTANCE": "https://instance.example.invalid",
        "SERVICENOW_PASSWORD": "your_servicenow_password_here",
        "SERVICENOW_TLS_PROFILE": "system",
        "SERVICENOW_USERNAME": "your_servicenow_username_here",
        "SERVICE_QUALIFICATIONTOOL": "True",
        "SOURCE_CONTROLTOOL": "True",
        "TABLE_APITOOL": "True",
        "TESTINGTOOL": "True",
        "UPDATE_SETSTOOL": "True"
      }
    }
  }
}

Runtime references require an alias-aware launcher such as Arbora. Other launchers must omit those entries and inject the resolved values through their own runtime secret boundary.

Streamable-HTTP Transport (networked / production)

{
  "mcpServers": {
    "servicenow-mcp": {
      "command": "uvx",
      "args": [
        "--from",
        "servicenow-api[mcp]",
        "servicenow-mcp",
        "--transport",
        "streamable-http",
        "--port",
        "8000"
      ],
      "env": {
        "TRANSPORT": "streamable-http",
        "HOST": "127.0.0.1",
        "PORT": "8000",
        "MCP_TOOL_MODE": "intent",
        "ACCOUNTTOOL": "True",
        "ACTIVITY_SUBSCRIPTIONSTOOL": "True",
        "AGGREGATETOOL": "True",
        "APPLICATIONTOOL": "True",
        "ATTACHMENTTOOL": "True",
        "AUTHTOOL": "True",
        "BATCHTOOL": "True",
        "CHANGE_MANAGEMENTTOOL": "True",
        "CICDTOOL": "True",
        "CILIFECYCLETOOL": "True",
        "CMDBTOOL": "True",
        "CUSTOM_APITOOL": "True",
        "DATA_CLASSIFICATIONTOOL": "True",
        "DELEGATED_SCOPES": "api",
        "DEVOPSTOOL": "True",
        "EMAILTOOL": "True",
        "FLOWSTOOL": "True",
        "HRTOOL": "True",
        "IMPORT_SETSTOOL": "True",
        "INCIDENTSTOOL": "True",
        "KNOWLEDGE_MANAGEMENTTOOL": "True",
        "METRICBASETOOL": "True",
        "MISCTOOL": "True",
        "OPENAPI_CLIENT_ID": "your_openapi_client_id_here",
        "OPENAPI_CLIENT_SECRET": "your_openapi_client_secret_here",
        "OPENAPI_PASSWORD": "your_openapi_password_here",
        "OPENAPI_USERNAME": "your_openapi_username_here",
        "PLUGINSTOOL": "True",
        "PPMTOOL": "True",
        "PROBLEMTOOL": "True",
        "PRODUCT_INVENTORYTOOL": "True",
        "SDKTOOL": "True",
        "SDK_WORKDIR": "/data/servicenow-sdk-workspace",
        "SERVICENOW_CLIENT_SECRET": "your_servicenow_client_secret_here",
        "SERVICENOW_GRANT_TYPE": "password",
        "SERVICENOW_INSTANCE": "https://instance.example.invalid",
        "SERVICENOW_PASSWORD": "your_servicenow_password_here",
        "SERVICENOW_TLS_PROFILE": "system",
        "SERVICENOW_USERNAME": "your_servicenow_username_here",
        "SERVICE_QUALIFICATIONTOOL": "True",
        "SOURCE_CONTROLTOOL": "True",
        "TABLE_APITOOL": "True",
        "TESTINGTOOL": "True",
        "UPDATE_SETSTOOL": "True"
      }
    }
  }
}

Alternatively, connect to a pre-deployed Streamable-HTTP instance by url:

{
  "mcpServers": {
    "servicenow-mcp": {
      "url": "http://localhost:8000/servicenow-mcp/mcp"
    }
  }
}

Run a reviewed container image as a least-privilege stdio child (no listener or published port):

docker run -i --rm \
  --read-only \
  --cap-drop=ALL \
  --security-opt=no-new-privileges \
  --pids-limit=256 \
  --tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
  -e TRANSPORT=stdio \
  -e MCP_TOOL_MODE=intent \
  -e ACCOUNTTOOL=True \
  -e ACTIVITY_SUBSCRIPTIONSTOOL=True \
  -e AGGREGATETOOL=True \
  -e APPLICATIONTOOL=True \
  -e ATTACHMENTTOOL=True \
  -e AUTHTOOL=True \
  -e BATCHTOOL=True \
  -e CHANGE_MANAGEMENTTOOL=True \
  -e CICDTOOL=True \
  -e CILIFECYCLETOOL=True \
  -e CMDBTOOL=True \
  -e CUSTOM_APITOOL=True \
  -e DATA_CLASSIFICATIONTOOL=True \
  -e DELEGATED_SCOPES=api \
  -e DEVOPSTOOL=True \
  -e EMAILTOOL=True \
  -e FLOWSTOOL=True \
  -e HRTOOL=True \
  -e IMPORT_SETSTOOL=True \
  -e INCIDENTSTOOL=True \
  -e KNOWLEDGE_MANAGEMENTTOOL=True \
  -e METRICBASETOOL=True \
  -e MISCTOOL=True \
  -e OPENAPI_CLIENT_ID=your_openapi_client_id_here \
  -e OPENAPI_CLIENT_SECRET=your_openapi_client_secret_here \
  -e OPENAPI_PASSWORD=your_openapi_password_here \
  -e OPENAPI_USERNAME=your_openapi_username_here \
  -e PLUGINSTOOL=True \
  -e PPMTOOL=True \
  -e PROBLEMTOOL=True \
  -e PRODUCT_INVENTORYTOOL=True \
  -e SDKTOOL=True \
  -e SDK_WORKDIR=/data/servicenow-sdk-workspace \
  -e SERVICENOW_CLIENT_SECRET=your_servicenow_client_secret_here \
  -e SERVICENOW_GRANT_TYPE=password \
  -e SERVICENOW_INSTANCE=https://instance.example.invalid \
  -e SERVICENOW_PASSWORD=your_servicenow_password_here \
  -e SERVICENOW_TLS_PROFILE=system \
  -e SERVICENOW_USERNAME=your_servicenow_username_here \
  -e SERVICE_QUALIFICATIONTOOL=True \
  -e SOURCE_CONTROLTOOL=True \
  -e TABLE_APITOOL=True \
  -e TESTINGTOOL=True \
  -e UPDATE_SETSTOOL=True \
  registry.example.invalid/servicenow-api@sha256:<digest> servicenow-mcp

For containerized network HTTP, supply an authenticated TLS ingress (or direct server TLS), exact MCP_ALLOWED_HOSTS, and an exact trusted-proxy CIDR policy through the operator-owned deployment profile. The generator does not emit an unauthenticated non-loopback listener.

Auto-generated from the code-read env surface (MCP_TOOL_MODE + package vars) — do not edit.

Additional Deployment Options

servicenow-api can run as a local stdio process or container, or behind a remote network boundary. The Deployment guide carries the detailed transport contract.

  • Local container — launch a reviewed immutable image as a least-privilege stdio child with no listener or published port.

  • Remote URL — connect through an operator-supplied authenticated HTTPS ingress. Keep its URL, outbound identity references, trust profile, and exact MCP_ALLOWED_HOSTS in AgentConfig.

Agent

This repository features a fully integrated Pydantic AI Graph Agent. It communicates over the Agent Control Protocol (ACP) and interacts smoothly with the Agent Web UI (AG-UI) and Terminal interface.

Running the Agent CLI

To start the interactive command-line agent:

# Set credentials
export SERVICENOW_INSTANCE="your_value"
export SERVICENOW_USERNAME="your_value"
export SERVICENOW_CLIENT_ID="your_value"
export SERVICENOW_TLS_PROFILE=system
export DEBUG="your_value"
export PYTHONUNBUFFERED="your_value"
export SERVICENOW_PASSWORD="your_value"
export SERVICENOW_CLIENT_SECRET="your_value"

# Run the agent server
servicenow-agent --provider openai --model-id gpt-4o

Docker Compose Orchestration

The following docker/agent.compose.yml configures the Agent, Web UI, and Terminal Interface together:

version: '3.8'

services:
  servicenow-api-mcp:
    image: example/servicenow-api@sha256:<digest>
    container_name: servicenow-api-mcp
    hostname: servicenow-api-mcp
    restart: always
    env_file:
      - ../.env
    environment:
      - PYTHONUNBUFFERED=1
      - HOST=0.0.0.0
      - PORT=8000
      - TRANSPORT=streamable-http
    ports:
      - "8000:8000"
    healthcheck:
      test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

  servicenow-api-agent:
    image: example/servicenow-api@sha256:<digest>
    container_name: servicenow-api-agent
    hostname: servicenow-api-agent
    restart: always
    depends_on:
      - servicenow-api-mcp
    env_file:
      - ../.env
    command: [ "servicenow-agent" ]
    environment:
      - PYTHONUNBUFFERED=1
      - HOST=0.0.0.0
      - PORT=9004
      - MCP_URL=http://servicenow-api-mcp:8000/mcp
      - PROVIDER=${PROVIDER:-openai}
      - MODEL_ID=${MODEL_ID:-gpt-4o}
      - ENABLE_WEB_UI=True
      - ENABLE_OTEL=True
    ports:
      - "9004:9004"
    healthcheck:
      test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:9004/health')"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"

Detailed graph node architecture explanations, custom skill configurations, and agentic trace guides are available in docs/deployment.md.


Security & Governance

Built directly upon the enterprise-ready agent-connector-sdk core, standard security parameters are fully supported:

Access Control & Policy Enforcement

  • Eunomia Policies: Fine-grained, policy-driven tool authorization. Supports none, local embedded (mcp_policies.json), or centralized remote modes.

  • OIDC Token Delegation: Compliant with RFC 8693 token exchange for flowing authenticating user credentials from Web UI / ACP → Agent → MCP.

  • Scoped Credentials: Execution context runs restricted to the specific caller identity.

Runtime Security Grid

Feature

Feature

Enablement

Tool Guard

Sensitivity inspection with human-in-the-loop validation

Enabled by default

Prompt Injection Defense

Input scanning, repetition monitoring, and recursive loop blocks

Enabled by default

Context Safety Guard

Stuck-loop detectors and contextual overflow preemptive alerts

Enabled by default


Environment Variables

Package environment variables

Variable

Example

Description

HOST

0.0.0.0

PORT

8000

TRANSPORT

stdio

options: stdio, streamable-http, sse

ENABLE_OTEL

True

OTEL_EXPORTER_OTLP_ENDPOINT

http://localhost:8080/api/public/otel

OTEL_EXPORTER_OTLP_PUBLIC_KEY_REF

pk-...

Reference form only — runtime-only trust material, resolved via AgentConfig.

OTEL_EXPORTER_OTLP_SECRET_KEY_REF

sk-...

OTEL_EXPORTER_OTLP_PROTOCOL

http/protobuf

EUNOMIA_TYPE

none

options: none, embedded, remote

EUNOMIA_POLICY_FILE

mcp_policies.json

EUNOMIA_REMOTE_URL

http://eunomia-server:8000

SERVICENOW_INSTANCE

https://instance.example.invalid

SERVICENOW_URL

—

alias for SERVICENOW_INSTANCE (checked first if both are set)

SERVICENOW_USERNAME

your_servicenow_username_here

SERVICENOW_CLIENT_ID

—

SERVICENOW_GRANT_TYPE

password

password (default) or client_credentials; client_credentials requires client id and secret.

SERVICENOW_TLS_PROFILE

system

Named outbound TLS policy from AgentConfig. Use a reference for runtime-only trust material; peer and hostname verification remain mandatory.

SERVICENOW_TLS_PROFILE_REF

—

DEBUG

False

PYTHONUNBUFFERED

1

SERVICENOW_PASSWORD

secret-injected

SERVICENOW_CLIENT_SECRET

secret-injected

AUDIENCE

—

downstream token audience (defaults to the ServiceNow instance)

DELEGATED_SCOPES

api

scopes requested during token exchange

OPENAPI_USERNAME

your_openapi_username_here

OPENAPI_PASSWORD

secret-injected

OPENAPI_CLIENT_ID

your_openapi_client_id_here

OPENAPI_CLIENT_SECRET

secret-injected

SDK_WORKDIR

/data/servicenow-sdk-workspace

Working directory for now-sdk init/build/deploy/etc. Defaults to ~/servicenow-sdk-workspace (auto-created) when unset.

MISCTOOL

True

FLOWSTOOL

True

APPLICATIONTOOL

True

CMDBTOOL

True

CICDTOOL

True

PLUGINSTOOL

True

SOURCE_CONTROLTOOL

True

TESTINGTOOL

True

UPDATE_SETSTOOL

True

BATCHTOOL

True

CHANGE_MANAGEMENTTOOL

True

CILIFECYCLETOOL

True

DEVOPSTOOL

True

IMPORT_SETSTOOL

True

INCIDENTSTOOL

True

PROBLEMTOOL

True

KNOWLEDGE_MANAGEMENTTOOL

True

TABLE_APITOOL

True

AUTHTOOL

True

CUSTOM_APITOOL

True

EMAILTOOL

True

DATA_CLASSIFICATIONTOOL

True

ATTACHMENTTOOL

True

AGGREGATETOOL

True

ACTIVITY_SUBSCRIPTIONSTOOL

True

ACCOUNTTOOL

True

HRTOOL

True

METRICBASETOOL

True

SERVICE_QUALIFICATIONTOOL

True

PPMTOOL

True

PRODUCT_INVENTORYTOOL

True

SDKTOOL

True

SERVICENOW_API_MCP_IMAGE

—

Required by docker/mcp.compose.yml; set to the reviewed MCP image@sha256 digest.

SERVICENOW_API_AGENT_IMAGE

—

Required by docker/agent.compose.yml; set to the reviewed agent image@sha256 digest.

Inherited agent-connector-sdk variables (apply to every connector)

Variable

Example

Description

MCP_TOOL_MODE

intent

Tool surface: intent | condensed | verbose | both

MCP_ENABLED_TOOLS

—

Comma-separated tool allow-list

MCP_DISABLED_TOOLS

—

Comma-separated tool deny-list

MCP_ENABLED_TAGS

—

Comma-separated tag allow-list

MCP_DISABLED_TAGS

—

Comma-separated tag deny-list

MCP_CLIENT_AUTH

—

Outbound MCP child auth: oidc-client-credentials | basic | none

OIDC_CLIENT_ID

—

OIDC client id (service-account auth)

OIDC_CLIENT_SECRET_REF

secret://identity/oidc-client-secret

Runtime secret reference for the OIDC service account

MCP_BASIC_AUTH_USERNAME

—

HTTP Basic username (MCP_CLIENT_AUTH=basic)

MCP_BASIC_AUTH_PASSWORD_REF

secret://identity/mcp-basic-password

Runtime secret reference for HTTP Basic auth (MCP_CLIENT_AUTH=basic)

MCP_URL

http://localhost:8000/mcp

URL of the MCP server the agent connects to

PROVIDER

—

Operator-configured LLM provider for the agent

MODEL_ID

—

Operator-configured model id for the agent

ENABLE_WEB_UI

True

Serve the AG-UI web interface

63 package + 14 inherited variable(s). Auto-generated from .env.example + the shared agent-connector-sdk set — do not edit.

Every variable the server reads. See .env.example for a copy-paste starting point.

Connection & Credentials

Variable

Description

Default

SERVICENOW_INSTANCE

ServiceNow instance base URL

—

SERVICENOW_USERNAME

Account username (basic auth)

—

SERVICENOW_PASSWORD

Account password (basic auth)

—

SERVICENOW_CLIENT_ID

OAuth client id

—

SERVICENOW_CLIENT_SECRET

OAuth client secret

—

SERVICENOW_GRANT_TYPE

password or client_credentials

password

SERVICENOW_TLS_PROFILE

Named outbound TLS policy from AgentConfig

system

DEBUG

Verbose logging

False

PYTHONUNBUFFERED

Unbuffered stdout (recommended in containers)

1

OAuth client credentials

Set SERVICENOW_GRANT_TYPE=client_credentials together with SERVICENOW_CLIENT_ID and SERVICENOW_CLIENT_SECRET to authenticate as the OAuth application without a username/password. Configure the application for this grant on the ServiceNow instance. Provide the secret through the operator's runtime configuration; do not commit it to an environment file.

OIDC delegation retains priority when enabled. Otherwise, explicitly selecting client_credentials requires both client fields and fails if either is missing; it does not fall back to an ambient username/password. Leaving the grant setting unset preserves the existing password-grant or Basic authentication behavior. Token exchange uses the configured TLS profile, a 30-second request timeout, and rejects redirects, non-success HTTP responses, and missing or invalid tokens.

MCP server / transport

Variable

Description

Default

TRANSPORT

stdio, streamable-http, or sse

stdio

HOST

Bind host (HTTP transports)

0.0.0.0

PORT

Bind port (HTTP transports)

8000

MCP_TOOL_MODE

Tool surface: condensed, verbose, or both

condensed

MCP_ENABLED_TOOLS / MCP_DISABLED_TOOLS

Comma-separated tool allow/deny list

—

MCP_ENABLED_TAGS / MCP_DISABLED_TAGS

Comma-separated tag allow/deny list

—

Telemetry & governance

Variable

Description

Default

ENABLE_OTEL

Enable OpenTelemetry export

True

OTEL_EXPORTER_OTLP_ENDPOINT

OTLP collector endpoint

—

OTEL_EXPORTER_OTLP_PUBLIC_KEY / OTEL_EXPORTER_OTLP_SECRET_KEY

OTLP auth keys

—

OTEL_EXPORTER_OTLP_PROTOCOL

OTLP protocol (e.g. http/protobuf)

—

EUNOMIA_TYPE

Authorization mode: none, embedded, remote

none

EUNOMIA_POLICY_FILE

Embedded policy file

mcp_policies.json

EUNOMIA_REMOTE_URL

Remote Eunomia server URL

—

Tool toggles

Each action-routed tool can be disabled individually via its toggle env var (set to false). The full list is in the Available MCP Tools table above (e.g. INCIDENTSTOOL, CHANGE_MANAGEMENTTOOL, TABLE_APITOOL, CMDBTOOL).


Installation

Pick the extra that matches what the operator want to run:

Extra

Installs

Use when

servicenow-api[mcp]

Connector-focused MCP server (agent-connector-sdk[mcp] — FastMCP/FastAPI + epistemic-graph[full])

The operator only run the MCP server (smallest install / image)

servicenow-api[agent]

Agent runtime (agent-connector-sdk[agent-runtime,logfire] — model orchestration + epistemic-graph[full])

The operator run the integrated agent

servicenow-api[all]

Everything (mcp + agent + logfire)

Development / both surfaces

# Connector-focused MCP server (includes the shared graph engine)
uv pip install "servicenow-api[mcp]"

# Agent runtime (adds model orchestration to the shared graph engine)
uv pip install "servicenow-api[agent]"

# Everything (development)
uv pip install "servicenow-api[all]"      # or: python -m pip install "servicenow-api[all]"

Container images (:mcp vs :agent)

One multi-stage docker/Dockerfile builds two right-sized images, selected by --target:

Image tag

Build target

Contents

Entrypoint

example/servicenow-api:mcp

--target mcp

servicenow-api[mcp] — connector-focused, includes epistemic-graph[full]; no model-orchestration stack

servicenow-mcp

example/servicenow-api@sha256:<digest>

--target agent (default)

servicenow-api[agent] — agent runtime, model orchestration + epistemic-graph[full]

servicenow-agent

docker build --target mcp   -t example/servicenow-api:mcp    docker/   # connector-focused MCP server
docker build --target agent -t example/servicenow-api:agent-local docker/   # agent runtime

docker/mcp.compose.yml runs the connector-focused :mcp server; docker/agent.compose.yml runs the agent (immutable agent digest) with a co-located :mcp sidecar.

Knowledge-graph database (epistemic-graph)

Both [mcp] and [agent] carry the epistemic-graph engine through the required Agent Utilities core dependency (epistemic-graph[full]). The [mcp] extra keeps the server connector-focused; [agent] also enables model orchestration. Local deployments can use the bundled engine. For production or shared state, run epistemic-graph as a dedicated database service and configure the runtime to use it. Deployment recipes (single-node + Raft HA), connection configuration, and architecture diagrams are documented in the epistemic-graph deployment guide.


Documentation

The complete documentation is published as the official documentation site and is the recommended reference for installation, deployment, and day-to-day operation.

Page

Contents

Installation

pip, source, extras, prebuilt Docker image

Deployment

run the MCP and agent servers, Compose, Caddy + Technitium, env config

Usage

the MCP tools, the Api client, the command line

Overview

the standardized agent-package pattern and MCP configuration

Concepts

concept registry (CONCEPT:SNOW-*)


Repository Owners

GitHub followers GitHub User's stars


Contribute

Contributions are welcome! Please ensure code quality by running local checks before submitting pull requests:

  • Format code using ruff format .

  • Lint code using ruff check .

  • Validate type-safety with mypy .

  • Run test suites using pytest

Deploy with agent-connector-sdk-deployment

Provision this package with the consolidated agent-connector-sdk-deployment workflow. It selects an installed-package, editable-source, or immutable-container path; records only runtime secret and TLS-profile references in AgentConfig; and runs doctor, registration, policy, observability, and rollback gates. Ask your agent to "deploy servicenow-api with agent-connector-sdk-deployment".

Install mode

Command

Installed package

uv tool install "servicenow-api[mcp]", then run servicenow-mcp

Editable source

uv pip install -e ".[agent]", then run servicenow-mcp

Immutable container

deploy registry.example.invalid/servicenow-api@sha256:<digest> through the operator-selected orchestrator

The repository embeds no deployment profile, credential value, certificate path, or environment-specific endpoint. Supply those at runtime through AgentConfig and the configured secret provider.

Governed capability contract

This package ships a compact canonical skill surface with specialist procedures kept as referenced workflows. The current MCP tools, skill metadata, connector_manifest.yml, ontology, mappings, shapes, fixtures, migrations, tool-schema fingerprints, and certification metadata form one versioned capability contract. Validate them together; do not rely on stale tool names or historical per-task skill wrappers.

Runtime endpoints, credentials, certificate trust, tenant identity, retention, and observability policy are deployment inputs and are never packaged values. See Configuration, trust, and privacy before enabling a network transport, connector ingestion, Arbora delegation, or trace export.

Available Tools

133 tools
servicenow_activate_pluginActivate pluginC

Activate a plugin based on the provided plugin_id.

:param plugin_id: The ID of the plugin to be activated. :type plugin_id: str

:return: Response containing parsed Pydantic model with information about the activation. :rtype: Response

:raises MissingParameterError: If plugin_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnly=false, idempotent=false, destructive=false, openWorld=true, so the safety profile is covered. The description adds the failure mode (MissingParameterError when plugin_id absent) and the return type, which is useful, but says nothing about what activation actually does to the instance (restarts, permission requirements, async behavior) for a non-idempotent system mutation.

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

Conciseness3/5

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

Purpose is front-loaded and the text is short, but it is a raw RST docstring with mechanical directives (:type plugin_id: str) that add no information. Every sentence earns its place marginally, though the formatting is developer-facing rather than agent-facing.

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 43-parameter, non-idempotent system-mutating call with no output schema and zero schema descriptions, the definition is far too thin: it explains neither the role of the many sibling-derived parameters nor the operational consequences of activation. It covers only the minimum path (one required argument) and the return type.

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

Parameters2/5

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

Schema description coverage is 0% across 43 parameters, and the description documents only plugin_id — leaving 42 parameters entirely unexplained in both schema and prose. The one documented parameter is meaningful ('the ID of the plugin to be activated'), but the description does not remotely compensate for the coverage gap.

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 ('Activate a plugin') and names the identifying parameter, so the agent immediately knows the operation. It does not differentiate from close siblings such as servicenow_rollback_plugin or servicenow_batch_install, which is the only thing separating it from 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 Guidelines2/5

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

No guidance on when to use this versus alternatives like servicenow_rollback_plugin, batch_install, or app_repo_install. No prerequisites stated (e.g., plugin must exist/be downloaded, admin rights required), and no exclusions or context beyond the bare 'activate' action.

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

servicenow_add_ci_lifecycle_actionAdd ci lifecycle actionC

Adds a specified CI action to a specified list of CIs.

ParametersJSON Schema
NameRequiredDescriptionDefault
sysIdsNo
opsLabelNo
leaseTimeNo
actionNameYes
requestorIdYes
oldOpsLabelsNo
oldActionNamesNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=true, so safety basics are covered structurally. The description adds nothing beyond that - no indication of what the action does to a CI's state, whether it is reversible, or what preconditions must hold.

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

Conciseness4/5

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

A single, front-loaded sentence with no filler. It is efficient, but brevity here reflects under-specification rather than disciplined economy.

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 7-parameter, non-idempotent mutation with an openWorld hint, no output schema, and zero schema documentation, the description is far too thin. An agent cannot determine required preconditions, parameter meaning, or the effect of the call from this text alone.

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

Parameters2/5

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

Schema description coverage is 0% across 7 parameters, and several (opsLabel, leaseTime, oldOpsLabels, oldActionNames, requestorId) are opaque, non-self-explanatory names. The description's mention of 'action' and 'list of CIs' loosely maps to actionName/sysIds but leaves the other five parameters entirely unexplained.

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 (adds) and resource (a CI lifecycle action to a list of CIs), which identifies the operation clearly. It does not, however, differentiate itself from close siblings like servicenow_delete_ci_lifecycle_action or the servicenow_check_ci_lifecycle_* validators, so an agent still has to infer the boundary.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. The sibling set contains explicit precondition validators (check_ci_lifecycle_compat_actions, check_ci_lifecycle_not_allowed_action, check_ci_lifecycle_requestor_valid), and the description gives no hint that these should be consulted first.

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

servicenow_add_table_recordAdd table recordC

Add a new record to the specified table.

:param table: The name of the table. :type table: str :param data: Dictionary containing the field values for the new record. :type data: dict

:return: Response containing parsed Pydantic model with information about the added record. :rtype: Response

:raises MissingParameterError: If table or data is not provided. :raises ParameterError: If JSON serialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
tableNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
table_record_sys_idNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, so the safety profile is covered. The description adds real value by disclosing error behavior (MissingParameterError when table/data are absent, ParameterError on JSON serialization failure) and implies table/data are effectively required despite the schema marking nothing required. It does not address permissions, retries, or the side effects of creating records.

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?

The purpose is front-loaded in the first sentence, followed by orderly Sphinx-style field/return/raises blocks. It is a bit boilerplate-heavy for a tool whose usable surface is only two parameters, but every line is structured and none is wasted prose.

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

Completeness2/5

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

With 16 parameters, 0% schema description coverage, and no output schema, the description is far too thin. It hints at the return ('parsed Pydantic model with information about the added record') and documents raised errors, but leaves the bulk of the input surface and any table-name conventions unaddressed.

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

Parameters2/5

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

Schema description coverage is 0% and there are 16 parameters, so the description carries the burden of explaining them. It documents only two (table and data) and says nothing about the fourteen ServiceNow sysparm_* / api_parameters / name_value_pairs options, leaving their purpose and valid values entirely unexplained.

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: 'Add a new record to the specified table.' The name and description clearly distinguish it from update_table_record, patch_table_record, and delete_table_record in the sibling set. It stops short of explicitly naming those alternatives, so it lands at 4 rather than 5.

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 when-to-use, when-not-to-use, or alternative guidance is given. There is no mention of when to prefer this over servicenow_update_table_record or servicenow_api_request, nor any prerequisites such as required table access or schema knowledge.

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

servicenow_api_requestApi requestD

Invoke the api_request operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
jsonNo
methodYes
endpointYes

TDQS

D1.3/5.0
Behavior2/5

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

Annotations declare readOnlyHint=false, openWorldHint=true, and destructiveHint=false, which establishes a basic safety profile. However, the description adds nothing about authentication requirements, rate limits, side effects, or response behavior, leaving most behavioral expectations to inference.

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

Conciseness2/5

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

The single sentence is extremely short but fails to earn its place because it is tautological and under-specified. An appropriately sized description for a 4-parameter generic API tool would include at least a brief explanation of the operation and its inputs.

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

Completeness1/5

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

With 4 parameters, 0% schema coverage, no output schema, and only generic annotations, the description is entirely inadequate. It omits everything an agent would need to call the tool correctly, such as endpoint format, method semantics, and payload expectations.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no explanation of the method, endpoint, data, or json parameters. It does not compensate for the complete lack of schema descriptions, so an agent cannot infer valid values or formats.

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

Purpose1/5

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

The description 'Invoke the api_request operation' merely restates the tool name and title; it gives no specific verb-resource distinction and does not differentiate from siblings like servicenow_batch_request. It provides no information about what API or resource is being requested.

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

Usage Guidelines1/5

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

There is no guidance on when to use this generic API request versus the many specific ServiceNow tools (e.g., servicenow_get_incident, servicenow_create_change_request) or servicenow_batch_request. No prerequisites, alternatives, or exclusions are mentioned.

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

servicenow_apply_remote_source_control_changesApply remote source control changesC

Apply remote source control changes based on the provided parameters.

:param app_sys_id: The sys_id of the application for which changes should be applied. :type app_sys_id: str :param scope: The scope of the changes. :type scope: str :param branch_name: The name of the branch containing the changes. :type branch_name: str :param auto_upgrade_base_app: Flag indicating whether to auto-upgrade the base app. :type auto_upgrade_base_app: bool

:return: Response containing parsed Pydantic model with information about the applied changes. :rtype: Response

:raises MissingParameterError: If app_sys_id or scope is not provided. :raises ParameterError: If auto_upgrade_base_app is not a boolean.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.6/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnly=false, openWorld=true, idempotent=false, destructive=false). The description does add genuinely useful behavior beyond that: it discloses that app_sys_id and scope are effectively required (via MissingParameterError) even though the schema marks all 43 params optional, and it documents a type-validation error. It does not, however, explain what actually happens on the target instance when changes are applied, so it stops short of rich behavioral context.

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

Conciseness3/5

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

The reST docstring layout is orderly (purpose, params, return, raises) and front-loads the purpose, but the opening sentence wastes words on "based on the provided parameters" and the parameter block is thin relative to the schema's size.

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 43-parameter, no-output-schema mutation tool, the description is far too sparse: it documents a small fraction of inputs and only vaguely characterizes the return as "a parsed Pydantic model with information about the applied changes." An agent could not reliably assemble a correct invocation from this.

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

Parameters2/5

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

Schema description coverage is 0% across 43 parameters, so the description carries the full burden and only discharges it for four fields (app_sys_id, scope, branch_name, auto_upgrade_base_app). The other ~39 parameters, including many plausibly meaningful ones (repo_url, update_set_id, credential_sys_id, force_commit), are left entirely unexplained.

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

Purpose3/5

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

The description names a specific verb and resource ("Apply remote source control changes"), but the qualifier "based on the provided parameters" is filler that adds nothing, and it does nothing to distinguish this from siblings like servicenow_app_repo_rollback, servicenow_batch_install, or the update_set_* family. The core purpose is inferable but not sharpened against near-neighbors.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of any alternative tool. With a large set of source-control/deployment siblings available, the agent gets no routing signal for choosing this one over them.

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

servicenow_app_repo_installApp repo installC

Install an application from the repository based on the provided parameters.

:param app_sys_id: The sys_id of the application to be installed. :type app_sys_id: str :param scope: The scope of the application. :type scope: str :param auto_upgrade_base_app: Flag indicating whether to auto-upgrade the base app. :type auto_upgrade_base_app: bool :param base_app_version: The version of the base app. :type base_app_version: str :param version: The version of the application to be installed. :type version: str

:return: Response containing parsed Pydantic model with information about the installation. :rtype: Response

:raises MissingParameterError: If app_sys_id or scope is not provided. :raises ParameterError: If auto_upgrade_base_app is not a boolean.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=true), so the bar is lower. The description usefully discloses two failure modes (MissingParameterError for app_sys_id/scope, ParameterError for a non-boolean auto_upgrade_base_app), but says nothing about side effects on the instance, reversibility, or what 'installing' actually affects.

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?

Purpose is front-loaded in the first line, and the docstring conventions keep it scannable. The :param:/:type: duplication of the same name and type is mildly redundant, but nothing is genuinely wasted.

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

Completeness2/5

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

For a 43-parameter, non-idempotent write operation with no output schema and zero schema descriptions, this is thin: 5 parameters explained, a vague ':return: parsed Pydantic model', and two error cases. It omits preconditions, instance impact, and any hint about the 38 remaining fields.

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

Parameters2/5

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

Schema description coverage is 0% across 43 parameters, so the description carries the full burden and documents only 5 of them (app_sys_id, scope, auto_upgrade_base_app, base_app_version, version). The remaining 38 parameters are undocumented in both the schema and the description, a severe gap for a tool with this many inputs.

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: installing an application from the repository. It is clear enough to distinguish from sibling reads like servicenow_get_application, but it never names or contrasts with close siblings such as servicenow_app_repo_publish, servicenow_app_repo_rollback, or servicenow_batch_install, so differentiation is left to inference.

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

Usage Guidelines2/5

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

There is no when-to-use, when-not-to-use, or alternative-tool guidance; the phrase 'based on the provided parameters' is circular. The :raises: block implies app_sys_id and scope are mandatory, which is prerequisite-adjacent, but no usage context is actually given.

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

servicenow_app_repo_publishApp repo publishC

Publish an application to the repository based on the provided parameters.

:param app_sys_id: The sys_id of the application to be published. :type app_sys_id: str :param scope: The scope of the application. :type scope: str :param dev_notes: Development notes for the published version. :type dev_notes: str :param version: The version of the application to be published. :type version: str

:return: Response containing parsed Pydantic model with information about the publication. :rtype: Response

:raises MissingParameterError: If app_sys_id or scope is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnly=false, idempotent=false, openWorld=true, destructive=false). The description adds genuinely new context via ':raises MissingParameterError' naming required inputs, which annotations do not cover. It does not, however, describe side effects of publishing (what changes in the repo, reversibility, auth needs), and it conflicts with the schema's zero-required-parameter declaration.

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

Conciseness3/5

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

Docstring layout is readable and front-loads the action, but ':param/:type' pairs largely restate type information already in the schema, and 'based on the provided parameters' is filler. Moderate efficiency with some redundancy.

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 43-parameter, open-world, non-idempotent write operation with no output schema, the description is thin: no side-effect disclosure, no usage routing, and nearly all parameters undocumented. An agent would have to guess at the meaning of most inputs.

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

Parameters2/5

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

Schema description coverage is 0% across 43 parameters, so the description carries the full burden. It documents only 4 (app_sys_id, scope, dev_notes, version) with brief meanings, leaving roughly 39 parameters entirely undocumented in both schema and description. Marginal compensation for a very large coverage gap.

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: 'Publish an application to the repository.' An agent understands the core action. However, it does not differentiate from close siblings like servicenow_app_repo_install, servicenow_app_repo_rollback, or servicenow_import_repository, so the boundary between publishing and installing is left to inference.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of alternatives. The phrase 'based on the provided parameters' is not usage guidance. An agent cannot tell from this text when publishing is appropriate versus installing or importing.

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

servicenow_app_repo_rollbackApp repo rollbackC

Rollback an application in the repository based on the provided parameters.

:param app_sys_id: The sys_id of the application to be rolled back. :type app_sys_id: str :param scope: The scope of the application. :type scope: str :param version: The version of the application to be rolled back. :type version: str

:return: Response containing parsed Pydantic model with information about the rollback. :rtype: Response

:raises MissingParameterError: If app_sys_id, scope, or version is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare the operation is a non-read (readOnlyHint=false), non-idempotent, open-world write, so the safety profile is largely covered. The description adds one genuinely useful behavioral fact not in the schema: a MissingParameterError is raised when app_sys_id, scope, or version is absent. It does not explain what the rollback actually reverts or what state is discarded, which matters for 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.

Conciseness3/5

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

The docstring is structured and low on redundancy, with params, return, and raises clearly separated. However, the opening line's 'based on the provided parameters' is empty filler, and documenting only 3 of 43 params makes the structure informative for a small fraction of the actual surface.

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 43-parameter, zero-required-schema mutation tool with no output schema and no annotations covering parameters, the description is far too thin. It does not clarify which of the many optional fields are relevant to a rollback versus unrelated operations, leaving an agent without enough to call it correctly.

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

Parameters2/5

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

Schema description coverage is 0% across 43 parameters, and the docstring documents only 3 of them (app_sys_id, scope, version) with type hints. That leaves roughly 40 parameters — including booleans like rollback_installs, force_commit, and auto_upgrade_base_app — undocumented in both the schema and the description, so the description fails to compensate for the coverage gap.

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 ('rollback an application in the repository'), which distinguishes it from install/publish siblings. The trailing phrase 'based on the provided parameters' is filler and adds nothing, and it never names the sibling rollback tools (rollback_plugin, batch_rollback) it could be confused with.

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

Usage Guidelines2/5

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

There is no indication of when to use this tool versus alternatives such as servicenow_rollback_plugin, servicenow_batch_rollback, or the install/publish siblings in the app_repo family. No prerequisites, ordering constraints, or environment conditions are stated.

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

servicenow_approve_change_requestApprove change requestC

Approve or reject a change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None :param state: State to set the change request to (approved or rejected). :type state: str or None

:return: Response containing parsed Pydantic model with information about the approval/rejection. :rtype: Response

:raises MissingParameterError: If change_request_sys_id or state is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If state is not valid. :raises ParameterError: If JSON serialization or deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true and destructiveHint=false, so the mutation profile is covered structurally. The description adds genuine context beyond that: the valid state values and the specific error behaviors (MissingParameterError, ParameterError on invalid state or serialization). It omits auth requirements and any note on irreversibility or side effects on related records, so it is useful but incomplete.

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

Conciseness2/5

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

The purpose is correctly front-loaded in the first line, but the rest is Sphinx docstring boilerplate with redundant :type: lines and a ':raises ParameterError' entry repeated three times with overlapping meaning. Little of that prose earns its place against the schema.

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 22-parameter mutation tool with no output schema and 0% schema description coverage, the description explains only the two core arguments. Return behavior is gestured at ('parsed Pydantic model') but not clarified, and the bulk of the input surface is left undocumented, which is insufficient for confident invocation.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the description carries the full burden and documents only two of them (change_request_sys_id and state). The parenthetical '(approved or rejected)' is valuable since the schema defines no enum for state, but the remaining 20 parameters (data, sysparm_query, cmdb_ci_sys_ids, refresh_impacted_services, etc.) are unexplained in both places, leaving an agent unable to reason about most of the surface.

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 opening line 'Approve or reject a change request' gives a specific verb pair and resource, and it is distinguishable from siblings like servicenow_update_change_request or servicenow_get_change_request_nextstate. It does not explicitly name those siblings or contrast itself with them, so it falls 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 Guidelines2/5

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

There is no guidance on when to choose this tool over update_change_request, get_change_request_nextstate, or create_change_request. The description states only what the tool does, never the conditions, prerequisites, or alternatives for invoking it.

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

servicenow_batch_installBatch installC

Initiate a batch installation with the provided parameters.

:param name: The name of the batch installation. :type name: str :param notes: Additional notes for the batch installation. :type notes: str :param packages: The packages to be installed in the batch. :type packages: str

:return: Response containing parsed Pydantic model with information about the batch installation. :rtype: Response

:raises MissingParameterError: If name or packages are not provided. :raises ParameterError: If notes is not a string.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, so the safety profile is partly covered. The description adds genuinely new behavioral facts: name and packages are effectively required despite the schema marking nothing required, and notes must be a string — details an agent cannot get from annotations or schema. It still omits whether the install is asynchronous, how progress is polled, and what side effects occur on the target instance.

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

Conciseness3/5

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

The lead sentence is short and front-loaded, which is good, but the rest is a pasted Sphinx docstring whose ':type X: str' lines merely restate what the JSON schema already encodes. It is neither bloated nor maximally efficient — redundant type tags dilute the few useful lines.

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 43-parameter mutation tool with no output schema, the description is far too thin. It does not describe the batch lifecycle (does it block, or is it polled via servicenow_batch_install_result?), what the returned Pydantic model contains, or how the many optional provisioning parameters interact — all information an agent needs before invoking it.

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

Parameters2/5

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

The schema has 43 parameters at 0% description coverage, but the description documents only name, notes, and packages. The remaining 40 parameters (sys_id, scope, repo_url, update_set_id, auto_preview, rollback_install, force_commit, etc.) are entirely opaque, so the description falls far short of compensating for the coverage gap.

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: 'Initiate a batch installation.' An agent knows this kicks off an install job. However, it does not distinguish this from close siblings such as servicenow_batch_install_result, servicenow_batch_rollback, or servicenow_app_repo_install, so the agent cannot tell which entry point applies without opening schemas.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites (auth, permissions, instance context), and no mention of alternatives or follow-up tools. The only usage-adjacent content is the raises clause, which says name/packages must be supplied, but it never frames this as a usage rule or workflow step.

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

servicenow_batch_install_resultBatch install resultC
Read-onlyIdempotent

Get the result of a batch installation based on the provided result ID.

:param result_id: The ID associated with the batch installation result. :type result_id: str

:return: Response containing parsed Pydantic model with batch installation result. :rtype: Response

:raises MissingParameterError: If result_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already establish readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds one genuinely useful behavioral fact — it raises MissingParameterError when result_id is absent — but says nothing about response shape or polling/eventual-consistency behavior for an install result.

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

Conciseness3/5

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

The core purpose sentence is front-loaded and clear, but the rest is auto-generated Sphinx boilerplate (:type:, :rtype:, :raises:) that partially restates the schema. It is not bloated maliciously, but several lines add little for an agent.

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 43-parameter tool with no output schema, the description should at minimum distinguish the meaningful parameters and describe what the result contains; instead it names one param and gives a vague return line. An agent cannot know how to populate or interpret the other fields.

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

Parameters1/5

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

Schema description coverage is 0% across 43 parameters, and the description documents exactly one of them (result_id). The other 42 nullable fields are left entirely unexplained in both the schema and the description, which is a severe gap rather than compensation.

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?

Names a specific verb (Get) and resource (result of a batch installation) qualified by a result ID, which separates it conceptually from servicenow_batch_install and servicenow_batch_rollback. It does not explicitly cite a sibling, so it falls short of the top score.

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

Usage Guidelines2/5

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

There is no statement of when to use this versus servicenow_batch_install (which presumably initiates the install and yields the result ID) or the polling/progress siblings. Usage is only implied by the mention of result_id.

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

servicenow_batch_requestBatch requestC

Sends multiple REST API requests in a single call.

:param batch_request_id: ID that identifies the batch of requests. :type batch_request_id: str :param rest_requests: List of request objects to include in the batch request. :type rest_requests: list

:return: Response containing the batch results. :rtype: Response

ParametersJSON Schema
NameRequiredDescriptionDefault
rest_requestsYes
batch_request_idNo

TDQS

C2.6/5.0
Behavior2/5

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

Annotations declare readOnlyHint=false and idempotentHint=false, signaling a mutating, non-idempotent operation, but the description never says that batched POST/PUT/PATCH calls can modify or destroy data, nor how partial failures or per-request errors are surfaced. With a false readOnlyHint, the silence on side effects is a real gap.

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

Conciseness3/5

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

The opening sentence is well front-loaded and efficient, but the Sphinx-style :param/:type/:return block mostly duplicates the schema and the return type note ('Response') adds nothing since no output schema exists to compare against. Roughly half the text is boilerplate.

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

Completeness2/5

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

For a tool that fans out arbitrary HTTP calls (including writes) in one shot, the definition omits batch size limits, execution order, failure semantics, and any note that individual request bodies must be base64 encoded. No output schema exists, so the terse ':return: Response' leaves return structure entirely unexplained.

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

Parameters2/5

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

Top-level schema description coverage is 0%, so the description carries the burden, yet it only restates types ('str', 'list') for batch_request_id and rest_requests. It adds no meaning about the required per-request fields (id, method, url) or the base64-encoded body convention that the nested schema documents.

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 first sentence states a specific verb and resource ('Sends multiple REST API requests in a single call'), and the word 'multiple' implicitly contrasts with the single-request sibling servicenow_api_request. It stops short of naming that sibling explicitly, so an agent must infer the routing 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 guidance on when to batch versus calling servicenow_api_request repeatedly, no mention of batch size limits, ordering guarantees, or whether requests execute transactionally. The reader must guess at the intended usage envelope.

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

servicenow_batch_rollbackBatch rollbackC
Read-onlyIdempotent

Rollback a batch installation based on the provided rollback ID.

:param rollback_id: The ID associated with the batch rollback. :type rollback_id: str

:return: Response containing parsed Pydantic model with information about the batch rollback. :rtype: Response

:raises MissingParameterError: If rollback_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.3/5.0
Behavior1/5

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

The description says the tool 'rolls back a batch installation', an explicitly state-changing operation, yet annotations declare readOnlyHint=true and destructiveHint=false. This directly contradicts the annotations, and the description supplies no other behavioral context (what is undone, whether it is reversible, permissions).

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

Conciseness3/5

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

The purpose is front-loaded and clear, but the sphinx-style :type:/:rtype: boilerplate and a trivial :raises: note for a single optional parameter add redundant structure without new information. Not bloated, but not tight either.

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

Completeness1/5

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

For a destructive-sounding batch operation with 43 undocumented parameters, zero schema coverage, no output schema, and annotations that misclassify it as read-only, the description is far too thin. An agent cannot confidently invoke it or predict the effects.

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

Parameters2/5

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

Schema description coverage is 0% across 43 parameters, so the description must carry the burden and does not. It only documents rollback_id (as a string 'associated with the batch rollback'), leaving the other 42 optional parameters — scope, packages, sys_id, force_commit, rollback_installs, etc. — entirely unexplained.

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 ('Rollback a batch installation') plus the required identifier, so an agent knows exactly what the tool does. It does not, however, distinguish itself from the several sibling rollback tools (servicenow_app_repo_rollback, servicenow_rollback_plugin, servicenow_update_set_back_out), so 4 rather than 5.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus batch_install or the other rollback/back-out siblings, and no prerequisites or recovery context. Only the bare action is described.

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

servicenow_calculate_standard_change_request_riskCalculate standard change request riskC

Calculate and update the risk of a standard change request.

:param change_request_sys_id: Sys ID of the standard change request. :type change_request_sys_id: str or None

:return: Response containing parsed Pydantic model with information about the calculated risk. :rtype: Response

:raises MissingParameterError: If change_request_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already disclose readOnlyHint=false, destructiveHint=false, idempotentHint=false, and openWorldHint=true, so the mutation semantics are partly covered externally; the description's 'calculate and update' is consistent with those. It adds error behavior (MissingParameterError, ParameterError on bad params or JSON) that annotations do not cover, but never explains what the update actually changes on the record or whether it is reversible.

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

Conciseness3/5

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

The purpose is front-loaded in a single clear sentence, but the body is a Sphinx docstring dump whose :param:/:type:/:rtype: markup conveys very little information for its length. It is not bloated, yet the formatting is low-density relative to the payload.

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 22-parameter mutation tool with no output schema and 0% schema descriptions, the definition is far too thin: it explains one parameter, gives a generic 'parsed Pydantic model' return note, and says nothing about how the risk is computed, what fields are updated, or what permissions are required.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the description carries the full burden and documents only change_request_sys_id, and even that conflicts with the schema's optional/nullable definition. The remaining 21 parameters (data, state, change_type, cmdb_ci_sys_ids, etc.) are entirely unexplained anywhere.

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 pair (calculate and update) and a specific resource (standard change request risk), so the agent knows both the computation and the mutation involved. It does not, however, differentiate itself from neighbors like servicenow_update_change_request, servicenow_refresh_change_request_impacted_services, or servicenow_get_standard_change_request_model.

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

Usage Guidelines2/5

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

There is no statement of when this tool should be chosen over the many change-request siblings, nor any prerequisites or context. The only usage hint is an indirect one via ':raises MissingParameterError', which implies change_request_sys_id is needed, but the schema marks it optional with a null default, so even that signal is unreliable.

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

servicenow_check_change_request_conflictCheck change request conflictC

Check for conflicts in a change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None

:return: Response containing parsed Pydantic model with information about conflicts. :rtype: Response

:raises MissingParameterError: If change_request_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations are supplied (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false), so the safety profile is partly covered. The description adds error behavior (:raises MissingParameterError / ParameterError) and the return type, which is useful, but it never explains the side effects implied by readOnlyHint=false and idempotentHint=false (e.g., whether a conflict scan record is created or state is mutated).

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

Conciseness3/5

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

The purpose sentence is front-loaded and the docstring is reasonably compact, but it carries boilerplate noise (:rtype Response, ParameterError listed twice) and does not spend its limited space on the information an agent actually needs.

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 22-parameter tool with no output schema and zero schema descriptions, the definition is far too thin; it leaves the agent without the parameter meanings, filtering semantics, or response shape needed to invoke it correctly.

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

Parameters2/5

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

Schema description coverage is 0% and there are 22 parameters, of which only change_request_sys_id is documented ('Sys ID of the change request'). The remaining parameters (data, state, change_type, cmdb_ci_sys_ids, sysparm_query, etc.) are entirely unexplained in both schema and description.

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+resource: 'Check for conflicts in a change request.' That is enough for an agent to know the operation, but it does not distinguish this tool from close siblings such as servicenow_get_change_request_conflict or servicenow_delete_change_request_conflict_scan, so sibling differentiation is missing.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. Given the crowded sibling set (get_change_request_conflict, delete_change_request_conflict_scan, create_change_request), the absence of any routing or prerequisite information is a real gap.

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

servicenow_check_ci_lifecycle_compat_actionsCheck ci lifecycle compat actionsC
Read-onlyIdempotent

Determines whether two specified CI actions are compatible.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that, however: it never explains what 'compatible' means, what a violation looks like, or whether any state is consulted or mutated remotely.

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

Conciseness3/5

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

A single clean sentence with no filler, and the purpose is front-loaded. It is well formed but under-specified rather than deliberately concise.

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

Completeness2/5

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

There is no output schema and the input schema is a bare passthrough with no descriptions, so the description carries the burden of explaining inputs and result semantics. It does neither, leaving an agent unable to construct a correct call for this compatibility check.

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

Parameters2/5

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

Schema description coverage is 0% and both parameters are opaque generic containers (params / params_json). The description says 'two specified CI actions' but gives no hint about how to supply them, so it fails to compensate for the undocumented schema.

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

Purpose4/5

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

States a concrete verb and resource: it determines whether two specified CI actions are compatible. That is clearly distinct from siblings like get_ci_lifecycle_active_actions or extend_ci_lifecycle_lease, though it does not differentiate itself from the closely related check_ci_lifecycle_not_allowed_action and check_ci_lifecycle_not_allowed_ops_transition.

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

Usage Guidelines2/5

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

There is no guidance on when to run this check versus the other check_ci_lifecycle_* siblings, no prerequisites, and no mention of what scenario triggers a compatibility evaluation. The agent is left to infer usage from the name alone.

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

servicenow_check_ci_lifecycle_lease_expiredCheck ci lifecycle lease expiredC
Read-onlyIdempotent

Determines whether the lease has expired for the requester.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds only the mild hint that the check is scoped to the requester's identity, which implies auth context but is not elaborated.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or repetition. It is efficient, though its brevity stems partly from under-specification rather than disciplined editing.

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

Completeness2/5

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

For a check/predicate tool with no output schema, the description should at minimum indicate the nature of the result (e.g., a boolean or status). It also leaves the two undocumented parameters unexplained, so an agent cannot tell what a valid invocation looks like.

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

Parameters2/5

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

Two parameters (params, params_json) with 0% schema description coverage, and the description says nothing about them. With named, self-documenting parameters this would be less critical, but 'params'/'params_json' are opaque catch-alls, so the description should compensate and does not.

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: it determines whether a CI lifecycle lease has expired. This is enough to distinguish it from write-oriented siblings like extend_ci_lifecycle_lease. However, it never names or contrasts with those siblings, and 'for the requester' is ambiguous about whose lease is being checked.

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

Usage Guidelines2/5

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

The description only asserts what the tool does; it gives no when-to-use context, no prerequisites, and no alternatives. A natural sibling, servicenow_extend_ci_lifecycle_lease, is not mentioned even though the two are clearly related (check-then-extend).

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

servicenow_check_ci_lifecycle_not_allowed_actionCheck ci lifecycle not allowed actionC
Read-onlyIdempotent

Determines whether a specified CI action is not allowed.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond them: it does not explain what 'not allowed' evaluates against, what inputs it needs, or whether it queries live state. For an open-world check with opaque inputs, this is a meaningful gap.

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

Conciseness3/5

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

A single compact sentence with no padding, so it is structurally clean and front-loaded. The conciseness comes at the cost of substance, though — the one sentence is essentially a restatement that does not earn much beyond the title.

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

Completeness2/5

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

With no output schema, no documented parameters, and annotations supplying only safety hints, the description should explain how to specify the CI action and what the boolean result means. As written it leaves both unaddressed, which is inadequate for a check tool whose inputs are entirely undocumented.

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

Parameters2/5

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

Schema description coverage is 0% and both parameters are opaque (a freeform object with additionalProperties:true and a params_json string). The phrase 'specified CI action' hints that an action must be identified but gives no key name, format, or example, leaving the description unable to compensate for the coverage gap.

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

Purpose3/5

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

The description states a check verb and the resource ('whether a specified CI action is not allowed'), which clarifies it returns a boolean determination rather than performing an action. However, it largely restates the tool name/title and offers no differentiation from close siblings such as servicenow_check_ci_lifecycle_not_allowed_ops_transition or servicenow_check_ci_lifecycle_compat_actions.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus the several adjacent ci_lifecycle check tools, nor any prerequisites or exclusions. The agent must infer usage entirely from the name.

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

servicenow_check_ci_lifecycle_not_allowed_ops_transitionCheck ci lifecycle not allowed ops transitionC
Read-onlyIdempotent

Determines whether an operational state transition is allowed.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered structurally. The description adds nothing beyond the bare purpose – no statement of what inputs are needed, what the result means, or how the underlying openWorld lookup behaves.

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

Conciseness3/5

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

It is a single front-loaded sentence with no filler, which is structurally clean, but the sparseness is under-specification rather than effective conciseness given the tool's opaque parameters.

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 check tool with no output schema and two undocumented pass-through parameters, the definition should explain required inputs and the meaning of an allow/disallow result. Neither is present, so an agent lacks enough to invoke or interpret it correctly.

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

Parameters2/5

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

Schema description coverage is 0% for two opaque parameters ('params' and 'params_json'), and the description provides no information about what either should contain. With low coverage the description is expected to compensate, and it does not, leaving the agent unable to construct a valid call.

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

Purpose3/5

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

The description gives a verb and resource ('Determines whether an operational state transition is allowed'), so the purpose is discernible but generic. It does not differentiate this tool from close siblings like servicenow_check_ci_lifecycle_not_allowed_action or servicenow_check_ci_lifecycle_compat_actions, and it omits the 'not allowed ops' qualifier present in the name/title.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites (e.g., a CI id or lifecycle context required), and no mention of the sibling check tools that answer related lifecycle questions. The agent must guess when this check applies versus the other check_ci_lifecycle_* tools.

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

servicenow_check_ci_lifecycle_requestor_validCheck ci lifecycle requestor validC
Read-onlyIdempotent

Determines whether the specified user is a valid requester.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no further behavioral context—no indication of what makes a requester 'valid', what permissions are needed, or what the check evaluates. It simply restates the purpose.

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

Conciseness3/5

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

The single sentence is front-loaded and free of filler, so it is structurally clean. However, it is too thin for a tool with no parameter documentation and no output schema, making the brevity more a symptom of under-specification than of efficient communication.

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

Completeness1/5

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

Given 0% schema description coverage, two undocumented parameters, no output schema, and a validation purpose that requires explaining what 'valid requester' means, the description is completely inadequate. It provides no actionable information for invoking the tool correctly.

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

Parameters1/5

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

Schema description coverage is 0% for two parameters (params and params_json), and the description only says 'specified user' without naming or explaining how to supply that user. The description does nothing to compensate for the undocumented schema.

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

Purpose3/5

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

The description states a specific verb ('Determines whether') and a resource ('specified user is a valid requester'), but it never mentions CI lifecycle or the domain context that would distinguish it from sibling check_* tools. Without the tool name, an agent could not tell what kind of requester or lifecycle this applies to.

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

Usage Guidelines2/5

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

There is no guidance on when to call this tool versus alternatives such as servicenow_get_ci_lifecycle_status or the other servicenow_check_ci_lifecycle_* tools. No prerequisites, no conditions, no exclusions are given.

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

servicenow_check_devops_change_controlCheck devops change controlC
Read-onlyIdempotent

Checks if the orchestration task is under change control.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds essentially nothing beyond that: it doesn't say what the check returns, what happens when the task is not under change control, or whether it errors on an invalid/unknown task.

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

Conciseness3/5

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

A single short sentence with no filler, so nothing is wasted. But it is under-specified rather than deliberately concise, and the one clause it does contain introduces terminology ('orchestration task') not echoed in the name or schema.

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

Completeness2/5

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

With no output schema, an untyped parameter bag, and no annotations covering return semantics, the description should at minimum explain what a 'check' yields (boolean, state, or error). It does not, leaving an agent unable to predict the outcome of calling it.

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

Parameters1/5

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

Schema description coverage is 0% and the two parameters are opaque catch-alls ('params' object, 'params_json' string). The description supplies no information on how to identify the task being checked or what belongs in params_json, so it fails to compensate for the coverage gap.

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

Purpose3/5

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

The description states a concrete verb ('Checks') and object ('orchestration task ... under change control'), so the action is graspable. However, the subject shifts from the tool name's 'devops change control' to 'orchestration task' with no explanation of the relationship, and nothing distinguishes it from the sibling servicenow_get_devops_change_info.

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

Usage Guidelines2/5

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

There is no statement of when to call this versus servicenow_get_devops_change_info, servicenow_check_devops_step_mapping, or the broader change-request tools. No prerequisites (e.g., change control must be enabled on the instance) are mentioned.

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

servicenow_check_devops_step_mappingCheck devops step mappingC
Read-onlyIdempotent

Verifies that the information being passed is valid for the creation of an orchestration task.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds only that this is a validation gate; it says nothing about what rules are enforced, what an invalid result looks like, or whether it has side effects on orchestration state.

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

Conciseness3/5

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

A single front-loaded sentence with no filler, which is structurally fine, but the brevity comes at the cost of under-specification rather than efficient density.

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

Completeness2/5

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

With no output schema, no annotation coverage of return behavior, and fully undocumented parameters, the description leaves the agent without enough information to call this correctly. For a validation tool it should at minimum describe expected inputs and the meaning of a pass/fail outcome.

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

Parameters1/5

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

Schema description coverage is 0% for two opaque parameters ('params' as an untyped anyOf object and 'params_json' a string defaulting to '{}'). The description's vague phrase 'the information being passed' does not clarify which parameter carries what data or the expected shape, so it fails to compensate for the coverage gap.

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

Purpose3/5

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

The description gives a verb ('Verifies') and a purpose ('valid for the creation of an orchestration task'), which is more than a tautology but still vague. It never states what a 'step mapping' is, what 'the information being passed' refers to, or how this differs from siblings like servicenow_check_devops_change_control or servicenow_get_devops_orchestration_schema.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of prerequisites, and no routing to alternatives. The phrase 'for the creation of an orchestration task' hints at a pre-flight gate, but the agent is left to infer when this check must be run versus the many other check_* and devops_* siblings.

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

servicenow_check_service_qualificationCheck service qualificationC

Creates a technical service qualification request.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
externalIdNo
descriptionNo
relatedPartyYes
serviceQualificationItemYes
expectedQualificationDateNo
effectiveQualificationDateNo
checkServiceQualificationDateNo

TDQS

C2.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so the write semantics are covered structurally and the description's 'Creates' is consistent with them. The description adds nothing beyond that: no mention of side effects, whether a qualification result is returned synchronously, or what state the request lands in.

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

Conciseness3/5

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

It is a single short sentence with no filler, which is structurally clean. But the brevity reads as under-specification rather than disciplined conciseness for a tool of this complexity.

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

Completeness1/5

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

The tool takes 8 parameters with two required nested arrays, has no output schema, and has essentially no schema descriptions. A one-sentence description is nowhere near sufficient to let an agent construct a valid qualification request.

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

Parameters1/5

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

Eight top-level parameters (type, externalId, description, relatedParty, serviceQualificationItem, and three date fields) have zero description coverage in the schema, and the description supplies no parameter meaning at all. With a deep nested object graph and no compensating text, the agent cannot know what to supply for the required relatedParty and serviceQualificationItem structures.

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

Purpose3/5

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

The description gives a verb and resource ('Creates a technical service qualification request'), which is more than a tautology. However, it never reconciles the 'check' framing in the tool name with the 'create' verb used here, nor does it distinguish this from siblings like servicenow_get_service_qualification or servicenow_process_service_qualification_result. An agent has a rough idea but no differentiation.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus the clearly related siblings (get_service_qualification, process_service_qualification_result), no prerequisites, and no statement of what happens after the request is created. The agent must infer the entire usage context from the name alone.

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

servicenow_collect_graph_for_rootsCollect graph for rootsD

Invoke the collect_graph_for_roots operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_depthNo
root_sys_idsYes
initial_metadataNo

TDQS

D1.3/5.0
Behavior1/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, but the description adds no behavioral context such as permissions required, pagination, cost, or what the collection writes/returns. With an open-world, non-read-only operation, the absence of any disclosure is a significant gap.

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

Conciseness2/5

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

It is a single short sentence, but it is vacuous rather than concise — the brevity comes from under-specification, not from front-loading useful content. No wasted words, but no earned ones either.

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

Completeness1/5

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

For a tool with 3 parameters (0% documented), a nested object, no output schema, and non-read-only open-world annotations, the description is completely inadequate. Nothing an agent needs to invoke it correctly is present.

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

Parameters1/5

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

Schema description coverage is 0% for 3 parameters, including a nested-object parameter (initial_metadata) and a required array (root_sys_ids). The description mentions no parameter at all, so it fails to compensate for the entirely undocumented schema.

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

Purpose2/5

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

The description is a tautology that restates the tool name and title ('Invoke the collect_graph_for_roots operation') without stating the resource, scope, or what a 'graph for roots' actually is. An agent learns nothing about the verb's effect beyond the name itself, and there is no differentiation from siblings like servicenow_get_cmdb or servicenow_full_scan.

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

Usage Guidelines1/5

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

No when-to-use, when-not-to-use, or alternative guidance is given. The description provides no condition, prerequisite, or context that would help an agent decide between this and the many CMDB/scan-related siblings.

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

servicenow_combo_suite_scanCombo suite scanC

Initiate a suite scan for a combo based on the provided combo_sys_id.

:param combo_sys_id: The sys_id of the combo to be scanned. :type combo_sys_id: str

:return: Response containing parsed Pydantic model with information about the combo suite scan. :rtype: Response

:raises MissingParameterError: If combo_sys_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare this is a non-readonly (readOnlyHint=false), non-idempotent, open-world operation, so the safety profile is covered. The description usefully adds that combo_sys_id is required and that a MissingParameterError is raised, but says nothing about whether the scan is asynchronous/long-running, what permissions it needs, or how to track progress afterward.

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

Conciseness3/5

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

The lead sentence is front-loaded and the return-type note is useful, but the Sphinx :param/:type/:rtype boilerplate restates the first sentence and adds little. It is short, yet a meaningful fraction of it is re-documentation rather than new 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?

For a 43-parameter, zero-required initiator that returns no output schema, the description is far too thin: it omits the async/progress model (a servicenow_progress/servicenow_instance_scan_progress sibling exists), parameter relevance, and any auth requirements. An agent cannot confidently call this beyond supplying combo_sys_id.

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

Parameters2/5

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

Schema description coverage is 0% across 43 parameters, so the description carries the full burden and documents only combo_sys_id. The other 42 parameters (including suite_sys_id, scan_type, credential_sys_id, etc.) are entirely unexplained, leaving the agent unable to know which are relevant to this specific call.

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 ('Initiate a suite scan for a combo') and identifies the driving parameter (combo_sys_id), making the core action clear. However, it never distinguishes this from close siblings such as servicenow_suite_scan or servicenow_full_scan, so the agent must infer why a 'combo' scan differs from a plain suite scan.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of the sibling scan tools it competes with (suite_scan, point_scan, full_scan). The only conditional statement is the :raises clause, which is an error path rather than routing advice.

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

servicenow_create_change_requestCreate change requestC

Create a new change request.

:param name_value_pairs: Name-value pairs providing details for the new change request. :type name_value_pairs: str or None :param change_type: Type of change (emergency, normal, standard). :type change_type: str or None :param standard_change_template_id: Sys ID of the standard change request template (if applicable). :type standard_change_template_id: str or None

:return: Response containing parsed Pydantic model with information about the created change request. :rtype: Response

:raises MissingParameterError: If name_value_pairs is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If change_type is specified but not valid. :raises ParameterError: If JSON serialization or deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.5/5.0
Behavior2/5

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

Annotations already declare the write/idempotency/destructive/open-world profile, so the description only needs to add context — and it mostly does not. It documents exception behavior (MissingParameterError, ParameterError), which is genuinely beyond the annotations, but the claim that name_value_pairs is required contradicts the schema, where it and all 21 other parameters default to null, creating confusion rather than transparency. No side effects, auth needs, or downstream impacts are described.

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

Conciseness2/5

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

The body is a raw Python docstring dump with :param/:type/:return/:raises markers that carry little meaning for an agent, and the parameter block is partial rather than a deliberate selection. The only truly front-loaded content is the single opening sentence; the rest is unstructured reference text.

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 22-parameter write operation with 0% schema coverage and no output schema, the definition should explain far more about which parameters matter and how the required payload is shaped. It gives a vague one-line return note and partial, self-contradictory parameter hints, leaving the agent under-equipped to construct a valid call.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the description must carry the burden, but it covers only three of them (name_value_pairs, change_type, standard_change_template_id). Nineteen parameters — including state, sysparm_query, sysparm_limit, response_length, and refresh_impacted_services — are left completely unexplained, and several look like generic query parameters that do not obviously belong on a 'create' tool.

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

Purpose4/5

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

The first line states a specific verb and resource ('Create a new change request'), so the agent knows exactly what the tool produces. It does not, however, distinguish itself from the many nearby create_* siblings (create_change_request_task, create_change_request_ci_association, create_problem, create_incident), so an agent must rely on the name alone to route correctly.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternative tools for related operations. The description never tells the agent when to choose this tool over create_change_request_task or the update/approve equivalents.

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

servicenow_create_change_request_ci_associationCreate change request ci associationC

Create associations between a change request and configuration items (CIs).

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None :param cmdb_ci_sys_ids: List of Sys IDs of CIs to associate with the change request. :type cmdb_ci_sys_ids: list or None :param association_type: Type of association (affected, impacted, offering). :type association_type: str or None :param refresh_impacted_services: Flag to refresh impacted services (applicable for 'affected' association). :type refresh_impacted_services: bool or None

:return: Response containing parsed Pydantic model with information about the created associations. :rtype: Response

:raises MissingParameterError: If change_request_sys_id, cmdb_ci_sys_ids, or association_type is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If association_type is not valid. :raises ParameterError: If JSON serialization or deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds real value beyond that by disclosing the three required inputs, the valid association_type values ('affected, impacted, offering'), the conditional relevance of refresh_impacted_services, and the error classes raised. It does not say whether repeated calls duplicate associations, which matters for a non-idempotent write.

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

Conciseness3/5

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

The purpose is front-loaded and the docstring-style block is organized into params/return/raises, which aids scanning. However, the ':type' lines merely restate type information already present in the schema, adding length without adding meaning, and the return/raises sections are somewhat verbose relative to the information conveyed.

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 22-parameter mutation tool with no output schema and no schema descriptions, the definition leaves most parameters unexplained and does not clarify whether parameters like sysparm_limit, text_search, or state are even relevant here. Return handling is described only as a Pydantic model, which is helpful, but overall coverage is inadequate for the tool's complexity.

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

Parameters2/5

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

The schema has 22 parameters with 0% description coverage, and the description documents only 4 of them (change_request_sys_id, cmdb_ci_sys_ids, association_type, refresh_impacted_services). The remaining 18 — data, state, sysparm_query, sysparm_limit, task_sys_id, and others — are undocumented in either the schema or the description, leaving a large gap the description should have filled.

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 first sentence states a specific verb and resource ('Create associations between a change request and configuration items'), which is clear and distinguishable from create_change_request and create_cmdb_relation. It does not, however, explicitly name those siblings or explain how the association differs from a CMDB relation.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as create_cmdb_relation or refresh_change_request_impacted_services. The agent must infer usage entirely from the tool name and the association_type example values.

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

servicenow_create_change_request_taskCreate change request taskC

Create a new task associated with a change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None :param data: Name-value pairs providing details for the new task. :type data: dict or None

:return: Response containing parsed Pydantic model with information about the created task. :rtype: Response

:raises MissingParameterError: If change_request_sys_id or name_value_pairs is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON serialization or deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare the write/idempotency/open-world profile, so the safety burden is lightened. The description adds real value by stating the raises behavior (MissingParameterError when change_request_sys_id or name_value_pairs is absent), which is important because the schema declares zero required parameters. It still omits what a successful call does to the change request and any permission constraints.

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

Conciseness3/5

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

The purpose sentence is front-loaded and clear, but the body is Sphinx docstring boilerplate whose :type: lines merely restate schema types and whose :rtype: adds little. It is not bloated, but several lines do not earn their 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 22-parameter creation tool with no output schema and no annotations beyond generic hints, the description should explain required inputs, the shape of 'data', and error/recovery behavior. Instead it covers a fraction of the surface, leaving an agent unable to construct a correct call for most parameters.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the description must carry the param burden and it does not: it documents only change_request_sys_id and data, and mentions name_value_pairs only in a raises clause. The remaining ~19 parameters (state, change_type, template_sys_id, sysparm_* etc.) are undocumented anywhere.

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 opening sentence states a specific verb (Create) and resource (a new task associated with a change request), which is enough to separate it from the sibling servicenow_create_change_request. It does not, however, explicitly contrast itself with update_change_request_task or delete_change_request_task, so an agent must infer the differentiation.

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

Usage Guidelines2/5

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

The description never says when to use this tool versus alternatives, nor what preconditions exist beyond a raise note about missing params. There is no guidance on when a task should be created instead of updating an existing one.

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

servicenow_create_cmdb_instanceCreate cmdb instanceC

Creates a single configuration item (CI).

:param className: CMDB class name. :type className: str :param attributes: Data attributes to define in the CI record. :type attributes: dict :param source: Discovery source. :type source: str :param inbound_relations: List of inbound relations. :type inbound_relations: list :param outbound_relations: List of outbound relations. :type outbound_relations: list

:return: Response containing created CI. :rtype: Response

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
sourceNo
sys_idNo
classNameNo
attributesNo
rel_sys_idNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_offsetNo
inbound_relationsNo
outbound_relationsNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, so the safety profile is covered. The description adds that a single CI is created and can carry inbound/outbound relations, but it omits whether relations are created as side effects, what permissions are needed, and what happens on duplicate CIs.

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

Conciseness3/5

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

The docstring is short and front-loaded with the purpose, but the :type: lines are pure redundancy with the schema's declared types and consume roughly half the text without adding information. The structure is conventional but not optimized for an agent reader.

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 12-parameter creation tool with no output schema and no required fields, the description is too thin: seven parameters are unexplained, relation-creation semantics are unstated, and there is no mention of what the response contains beyond ':rtype: Response'.

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

Parameters2/5

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

Schema description coverage is 0% across 12 parameters, and the description documents only 5 of them. Worse, its parameter notes just restate static types already in the schema (str, dict, list) rather than adding meaning like allowed class names or attribute formatting, and it never mentions data, sys_id, rel_sys_id, api_parameters, or the sysparm_* 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 opening line gives a specific verb and resource: 'Creates a single configuration item (CI).' The word 'single' usefully distinguishes it from bulk ingestion (servicenow_ingest_cmdb_data), but it never explicitly names that or the update/patch/relation siblings as alternatives.

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

Usage Guidelines2/5

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

There is no guidance on when to use this versus servicenow_update_cmdb_instance, servicenow_patch_cmdb_instance, servicenow_create_cmdb_relation, or servicenow_ingest_cmdb_data. The docstring merely lists parameters, so an agent must infer the use case entirely.

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

servicenow_create_cmdb_relationCreate cmdb relationC

Adds an inbound and/or outbound relation to the specified CI.

:param className: CMDB class name. :type className: str :param sys_id: Sys_id of the CI. :type sys_id: str :param inbound_relations: List of inbound relations. :type inbound_relations: list :param outbound_relations: List of outbound relations. :type outbound_relations: list :param source: Discovery source. :type source: str

:return: Response containing updated CI relations. :rtype: Response

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
sourceNo
sys_idNo
classNameNo
attributesNo
rel_sys_idNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_offsetNo
inbound_relationsNo
outbound_relationsNo

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=true), so the bar is lower, but the description adds almost nothing beyond that: no auth requirements, no duplicate/conflict handling when adding a relation, no validation behavior. The single ':return:' line ('Response containing updated CI relations') is the only behavioral addition.

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

Conciseness3/5

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

The purpose is front-loaded, but the body is a raw docstring dump of ':param:'/':type:' lines that restate schema types rather than adding meaning. It is not bloated, but the structure is mechanical and low-value per line.

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 12-parameter mutation tool with no output schema and 0% schema coverage, the description should explain at minimum the shape of relation objects and the role of the query/pagination params. It leaves the majority of parameters and the side effects of the mutation undocumented.

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

Parameters2/5

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

Schema description coverage is 0% and the schema itself is just nullable untyped-ish properties, so the description carries the full burden. It documents only 5 of 12 parameters (className, sys_id, inbound_relations, outbound_relations, source), and even those are near-tautological type restatements. Seven parameters (data, attributes, rel_sys_id, sysparm_limit, sysparm_query, api_parameters, sysparm_offset) are unexplained — notably the query/limit/offset params, which are surprising for a create tool.

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

Purpose4/5

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

The opening sentence gives a specific verb and resource: 'Adds an inbound and/or outbound relation to the specified CI.' That is enough to separate it from siblings like delete_cmdb_relation or create_cmdb_instance. It does not explicitly name or contrast those siblings, so it falls 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 Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as delete_cmdb_relation or create_cmdb_instance. The agent must infer context entirely from the tool name.

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

servicenow_create_incidentCreate incidentC

Create a new incident record.

:param kwargs: Keyword arguments to initialize an IncidentModel instance. :type kwargs: dict

:return: Response containing parsed Pydantic model with information about the created incident record. :rtype: Response

:raises MissingParameterError: If data for the incident is not provided. :raises ParameterError: If JSON serialization of incident data fails. :raises ParameterError: If validation of parameters fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
incident_idNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true, idempotentHint=false), so the core behavioral burden is covered. The description adds some value by disclosing the return type (parsed Pydantic model) and the failure modes (MissingParameterError, ParameterError on serialization/validation). It does not, however, describe what fields are needed or what a valid payload looks like.

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

Conciseness2/5

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

The one useful sentence is front-loaded, but the remainder is Sphinx docstring boilerplate (:type, :rtype, repeated :raises ParameterError) that consumes space without informing the agent. The ':param kwargs:' notation does not even match the actual flat parameter schema, adding noise rather than clarity.

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

Completeness2/5

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

For a mutation tool with 15 parameters, no output schema, and no parameter documentation anywhere, the description is inadequate. Annotations cover the safety profile, but an agent still cannot determine what to pass in the data object or how the sysparm_* params behave, leaving a major gap for correct invocation.

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

Parameters2/5

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

There are 15 parameters at 0% schema description coverage, and the description does not compensate. It refers only to generic ':param kwargs:' rather than mapping to the actual named params (data, incident_id, sysparm_view, sysparm_query, etc.). The :raises clause implies 'data' is needed, but the remaining 14 params are entirely undocumented in both the schema and the description.

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 opening line states a specific verb and resource: 'Create a new incident record.' This distinguishes it from sibling creation tools for change requests, problems, and CMDB instances. However, it offers no explicit routing against siblings like servicenow_ingest_incidents or servicenow_add_table_record, so differentiation is implicit only.

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

Usage Guidelines2/5

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

The description provides no when-to-use guidance, no prerequisites, and no mention of alternatives. The :raises MissingParameterError line hints that incident 'data' is expected, but this is buried in docstring boilerplate rather than framed as usage guidance.

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

servicenow_create_problemCreate problemC

Create a new problem record.

:param kwargs: Keyword arguments to initialize a ProblemModel instance. :type kwargs: dict

:return: Response containing parsed Pydantic model with information about the created problem record. :rtype: Response

:raises MissingParameterError: If data for the problem is not provided. :raises ParameterError: If validation of parameters fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
problem_idNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare this as a non-read-only, non-idempotent, non-destructive open-world write. The description adds error conditions (MissingParameterError, ParameterError) and a return type, which is useful but somewhat boilerplate and vague about the response shape.

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

Conciseness3/5

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

The description is front-loaded with the core purpose, but it uses a docstring format with redundant type annotations and does not make efficient use of the limited space to explain parameters.

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?

Given 15 parameters, no output schema, and 0% schema description coverage, the description is insufficient. It fails to explain how to provide problem data, what fields are accepted, or how the many sysparm_* parameters apply to a create operation.

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

Parameters1/5

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

Schema coverage is 0% for 15 parameters. The description mentions ':param kwargs:' and 'data for the problem', but the schema's main input parameter is named 'data', and none of the sysparm_* parameters are explained. The description does not compensate for the missing schema documentation and may even confuse the agent about parameter naming.

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 first sentence gives a specific verb and resource: 'Create a new problem record.' It clearly distinguishes the resource from other create tools like create_incident or create_change_request, though it does not explicitly name siblings or scope.

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

Usage Guidelines2/5

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

The description offers no guidance on when to use this tool versus alternatives, nor any prerequisites or context about required data. The usage is only implied by the tool name.

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

servicenow_delete_attachmentDelete attachmentD
DestructiveIdempotent

Invoke the delete_attachment operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
sys_idNo
file_nameNo
table_nameNo
content_typeNo
table_sys_idNo
encryption_contextNo

TDQS

D1.6/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is covered. The description adds nothing on top of that — no statement about permanence, permissions required, or side effects on parent records — but it does not contradict the annotations either.

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

Conciseness2/5

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

Extremely short, but this is under-specification rather than conciseness — the single sentence carries no information load, so there is nothing to front-load. Brevity here is a deficiency, not an efficiency.

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

Completeness1/5

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

A destructive, open-world delete with seven undocumented, all-optional-looking parameters, no output schema, and no description of targeting logic. For an irreversible operation this leaves the agent unable to construct a correct call or understand what will be removed.

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

Parameters1/5

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

Seven parameters with 0% schema description coverage and no enum or format hints. The description does not name a single parameter, so an agent has no idea whether sys_id, table_name, table_sys_id, file_name, content_type, encryption_context or data is required to target the attachment, or which combination is valid.

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

Purpose2/5

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

"Invoke the delete_attachment operation" is a tautology that restates the tool name and title without stating the resource being acted on, the target system, or how it differs from siblings like servicenow_delete_table_record or servicenow_get_attachment. An agent learns nothing beyond what the name already says.

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

Usage Guidelines1/5

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

No when-to-use guidance, no prerequisites, no mention of alternatives. It does not explain when to delete via attachment versus a generic table-record delete, nor what identifiers are needed to locate the attachment.

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

servicenow_delete_change_requestDelete change requestC
DestructiveIdempotent

Delete a change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None :param change_type: Type of change (emergency, normal, standard). :type change_type: str or None

:return: Response containing parsed Pydantic model with information about the deleted change request. :rtype: Response

:raises MissingParameterError: If change_request_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true and readOnlyHint=false, so the safety profile is fully covered by structured data. The description contributes the error contract (MissingParameterError, ParameterError on invalid params or JSON deserialization failure) and states it returns a parsed Pydantic model, which is modest added value but nothing about the consequences of deletion or permission requirements.

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

Conciseness3/5

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

The body is mostly Sphinx boilerplate (:type, :rtype, repeated :raises ParameterError) rather than load-bearing content. The single substantive line is front-loaded, but the type/rtype lines restate schema information and the two duplicate ParameterError entries pad the text.

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 destructive, 22-parameter tool with no output schema and zero schema description coverage, the description is far too thin. It hints at a returned Pydantic model without describing it and leaves the majority of parameters and the deletion's side effects unexplained.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, and the description documents only two of them (change_request_sys_id, change_type), neither with format detail. It never explains the other 20 parameters (sysparm_query, api_parameters, cmdb_ci_sys_ids, etc.) or why a delete operation exposes them, leaving most of the surface undocumented in both schema and prose.

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 ("Delete a change request"), so the agent knows exactly what operation is performed. It does not, however, differentiate itself from closely named siblings such as delete_change_request_task or delete_change_request_conflict_scan, leaving ambiguity about which deletion target applies.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of prerequisites, and no routing to alternatives (e.g., update_change_request when a record should be modified rather than removed). The only implied usage comes from the MissingParameterError note about change_request_sys_id.

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

servicenow_delete_change_request_conflict_scanDelete change request conflict scanC
DestructiveIdempotent

Delete conflict scan information associated with a change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None :param task_sys_id: Sys ID of the task associated with the change request. :type task_sys_id: str or None

:return: Response containing parsed Pydantic model with information about the deleted conflict scan. :rtype: Response

:raises MissingParameterError: If either change_request_sys_id or task_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered structurally. The description adds the error behavior (MissingParameterError, ParameterError on bad params/JSON) and the return shape, which is useful beyond the annotations, but says nothing about what is irreversibly removed or the auth scope.

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?

The purpose is front-loaded in one clear sentence, and the docstring blocks are orderly, though the duplicated ParameterError entry and verbose :type/:rtype lines add minor noise.

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

Completeness2/5

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

With 22 parameters, no output schema, and 0% schema description coverage, the definition is substantially incomplete for correct invocation — most of the accepted parameters are unknown in purpose and format, and the required-argument semantics are fuzzy.

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

Parameters2/5

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

Schema coverage is 0% across 22 parameters, so the description carries the full burden. It documents only change_request_sys_id and task_sys_id, leaving roughly 20 parameters (state, change_type, model_sys_id, sysparm_limit, cmdb_ci_sys_ids, etc.) completely undescribed; the raises clause is also ambiguously worded about whether one or both IDs are required.

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+resource: deleting conflict-scan information tied to a change request. It clearly differs from siblings like servicenow_get_change_request_conflict and servicenow_check_change_request_conflict, though it never explicitly names or contrasts them.

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

Usage Guidelines2/5

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

No guidance on when to delete vs. re-scan or use servicenow_check_change_request_conflict. The only conditional information is the raises clause about a missing identifier, which hints at a requirement but does not frame usage or alternatives.

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

servicenow_delete_change_request_taskDelete change request taskC
DestructiveIdempotent

Delete a task associated with a change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None :param task_sys_id: Sys ID of the task associated with the change request. :type task_sys_id: str or None

:return: Response containing parsed Pydantic model with information about the deleted task. :rtype: Response

:raises MissingParameterError: If either change_request_sys_id or task_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description usefully adds the error behavior (MissingParameterError, ParameterError on bad params/deserialization) and the return shape, which is genuine added context, but it says nothing about cascading effects or confirmation requirements despite being destructive.

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

Conciseness3/5

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

The docstring boilerplate badly mismatches the schema: it documents two params while twenty exist, and repeats type information (:type:, :rtype:) that adds no value. The first line is well front-loaded, but the rest is verbose filler rather than useful content.

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 destructive, 22-parameter tool with no output schema and 0% schema coverage, the description is materially incomplete: it omits which task identifier actually takes effect (task_sys_id vs change_request_task_sys_id) and gives no return-value detail beyond 'parsed Pydantic model'. An agent could easily pass the wrong parameter.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, yet the description documents only two (change_request_sys_id, task_sys_id). The other twenty parameters, including the more relevant change_request_task_sys_id, are left entirely uninterpreted, so the description fails to compensate for the coverage gap.

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 ('Delete a task associated with a change request'), which is clear and distinguishable from siblings like delete_change_request and update_change_request_task. It does not explicitly name sibling tools or scope limits, so it falls 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 Guidelines2/5

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

No guidance on when to use this versus delete_change_request, delete_table_record, or update_change_request_task. No prerequisites (permissions, state constraints) are given; the agent must infer usage entirely.

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

servicenow_delete_ci_lifecycle_actionDelete ci lifecycle actionC
DestructiveIdempotent

Removes a configuration item (CI) action for a list of CIs.

ParametersJSON Schema
NameRequiredDescriptionDefault
sysIdsNo
opsLabelNo
leaseTimeNo
actionNameYes
requestorIdYes
oldOpsLabelsNo
oldActionNamesNo

TDQS

C2.4/5.0
Behavior2/5

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

The annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, covering the core safety profile. The description adds only that the removal applies to CI lifecycle actions for a list of CIs, without detailing permissions, side effects, or what is actually destroyed.

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?

It is a single front-loaded sentence with no wasted wording. However, for a destructive tool with seven parameters, such extreme brevity leaves important structure unaddressed.

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

Completeness1/5

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

Given a destructive batch operation with seven parameters, no schema descriptions, and no output schema, the description is severely incomplete. It omits parameter meaning, usage constraints, and any behavioral context beyond the annotations.

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

Parameters1/5

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

Schema description coverage is 0% across 7 parameters, and the description does not explain any parameter. Required fields like actionName and requestorId, as well as optional fields like sysIds and leaseTime, receive no semantic guidance.

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 ('Removes') and resource ('CI action') and indicates batch scope ('for a list of CIs'). It does not explicitly differentiate itself from close siblings like servicenow_add_ci_lifecycle_action, but the delete semantics are clear.

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

Usage Guidelines2/5

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

The description gives no when-to-use guidance, no prerequisites, and no alternatives. It does not mention sibling lifecycle tools such as add_ci_lifecycle_action or the related check_* tools.

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

servicenow_delete_cmdb_relationDelete cmdb relationB
DestructiveIdempotent

Deletes the relation for the specified configuration item (CI).

:param className: CMDB class name. :type className: str :param sys_id: Sys_id of the CI. :type sys_id: str :param rel_sys_id: Sys_id of the relation to remove. :type rel_sys_id: str

:return: Response containing the operation result. :rtype: Response

:raises MissingParameterError: If className, sys_id, or rel_sys_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
sourceNo
sys_idNo
classNameNo
attributesNo
rel_sys_idNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_offsetNo
inbound_relationsNo
outbound_relationsNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds that missing identifiers raise a MissingParameterError, but it does not say what happens to the CI's other relations, whether the deletion cascades, or what the response actually contains.

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

Conciseness3/5

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

The opening sentence is front-loaded and efficient, but the Sphinx-style :param/:type/:rtype/:raises block restates types already present in the schema, adding bulk with limited informational gain.

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?

There is no output schema, so the ':return: Response containing the operation result' note is appropriately included, and the three core parameters are covered. However, with 12 parameters and no annotation-level detail about side effects, the definition leaves significant gaps for an agent deciding how to call it safely.

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 0%, so the description must compensate, and it does document the three semantically important parameters (className, sys_id, rel_sys_id) with their meanings and types. The remaining nine schema properties (data, source, attributes, sysparm_limit, sysparm_query, api_parameters, sysparm_offset, inbound_relations, outbound_relations) are left entirely unexplained, so it only partially fills the gap.

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+resource ('Deletes the relation') and scopes it to the specified configuration item, which is unambiguous on its own. It does not explicitly name the sibling it contrasts with (create_cmdb_relation, get_cmdb), so it stops short of full sibling differentiation.

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 verb and by the docstring's note that className, sys_id, and rel_sys_id must be supplied or a MissingParameterError is raised, which serves as a prerequisite hint. There is no explicit guidance on when to use this versus create_cmdb_relation or other CMDB tools.

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

servicenow_delete_incidentDelete incidentC
DestructiveIdempotent

Delete an incident record.

:param incident_id: The sys_id of the incident record to delete. :type incident_id: str

:return: Response containing information about the deletion. :rtype: Response

:raises MissingParameterError: If incident_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
incident_idNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is covered by structured data. The description adds one genuinely useful behavioral fact beyond that: incident_id is effectively required and a MissingParameterError is raised without it (the schema marks zero required params). It says nothing about irreversibility, cascade effects on related records, or authorization needs, so it adds only modest value.

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?

The one-line purpose is front-loaded and the docstring is short with no padding. The :return:/:rtype: boilerplate adds little, but with no output schema in play it is not pure waste, and the docstring is not bloated relative to what it conveys.

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 destructive, 15-parameter, zero-coverage tool with no output schema, this definition is far too thin. It covers a single parameter and a one-line return statement while leaving the mutation's side effects, permission requirements, and the meaning of the other fourteen parameters unaddressed.

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

Parameters2/5

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

Schema description coverage is 0% across 15 parameters, so the description carries the full burden and largely fails it. It documents only incident_id (with type and required-ness), leaving data, api_parameters, name_value_pairs, and the ten sysparm_* filtering/pagination parameters entirely unexplained in both the schema and the description.

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 ('Delete an incident record'), so an agent knows exactly what is happening. It does not, however, distinguish itself from the many sibling deletion tools (servicenow_delete_table_record, servicenow_delete_problem, servicenow_delete_change_request), which matters here because an agent could plausibly confuse deleting an incident with the generic table-record delete.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no statement of prerequisites (e.g., permissions, whether the incident must be closed first), and no routing to alternatives such as servicenow_update_incident or the generic table-record delete. The only precondition-like statement is the :raises: note, which covers a missing argument rather than usage context.

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

servicenow_delete_problemDelete problemC
DestructiveIdempotent

Delete a problem record.

:param problem_id: The sys_id of the problem record to delete. :type problem_id: str

:return: Response containing information about the deletion. :rtype: Response

:raises MissingParameterError: If problem_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
problem_idNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds one genuine behavioral fact beyond that: MissingParameterError is raised when problem_id is absent, which is useful because the schema marks nothing as required. The ':return: Response containing information about the deletion' line adds little.

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

Conciseness3/5

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

The purpose is front-loaded in the first line, which is good. The remaining Sphinx directives are boilerplate whose :type:/:rtype: lines largely restate the schema, and the :return: line is near-vacuous, so a fair amount of the text does not earn 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 destructive, 15-parameter, zero-required-parameter tool with no output schema and no annotation-adjacent documentation, the description is thin. It never explains what the sysparm_* family does, whether deletion is cascading or reversible, or what the deletion response contains, leaving the agent under-informed before an irreversible operation.

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

Parameters2/5

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

Schema description coverage is 0% across 15 parameters, so the description must carry the burden and it does not: only problem_id is explained, and the other 14 (sysparm_query, sysparm_fields, sysparm_limit, name_value_pairs, api_parameters, etc.) are left undocumented in both places. The one param it does document is typed 'str' in the docstring while the schema accepts integer or string, a minor inconsistency.

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 ('Delete a problem record'), which cleanly separates it from get_problem, update_problem, create_problem and from delete_incident/delete_change_request by resource. It does not, however, mention any sibling or scope constraint explicitly, so differentiation is by name inference rather than by the description.

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 when-to-use, when-not-to-use, prerequisites, or alternative tools are given. The only usage signal is the ':raises MissingParameterError: If problem_id is not provided' note, which is an error condition rather than routing guidance. An agent gets no help deciding between this and servicenow_delete_table_record or servicenow_delete_incident.

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

servicenow_delete_product_inventoryDelete product inventoryC
DestructiveIdempotent

Deletes a specified product inventory record.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=true, so the safety profile is covered. The description adds single-record scope by saying "a specified product inventory record," but does not describe auth needs, cascading effects, or failure behavior.

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?

The description is a single, front-loaded sentence with no wasted words. It is concise, though it is arguably too sparse for a destructive operation.

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

Completeness2/5

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

Annotations cover the safety traits, but the description does not compensate for the fully undocumented parameters or explain how the target record is identified. For a destructive tool with no output schema, more context is needed.

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

Parameters1/5

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

Schema description coverage is 0% for two parameters, and the description provides no information about how to specify the record to delete. The generic params and params_json fields remain completely unexplained.

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: deletes a product inventory record. It is clear enough to distinguish from sibling reads such as get_product_inventory, but it does not explicitly call out the alternative or scope limits.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. Usage is only implied by the delete verb.

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

servicenow_delete_table_recordDelete table recordC
DestructiveIdempotent

Delete a record from the specified table.

:param table: The name of the table. :type table: str :param table_record_sys_id: The sys_id of the record to be deleted. :type table_record_sys_id: str

:return: Response containing parsed Pydantic model with information about the deletion. :rtype: Response

:raises MissingParameterError: If table or table_record_sys_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
tableNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
table_record_sys_idNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false and openWorldHint=true, so the description matches the declared safety profile rather than contradicting it. It adds two useful behavioral facts: the return is a parsed Pydantic response about the deletion, and a MissingParameterError is raised when table or sys_id is absent. However, it says nothing about permissions, cascading effects on related records, or what happens when the sys_id does not exist.

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

Conciseness3/5

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

The prose is short and the purpose statement is correctly front-loaded. However, the Sphinx ':type table: str' / ':rtype: Response' lines merely restate type information already present in the schema, so a meaningful share of the text does not earn 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 16-parameter destructive tool with no output schema, the description should at minimum explain the auxiliary sysparm parameters or state that only table plus sys_id matter. It also asserts the two params are required while the schema marks nothing required and defaults everything to null, leaving the agent unsure of the real invocation contract.

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

Parameters2/5

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

Schema description coverage is 0% and there are 16 parameters, yet the description only explains two of them (table and table_record_sys_id). The 14 sysparm_* / data / api_parameters / name_value_pairs parameters are undocumented everywhere, and it is not even clear why query/view/pagination parameters exist on a delete operation. The description does not compensate for the coverage gap.

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 opening sentence names a specific verb and resource ('Delete a record from the specified table'), so an agent immediately knows this is a destructive single-record operation on an arbitrary table. It is distinguishable from siblings such as servicenow_delete_attachment or servicenow_delete_incident which target fixed record types. It does not, however, explicitly contrast itself with servicenow_patch_table_record or servicenow_get_table_record, 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 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 alternatives are named. Given siblings like servicenow_patch_table_record, servicenow_delete_incident and servicenow_delete_problem, an agent gets no help deciding between the generic table-record deletion and the typed delete tools.

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

servicenow_extend_ci_lifecycle_leaseExtend ci lifecycle leaseC

Extends the specified CI action's lease expiration time.

ParametersJSON Schema
NameRequiredDescriptionDefault
sysIdsNo
opsLabelNo
leaseTimeNo
actionNameYes
requestorIdYes
oldOpsLabelsNo
oldActionNamesNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already establish this is a non-read-only (readOnlyHint=false), non-idempotent, open-world mutation with destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that — no note on what changes, whether extension is bounded, or what happens on failure — effectively restating the name/title.

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

Conciseness4/5

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

A single front-loaded sentence with no filler or redundancy. It is efficiently written, though its brevity reflects under-specification rather than tight editing.

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

Completeness2/5

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

For a 7-parameter mutation tool with no output schema and zero schema description coverage, one sentence is far too thin. An agent cannot know which optional parameters are alternatives, how leaseTime is formatted, or what a successful extension returns.

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

Parameters2/5

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

Schema description coverage is 0% across 7 parameters, so the description carries the full burden and fails it: required actionName and requestorId, plus sysIds, opsLabel, leaseTime, oldOpsLabels, and oldActionNames are all unexplained. 'Specified CI action's lease' only vaguely gestures at actionName/leaseTime and gives no semantics for the remaining five.

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: 'Extends the specified CI action's lease expiration time.' An agent can tell it is a mutation of a lease timer on a CI action. However, it offers no differentiation from the many sibling CI-lifecycle tools (e.g., set_ci_lifecycle_status, add_ci_lifecycle_action), 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 Guidelines2/5

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

There is no when-to-use guidance, no prerequisites (e.g., that the lease must not already be expired), and no reference to alternative tools such as check_ci_lifecycle_lease_expired or set_ci_lifecycle_status. The agent is left to infer context entirely.

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

servicenow_full_scanFull scanC

Initiate a full instance scan.

:return: Response containing parsed Pydantic model with information about the full scan. :rtype: Response

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, and idempotentHint=false, so the mutation/non-idempotent nature is covered structurally. However, the description omits critical behavior: this likely kicks off a long-running asynchronous job (evidenced by siblings like instance_scan_progress and progress) requiring polling, and it says nothing about cost, duration, or side effects on the instance.

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

Conciseness3/5

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

The opening sentence is front-loaded and clear, but the remaining two lines are Sphinx ':return:'/':rtype:' boilerplate that convey nothing an agent can act on. Half the text is auto-generated noise.

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 zero-param, no-output-schema mutation that likely triggers an expensive async instance-wide scan, the description is thin. It does not explain what a full scan inspects, how to track progress, or what the returned Response contains beyond a vague 'information about the full scan'.

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

Parameters4/5

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

The tool takes zero parameters, so the schema has nothing to document and the description cannot add parameter meaning. Per the baseline for zero-param tools, this scores high by default.

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: 'Initiate a full instance scan.' The word 'full' implicitly distinguishes it from point_scan, suite_scan, and combo_suite_scan siblings, but it never names them or clarifies the scope difference, so an agent must infer 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 guidance on when to use this versus point_scan, suite_scan, or combo_suite_scan, and no mention of prerequisites or follow-up steps. The agent gets no signal about which scan variant to pick.

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

servicenow_get_accountGet accountD
Read-onlyIdempotent

Invoke the get_account operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
numberNo
sys_idNo

TDQS

D1.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds no behavioral context beyond those annotations, such as how account lookup works or what happens when no identifier matches.

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

Conciseness2/5

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

The description is one short sentence, but its brevity reflects under-specification rather than effective conciseness. It is front-loaded only in the sense that there is nothing else to place after it.

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

Completeness1/5

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

For a 3-parameter lookup tool with no output schema, no parameter documentation, and no behavioral detail, the description is completely inadequate. An agent cannot confidently invoke this tool or know what it returns.

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

Parameters1/5

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

The tool has 3 optional identifier parameters (name, number, sys_id) with 0% schema description coverage, and the description adds no meaning for any of them. It does not explain whether these are alternative lookup keys or how they should be used.

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

Purpose2/5

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

The description says only 'Invoke the get_account operation,' which restates the tool name and title rather than explaining what an account is or what retrieving one entails. It does not distinguish this tool from the many sibling lookup tools such as servicenow_get_application or servicenow_get_cmdb.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of prerequisites, and no reference to alternatives. The description gives an agent no basis for choosing this tool over the many other ServiceNow get_* siblings.

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

servicenow_get_activity_subscriptionsGet activity subscriptionsD
Read-onlyIdempotent

Invoke the get_activity_subscriptions operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
sys_idNo
table_nameNo
document_idNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

D1.3/5.0
Behavior1/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered by structured data. The description adds absolutely nothing on top of that and does not disclose behavioral traits that are NOT in annotations. Since no credit should be given for repeating structured fields, this description contributes no behavioral value.

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

Conciseness2/5

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

It is a single sentence with no wasted words, but this is under-specification rather than conciseness. Brevity here removes information the agent needs rather than removing redundancy.

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

Completeness1/5

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

For a 17-parameter, zero-coverage, no-output-schema operation, the description is completely inadequate. It leaves the agent unable to determine what the tool returns, which parameters matter, or when to invoke it.

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

Parameters1/5

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

The tool has 17 parameters with 0% schema description coverage, and the description explains none of them. Parameters like sysparm_query, sysparm_fields, sysparm_display_value, table_name, and document_id are left entirely opaque, so the description fails to compensate for the schema's complete lack of documentation.

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

Purpose2/5

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

The description is a bare restatement of the operation name ('Invoke the get_activity_subscriptions operation') with no verb+resource detail beyond the name itself. It gives no indication of what an activity subscription is or what is being retrieved, and offers no differentiation from any sibling tool.

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

Usage Guidelines1/5

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

No when-to-use, when-not-to-use, prerequisites, or alternative tools are mentioned. The agent is given nothing to decide whether this tool is the right one for its task.

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

servicenow_get_applicationGet applicationC
Read-onlyIdempotent

Get information about an application.

:param application_id: The unique identifier of the application. :type application_id: str

:return: Response containing parsed Pydantic model with information about the application. :rtype: Response

:raises MissingParameterError: If the required parameter application_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
api_parametersNo
application_idNo

TDQS

C2.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the return shape (a parsed Pydantic model) and an error condition, but the stated MissingParameterError for a 'required' application_id contradicts the schema, which marks the field optional with a null default and zero required parameters.

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

Conciseness3/5

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

The opening line is front-loaded and short, which is good, but the remainder is Sphinx docstring boilerplate (:type, :rtype, :raises) that restates what the prose already establishes and adds little for an agent selecting the tool.

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

Completeness2/5

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

With no output schema and 0% parameter coverage across three parameters, the description should carry more of the load. It omits what an 'application' means in this ServiceNow context, what the two undeclared parameters do, and how results are shaped, leaving real gaps for an agent.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, yet it only explains application_id (unique identifier, string). The other two parameters, mode and api_parameters, are entirely undocumented in both schema and description.

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

Purpose3/5

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

The description states a verb (Get) and a resource (application), so the basic intent is clear, but "information about an application" is vague about what is actually retrieved and gives no signal to distinguish it from the many sibling get_* tools (get_cmdb, get_table_record, get_account, etc.).

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as servicenow_get_table_record or servicenow_get_cmdb for related lookups. The only conditional content is an error case, not usage guidance.

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

servicenow_get_attachmentGet attachmentD
Read-onlyIdempotent

Invoke the get_attachment operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
sys_idNo
file_nameNo
table_nameNo
content_typeNo
table_sys_idNo
encryption_contextNo

TDQS

D1.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, covering the safety profile. The description adds no behavioral context beyond those annotations: it does not explain return format, required permissions, or error behavior. It neither contradicts nor enriches the structured data.

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

Conciseness2/5

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

The description is a single sentence, but it is under-specified rather than concise. It contains no useful information to front-load and fails to provide the minimum context an agent needs. Brevity here comes at the cost of meaning.

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

Completeness1/5

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

For a tool with 7 optional parameters, no output schema, and no schema-level parameter descriptions, the description is completely inadequate. It does not explain what is retrieved, how to identify the attachment, or what the agent should expect. The annotations cover safety but cannot compensate for missing functional detail.

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

Parameters1/5

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

The schema has 7 parameters with 0% description coverage, and the description mentions none of them. It provides no insight into what data, sys_id, file_name, table_name, content_type, table_sys_id, or encryption_context mean or how they relate to retrieving an attachment. With zero coverage and zero compensation, this is a serious gap.

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

Purpose2/5

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

The description is a tautology: 'Invoke the get_attachment operation' merely restates the tool name and title without stating what specifically is retrieved or from where. It gives an agent no additional signal beyond the tool name itself, and does not distinguish the tool from siblings like servicenow_get_knowledge_article_attachment or servicenow_upload_attachment.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. It does not mention that a sys_id, table_name, or file_name may be needed, nor when to prefer this over servicenow_upload_attachment or servicenow_delete_attachment. No usage context is provided.

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

servicenow_get_change_requestGet change requestC
Read-onlyIdempotent

Retrieve details of a specific change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None :param change_type: Type of change (emergency, normal, standard). :type change_type: str or None

:return: Response containing parsed Pydantic model with information about the change request. :rtype: Response

:raises MissingParameterError: If change_request_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If change_type is specified but not valid. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered. The description adds genuine value by disclosing the failure modes (MissingParameterError when sys_id is absent, ParameterError for invalid change_type or deserialization failure) and the Pydantic-model response shape, but it is silent on pagination/limits despite exposing sysparm_limit and sysparm_offset.

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

Conciseness3/5

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

The docstring-style layout is scannable and front-loads the purpose, but the :param/:type/:raises formatting is verbose boilerplate, and the volume of documentation is badly skewed — heavy detail on two parameters while the rest of a 22-parameter surface is ignored.

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

Completeness2/5

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

For a tool exposing 22 optional parameters with no schema descriptions and no output schema, the description is far too thin. It also implicitly treats change_request_sys_id as required (raises MissingParameterError) while the schema lists zero required parameters, leaving the agent unsure whether the call is valid without it.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the description carries the full burden. It documents only change_request_sys_id and change_type, leaving roughly twenty parameters (state, task_sys_id, cmdb_ci_sys_ids, sysparm_query, response_length, etc.) entirely unexplained in both schema and description. It adds real meaning for the two it covers but fails to compensate for the gap.

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?

"Retrieve details of a specific change request" states a clear verb (retrieve) and resource (change request), narrowed to a single record by sys_id. However, it does nothing to distinguish itself from the many sibling change-request getters (get_change_requests, get_change_request_models, get_change_request_ci, get_change_request_tasks), leaving the agent to infer the single-record-vs-list distinction from the name alone.

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

Usage Guidelines2/5

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

The description gives no when-to-use context: no mention of get_change_requests as the list alternative, no prerequisites, and no note that filtering by change_type or other fields is possible. The agent must guess the correct entry point among a large family of change-request tools.

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

servicenow_get_change_request_ciGet change request ciC
Read-onlyIdempotent

Retrieve the configuration item (CI) associated with a change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None

:return: Response containing parsed Pydantic model with information about the associated CI. :rtype: Response

:raises MissingParameterError: If change_request_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds real value beyond that by naming the failure modes (MissingParameterError for a missing sys_id, ParameterError on invalid params or JSON deserialization) and the return shape. However, it claims missing change_request_sys_id raises an error while the schema marks every property optional with null defaults, which muddies the failure contract.

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

Conciseness3/5

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

The purpose sentence is front-loaded and the Sphinx-style :param/:return/:raises block is tidy, but it is developer-docstring boilerplate ('parsed Pydantic model', ':rtype: Response') that conveys little to an agent. The bulky parameter block documents a single field out of 22, so the length is not matched by usefulness.

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 read tool with 22 undocumented, all-optional parameters and no output schema, the description is materially incomplete: it says nothing about how the many filters interact, whether any are required in practice, or what the CI payload contains. Annotations cover safety, but the operation's practical invocation surface is largely unexplained.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the description must carry the burden and it covers only one field (change_request_sys_id, with its type). The remaining 21 parameters — association_type, cmdb_ci_sys_ids, sysparm_query, response_length, refresh_impacted_services, and the rest — are undocumented in both the schema and the description, leaving the agent to guess at filtering and pagination semantics.

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: retrieve the configuration item (CI) associated with a change request. That is clear enough to distinguish it from sibling tools like get_change_request_tasks or get_change_request_worker, though the description does not explicitly name any sibling to contrast against.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus the many adjacent ServiceNow readers (get_change_request, get_cmdb, get_change_request_tasks, create_change_request_ci_association). No prerequisites, no exclusions, no mention of the association_type or cmdb_ci_sys_id filtering paths present in the schema.

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

servicenow_get_change_request_conflictGet change request conflictC
Read-onlyIdempotent

Retrieve conflict information associated with a change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None

:return: Response containing parsed Pydantic model with information about the conflicts. :rtype: Response

:raises MissingParameterError: If change_request_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered by structured data. The description does add genuine behavioral context: it enumerates error conditions (MissingParameterError when change_request_sys_id is absent, ParameterError on invalid params/JSON) and states the return is a parsed Pydantic model. It stops short of describing pagination or what conflict fields are returned.

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

Conciseness3/5

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

The purpose is front-loaded in the first line, which is good, but the remainder is raw docstring boilerplate (:param/:type/:return/:rtype/:raises) aimed at a Python reader rather than an agent, with a redundant :rtype: Response line. It is short, but not every line 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?

With 22 optional-looking parameters, no output schema, and 0% schema description coverage, the definition is far too thin for the tool's complexity. The return description ('parsed Pydantic model with information about the conflicts') is a small help since no output schema exists, but 21 undocumented parameters and no filtering guidance leave an agent unable to call this correctly beyond the single sys_id argument.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the description carries the full documentation burden, yet it documents only change_request_sys_id and ignores the other 21 (state, change_type, model_sys_id, sysparm_query, response_length, refresh_impacted_services, etc.). It adds no format, default, or filtering semantics beyond the one field, leaving most parameters opaque.

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 opening sentence gives a specific verb+resource: 'Retrieve conflict information associated with a change request.' An agent immediately knows the operation and the target entity. However, it does not distinguish this from close siblings such as servicenow_check_change_request_conflict or servicenow_delete_change_request_conflict_scan, leaving the retrieval-vs-scan distinction to inference.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus the sibling conflict tools (check_change_request_conflict, delete_change_request_conflict_scan), no prerequisites, and no guidance on what a retrieved conflict means or how to act on it. Usage must be inferred entirely from the name.

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

servicenow_get_change_request_modelsGet change request modelsC
Read-onlyIdempotent

Retrieve change request models based on specified parameters.

:param order: Ordering parameter for sorting results. :type order: str or None :param name_value_pairs: Additional name-value pairs for filtering. :type name_value_pairs: str or None :param sysparm_query: Query parameter for filtering results. :type sysparm_query: str or None :param text_search: Text search parameter for searching results. :type text_search: str or None

:return: Response containing list of parsed Pydantic models with information about change request models. :rtype: Response

:raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds modest value by noting the return is a list of parsed Pydantic models and that ParameterError is raised on invalid input or JSON deserialization failure, but says nothing about pagination or result limits.

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

Conciseness2/5

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

The purpose sentence is front-loaded, but the bulk of the text is Sphinx docstring boilerplate whose :type: lines merely restate "str or None" already visible in the schema. This adds length without adding meaning and buries the one useful fact (the ParameterError behavior).

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 22-parameter retrieval tool with no output schema, the description should at minimum explain the key filters and result-shaping params. It documents under 20% of the parameters and omits any mention of pagination, limits, or the meaning of the many sys_id filters, leaving an agent unable to call it correctly.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the description carries the full burden, yet it only names 4 params (order, name_value_pairs, sysparm_query, text_search) and gives only tautological glosses plus type restatements. The remaining 18 params — including response_length, model_sys_id, change_model_sys_id, and the various sys_id filters — are entirely undocumented.

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

Purpose3/5

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

The description states a clear verb+resource ("Retrieve change request models"), so the basic purpose is legible. However, it never clarifies what a "change request model" is or how it differs from the numerous change-request siblings such as get_change_requests or get_standard_change_request_model, leaving differentiation to inference.

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

Usage Guidelines2/5

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

The phrase "based on specified parameters" supplies no when-to-use guidance, no prerequisites, and no alternatives despite a large set of adjacent change-request retrieval tools. An agent gets no signal for choosing this over get_change_requests or get_standard_change_request_model.

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

servicenow_get_change_request_nextstateGet change request nextstateC
Read-onlyIdempotent

Retrieve the next state of a specific change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None

:return: Response containing parsed Pydantic model with information about the next state. :rtype: Response

:raises MissingParameterError: If change_request_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds useful failure behavior (MissingParameterError when the sys id is absent, ParameterError on bad params or JSON deserialization failures). It does not explain what a 'next state' response contains or whether it is computed or fetched.

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

Conciseness3/5

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

The one-line purpose is well front-loaded, but the docstring boilerplate (:param/:type/:return/:rtype/:raises) is verbose relative to the small amount of actual information conveyed, and it spends lines on type annotations that a machine-readable schema already implies.

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

Completeness2/5

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

With 22 parameters, no required fields, 0% schema coverage, and no output schema, the definition should carry substantial context. Instead it documents one parameter and gives a vague return description ('parsed Pydantic model with information about the next state'), leaving the agent unable to call it confidently.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the schema documents nothing. The description clarifies only change_request_sys_id ('Sys ID of the change request') and covers none of the other 21 parameters (worker_sys_id, cmdb_ci_sys_ids, sysparm_query, api_parameters, etc.), which is far below what a 0%-coverage schema requires.

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 (Retrieve) and resource (the next state of a change request), which is clear enough to distinguish it from sibling reads like servicenow_get_change_request. However, 'next state' is left undefined — no state machine or transition context is given, so the agent cannot fully grasp what it retrieves.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no conditions selecting this over servicenow_get_change_request, servicenow_update_change_request, or the approval/conflict siblings, and no prerequisites for obtaining a valid sys_id. The docstring covers only the mechanics of the call, not when it should be made.

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

servicenow_get_change_requestsGet change requestsC
Read-onlyIdempotent

Retrieve change requests based on specified parameters.

:param order: Ordering parameter for sorting results. :type order: str or None :param name_value_pairs: Additional name-value pairs for filtering. :type name_value_pairs: str or None :param sysparm_query: Query parameter for filtering results. :type sysparm_query: str or None :param text_search: Text search parameter for searching results. :type text_search: str or None :param change_type: Type of change (emergency, normal, standard, model). :type change_type: str or None

:return: Response containing list of parsed Pydantic models with information about change requests. :rtype: Response

:raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If change_type is specified but not valid. :raises ParameterError: If JSON serialization or deserialization fails. :raises ParameterError: If unexpected response format is encountered.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already establish read-only, idempotent, non-destructive, open-world behavior, so the safety profile is covered. The description usefully adds that removal/validation failures surface as ParameterError, and that change_type is validated against emergency/normal/standard/model, which is genuine context beyond the annotations, though return/pagination behavior remains unaddressed.

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

Conciseness3/5

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

The leading sentence is front-loaded and the Sphinx docstring is orderly, but a large share of the text is boilerplate or restates parameter names without adding meaning. It is adequately sized rather than wasteful, yet much of the content does not earn 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 22-parameter list tool with no output schema and 0% schema coverage, the description is far too thin: it omits pagination behavior (sysparm_limit/sysparm_offset/response_length), most identifiers, and any detail on the returned model collection. An agent cannot call this correctly on the strength of this text alone.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the description carries the full burden, yet it only touches 5 of them and does so tautologically ("Query parameter for filtering results," "Ordering parameter for sorting results"). No syntax, accepted values, or format details are provided for sysparm_query, name_value_pairs, or the many sys_id filters.

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

Purpose4/5

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

The description names a specific verb and resource ("Retrieve change requests") and adds a filtering qualifier, so the agent knows this is a list/search operation. However, it offers no distinction from the sibling servicenow_get_change_request (singular), which is a critical ambiguity in a set with many overlapping change-request tools.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of alternatives such as servicenow_get_change_request for a single record or servicenow_get_change_request_tasks. The only usage signal is "based on specified parameters," which is generic filler rather than a selection condition.

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

servicenow_get_change_request_scheduleGet change request scheduleC
Read-onlyIdempotent

Retrieve the schedule of a change request based on CI sys ID.

:param cmdb_ci_sys_id: Sys ID of the CI (Configuration Item). :type cmdb_ci_sys_id: str or None

:return: Response containing parsed Pydantic model with information about the change request schedule. :rtype: Response

:raises MissingParameterError: If cmdb_ci_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds error behavior such as MissingParameterError and ParameterError, plus a return type, but it does not explain filtering, pagination, or how the many optional parameters affect behavior.

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

Conciseness3/5

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

The purpose is front-loaded in the first sentence, which is good. However, the rest is Sphinx-style field markup with duplicate :raises ParameterError entries and :rtype: Response, which adds structural noise rather than agent-relevant guidance.

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?

Given 22 optional parameters, no output schema, and no parameter descriptions in the schema, the definition is far too thin. It does not explain how to use the filters, what the schedule response contains, or how results are paginated.

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

Parameters1/5

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

Schema description coverage is 0% across 22 parameters, and the description documents only cmdb_ci_sys_id. Worse, it says cmdb_ci_sys_id is required and raises MissingParameterError if absent, while the schema marks all parameters optional. The remaining 21 parameters receive no semantic explanation.

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: retrieving the schedule of a change request based on CI sys ID. It is clear what the tool does, but it does not differentiate this tool from nearby siblings such as get_change_request, get_change_request_ci, or get_change_request_tasks.

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 guidance on when to use this tool versus alternatives, nor any when-not conditions. The phrase 'based on CI sys ID' gives a hint about invocation, but it does not help an agent choose between this and the many other change-request retrieval tools.

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

servicenow_get_change_request_tasksGet change request tasksC
Read-onlyIdempotent

Retrieve tasks associated with a specific change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None :param order: Ordering parameter for sorting results. :type order: str or None :param name_value_pairs: Additional name-value pairs for filtering. :type name_value_pairs: str or None :param sysparm_query: Query parameter for filtering results. :type sysparm_query: str or None :param text_search: Text search parameter for searching results. :type text_search: str or None

:return: Response containing list of parsed Pydantic models with information about change request tasks. :rtype: Response

:raises MissingParameterError: If change_request_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: the required-argument exception, the two ParameterError failure modes, and the return shape ('list of parsed Pydantic models'). It says nothing about pagination behavior, even though sysparm_limit, sysparm_offset and response_length exist in 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.

Conciseness3/5

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

The purpose statement is front-loaded and the overall length is modest for a 22-parameter tool. However the Sphinx-style ':type:' lines largely restate 'str or None' without adding information, and at least one documented parameter ('order') is absent from the schema, which is noise rather than signal.

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

Completeness2/5

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

For a tool with 22 parameters, 0% schema coverage and no output schema, the description leaves most of the interface unexplained. It does state the return type and error conditions, but an agent cannot determine what most of the filter parameters do or how to combine them, which is a material gap for a tool this complex.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the description carries the burden and largely fails it: only 5 of 22 parameters are mentioned, with types but no meaning for what a 'name_value_pairs' string or a 'sysparm_query' should look like. Worse, it documents an 'order' parameter that does not appear in the schema, while 17 real parameters (worker_sys_id, cmdb_ci_sys_id, response_length, etc.) go entirely unexplained.

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 ('Retrieve') and resource ('tasks associated with a specific change request'), so the operation is unambiguous. It does not, however, differentiate itself from siblings that operate on the same resource set (create_change_request_task, update_change_request_task, get_change_request), nor explain why one would fetch tasks rather than the parent change request.

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 or when-not-to-use guidance and no named alternative among the many change-request siblings. The only usage signal is the ':raises MissingParameterError' note, which indirectly implies change_request_sys_id is effectively required despite the schema marking it optional.

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

servicenow_get_change_request_workerGet change request workerC
Read-onlyIdempotent

Retrieve details of a change request worker.

:param worker_sys_id: Sys ID of the change request worker. :type worker_sys_id: str or None

:return: Response containing parsed Pydantic model with information about the change request worker. :rtype: Response

:raises MissingParameterError: If worker_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds only raises clauses (MissingParameterError, ParameterError), which is mild extra context but says nothing about return shape or why 22 parameters exist for a single-object fetch.

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?

The prose is short and front-loads the purpose in one line. Some boilerplate (:rtype: Response, duplicated :raises ParameterError:) earns little place, but overall it is tight.

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 22-parameter tool with 0% schema coverage and no output schema, the description is far too thin. It never explains the sprawling parameter set, the meaning of 'worker', or how to use it versus the many sibling change-request tools.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the description carries the full burden and documents only worker_sys_id. The other 21 parameters (state, task_sys_id, cmdb_ci_sys_id, sysparm_query, etc.) are left entirely unexplained, so the description fails to compensate for the coverage gap.

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+resource: retrieve a change request worker. It distinguishes the resource from generic change-request reads, but it never clarifies what a 'worker' is or how it differs from siblings like servicenow_get_change_request or servicenow_get_change_request_tasks.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of alternatives, and no statement of context or prerequisites. An agent picking among the many get_change_request* siblings receives no routing help.

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

servicenow_get_ci_lifecycle_active_actionsGet ci lifecycle active actionsC
Read-onlyIdempotent

Returns a list of active CI actions for the specified CI.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, covering the safety profile. The description adds nothing beyond that: it does not explain what 'active' means, whether results are paginated or scoped by lease/state, or what the returned action records contain.

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

Conciseness4/5

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

One short sentence, front-loaded with the verb and resource and free of filler. It is efficient, though the extreme brevity borders on under-specification rather than disciplined conciseness.

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

Completeness2/5

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

For a read tool with no output schema and 0% parameter documentation, the description leaves the agent without the CI identifier syntax, the meaning of 'active', or any note on result shape. Given the opaque params wrapper, considerably more context was required.

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

Parameters2/5

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

Schema description coverage is 0% and both parameters are opaque generic containers ('params' with additionalProperties:true and 'params_json' string defaulting to '{}'). The description only hints that a CI identifier is needed ('for the specified CI') without naming the field or its format, so it fails to compensate for the coverage gap.

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 ('Returns a list of active CI actions') scoped to a specified CI, which is more than a tautology of the title. However, it offers no differentiation from adjacent siblings such as servicenow_get_ci_lifecycle_status or servicenow_add_ci_lifecycle_action, leaving the agent to infer what 'active actions' excludes.

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

Usage Guidelines2/5

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

The description provides no when-to-use guidance, no prerequisites, and names no alternative. It does not say when to reach for this versus get_ci_lifecycle_status or the check_ci_lifecycle_* validators, so usage must be guessed.

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

servicenow_get_ci_lifecycle_statusGet ci lifecycle statusC
Read-onlyIdempotent

Returns the current operational state for the specified CI.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is fully covered. The description adds only the notion that the state returned is 'current' (a live read rather than cached), and says nothing about which CI states can be returned or any access constraints. With annotations carrying the burden, a 3 is fair.

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

Conciseness4/5

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

A single efficient sentence with the resource front-loaded and no filler. It is well sized, though the brevity is partly under-specification rather than pure economy.

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

Completeness2/5

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

For a tool with two undocumented parameters, zero schema descriptions and no output schema, the description leaves the agent unable to construct a valid call — the CI identifier's location and format are unknown. The annotations cover safety, but the invocation-critical detail is missing.

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

Parameters2/5

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

Schema description coverage is 0% and both parameters ('params' as a free-form object and 'params_json' as a string) are entirely opaque. The description says 'the specified CI' but never indicates which parameter carries the CI identifier, nor the expected identifier format, so it fails to compensate for the coverage gap.

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 ('Returns') and resource ('current operational state for the specified CI'), so the read intent is unambiguous. It does not, however, differentiate itself from lifecycle siblings such as get_ci_lifecycle_active_actions or the check_ci_lifecycle_* family, so an agent must guess which one answers its question.

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 when-to-use guidance, no prerequisites, and no mention of the obvious alternative servicenow_set_ci_lifecycle_status (the mutating counterpart) or the check_ci_lifecycle_* tools. The agent gets no routing help at all.

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

servicenow_get_cmdbGet cmdbB
Read-onlyIdempotent

Get Configuration Management Database (CMDB) information based on specified parameters.

:param cmdb_id: The unique identifier of the CMDB record :type cmdb_id: str

:return: Response containing parsed Pydantic model with CMDB information. :rtype: Response

:raises ParameterError: If the provided parameters are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
cmdb_idNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds that invalid parameters raise ParameterError and that the return is a parsed Pydantic model, but does not cover permissions, rate limits, or behavior when cmdb_id is omitted.

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?

The core purpose is front-loaded in the first sentence and the description is short. The Sphinx :type: and :rtype: lines add some schema-duplicating clutter, but not enough to obscure the content.

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

Completeness3/5

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

For a simple single-record read tool with annotation coverage and no output schema, the description provides basic return and error context. It remains incomplete on optional cmdb_id behavior and gives no usage context or sibling differentiation.

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 0%, so the description must carry parameter meaning. It explains cmdb_id as the unique identifier of the CMDB record and gives its type as str, but the schema shows it is nullable, optional, and defaults to null; the description does not clarify optionality or what happens if it is omitted.

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?

Names a specific verb and resource: getting CMDB information, and the single parameter makes clear this retrieves a CMDB record. It does not differentiate from siblings such as get_cmdb_instance or get_cmdb_instances, so it falls 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 Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives. It says only that retrieval is 'based on specified parameters,' with no when-to-use, when-not-to-use, or sibling routing context.

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

servicenow_get_cmdb_instanceGet cmdb instanceC
Read-onlyIdempotent

Returns attributes and relationship information for a specified CI record.

:param className: CMDB class name. :type className: str :param sys_id: Sys_id of the CI record to retrieve. :type sys_id: str

:return: Response containing parsed Pydantic model with CI information. :rtype: Response

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
sourceNo
sys_idNo
classNameNo
attributesNo
rel_sys_idNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_offsetNo
inbound_relationsNo
outbound_relationsNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, covering the safety profile. The description adds that the response contains attributes and relationship information and is parsed into a Pydantic model, but it does not describe pagination, authentication needs, or other operational behavior.

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?

The description is short and front-loads the core purpose in the first sentence. The remaining docstring-style parameter notes are compact, though the two undocumented parameter types add little value for a 12-parameter tool.

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

Completeness2/5

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

For a tool with 12 parameters, 0% schema description coverage, and no output schema, the description is not complete enough. It explains only two parameters and gives a brief return summary, leaving most inputs and pagination/query behavior unaddressed.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the burden, but it documents only className and sys_id out of 12 parameters. Ten parameters, including data, source, attributes, rel_sys_id, sysparm_limit, sysparm_query, sysparm_offset, api_parameters, inbound_relations, and outbound_relations, remain undocumented in both schema and description.

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 verb and resource: returns attributes and relationship information for a specified CI record. It does not, however, distinguish this tool from close siblings such as servicenow_get_cmdb_instances or servicenow_get_cmdb, leaving the agent to infer which one to use.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives like servicenow_get_cmdb_instances or servicenow_get_cmdb. The description only provides parameter docstrings, not usage context or exclusions.

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

servicenow_get_cmdb_instancesGet cmdb instancesB
Read-onlyIdempotent

Returns the available configuration items (CI) for a specified CMDB class.

:param className: CMDB class name. :type className: str :param sysparm_limit: Maximum number of records to return. :type sysparm_limit: int or str :param sysparm_offset: Starting record index. :type sysparm_offset: int or str :param sysparm_query: Encoded query used to filter the result set. :type sysparm_query: str

:return: Response containing list of CIs. :rtype: Response

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
sourceNo
sys_idNo
classNameNo
attributesNo
rel_sys_idNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_offsetNo
inbound_relationsNo
outbound_relationsNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered without the description. The description adds that it returns a list of CIs scoped by class and hints at pagination via the limit/offset params, but it does not describe the response shape, pagination semantics, or query-encoding expectations.

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?

Purpose is front-loaded in a single clear sentence, and the Sphinx-style param block is well structured. The ':type' lines partially restate types already present in the schema, which is mild redundancy but not harmful.

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, no-output-schema tool, the description covers the core retrieval intent and the main query params, but leaves the majority of the parameter surface undocumented. An agent can make a basic call but would be guessing at the purpose of most inputs.

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 0%, so the description must compensate. It usefully defines the four query-relevant params (className, sysparm_limit, sysparm_offset, sysparm_query), but 8 of 12 params (source, sys_id, attributes, rel_sys_id, api_parameters, inbound_relations, outbound_relations, data) remain entirely opaque in both schema and description.

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+resource ('Returns the available configuration items (CI)') scoped to 'a specified CMDB class', which is clear. However, it does not distinguish this plural-list tool from close siblings like servicenow_get_cmdb or servicenow_get_cmdb_instance (singular), so an agent cannot route confidently between them from the description alone.

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, when-not-to-use, or alternative-tool guidance. The phrase 'for a specified CMDB class' implies the retrieval context but never names a competing sibling or a condition that selects this tool over get_cmdb/get_cmdb_instance.

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

servicenow_get_data_classificationGet data classificationD
Read-onlyIdempotent

Invoke the get_data_classification operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
sys_idNo
table_nameNo
column_nameNo
classificationNo

TDQS

D1.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond that — no indication of what data is returned, whether it reads live config vs. cached metadata, or any auth/latency considerations, so it contributes no behavioral value.

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

Conciseness2/5

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

It is a single short sentence, but the brevity comes from under-specification rather than economy — nothing meaningful is communicated, so it is not 'concise' in a useful sense.

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

Completeness1/5

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

For a tool with four undocumented parameters, no output schema, and only safety annotations, the description is completely inadequate. An agent cannot determine what inputs to supply or what the call will do.

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

Parameters1/5

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

All four parameters (sys_id, table_name, column_name, classification) have 0% schema description coverage, and the description says nothing about them. An agent has no way to know whether these are filters, alternatives, or required together.

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

Purpose2/5

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

The description 'Invoke the get_data_classification operation' merely restates the tool name and title without stating what the operation actually does or what 'data classification' means in ServiceNow. It provides no verb+resource detail beyond the identifier itself, making it a tautology.

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

Usage Guidelines1/5

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

There is no guidance on when to use this tool, when not to, or which of the many sibling tools (e.g. servicenow_get_cmdb, servicenow_get_table) it should be preferred over. The description offers no context whatsoever.

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

servicenow_get_devops_change_infoGet devops change infoC
Read-onlyIdempotent

Retrieves change request details for a specified orchestration pipeline execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds nothing behavioral on top of that: no auth requirements, no rate limits, no indication of what the returned change details include or whether an unknown pipeline execution errors or returns empty.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, which is good structure. It is arguably under-specified rather than concise, since the brevity comes at the cost of any guidance, but nothing in the sentence is wasted.

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

Completeness2/5

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

There is no output schema, so the description should carry more of the return-value and input-identification burden than it does. For a read tool whose only inputs are opaque pass-through parameters, the agent is left without knowing what to pass or what it will receive.

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

Parameters2/5

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

Schema description coverage is 0% and the two parameters (an untyped 'params' object and a 'params_json' string) carry no documentation whatsoever. The description hints that a pipeline execution must be identified but never says which parameter supplies it or in what format, leaving the primary input unexplained.

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 (Retrieves), resource (change request details), and scope (for a specified orchestration pipeline execution), which separates it from generic change tools like get_change_request. It does not, however, contrast itself with close siblings such as get_devops_orchestration_schema or check_devops_change_control, so an agent must infer 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 guidance, no prerequisites, and no mention of alternative tools for related lookups (e.g. get_change_request, get_devops_plan_schema). The only implied usage cue is the phrase 'orchestration pipeline execution', which is not enough to route an agent reliably.

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

servicenow_get_devops_code_schemaGet devops code schemaC
Read-onlyIdempotent

Returns the schema object for a specified code resource.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolIdNo
resourceYes

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered structurally. The description adds nothing beyond that: it does not say what the returned schema object contains, what form the resource identifier takes, or how failures manifest.

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

Conciseness3/5

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

A single front-loaded sentence with no waste, but the brevity here reflects under-specification rather than economy. There is no second sentence doing the necessary work.

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

Completeness2/5

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

With no output schema, no parameter documentation, and no usage guidance, the definition is too thin for a tool whose result shape is its entire purpose. An agent cannot predict what it will receive or how to supply the required resource identifier.

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

Parameters2/5

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

Schema description coverage is 0%, so both parameters are undocumented in the schema. The description hints that 'resource' names a code resource but gives no format, expected values, or scope, and the optional 'toolId' parameter is never mentioned at all. With low coverage the description was required to compensate and does not.

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

Purpose3/5

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

The description states a specific verb and object ('Returns the schema object'), which is clearer than a tautology, but 'code resource' is left undefined and the description never distinguishes this tool from close siblings like servicenow_get_devops_orchestration_schema and servicenow_get_devops_plan_schema. An agent cannot tell from the text which schema 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 Guidelines2/5

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

There is no statement of when to use this tool, what preconditions apply, or which sibling to use instead when a different schema is needed. The agent is left to infer everything from the name alone.

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

servicenow_get_devops_onboarding_statusGet devops onboarding statusC
Read-onlyIdempotent

Returns the current status of the specified onboarding event.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds essentially nothing beyond that: no auth needs, no freshness/caching behavior, no note on what 'onboarding event' identifiers are accepted.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. It is efficient, though its brevity reflects under-specification rather than economy of a rich definition.

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?

No output schema exists, so the description could carry return-value meaning, but it only says 'current status' without shape. Combined with zero parameter coverage for a generic params wrapper, the definition leaves the agent unable to call it correctly.

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

Parameters2/5

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

Schema coverage is 0% and both parameters (params, params_json) are opaque additionalProperties wrappers. The description references a 'specified onboarding event' but never explains how to specify it, so the agent cannot map that phrase to either parameter.

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 (Returns) and resource (current status of an onboarding event), so an agent knows what it does. However, it does not differentiate from siblings like servicenow_get_devops_change_info or servicenow_check_devops_change_control, leaving the 'devops onboarding' scope ambiguous.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites, and no mention of alternatives. The agent must guess whether this is for polling deploy pipelines, plugin onboarding, or artifact registration among many devops siblings.

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

servicenow_get_devops_orchestration_schemaGet devops orchestration schemaC
Read-onlyIdempotent

Returns the schema object for a specified orchestration resource.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolIdNo
resourceYes

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds nothing behavioral beyond that – no mention of what the returned schema contains, valid resource values, or any auth/scope requirements.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. Efficient, though its brevity is partly the cause of the missing detail rather than a virtue of tight writing.

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

Completeness2/5

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

There is no output schema, so the description should clarify the shape or purpose of the returned schema object; instead it merely restates the tool name. Combined with 0% parameter coverage and no sibling differentiation, the definition is not sufficient for confident invocation.

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

Parameters2/5

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

Schema description coverage is 0% for two parameters, including the required 'resource' and the optional 'toolId'. The description does not explain what a 'resource' identifier looks like or what 'toolId' is used for, so it fails to compensate for the documentation gap.

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 (Returns) and resource (schema object for a specified orchestration resource), which is clear in isolation. However, it does not distinguish itself from the near-identical siblings get_devops_code_schema and get_devops_plan_schema, leaving the agent to infer the 'orchestration' vs 'code' vs 'plan' 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 guidance on when to use this tool versus the sibling schema tools (code/plan schemas), no prerequisites, and no exclusions. The agent receives no routing signal beyond the name.

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

servicenow_get_devops_plan_schemaGet devops plan schemaC
Read-onlyIdempotent

Returns the schema object for a specific plan.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond that: it doesn't say how a plan is identified, what the returned schema object contains, or whether any permission is needed.

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

Conciseness4/5

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

A single front-loaded sentence with no filler. It is efficient, though the brevity edges toward under-specification given the undocumented parameters.

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?

No output schema exists, so the description carries the burden of explaining the returned value, and it does not. Combined with zero parameter documentation and no usage guidance, an agent has too little to invoke this correctly.

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

Parameters2/5

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

Schema description coverage is 0% for both params ('params' is an untyped anyOf with additionalProperties, and 'params_json' is an opaque string). The description does not compensate — it never explains that a plan identifier must be passed or in what form, leaving the agent to guess the call shape.

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 ('Returns the schema object') plus scope ('for a specific plan'), so an agent knows this is a read of a schema definition. However it gives no differentiation from close siblings in the same family such as servicenow_get_devops_code_schema and servicenow_get_devops_orchestration_schema.

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 when-to-use guidance, no stated prerequisites, and no routing to the sibling schema tools. It never explains when an agent should fetch a plan schema rather than a code or orchestration schema.

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

servicenow_get_featured_knowledge_articleGet featured knowledge articleC
Read-onlyIdempotent

Get featured Knowledge Base articles.

:param sysparm_fields: Comma-separated list of field names to include in the response. :type sysparm_fields: str :param sysparm_limit: Maximum number of records to return. :type sysparm_limit: int :param sysparm_offset: Number of records to skip before starting the retrieval. :type sysparm_offset: int :param kb: Comma-separated list of knowledge base sys_ids from the Knowledge Bases [kb_knowledge_base] table to restrict results to. :type kb: str :param language: List of comma-separated languages in two-letter ISO 639-1 language code format to restrict results to. Alternatively type 'all' to search in all valid installed languages on an instance. :type language: str

:return: Response containing list of parsed Pydantic models with information about the retrieved records. :rtype: Response

:raises ParameterError: If input parameters are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
textSearchNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
article_sys_idNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
attachment_sys_idNo
sysparm_search_idNo
sysparm_search_rankNo
sysparm_update_viewNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds only that it returns 'parsed Pydantic models' and raises ParameterError on bad input – generic and with no pagination or rate-limit context. It does not contradict the annotations.

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

Conciseness3/5

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

The purpose sentence is front-loaded and the Sphinx-style parameter block is structured, but the block includes parameters absent from the schema, which is wasted and inaccurate content rather than earned concision.

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 12-parameter, zero-coverage tool with no output schema and no usage guidance, the description is far too thin. It neither documents the majority of parameters nor explains how results are paged or how to select among the sibling article-retrieval tools.

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

Parameters2/5

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

Schema description coverage is 0% across 12 parameters, so the description must carry the load, but it documents only 5 fields. Worse, two documented fields (kb, language) do not exist in the input schema, while nine real parameters (textSearch, sysparm_query, article_sys_id, api_parameters, name_value_pairs, attachment_sys_id, sysparm_search_id, sysparm_search_rank, sysparm_update_view) are undocumented. The partial and misaligned coverage makes it misleading rather than merely incomplete.

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

Purpose4/5

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

The description states a specific verb and resource: 'Get featured Knowledge Base articles.' It is clear what the tool does, but it never differentiates itself from close siblings like servicenow_get_knowledge_articles or servicenow_get_most_viewed_knowledge_articles, and 'featured' is left undefined. The plural 'articles' also conflicts slightly with the singular tool name.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives. Given three sibling knowledge-article retrieval tools, an agent gets no signal for choosing this one over them.

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

servicenow_get_flow_metadataGet flow metadataC
Read-onlyIdempotent

Fetch rich metadata for any flow/subflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
flow_sys_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered without the description's help. The description adds only the scope detail that both flows and subflows are supported; it says nothing about permissions, payload size, or failure behavior, so it neither adds much nor contradicts the annotations.

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

Conciseness4/5

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

A single front-loaded sentence with zero filler, which is well structured. It is arguably too terse given how little else is documented, but there is no wasted language.

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?

An output schema exists, so return values need not be described, but the description still omits what 'rich metadata' comprises, how to obtain a flow_sys_id, and any usage context. For a tool in a large ambiguous sibling namespace, this is insufficient.

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

Parameters2/5

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

The single required parameter flow_sys_id has 0% schema description coverage, and the description never mentions it or its expected format. With one undocumented parameter and no compensating text, the agent gets no help beyond the self-explanatory parameter name.

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 clear verb (Fetch) and resource (metadata for flow/subflow), and the scope note 'any flow/subflow' is meaningful. It does not, however, distinguish itself from any sibling or clarify what kind of metadata is returned versus other flow-related tools like servicenow_workflow_to_mermaid.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the large sibling set. An agent must infer entirely from the name that this is the tool for inspecting flow definitions.

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

servicenow_get_hr_profileGet hr profileD
Read-onlyIdempotent

Invoke the get_hr_profile operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
userNo
sys_idNo

TDQS

D1.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered without the description. The description adds no behavioral context such as auth requirements, what an HR profile contains, or what happens when both identifiers are omitted.

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

Conciseness2/5

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

It is a single short sentence, which is technically concise, but the brevity stems from under-specification rather than from disciplined editing. The one sentence it does contain carries no informational value.

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

Completeness1/5

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

For a lookup tool with no output schema, two undocumented identifier parameters, and no required parameters, the description should explain identity resolution and return shape. It explains neither, leaving the agent unable to determine how to form a valid call.

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

Parameters1/5

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

Schema description coverage is 0% for both parameters, and the description supplies no meaning for 'user' versus 'sys_id' or how they interact. With two undocumented, optional, mutually ambiguous identifier parameters, the description fails to compensate for the schema gap.

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

Purpose2/5

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

The description 'Invoke the get_hr_profile operation' is a tautology that restates the tool name and title without adding a verb-object statement of what is actually retrieved or from where. An agent learns nothing beyond what the name already encodes, and nothing distinguishes it from the roughly 100 sibling tools.

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

Usage Guidelines2/5

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

There is no guidance on when to call this tool, when not to, or which alternatives exist (e.g. generic table/record readers like servicenow_get_table_record). The agent is given no selection criteria at all.

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

servicenow_get_import_setGet import setB
Read-onlyIdempotent

Get details of a specific import set record.

:param table: The name of the table associated with the import set. :type table: str :param import_set_sys_id: The sys_id of the import set record. :type import_set_sys_id: str

:return: Response containing parsed Pydantic model with information about the import set record. :rtype: Response

:raises ParameterError: If import_set_sys_id or table is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
tableNo
import_set_sys_idNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds one genuinely new behavioral fact: a ParameterError is raised if import_set_sys_id or table is missing. It says nothing about return contents or latency, so it is a modest add-on rather than rich context.

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

Conciseness3/5

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

The core purpose is front-loaded in one clean sentence, but the trailing Sphinx boilerplate (:param:/:type:/:return:/:raises:) adds verbosity, and the :type: lines merely restate str types already visible in the schema. The :return: line does earn its place by describing the response.

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 3-parameter tool with 0% schema coverage and no output schema, the description covers two of three parameters plus the return type and the error case, which is reasonable. The unexplained 'data' parameter and the absence of any pagination or response-shape detail keep it from being complete.

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 0%, so the description must carry parameter meaning. It documents table and import_set_sys_id with semantic intent and types, but leaves the third parameter 'data' entirely undocumented in both schema and description. Partial compensation for the coverage gap.

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 with scope: 'Get details of a specific import set record.' An agent can tell this is a read of one import set. It does not, however, distinguish itself from related siblings such as servicenow_insert_import_set or servicenow_get_table_record.

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

Usage Guidelines2/5

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

No when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as servicenow_insert_import_set or servicenow_get_table_record. The only conditional content is the :raises: clause, which is error behavior rather than usage guidance.

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

servicenow_get_incidentGet incidentC
Read-onlyIdempotent

Retrieve details of a specific incident record.

:param incident_id: The sys_id of the incident record. :type incident_id: str

:return: Response containing list of parsed Pydantic models with information about the retrieved records. :rtype: Response

:raises MissingParameterError: If table is not provided. :raises ParameterError: If input parameters are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
incident_idNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds return type and two documented error paths (MissingParameterError, ParameterError), but the error text about 'table' is boilerplate that contradicts the incident-specific nature and the listed return ('list of parsed Pydantic models') is vague for a single-record fetch.

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

Conciseness3/5

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

The first sentence is well front-loaded, but the docstring block spends lines on a ':raises MissingParameterError: If table is not provided' clause that is irrelevant to an incident tool and doubles as noise. Mixed structured/unstructured boilerplate without clear value.

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

Completeness2/5

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

A 15-parameter tool with no output schema and no parameter documentation is substantially under-described; the description covers roughly one parameter and a rough return type. It falls short of what an agent needs to invoke this correctly, especially around query/field-filtering parameters.

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

Parameters2/5

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

Schema coverage is 0% across 15 parameters, so the description must compensate and largely does not. It documents only incident_id (as the sys_id) and ignores every sysparm_* control (fields, limit, display_value, exclude_reference_link, etc.), leaving the agent to guess at pagination and shaping behavior.

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: 'Retrieve details of a specific incident record.' The word 'specific' plus the singular name implicitly separates it from the sibling servicenow_get_incidents, though it never names that sibling. Clear purpose, but no explicit differentiation.

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

Usage Guidelines2/5

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

No when-to-use guidance, no statement of when to prefer servicenow_get_incidents or servicenow_get_table_record instead, and no prerequisites or auth context. The agent must infer the single-record retrieval scenario entirely from the name.

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

servicenow_get_incidentsGet incidentsB
Read-onlyIdempotent

Retrieve details of incident records.

:param name_value_pairs: Dictionary of name-value pairs for filtering records. :type name_value_pairs: str :param sysparm_display_value: Display values for reference fields ('True', 'False', or 'all'). :type sysparm_display_value: str :param sysparm_exclude_reference_link: Exclude reference links in the response. :type sysparm_exclude_reference_link: bool :param sysparm_fields: Comma-separated list of field names to include in the response. :type sysparm_fields: str :param sysparm_limit: Maximum number of records to return. Defaults to DEFAULT_INCIDENT_LIMIT when omitted; see Response.truncated. :type sysparm_limit: int :param sysparm_no_count: Do not include the total number of records in the response. :type sysparm_no_count: bool :param sysparm_offset: Number of records to skip before starting the retrieval. :type sysparm_offset: int :param sysparm_query: Encoded query string for filtering records. :type sysparm_query: str :param sysparm_query_category: Category to which the query belongs. :type sysparm_query_category: str :param sysparm_query_no_domain: Exclude records based on domain separation. :type sysparm_query_no_domain: bool :param sysparm_suppress_pagination_header: Suppress pagination headers in the response. :type sysparm_suppress_pagination_header: bool :param sysparm_view: Display style ('desktop', 'mobile', or 'both'). :type sysparm_view: str

:return: Response containing list of parsed Pydantic models with information about the retrieved records, plus truncated/applied_limit/next_offset metadata disclosing whether a default cap was applied and how to page past it. :rtype: Response

:raises MissingParameterError: If table is not provided. :raises ParameterError: If input parameters are invalid or an unknown argument is passed.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
incident_idNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower. The description adds genuinely useful behavior: a default cap (DEFAULT_INCIDENT_LIMIT), Response.truncated/applied_limit/next_offset paging metadata, and raised error types. However, the ':raises MissingParameterError: If table is not provided' line is leftover template noise that references a parameter that doesn't exist in this tool's schema, which is misleading rather than informative.

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

Conciseness3/5

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

The core purpose is front-loaded in one clean sentence, but the body is a raw docstring dump where every ':type' line redundantly restates type information already present in the input schema, and the trailing ':raises table' error is vestigial. Roughly a third of the text is waste.

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 15-parameter, no-output-schema read tool, the description is nearly self-sufficient: it documents the return shape (list of records plus truncated/applied_limit/next_offset), the default-limit behavior, and most parameters. The missing pieces are the three undocumented parameters and the erroneous 'table' error reference.

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?

With 0% schema description coverage, the description carries the full burden and mostly delivers: 12 of 15 parameters get Sphinx docs, including non-obvious detail the schema lacks (sysparm_display_value accepts 'True'/'False'/'all'; sysparm_view accepts 'desktop'/'mobile'/'both'). The gaps are the undocumented data, incident_id, and api_parameters parameters, and several entries merely restate the parameter name.

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 clear verb+resource: 'Retrieve details of incident records.' An agent knows it's a read operation on incidents, but the phrasing is ambiguous about whether it returns a single record or a list, and it never differentiates itself from the sibling servicenow_get_incident (singular) which reads very similarly.

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

Usage Guidelines2/5

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

There is no guidance on when to choose this tool over servicenow_get_incident, servicenow_get_table_record, or the write-side servicenow_ingest_incidents/servicenow_create_incident. The description jumps straight into Sphinx parameter docs without ever stating the selection conditions.

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

servicenow_get_knowledge_articleGet knowledge articleC
Read-onlyIdempotent

Get Knowledge Base article.

:param article_sys_id: The sys_id of the knowledge article. :type article_sys_id: str :param filter: Encoded query to use to filter the result set. :type filter: str :param sysparm_fields: Comma-separated list of field names to include in the response. :type sysparm_fields: str :param sysparm_limit: Maximum number of records to return. :type sysparm_limit: int :param sysparm_search_id: Unique identifier of search that returned this article :type sysparm_search_id: str :param sysparm_search_rank: Article search rank by click-rate :type sysparm_search_rank: str :param sysparm_update_view: Update view count and record an entry for the article :type sysparm_update_view: bool :param sysparm_offset: Number of records to skip before starting the retrieval. :type sysparm_offset: int :param sysparm_query: Encoded query string for filtering records. :type sysparm_query: str :param sysparm_query_category: Category to which the query belongs. :type sysparm_query_category: str :param kb: Comma-separated list of knowledge base sys_ids from the Knowledge Bases [kb_knowledge_base] table to restrict results to. :type kb: str :param language: List of comma-separated languages in two-letter ISO 639-1 language code format to restrict results to. Alternatively type 'all' to search in all valid installed languages on an instance. :type language: str

:return: Response containing parsed Pydantic model with information about the retrieved record. :rtype: Response

:raises MissingParameterError: If article_sys_id is not provided. :raises ParameterError: If input parameters are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
textSearchNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
article_sys_idNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
attachment_sys_idNo
sysparm_search_idNo
sysparm_search_rankNo
sysparm_update_viewNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnly/idempotent/destructive/openWorld, so the safety bar is lower; the description adds error conditions (MissingParameterError, ParameterError) and a note that sysparm_update_view increments view counts and records an entry — a real server-side side effect worth knowing on a readOnly-declared tool. It does not explain pagination behavior, result ordering, or how sysparm_search_id/search_rank must be paired, and the return statement ("parsed Pydantic model with information about the retrieved record") is boilerplate.

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

Conciseness2/5

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

The body is a raw Sphinx docstring dump: every parameter is followed by a redundant :type line that merely restates the schema types. It is not front-loaded with the operating facts an agent needs (single-record fetch vs list query), so the reader must parse the whole block to extract two or three useful sentences.

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

Completeness2/5

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

With 12 parameters, zero schema descriptions, no output schema, and no required fields, this description should carry most of the burden and does not. The description/schema parameter sets diverge by four properties in each direction, pagination and result-shape behavior are unexplained, and the central ambiguity of single-record retrieval versus filtered listing is left unresolved.

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 0%, so the description is the only parameter documentation and it does define meanings for 8 schema properties. However, it omits textSearch, api_parameters, name_value_pairs, and attachment_sys_id entirely, documents four parameters that do not exist in the schema (filter, sysparm_query_category, kb, language), and gives sysparm_search_rank as str where the schema types it as integer — so compensation is partial and partly misleading.

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

Purpose3/5

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

"Get Knowledge Base article" gives a verb and resource, but it never resolves whether this retrieves a single article by sys_id or a filtered set — the parameter list mixes a unique identifier with limit/offset/filter/kb/language, which are list-scan controls. It also gives no differentiation from siblings such as servicenow_get_knowledge_articles, servicenow_get_featured_knowledge_article, or servicenow_get_knowledge_article_attachment, so the agent must infer the distinction from the tool name alone.

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?

There is no explicit when-to-use, when-not-to-use, or named alternative, and no prerequisite information (the openWorldHint suggests remote/auth context that is never stated). The one genuinely useful usage signal is the :raises MissingParameterError clause, which tells the agent article_sys_id is effectively required despite the schema marking every property optional. Guidance is implied by the parameter list rather than stated.

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

servicenow_get_knowledge_article_attachmentGet knowledge article attachmentC
Read-onlyIdempotent

Get Knowledge Base article attachment.

:param article_sys_id: The Article Sys ID to search attachments for :type article_sys_id: str :param attachment_sys_id: The Attachment Sys ID :type attachment_sys_id: str

:return: Response containing parsed Pydantic model with information about the retrieved attachment. :rtype: Response

:raises MissingParameterError: If article_sys_id or attachment_sys_id is not provided. :raises ParameterError: If input parameters are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
textSearchNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
article_sys_idNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
attachment_sys_idNo
sysparm_search_idNo
sysparm_search_rankNo
sysparm_update_viewNo

TDQS

C2.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and non-destructive, so safety is covered. The description adds error behavior (MissingParameterError, ParameterError), which is real value beyond annotations, but it says nothing about pagination, result shape, or why these two Sys IDs are needed together.

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

Conciseness3/5

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

Sized appropriately for a docstring, but it is Sphinx boilerplate (:param/:type/:return/:raises) rather than front-loaded prose, and the ':return' line spends words on a parsed Pydantic model that conveys no actionable 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?

For a 12-parameter tool with no output schema, the description leaves most parameters undocumented and gives no sense of filtering, pagination, or what the returned attachment contains. It also claims required-parameter errors even though the schema marks nothing required, leaving the required-argument story ambiguous.

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

Parameters2/5

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

Schema description coverage is 0% across 12 parameters, so the description carries the full burden, yet it documents only article_sys_id and attachment_sys_id. The ten remaining parameters (textSearch, sysparm_limit, sysparm_query, sysparm_offset, sysparm_fields, name_value_pairs, sysparm_search_id, sysparm_search_rank, sysparm_update_view, api_parameters) are left completely unexplained.

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

Purpose3/5

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

The description states a clear verb+resource ('Get Knowledge Base article attachment'), but it essentially restates the title and adds no differentiation from close siblings such as servicenow_get_attachment or servicenow_get_knowledge_article. An agent can infer the purpose but gets no help distinguishing which attachment-retrieval 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 Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternative tools (e.g., get_attachment for non-KB attachments). The reader must infer the calling context entirely from the name.

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

servicenow_get_knowledge_articlesGet knowledge articlesC
Read-onlyIdempotent

Get all Knowledge Base articles.

:param filter: Encoded query to use to filter the result set. :type filter: str :param sysparm_fields: Comma-separated list of field names to include in the response. :type sysparm_fields: str :param sysparm_limit: Maximum number of records to return. :type sysparm_limit: int :param sysparm_offset: Number of records to skip before starting the retrieval. :type sysparm_offset: int :param sysparm_query: Encoded query string for filtering records. :type sysparm_query: str :param sysparm_query_category: Category to which the query belongs. :type sysparm_query_category: str :param kb: Comma-separated list of knowledge base sys_ids from the Knowledge Bases [kb_knowledge_base] table to restrict results to. :type kb: str :param language: List of comma-separated languages in two-letter ISO 639-1 language code format to restrict results to. Alternatively type 'all' to search in all valid installed languages on an instance. :type language: str

:return: Response containing list of parsed Pydantic models with information about the retrieved records. :rtype: Response

:raises MissingParameterError: If table is not provided. :raises ParameterError: If input parameters are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
textSearchNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
article_sys_idNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
attachment_sys_idNo
sysparm_search_idNo
sysparm_search_rankNo
sysparm_update_viewNo

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so safety is covered. The description adds only a return type and an error section, and that error section is stale/misleading: it claims "raises MissingParameterError: If table is not provided" even though no table parameter exists and the schema has zero required parameters. The misleading error claim negates the small value of the return-type note.

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

Conciseness3/5

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

The one-line summary is front-loaded and the docstring param list is scannable, but the paired ":param" / ":type" lines are redundant boilerplate that restates types already implied by the schema. Structure is conventional and reasonably sized, yet much of the content is stale rather than wasteful-per-se.

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 12-parameter tool with no output schema and 0% schema coverage, the description should be the primary contract, but it covers roughly a third of the real parameters and misstates the error behavior. Only the brief return-type note is genuinely additive; an agent cannot correctly construct a call from this definition alone.

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

Parameters1/5

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

Schema description coverage is 0%, so the description carries the full burden — yet it documents parameters (filter, sysparm_query_category, kb, language) that do not exist in the schema, and omits eight real parameters (textSearch, api_parameters, article_sys_id, name_value_pairs, attachment_sys_id, sysparm_search_id, sysparm_search_rank, sysparm_update_view). Since the schema forbids additional properties, an agent following this description would attempt calls that fail outright.

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

Purpose3/5

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

"Get all Knowledge Base articles" gives a clear verb and resource, but "all" conflicts with the presence of sysparm_limit/sysparm_offset, and it never distinguishes itself from close siblings like servicenow_get_knowledge_article, servicenow_get_featured_knowledge_article, or servicenow_get_most_viewed_knowledge_articles. The purpose is understandable but not discriminating.

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

Usage Guidelines2/5

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

There is no when-to-use guidance whatsoever: nothing says when to prefer this plural list tool over the singular servicenow_get_knowledge_article or the curated most-viewed/featured variants. No prerequisites, no note about whether filtering is required or optional.

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

servicenow_get_most_viewed_knowledge_articlesGet most viewed knowledge articlesC
Read-onlyIdempotent

Get most viewed Knowledge Base articles.

:param sysparm_fields: Comma-separated list of field names to include in the response. :type sysparm_fields: str :param sysparm_limit: Maximum number of records to return. :type sysparm_limit: int :param sysparm_offset: Number of records to skip before starting the retrieval. :type sysparm_offset: int :param kb: Comma-separated list of knowledge base sys_ids from the Knowledge Bases [kb_knowledge_base] table to restrict results to. :type kb: str :param language: List of comma-separated languages in two-letter ISO 639-1 language code format to restrict results to. Alternatively type 'all' to search in all valid installed languages on an instance. :type language: str

:return: Response containing list of parsed Pydantic models with information about the retrieved records. :rtype: Response

:raises ParameterError: If input parameters are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
textSearchNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
article_sys_idNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
attachment_sys_idNo
sysparm_search_idNo
sysparm_search_rankNo
sysparm_update_viewNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered externally. The description adds the return shape ("list of parsed Pydantic models") and the ParameterError raise condition, which is useful, but says nothing about ordering semantics, pagination defaults, or view-count freshness beyond the title.

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

Conciseness3/5

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

The docstring is front-loaded with the purpose and organizes parameters cleanly, but a third of the parameter block documents fields absent from the schema, which is dead weight and actively misleading rather than concise.

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 12-parameter tool with no output schema and no annotations covering data shape, the description leaves most parameters unexplained and describes two that the schema does not accept. An agent cannot reliably construct a valid call from this description plus schema alone.

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

Parameters2/5

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

Schema description coverage is 0% across 12 parameters, so the description must compensate, and it only covers five (sysparm_fields, sysparm_limit, sysparm_offset, kb, language). Worse, kb and language are documented but do not exist in the input schema, while seven real schema parameters (textSearch, sysparm_query, api_parameters, article_sys_id, name_value_pairs, attachment_sys_id, sysparm_search_id, sysparm_search_rank, sysparm_update_view) are undocumented anywhere.

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

Purpose4/5

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

States a specific verb and resource ("Get most viewed Knowledge Base articles"), and the "most viewed" qualifier distinguishes it from generic siblings like get_knowledge_articles and get_knowledge_article. However, it never explicitly names those siblings or states what makes this ranking different from get_featured_knowledge_article, so differentiation is left to inference.

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

Usage Guidelines2/5

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

There is no when-to-use guidance at all. With siblings such as servicenow_get_knowledge_articles, servicenow_get_knowledge_article, and servicenow_get_featured_knowledge_article in the same family, an agent gets no criteria for choosing this tool over them.

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

servicenow_get_problemGet problemB
Read-onlyIdempotent

Retrieve details of a specific problem record.

:param problem_id: The sys_id of the problem record. :type problem_id: str

:return: Response containing parsed Pydantic model with information about the retrieved record. :rtype: Response

:raises MissingParameterError: If problem_id is not provided. :raises ParameterError: If input parameters are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
problem_idNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety profile is covered. The description adds useful behavior: returns a parsed Pydantic model and raises MissingParameterError or ParameterError. However, that error claim sits in tension with a schema where problem_id defaults to null and no parameter is required, which is exactly the kind of ambiguity a behavioral note should resolve.

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

Conciseness3/5

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

The purpose sentence is front-loaded and short, but the body is raw Sphinx field markup with low-value lines such as ":rtype: Response" and ":type problem_id: str" that duplicate the schema and add no agent-relevant 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?

Hmm — no output schema exists, so the description is right to describe the return shape (a parsed Pydantic model), and it covers the primary identifier and failure modes. But with 15 parameters at 0% schema coverage, an agent has no idea what the remaining query/view/pagination parameters do or whether omitting problem_id is legal.

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

Parameters2/5

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

Schema description coverage is 0% across 15 parameters, so the description carries the full burden, yet it only explains problem_id (typed as str here, while the schema allows integer or string). The fourteen sysparm_*, api_parameters, data, and name_value_pairs parameters get no explanation at all — including likely-useful knobs like sysparm_fields, sysparm_display_value, and sysparm_query.

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 first sentence gives a specific verb and resource ("Retrieve details of a specific problem record"), and "specific" signals single-record lookup versus the plural sibling servicenow_get_problems. It stops short of naming that sibling, so the differentiation is implied rather than explicit.

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 "specific problem record" plus the problem_id param — fetch one record when you have its sys_id. There is no explicit when-to-use/when-not or pointer to servicenow_get_problems for listing/searching, and no prerequisites or permissions noted.

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

servicenow_get_problemsGet problemsB
Read-onlyIdempotent

Retrieve details of problem records.

:param name_value_pairs: Dictionary of name-value pairs for filtering records. :type name_value_pairs: str :param sysparm_display_value: Display values for reference fields ('True', 'False', or 'all'). :type sysparm_display_value: str :param sysparm_exclude_reference_link: Exclude reference links in the response. :type sysparm_exclude_reference_link: bool :param sysparm_fields: Comma-separated list of field names to include in the response. :type sysparm_fields: str :param sysparm_limit: Maximum number of records to return. :type sysparm_limit: int :param sysparm_no_count: Do not include the total number of records in the response. :type sysparm_no_count: bool :param sysparm_offset: Number of records to skip before starting the retrieval. :type sysparm_offset: int :param sysparm_query: Encoded query string for filtering records. :type sysparm_query: str :param sysparm_query_category: Category to which the query belongs. :type sysparm_query_category: str :param sysparm_query_no_domain: Exclude records based on domain separation. :type sysparm_query_no_domain: bool :param sysparm_suppress_pagination_header: Suppress pagination headers in the response. :type sysparm_suppress_pagination_header: bool :param sysparm_view: Display style ('desktop', 'mobile', or 'both'). :type sysparm_view: str

:return: Response containing list of parsed Pydantic models with information about the retrieved records. :rtype: Response

:raises ParameterError: If input parameters are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
problem_idNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is fully covered. The description adds that it raises ParameterError on invalid input and returns parsed Pydantic models, which is modest additional context. It does not discuss pagination behavior despite pagination-related params, so added value is limited.

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

Conciseness3/5

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

The purpose sentence is front-loaded, which is good, but the body is a long type-annotated docstring param dump. Given no schema descriptions exist, this content is largely functional rather than filler, but the :type/:param repetition adds bulk without much semantic depth.

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 15-parameter read tool with no output schema, the description should do more: it never explains the undocumented problem_id/data/api_parameters, gives only a one-line return statement, and offers no pagination guidance. It is minimally adequate but leaves real gaps.

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 0%, so the description must carry the load, and it does document ~12 of 15 params with intent and types. But three schema params (data, problem_id, api_parameters) are undocumented anywhere, and many documented descriptions merely restate the parameter name (e.g., sysparm_limit 'Maximum number of records to return'). Partial compensation warrants a 3.

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+resource ('Retrieve details of problem records'), which is clear on its own. However, it does not distinguish itself from the very similar sibling servicenow_get_problem (singular), nor does it clarify that this returns a collection rather than a single record. Clear, but missing sibling differentiation keeps it from 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 Guidelines2/5

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

There is no guidance on when to use this tool versus servicenow_get_problem, create_problem, delete_problem, or the generic get_table_record/get_table tools. No prerequisites or filtering context is implied beyond the param docstring. Effectively no usage guidance.

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

servicenow_get_product_inventoryGet product inventoryC
Read-onlyIdempotent

Retrieves a list of all product inventories.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
fieldsNo
offsetNo
statusNo
customerNo
place_idNo

TDQS

C2.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds no behavioral context beyond annotations—no pagination behavior, no rate limits, no auth requirements, and no indication of how filtering or field selection affects the result.

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

Conciseness3/5

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

The single sentence is front-loaded and free of verbosity, which is a positive. However, it is so thin that it fails to convey necessary context for a six-parameter tool, making it under-specified rather than genuinely concise.

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

Completeness2/5

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

With six undocumented parameters, no output schema, and no schema descriptions, the description is not complete enough for correct invocation. Annotations cover safety, but the description still leaves pagination, filtering, and field selection entirely unexplained.

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

Parameters1/5

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

The schema has 0% description coverage across six parameters (limit, fields, offset, status, customer, place_id), and the description provides no parameter guidance at all. Worse, 'all product inventories' contradicts the existence of filter parameters, leaving the agent unable to infer their purpose or usage.

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

Purpose3/5

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

The description states a clear verb and resource ('Retrieves a list of all product inventories'), but it is nearly a tautology of the tool name and title. It provides no differentiation from siblings (e.g., delete_product_inventory), and the word 'all' is inaccurate given the presence of filter parameters like status, customer, and place_id.

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 when-to-use guidance, prerequisites, or alternatives are mentioned. The agent receives no information about when this tool should be selected over similar retrieval tools or how it relates to sibling operations.

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

servicenow_get_service_qualificationGet service qualificationC
Read-onlyIdempotent

Retrieves a technical qualification request by ID or list all.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds only that the tool can operate without an ID (list-all mode), which is modest extra context and nothing about pagination, filters, or response shape.

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

Conciseness4/5

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

A single short sentence that is front-loaded with the verb and resource and contains no filler. It is efficient, though it is terse to the point of under-specification.

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

Completeness2/5

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

With no output schema, no parameter descriptions, and a generic untyped params object, the description should carry more of the load. It omits pagination behavior, filter semantics, and the shape of the returned qualification request, so an agent cannot call it confidently beyond the trivial case.

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

Parameters2/5

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

Schema description coverage is 0% and the two parameters ('params', 'params_json') are opaque generic blobs. The description mentions retrieval 'by ID', which gestures at the needed input, but never maps it to a parameter name or explains the params/params_json relationship, leaving the coverage gap largely unfilled.

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 ('Retrieves a technical qualification request') and even names the two operating modes (by ID or list all). It does not differentiate from the closely named sibling servicenow_check_service_qualification or from servicenow_process_service_qualification_result, so an agent must guess which one it wants.

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

Usage Guidelines2/5

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

The phrase 'by ID or list all' hints at two modes but never says when to prefer this tool over check_service_qualification or process_service_qualification_result, and gives no prerequisites or exclusions. No explicit when-to-use guidance is present.

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

servicenow_get_standard_change_request_modelGet standard change request modelC
Read-onlyIdempotent

Retrieve details of a standard change request model.

:param model_sys_id: Sys ID of the standard change request model. :type model_sys_id: str or None

:return: Response containing parsed Pydantic model with information about the standard change request model. :rtype: Response

:raises MissingParameterError: If model_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint=true), so that burden is lifted. The description adds value by disclosing error behavior (MissingParameterError when model_sys_id is absent, ParameterError on bad params/JSON) and that the return is a parsed Pydantic model. It still says nothing about pagination, the meaning of the 'Response' wrapper, or why a read tool takes 22 inputs.

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

Conciseness3/5

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

The docstring structure (param/return/raises) is readable and reasonably sized, but the prose is boilerplate-heavy while omitting anything about the vast majority of inputs. It is front-loaded with the purpose, which helps, but it does not earn its space given the schema complexity it ignores.

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

Completeness2/5

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

For a tool with 22 parameters, zero required fields, no output schema, and no parameter-level annotations, the description is far too thin. It never explains how the unrelated-looking IDs interact or what filters apply, so an agent cannot invoke it confidently beyond the single documented argument.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must carry the full load, yet it documents only model_sys_id. The other 21 parameters (task_sys_id, change_request_sys_id, worker_sys_id, sysparm_limit/query/offset, etc.) are unexplained in both schema and description, including several that look unrelated to a 'get model' call.

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 gives a specific verb ('Retrieve') and resource ('standard change request model'), so the core operation is unambiguous. However, it offers no differentiation from closely related siblings such as servicenow_get_change_request_models or servicenow_get_standard_change_request_template, leaving the agent to infer which 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 Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the many change-request siblings. The only inferable usage is 'call this to fetch a model', which is already implied by the name.

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

servicenow_get_standard_change_request_templateGet standard change request templateC
Read-onlyIdempotent

Retrieve details of a standard change request template.

:param template_sys_id: Sys ID of the standard change request template. :type template_sys_id: str or None

:return: Response containing parsed Pydantic model with information about the standard change request template. :rtype: Response

:raises MissingParameterError: If template_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered structurally. The description adds useful error behavior (MissingParameterError if template_sys_id missing, ParameterError on invalid params/deserialization) and notes the return is a parsed Pydantic model. That is meaningful added context, but it discloses nothing about pagination or filtering behavior despite the many query-like params.

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?

Purpose is front-loaded in the first sentence, followed by cleanly structured docstring sections for param, return, and raises. The content is appropriately sized and free of filler, though the docstring formatting is somewhat boilerplate.

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

Completeness2/5

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

With no output schema, no annotations gaps to fill, but 22 undocumented parameters and only one described, the definition is materially incomplete for correct invocation. An agent cannot know what most parameters do or how they interact with this single-resource get.

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

Parameters2/5

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

Schema description coverage is 0% across 22 parameters, so the description carries the full burden. It documents only template_sys_id (and its error if omitted); the other 21 params (state, change_type, text_search, sysparm_query, sysparm_limit, cmdb_ci_sys_ids, etc.) are left entirely unexplained. It does not compensate for the coverage gap.

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+resource: 'Retrieve details of a standard change request template.' Singular 'template' distinguishes it implicitly from the plural list sibling (get_standard_change_request_templates), and from get_standard_change_request_model. However, it does not explicitly name or route against those siblings, 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 Guidelines2/5

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

There is no guidance on when to use this tool versus the very similar get_standard_change_request_templates or get_standard_change_request_model siblings. No prerequisites or exclusions are stated. The only hint is the singular resource name.

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

servicenow_get_standard_change_request_templatesGet standard change request templatesC
Read-onlyIdempotent

Retrieve standard change request templates based on specified parameters.

:param order: Ordering parameter for sorting results. :type order: str or None :param name_value_pairs: Additional name-value pairs for filtering. :type name_value_pairs: str or None :param sysparm_query: Query parameter for filtering results. :type sysparm_query: str or None :param text_search: Text search parameter for searching results. :type text_search: str or None

:return: Response containing list of parsed Pydantic models with information about standard change request templates. :rtype: Response

:raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the safety profile is covered. The description adds the return type (parsed Pydantic model list) and raises ParameterError on invalid parameters or JSON failures, which is useful. However, it omits pagination behavior despite sysparm_limit/sysparm_offset parameters being present.

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

Conciseness2/5

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

The description is a raw docstring with duplicated :param:/:type: lines and a full :return:/:raises: block. Most content restates parameter names and Python types rather than adding selection value, so it is padded without being informative.

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 22-parameter tool with no output schema and no required params, the description covers only a fraction of the parameters and gives no pagination or result-shape guidance. An agent cannot confidently construct the many filter/identity parameters (task_sys_id, cmdb_ci_sys_ids, association_type, etc.) from this.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden, yet it documents only sysparm_query, text_search, and name_value_pairs of the 22 schema parameters (and even cites an 'order' param that does not exist in the schema). The documented ones get only a one-line type restatement, no syntax or format semantics for sysparm_query or name_value_pairs.

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: retrieving standard change request templates. It is clear what the tool returns, but it does not distinguish itself from the singular sibling servicenow_get_standard_change_request_template, leaving the list-vs-single distinction unresolved.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus the singular template getter or the model/template siblings. The only context is a generic 'based on specified parameters', which offers nothing actionable about scenario selection.

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

servicenow_get_statsGet statsD
Read-onlyIdempotent

Invoke the get_stats operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
statsNo
fieldsNo
groupbyNo
table_nameYes

TDQS

D1.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered elsewhere. The description adds nothing on top of that — no mention of aggregation behavior, result shape, or query semantics that would be unique to a stats operation.

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

Conciseness2/5

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

It is a single short sentence, but that brevity is under-specification rather than conciseness — the sentence carries no information beyond the tool's own name.

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

Completeness1/5

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

For a five-parameter tool with no output schema and no parameter documentation, the description should carry the burden of explaining inputs and aggregation behavior. It provides none of that, leaving the agent unable to call the tool correctly.

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

Parameters1/5

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

Schema description coverage is 0% across five parameters (query, stats, fields, groupby, table_name), and the description supplies no meaning for any of them. The unusual anyOf string/boolean typing on 'stats' and the grouping semantics of 'groupby' are entirely unexplained.

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

Purpose2/5

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

"Invoke the get_stats operation" is a tautology that restates the tool name and title without naming a resource, scope, or verb beyond the name itself. It gives no basis for distinguishing this from the many other servicenow_get_* siblings.

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-to-use, or alternative-tool guidance of any kind. An agent has no signal about whether this belongs in a stats/aggregation workflow versus servicenow_get_table, servicenow_api_request, or a table-record tool.

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

servicenow_get_tableGet tableB
Read-onlyIdempotent

Get records from the specified table based on provided parameters.

:param table: The name of the table. :type table: str :param name_value_pairs: Dictionary of name-value pairs for filtering records. :type name_value_pairs: str :param sysparm_display_value: Display values for reference fields ('True', 'False', or 'all'). :type sysparm_display_value: str :param sysparm_exclude_reference_link: Exclude reference links in the response. :type sysparm_exclude_reference_link: bool :param sysparm_fields: Comma-separated list of field names to include in the response. :type sysparm_fields: str :param sysparm_limit: Maximum number of records to return. :type sysparm_limit: int :param sysparm_no_count: Do not include the total number of records in the response. :type sysparm_no_count: bool :param sysparm_offset: Number of records to skip before starting the retrieval. :type sysparm_offset: int :param sysparm_query: Encoded query string for filtering records. :type sysparm_query: str :param sysparm_query_category: Category to which the query belongs. :type sysparm_query_category: str :param sysparm_query_no_domain: Exclude records based on domain separation. :type sysparm_query_no_domain: bool :param sysparm_suppress_pagination_header: Suppress pagination headers in the response. :type sysparm_suppress_pagination_header: bool :param sysparm_view: Display style ('desktop', 'mobile', or 'both'). :type sysparm_view: str

:return: Response containing list of parsed Pydantic models with information about the retrieved records. :rtype: Response

:raises MissingParameterError: If table is not provided. :raises ParameterError: If input parameters are invalid.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
tableNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
table_record_sys_idNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds value beyond that: the return shape (parsed Pydantic models) and the raised exceptions (MissingParameterError, ParameterError). Minor inconsistency: it says MissingParameterError fires when table is absent, yet the schema marks table as optional with a null default.

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

Conciseness3/5

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

The opening purpose sentence is properly front-loaded, but the body is a long Sphinx-style dump where each parameter consumes two lines, and the :type: lines largely restate information already expressed by the JSON schema types. Reasonably organized but with redundant scaffolding.

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 16-parameter query tool with no output schema, the description covers most parameters, the return type, and error behavior, and annotations cover safety. It still omits the role of data/api_parameters/table_record_sys_id and does not clarify how name_value_pairs relates to sysparm_query, leaving meaningful ambiguity for an agent building a query.

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 0%, so the description carries the full burden and does so for 13 of 16 parameters, adding semantic hints beyond bare types (display_value accepts 'True'/'False'/'all', fields is comma-separated, offset skips records, query is an encoded query string). It leaves data, api_parameters, and table_record_sys_id entirely unexplained, so it does not fully close the 0% gap.

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?

"Get records from the specified table" gives a specific verb (get) and resource (table records), and the plural "records" hints at a list rather than the single-record servicenow_get_table_record sibling. However, it never names or distinguishes itself from that close sibling, so an agent must infer the split without help.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no stated prerequisites, and no alternative tools named. With close siblings like servicenow_get_table_record, servicenow_get_cmdb, and servicenow_api_request in the namespace, the absence of routing guidance is a real gap.

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

servicenow_get_table_recordGet table recordC
Read-onlyIdempotent

Get a specific record from the specified table.

:param table: The name of the table. :type table: str :param table_record_sys_id: The sys_id of the record to be retrieved. :type table_record_sys_id: str

:return: Response containing parsed Pydantic model with information about the retrieved record. :rtype: Response

:raises MissingParameterError: If table or table_record_sys_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
tableNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
table_record_sys_idNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description usefully adds that a MissingParameterError is raised when table or table_record_sys_id is absent, plus the return type. It says nothing about pagination, permission requirements, or what happens with the many sysparm_* options, so it is adequate but not rich.

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

Conciseness3/5

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

The purpose sentence is front-loaded, which is good, but the Sphinx docstring boilerplate (:type: lines that duplicate the schema types) adds bulk without adding information. Overall it is only moderately efficient.

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 16-parameter tool with no output schema and no schema descriptions, the description leaves most parameters undocumented and gives no hint about query syntax, field masking, or pagination behavior. An agent calling this tool correctly would have to guess at the semantics of the majority of its inputs.

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

Parameters2/5

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

Schema coverage is 0% across 16 parameters, so the description must compensate — but it documents only 2 of them (table, table_record_sys_id). The 14 sysparm_* / api_parameters / name_value_pairs parameters (pagination, field selection, display value, query filters) are entirely unexplained anywhere. It also contradicts the schema by declaring these two parameters mandatory while the schema marks them nullable with default null.

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

Purpose4/5

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

The description states a specific verb and resource: 'Get a specific record from the specified table.' Combined with the tool name and the sys_id parameter, an agent can distinguish this from siblings like servicenow_get_table (list) and servicenow_add_table_record. However, it never explicitly names or contrasts those siblings, so it falls short of the 5 bar.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no exclusions, and no mention of the obvious alternatives (servicenow_get_table for listing, servicenow_update_table_record for mutation). The only implicit signal is 'a specific record' via sys_id, leaving routing entirely to inference.

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

servicenow_import_repositoryImport repositoryC

Import a repository based on the provided parameters.

:param credential_sys_id: The sys_id of the credential to be used for the import. :type credential_sys_id: str :param mid_server_sys_id: The sys_id of the MID Server to be used for the import. :type mid_server_sys_id: str :param repo_url: The URL of the repository to be imported. :type repo_url: str :param branch_name: The name of the branch to be imported. :type branch_name: str :param auto_upgrade_base_app: Flag indicating whether to auto-upgrade the base app. :type auto_upgrade_base_app: bool

:return: Response containing parsed Pydantic model with information about the repository import. :rtype: Response

:raises MissingParameterError: If repo_url is not provided. :raises ParameterError: If auto_upgrade_base_app is not a boolean.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.6/5.0
Behavior3/5

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

Annotations already declare readOnly=false, destructive=false, idempotent=false and openWorld=true. The description adds real value beyond that by disclosing the raised exceptions (MissingParameterError when repo_url is absent, ParameterError for a non-boolean auto_upgrade_base_app) and the return type. It still omits auth/permission requirements and any side effects of the import.

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

Conciseness3/5

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

The docstring-style structure with param/return/raises sections is easy to scan and front-loaded with the verb. However, the opening sentence carries filler and the bulk is a partial param list rather than prioritized guidance.

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 43-parameter tool with no output schema and zero schema description coverage, the definition is markedly incomplete. Most parameters are undocumented and there is no guidance on how parameters interact or which combinations are valid.

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

Parameters2/5

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

Schema description coverage is 0% across 43 parameters, so the description must carry the burden. It documents only five (credential_sys_id, mid_server_sys_id, repo_url, branch_name, auto_upgrade_base_app), leaving roughly 38 parameters — including result_id, scan_type, update_set_*, and the various _sys_id fields — completely undescribed.

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

Purpose3/5

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

States a clear verb+resource ('Import a repository'), but the phrase 'based on the provided parameters' is filler. It gives no differentiation from siblings such as servicenow_app_repo_install, servicenow_app_repo_publish, or servicenow_apply_remote_source_control_changes, so an agent cannot route among them from this text.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool, when not to, or which alternative to prefer. The only conditional guidance is buried in the error clauses, which describe failure modes rather than usage context.

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

servicenow_ingest_cmdb_dataIngest cmdb dataC

Inserts records into the Import Set table associated with the data source.

:param data_source_sys_id: Sys_id of the data source record. :type data_source_sys_id: str :param records: Array of objects to ingest. :type records: list

:return: Response containing ingestion result. :rtype: Response

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
recordsNo
data_source_sys_idNo

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true and destructiveHint=false, so the mutation and non-idempotent nature is covered. The description adds little beyond this: it does not explain the staging/transient nature of import set tables, duplicate handling, or what a successful ingestion actually commits, and the ':return:' line is a boilerplate restatement.

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

Conciseness3/5

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

The docstring is short and the core purpose is front-loaded, but the :type:/:rtype: lines largely duplicate what the JSON schema already expresses as types, so some of the text does not earn its place. Formatting is the RST docstring convention rather than agent-oriented prose.

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

Completeness2/5

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

A mutation tool with no output schema and 0% schema coverage needs the description to explain inputs and outcomes. It omits one parameter entirely and describes the return only as 'Response containing ingestion result', which tells an agent nothing about success/failure shape or whether records are staged versus committed.

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?

With 0% schema description coverage the description must carry the load. It documents two of three parameters meaningfully ('sys_id of the data source record', 'array of objects to ingest') but leaves the 'data' parameter entirely undocumented. Partial compensation for a fully undocumented schema.

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

Purpose4/5

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

States a specific verb (inserts) and resource (Import Set table) with the additional qualifier that the table is that 'associated with the data source'. This is clear, but it does not differentiate itself from close siblings like servicenow_insert_import_set or servicenow_insert_multiple_import_sets, so an agent must guess which ingestion path 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 Guidelines2/5

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

There is no statement of when to use this tool versus servicenow_insert_import_set, servicenow_insert_multiple_import_sets, or servicenow_get_import_set. No prerequisites (e.g. the data source must already exist) or exclusion conditions are given, so usage must be inferred entirely from the name.

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

servicenow_ingest_incidentsServicenow Ingest IncidentsA

Natively ingest ServiceNow incidents into epistemic-graph as typed :Incident nodes.

Lists incidents via the ServiceNow API and pushes them (with their affected :ConfigurationItem and :Person assignee, via :affects / :assignedTo links) into the knowledge graph through the fast engine client. Best-effort: returns {"ingested": None} when no engine is reachable. CONCEPT:AU-KG.ingest.enterprise-source-extractor.

ParametersJSON Schema
NameRequiredDescriptionDefault
params_jsonNoJSON string of get_incidents filters (e.g. sysparm_limit, sysparm_query, sysparm_display_value).{}

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the load and does well: it discloses the write target (knowledge graph), the side effects (creating :Incident nodes plus :ConfigurationItem/:Person links), and the failure mode ('best-effort: returns {"ingested": None} when no engine is reachable'). It stops short of stating idempotency, batching/pagination limits, or whether repeated runs duplicate nodes.

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?

The action and destination are front-loaded and each sentence carries content: mechanism, graph shape, then degradation behavior. The trailing 'CONCEPT:AU-KG.ingest.enterprise-source-extractor' tag is internal taxonomy noise that doesn't help an agent decide or invoke.

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?

An output schema exists, so return-value detail is partly off the description's plate, and the failure sentinel is still spelled out. But for a graph-mutating ingest with zero annotations, the description should say whether the operation is idempotent, whether it replaces or appends nodes, and how many incidents are pulled per call.

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

Parameters3/5

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

Only one parameter and schema coverage is 100%, with params_json already documented as get_incidents filters. The description adds only the implicit link that listing uses the same ServiceNow API, so it neither compensates nor detracts; 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 destination: it lists ServiceNow incidents and writes them as typed :Incident nodes with :affects/:assignedTo links. That distinguishes it from plain readers like servicenow_get_incidents, but it never names a sibling explicitly, leaving the agent to infer the boundary from the verb alone.

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 'Natively ingest ... into epistemic-graph' rather than stated as a decision rule. There is no guidance on when to prefer this over servicenow_get_incidents or the sibling servicenow_ingest_cmdb_data, nor any prerequisite (engine availability, auth) framed as a selection condition.

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

servicenow_insert_cost_plansInsert cost plansD

Creates cost plans.

ParametersJSON Schema
NameRequiredDescriptionDefault
plansYes
params_jsonNo{}

TDQS

D1.8/5.0
Behavior2/5

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

Annotations already cover the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), and the description adds no context on top of them — no note that the operation is non-idempotent so repeated calls may create duplicates, no auth or permission requirements, no indication of what is returned or whether the array is inserted atomically.

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

Conciseness2/5

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

A single five-word sentence with no waste, but this is under-specification rather than conciseness for a mutation tool taking a structured array payload. There is no front-loaded information beyond the name itself.

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

Completeness1/5

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

For a non-idempotent write tool with an opaque nested array parameter, 0% schema description coverage, and no output schema, the description should carry nearly the full explanatory burden — and it carries none. An agent cannot construct a valid `plans` item from anything provided.

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

Parameters1/5

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

Schema description coverage is 0% for both parameters. The required `plans` array is typed only as an opaque array of free-form objects, and `params_json` defaults to "{}", yet the description says nothing about the expected shape of a plan record or the role of params_json. It fully fails to compensate for the schema gap.

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

Purpose2/5

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

"Creates cost plans." is a near-verbatim restatement of the tool name/annotation title ("Insert cost plans"), swapping a synonym for the verb. It gives no scope, target system context, or distinction from the many other create/insert siblings such as servicenow_add_table_record or servicenow_insert_import_set.

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 when-to-use guidance at all: it does not say what a cost plan is, which ServiceNow module it belongs to, or when an agent should prefer this over generic record insertion. Nothing is misleading, but nothing routes the agent either.

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

servicenow_insert_import_setInsert import setC

Insert a new record into the specified import set.

:param table: The name of the table associated with the import set. :type table: str :param data: Dictionary containing the field values for the new import set record. :type data: dict

:return: Response containing parsed Pydantic model with information about the inserted import set record. :rtype: Response

:raises ParameterError: If data or table is not provided. :raises ParameterError: If JSON serialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
tableNo
import_set_sys_idNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the write/non-idempotent profile is covered. The description adds real value beyond that by disclosing two validation failures (missing data/table, JSON serialization failure), but says nothing about duplicate-insert behavior or the fact that the return is a parsed Pydantic model beyond 'Response containing...'.

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

Conciseness3/5

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

The opening sentence is front-loaded and clear, and the :raises: lines earn their place, but the ':type table: str' / ':rtype: Response' lines merely restate schema information in Sphinx boilerplate that an agent gains nothing from.

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 non-idempotent mutation tool with no output schema and zero schema-level parameter documentation, the description leaves too much open: how the target import set is identified, what columns data must contain, and what happens when the same record is inserted twice are all unstated.

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

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, and it explains only two of three parameters (table as 'the name of the table associated with the import set', data as a dict of field values). The critical identifier 'import_set_sys_id' is never mentioned, even though the prose says 'the specified import set' without explaining how it is specified.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource: 'Insert a new record into the specified import set.' This cleanly distinguishes it from servicenow_get_import_set (read) and servicenow_insert_multiple_import_sets (bulk), though it never actually says what differentiates it from the multiple-insert sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to choose this tool over servicenow_insert_multiple_import_sets, servicenow_add_table_record, or servicenow_insert_cost_plans. Prerequisites (an existing import set, credentials) are not mentioned, only the failure mode once called without arguments.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_insert_multiple_import_setsInsert multiple import setsB

Insert multiple records into the specified import set.

:param table: The name of the table associated with the import set. :type table: str :param data: Dictionary containing the field values for multiple new import set records. :type data: dict

:return: Response containing list of parsed Pydantic models with information about the inserted import set records. :rtype: Response

:raises ParameterError: If data or table is not provided. :raises ParameterError: If JSON serialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
tableNo
import_set_sys_idNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral detail beyond that: it raises ParameterError when data or table is missing, and when JSON serialization fails, which tells the agent about failure modes. It does not mention permissions, rate limits, or batching limits.

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?

The docstring leads with the purpose sentence and then uses standard, scannable sections. The redundant :type/:rtype lines add bulk without information, which keeps it out of the top band, but nothing is padded or buried.

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?

There is no output schema, and the description compensates by describing the return: a response containing a list of parsed models with inserted-record information, which is helpful. However, for a three-parameter mutation tool it omits the identity parameter (import_set_sys_id), the shape of batch input, and any prerequisites, leaving the definition only partially complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries the burden, but it only documents two of three parameters. The critical import_set_sys_id parameter, which appears to be how the target import set is actually identified, is never mentioned, and the 'specified import set' phrase has no corresponding named input. The data parameter is described as a 'dict' of field values for 'multiple' records, which is semantically confusing without clarifying whether it is a single record payload or a batch.

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: inserting multiple records into a named import set. That is enough for an agent to know what the tool does, but it never distinguishes itself from the sibling servicenow_insert_import_set (singular), relying on the tool name alone to carry the cardinality difference.

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-to-use, or alternative guidance at all. The presence of a near-identical single-record sibling (servicenow_insert_import_set) makes the absence of routing guidance a real gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_insert_project_tasksInsert project tasksC

Creates a project and associated project tasks.

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateNo
start_dateNo
child_tasksNo
external_idNo
dependenciesNo
short_descriptionYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, and openWorldHint=true, so the write/safety profile is covered. The description adds nothing beyond that: it does not say whether re-running duplicates the project, what permissions are needed, or what the call returns. With annotations present the bar is lower, but this sentence contributes no behavioral context at all.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded and free of filler, so there is no waste to cut. However, for a six-parameter recursive write tool it is sized far below what is useful, so conciseness here shades into under-specification.

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?

No output schema exists, and the input schema is complex (nested recursive task objects, 0% description coverage), yet the description provides only one sentence. It never explains the relationship between the top-level fields and child_tasks, what external_id is for, or what happens on partial failure — all things the schema and annotations do not cover.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across six parameters, including a recursive child_tasks structure, dependencies, and external_id, so the description carries the full burden. It names only 'project' and 'project tasks' and explains none of the parameters' meaning, format, or interaction (e.g. date formats, how dependencies are expressed, recursion limits).

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 gives a concrete verb ('Creates') and two concrete resources ('a project and associated project tasks'), which resolves the ambiguity in the tool name about whether it inserts tasks only or a whole project. It does not, however, distinguish itself from any of the many other create/insert siblings in the list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of prerequisites (e.g. whether the project must already exist), and no reference to alternatives such as create_change_request_task or add_table_record. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_instance_scan_progressInstance scan progressC
Read-onlyIdempotent

Get progress information for an instance scan based on the provided progress ID.

:param progress_id: The ID associated with the instance scan progress. :type progress_id: str

:return: Response containing parsed Pydantic model with instance scan progress. :rtype: Response

:raises MissingParameterError: If progress_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so safety is covered. The description adds useful behavioral detail beyond that: it throws MissingParameterError when progress_id is absent and returns a parsed Pydantic model. It says nothing about how often to poll or what the progress payload contains.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core sentence is front-loaded and clear, but the definition carries Sphinx docstring boilerplate (:type, :rtype, :raises) whose return-type line ('Response containing parsed Pydantic model') adds little. It is neither bloated nor tight — acceptable but not efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must explain what a caller receives, and 'parsed Pydantic model with instance scan progress' is too vague for a progress-polling tool. Combined with 43 parameters at 0% coverage and no annotation-independent guidance on polling cadence, the definition is under-specified for its complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 43 parameters, so the description must carry the load. It documents only progress_id (naming and typing it), which usefully implies the other 42 parameters are irrelevant boilerplate, but 42 parameters remain completely undescribed in both schema and description. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Get progress information for an instance scan based on the provided progress ID.' An agent can identify this as a progress-polling read tool. It does not distinguish itself from close siblings such as servicenow_progress, servicenow_full_scan, servicenow_suite_scan, or servicenow_combo_suite_scan, so it cannot be 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 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 and no alternatives named. Usage is only weakly implied (poll this after kicking off an instance scan), and the presence of a generic sibling like servicenow_progress makes routing ambiguous. 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.

servicenow_metricbase_insertMetricbase insertD

Invoke the metricbase_insert operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
sys_idNo
valuesNo
end_timeNo
start_timeNo
table_nameNo
metric_nameNo

TDQS

D1.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations do declare the safety profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false), so the mutation aspect is partially covered by structured data. However, the description adds nothing beyond this – no mention of what data is written, auth requirements, batching behavior, or side effects for what is evidently 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.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is short but that brevity reflects under-specification rather than conciseness; it earns no informational value. There is no front-loaded purpose, scope, or routing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation tool with no output schema and zero schema description coverage, the description is entirely inadequate. Nothing an agent needs to call this tool correctly – parameter formats, required combos, or side effects – is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Six parameters (sys_id, values, end_time, start_time, table_name, metric_name) are documented at 0% coverage in the schema, and the description supplies no meaning whatsoever for any of them. The agent has no way to know what 'values' should contain or how metric_name/table_name relate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'Invoke the metricbase_insert operation' is a tautological restatement of the tool name and title; it names no verb-resource pair an agent could reason about. It gives no indication of what is being inserted, into what system (metricbase), or how it differs from siblings like servicenow_ingest_cmdb_data or servicenow_add_table_record.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool, when not to, or which sibling to prefer. The description contains no context, prerequisites, or alternatives, leaving the agent to infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_patch_cmdb_instancePatch cmdb instanceC

Replaces attributes in the specified CI record (PATCH).

:param className: CMDB class name. :type className: str :param sys_id: Sys_id of the CI. :type sys_id: str :param attributes: Data attributes to replace. :type attributes: dict :param source: Discovery source. :type source: str

:return: Response containing updated CI. :rtype: Response

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
sourceNo
sys_idNo
classNameNo
attributesNo
rel_sys_idNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_offsetNo
inbound_relationsNo
outbound_relationsNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is largely covered. The description adds the meaningful behavioral detail that attributes are 'replaced' rather than merged, but says nothing about permissions, side effects on relations, or error behavior for a non-idempotent mutation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence is front-loaded and efficient, but the Sphinx :type: lines merely restate types already present in the JSON schema and add length without information. The :return: line is marginally useful given no output schema exists.

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 12-parameter, non-idempotent mutation with no output schema and 0% schema documentation, the description is far too thin. It omits how the many query/pagination and relation parameters behave and gives no guidance on valid input combinations, leaving the agent under-equipped to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 12 parameters, so the description carries the full burden, yet it documents only four (className, sys_id, attributes, source). Critical operational parameters such as sysparm_query, sysparm_limit, rel_sys_id, inbound_relations, outbound_relations, and data are left entirely unexplained in both schema and description.

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: 'Replaces attributes in the specified CI record (PATCH)'. The PATCH parenthetical signals partial-update semantics, which helps distinguish it from servicenow_update_cmdb_instance and servicenow_create_cmdb_instance. It does not, however, explicitly differentiate itself from those close siblings, keeping it below 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus servicenow_update_cmdb_instance, servicenow_patch_table_record, or servicenow_create_cmdb_instance. No prerequisites, no exclusions, no context about valid CI states for patching. The reader must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_patch_table_recordPatch table recordC

Partially update a record in the specified table.

:param table: The name of the table. :type table: str :param table_record_sys_id: The sys_id of the record to be updated. :type table_record_sys_id: str :param data: Dictionary containing the fields to be updated. :type data: dict

:return: Response containing parsed Pydantic model with information about the updated record. :rtype: Response

:raises MissingParameterError: If table, table_record_sys_id, or data is not provided. :raises ParameterError: If JSON serialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
tableNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
table_record_sys_idNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=true, covering the safety profile. The description adds real value beyond that by disclosing error behavior (MissingParameterError, ParameterError) and the return type, but says nothing about which fields are merged versus replaced during a partial update.

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?

The one-line purpose is front-loaded and each subsequent block is scoped to its topic. The ':type:' lines duplicate type information already present in the schema and add little, but the overall size is reasonable for a tool of this nature.

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 16-parameter mutation tool with no output schema and 0% schema coverage, the description is far too thin. It omits any explanation of the sysparm_* controls, pagination behavior, or how the 'data' dict fields map to ServiceNow columns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 16 parameters, so the description carries the full burden, yet it documents only 3 (table, table_record_sys_id, data). The 13 sysparm_* parameters (view, limit, query, fields, offset, display_value, etc.) are undocumented in both the schema and the description, leaving the majority uninterpretable.

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+resource: 'Partially update a record in the specified table.' The word 'partially' implicitly distinguishes it from servicenow_update_table_record (full update), but the sibling is never named, so the differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus update_table_record, add_table_record, or patch_cmdb_instance. No prerequisites or context for choosing a PATCH over a PUT are given; the reader must infer everything from the verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_point_scanPoint scanC

Initiate a point instance scan based on the provided parameters.

:param target_sys_id: The sys_id of the target instance. :type target_sys_id: str :param target_table: The table of the target instance. :type target_table: str

:return: Response containing parsed Pydantic model with information about the point scan. :rtype: Response

:raises MissingParameterError: If target_sys_id or target_table is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, openWorldHint=true and destructiveHint=false, so the mutation-ish, non-idempotent, external-facing profile is covered structurally. The description adds one genuinely useful detail -- that target_sys_id and target_table are effectively mandatory despite the schema listing zero required parameters. It omits the async nature implied by 'Initiate' (i.e., that results are later polled via servicenow_instance_scan_progress) and says nothing about side effects or scope of the scan.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence is front-loaded, which is good, but 'based on the provided parameters' is pure filler and the Sphinx-style :param/:type/:return/:raises block is boilerplate that spends four lines documenting two of 43 parameters. It is short overall, so there is no bloat, but the allocation of space is poor.

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 43-parameter tool with no output schema and a 0%-covered schema, the description is far too thin: it does not explain the scan's async lifecycle, what a point scan actually covers, or the role of any optional parameter. It resolves only the mandatory-parameter question, leaving an agent unable to invoke anything beyond the two-field minimal form.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 43 parameters, so the description carries the full burden and fails it -- only target_sys_id and target_table are explained, leaving ~41 parameters (scope, scan_type, plugin_id, packages, repo_url, update_set_id, etc.) completely undefined. The two documented params are the critical ones, which earns some credit, but the vast parameterization of this tool remains opaque.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a verb ('Initiate') and resource ('point instance scan'), which is a real purpose statement rather than a tautology. However, 'point scan' is unexplained jargon and the description never distinguishes it from the sibling scan tools (servicenow_full_scan, servicenow_suite_scan, servicenow_combo_suite_scan), so an agent cannot tell which scan variant to pick from this text alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance whatsoever: no conditions selecting this over a full or suite scan, no prerequisites, no mention of the time/scope tradeoff that would justify a 'point' scan. The only contextual hint is the MissingParameterError clause, which is not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_process_service_qualification_resultProcess service qualification resultD

Processes a technical service qualification result.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

D1.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, and idempotentHint=false, so the safety profile is partly covered. However, the description adds nothing beyond them: it does not explain what 'processing' mutates, whether it triggers downstream workflow, or what side effects the non-idempotent, open-world flags imply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short sentence with no waste, but the brevity reflects under-specification rather than efficiency — the one sentence conveys no actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a non-read-only, non-idempotent mutation tool with no output schema and 0% parameter documentation, the description is completely inadequate. Nothing an agent needs to invoke it correctly — payload shape, effect, or relation to sibling qualification tools — is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Two parameters exist with 0% schema description coverage, and both are opaque containers: 'params' is an untyped additionalProperties object and 'params_json' is a raw JSON string. The description provides no hint about what fields belong in either, leaving the agent with no way to construct a valid call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is essentially a restatement of the title ('Process service qualification result' vs 'Processes a technical service qualification result'). The verb 'processes' is opaque — it does not say whether it submits, evaluates, approves, or stores a qualification result. It also does nothing to distinguish itself from closely named siblings like servicenow_check_service_qualification and servicenow_get_service_qualification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of the similarly named sibling tools (check_service_qualification, get_service_qualification) that an agent would have to disambiguate against. The agent is left to guess entirely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_progressProgressC
Read-onlyIdempotent

Get progress information based on the provided progress ID.

:param progress_id: The ID associated with the progress. :type progress_id: str

:return: Response containing parsed Pydantic model with progress information. :rtype: Response

:raises MissingParameterError: If progress_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds one useful behavioral detail beyond annotations — that a MissingParameterError is raised when progress_id is absent — but says nothing about what the returned model contains or any rate/scope constraints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Sphinx-style :param:/:return:/:raises: sections are compact and every line is relevant, but the docstring format is not front-loaded for agent consumption and the boilerplate return/type lines add little. Adequate but not optimized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 43 parameters, no output schema, and zero schema descriptions, the description is too thin — it explains only the ID parameter and gives no sense of the return shape or role of the other inputs. An agent could call it but would be guessing about most of the interface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 43 parameters, so the description carries full param burden, yet it documents only progress_id (with type). The other 42 nullable parameters are unexplained, leaving the agent to guess whether they matter for this call. This is a significant shortfall against low schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a verb+resource ('Get progress information based on the provided progress ID'), which is more than a tautology, but 'progress information' is generic and does not say what kind of progress or distinguish this tool from siblings like servicenow_instance_scan_progress or servicenow_batch_install_result. An agent cannot tell which progress artifact this retrieves without more context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of alternatives, and no preconditions beyond the note that it raises MissingParameterError. The agent is told the tool needs an ID but not when this tool is the right choice over the many other ServiceNow status/progress tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_refresh_auth_tokenRefresh auth tokenA

Refresh the authentication token :return: Response with new refreshed token.

:raises MissingParameterError: If the client was authenticated without OAuth client credentials (e.g. basic auth or a bearer token), so there is no client_id/client_secret to refresh with.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (not read-only, not idempotent, not destructive, open-world), and the description adds genuinely useful context beyond them: it names the MissingParameterError failure mode and the exact condition that triggers it (basic auth or bearer-token sessions lacking client_id/client_secret). This prerequisite disclosure is what the annotations cannot convey.

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?

The content is short and the purpose is front-loaded in the first line. The residual Sphinx directives (:return:, :raises:) are raw-docstring artifacts rather than prose, a minor blemish but not enough to hurt readability materially.

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 zero-parameter tool with no output schema, the description supplies the essentials: what comes back (a refreshed token) and the one failure mode an agent must anticipate. Nothing critical about invoking it correctly is omitted.

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?

There are no parameters (schema coverage 100%, zero properties), so the baseline of 4 applies. The description correctly adds no parameter detail because none exists.

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 gives a specific verb+resource: refresh the authentication token. This is unambiguous about what the tool does. It does not, however, differentiate itself from the related sibling servicenow_sdk_auth, so it falls 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?

Usage is implied (call it to get a new token) and the description notes a real precondition – the client must have been authenticated with OAuth client credentials. But it never states when to reach for this versus re-authenticating via servicenow_sdk_auth or other auth siblings, leaving the selection to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_refresh_change_request_impacted_servicesRefresh change request impacted servicesC

Refresh impacted services for a change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None

:return: Response containing parsed Pydantic model with information about the refreshed impacted services. :rtype: Response

:raises MissingParameterError: If change_request_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare it is a non-read-only, non-idempotent, open-world, non-destructive operation; the description adds failure-mode detail (MissingParameterError, ParameterError for invalid params/JSON). However, it never explains what the refresh actually mutates or how the impacted-service list is recomputed, so added context beyond annotations is modest.

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?

Purpose is front-loaded and the Sphinx-style block is compact. Minor waste: ParameterError is listed twice and no sentence earns its place beyond the bare minimum, but overall efficient.

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 22-parameter write tool with no output schema and 0% schema coverage, the definition is under-specified: it explains one parameter and the return as a generic Pydantic response, leaving the agent without enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 22 parameters, so the description must compensate. It documents only change_request_sys_id (and merely restates its type); the other 21 parameters are undocumented in both schema and description.

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+resource: 'Refresh impacted services for a change request.' It is distinguishable from the many other change-request siblings, though it does not name an alternative or clarify what 'refresh' recomputes versus e.g. get_change_request_ci.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus sibling tools like create_change_request_ci_association or get_change_request_ci, and no prerequisites. It only lists failure errors, which is not usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_register_ci_lifecycle_operatorRegister ci lifecycle operatorC

Registers an operator for a non-workflow user.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=true, so the mutation and safety profile is partly covered. The description adds the useful constraint that only non-workflow users can be registered, but it does not disclose side effects, auth requirements, or what happens on repeated calls.

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?

The description is a single short sentence and is front-loaded with the core action. It contains no wasted words, though its extreme brevity leaves no structural room for required usage or parameter context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has two undocumented parameters, no output schema, and is part of a complex CI lifecycle family. The description gives only the minimum purpose statement and omits prerequisites, parameter meaning, and behavioral details that an agent would need to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not mention either parameter. With two parameters, including an arbitrary object schema, the description provides no semantic guidance about what to pass for 'params' or 'params_json'.

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 ('Registers') and resource ('operator') and adds a scope qualifier ('for a non-workflow user'). It is distinguishable from the sibling unregister_ci_lifecycle_operator, but it does not explain what an 'operator' is in the CI lifecycle context or distinguish it from other lifecycle actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance, prerequisites, or alternatives. It does not explain when registering an operator is appropriate versus using other CI lifecycle tools such as add_ci_lifecycle_action or unregister_ci_lifecycle_operator.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_register_devops_artifactRegister devops artifactC

Enables orchestration tools to register artifacts into a ServiceNow instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolIdNo
artifactsYes
stageNameNo
branchNameNo
projectNameNo
pipelineNameNo
orchestrationToolIdNo
taskExecutionNumberNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose the write/non-idempotent/open-world/non-destructive profile. The description adds essentially no behavioral context beyond 'register'—no mention of what gets created, whether re-registration is safe, or any auth constraints—so it contributes little over structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no waste, which is good for brevity. But for a tool with 8 parameters and non-trivial behavior, this is under-specified rather than appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, minimal annotations, and 8 undocumented parameters mean the agent lacks nearly everything needed to call this correctly. The one-line description is far too thin for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Eight parameters with 0% schema description coverage, and the description mentions none of them (toolId, artifacts, stageName, branchName, projectName, pipelineName, orchestrationToolId, taskExecutionNumber). It does nothing to compensate for the total absence of parameter documentation.

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 ('register') and resource ('artifacts') with a target ('into a ServiceNow instance'), so the action is understandable. However, it offers no differentiation from the many sibling DevOps/registration tools, so an agent can't distinguish it by description alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use, prerequisites, or alternatives. Relevant siblings like servicenow_get_devops_orchestration_schema and servicenow_get_devops_plan_schema are not referenced, leaving the agent to infer the context for registering artifacts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_rollback_pluginRollback pluginC

Rollback a plugin based on the provided plugin_id.

:param plugin_id: The ID of the plugin to be rolled back. :type plugin_id: str

:return: Response containing parsed Pydantic model with information about the rollback. :rtype: Response

:raises MissingParameterError: If plugin_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false. The description adds only the plugin_id requirement and the MissingParameterError raise, which is useful but minimal. It says nothing about what a rollback actually reverts, whether it affects installed apps, or how rollback_installs/force_commit-style flags change behavior.

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 verb+resource sentence followed by compact Sphinx-style param/return/raises lines. No rambling, though the :type:/:rtype: boilerplate is low-value padding rather than information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 43-parameter mutation tool with no output schema and no schema descriptions, the definition is drastically under-specified. A caller cannot tell which of the 42 undocumented optional fields govern the rollback, what the response contains, or what side effects to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 43 parameters at 0% description coverage, all nullable with null defaults, and the description documents only plugin_id. Effectively 42 parameters carry no semantics anywhere, and the description offers no help in identifying which optional fields matter for a rollback.

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+resource: roll back a plugin, keyed by plugin_id. This is clear enough to distinguish it from activate_plugin or the SDK tools, but it never distinguishes it from the many other rollback siblings (app_repo_rollback, batch_rollback, update_set_back_out, update_set_retrieve), so scope differences remain ambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no preconditions, and no routing to alternatives despite a crowded rollback/back-out sibling set. The agent is told only that plugin_id is needed, not when this tool is the right choice over other rollback entry points.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_run_test_suiteRun test suiteC

Run a test suite based on the provided parameters.

:param test_suite_sys_id: The sys_id of the test suite to be run. :type test_suite_sys_id: str :param test_suite_name: The name of the test suite to be run. :type test_suite_name: str :param browser_name: The name of the browser for the test run. :type browser_name: str :param browser_version: The version of the browser for the test run. :type browser_version: str :param os_name: The name of the operating system for the test run. :type os_name: str :param os_version: The version of the operating system for the test run. :type os_version: str

:return: Response containing parsed Pydantic model with information about the test run. :rtype: Response

:raises MissingParameterError: If test_suite_sys_id or test_suite_name is not provided. :raises ParameterError: If browser_name is not a valid string.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=true, so the mutation/scope profile is partly covered. The description adds real value beyond that by naming the return shape and two explicit failure modes (MissingParameterError, ParameterError), but it says nothing about side effects, duration, 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.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The leading sentence is front-loaded and clear, but the body is auto-generated Sphinx boilerplate (:param/:type/:raises) that spends most of its length restating parameter names while leaving the majority of the schema unexplained. It is moderately sized but low-yield.

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 43-parameter, zero-required tool with no output schema, the description covers only a fraction of the inputs and omits any indication of how to select among the many mutually exclusive-looking IDs (sys_id vs suite_sys_id vs test_suite_sys_id). An agent cannot confidently construct a call for this tool from the definition alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 43 parameters at 0% description coverage, yet the description documents only 6 (test_suite_sys_id, test_suite_name, browser_name, browser_version, os_name, os_version). The remaining 37 fields — data, name, scope, sys_id, suite_sys_id, app_scope_sys_ids, and so on — are undocumented in both the schema and the description, so the description does not compensate for the coverage gap.

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+resource ('Run a test suite'), so an agent knows the operation. However, it offers no differentiation from likely siblings such as servicenow_suite_scan or servicenow_combo_suite_scan, and 'based on the provided parameters' is filler that adds nothing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus suite_scan, combo_suite_scan, or point_scan, nor any prerequisites or exclusions. The only usage signal is the implicit one from the parameter names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_sdk_authAuthC

Configure instance authentication (now-sdk auth).

A password is piped via stdin with --password-stdin and is never placed in argv or in the returned command echo.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is largely covered. The description adds a genuinely useful security-relevant behavior (password piped via stdin with --password-stdin, never in argv or the echoed command), but it does not say where credentials are written or what happens on failure. With annotations carrying the mutation profile, a 3 is appropriate.

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?

Two sentences, front-loaded with the purpose and the CLI anchor, with no filler. The security detail in sentence two earns its place. Slightly terse given the schema complexity, but well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with 0% schema description coverage and no output schema, the description is thin: it does not explain the params/params_json payload, the target instance, or the resulting credential state. Only the password-handling detail is covered, leaving the agent without enough to invoke it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the schema documents nothing about the two opaque params (params / params_json). The description names a `password` field and its stdin mechanism, which is some compensation, but it never explains the params vs params_json structure an agent must populate to call the tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ("Configure instance authentication") and anchors it to the concrete CLI command `now-sdk auth`, so an agent knows exactly what it does. It does not explicitly differentiate itself from auth-adjacent siblings like servicenow_refresh_auth_token, keeping it at a 4 rather than 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites (e.g., that an instance/host must be specified first), and no mention of the sibling auth tools it should be chosen over. The agent is left to infer all routing on its own.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_sdk_buildBuildB

Compile Fluent sources into an installable package (now-sdk build).

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare that this is a non-read-only, non-destructive, open-world operation, so the safety profile is covered. The description adds that the operation is a compilation step producing an installable package, which is useful behavioral context beyond the annotations, but it omits details like where the package is written or what permissions are required.

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, well-structured sentence that front-loads the core action and includes the command name. It contains no redundant or wasted wording.

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 build tool with opaque parameters, no output schema, and several related SDK siblings, the description is too thin. It does not cover prerequisites, expected environment, parameter formats, or how the build artifact is handled, leaving important gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two parameters, and the description says nothing about what 'params' or 'params_json' should contain. With no parameter guidance anywhere, an agent cannot know how to supply build arguments or options.

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 ('Compile'), resource ('Fluent sources'), and output ('installable package'), and names the underlying command ('now-sdk build'). It clearly distinguishes the build step from sibling tools like servicenow_sdk_deploy and servicenow_sdk_transform.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no indication of when to use this tool versus alternatives such as deploy, init, or dependencies. It only states what the tool does, leaving all usage context to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_sdk_dependenciesDependenciesB

Download configured dependencies + type defs (now-sdk dependencies).

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the agent knows this performs a non-destructive but state-changing, network-touching operation. The description adds the scope of what is fetched (dependencies + type definitions), which is useful given the ambiguous "download" framing. It does not disclose where artifacts land, whether existing files are overwritten, or auth/network requirements beyond the annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the action front-loaded and the CLI command as a compact identifier. Nothing is wasted, though it is arguably too terse to carry the operational detail the tool 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?

No output schema exists, so return values need not be described. However, for a CLI-wrapper tool with two fully undocumented passthrough parameters, the description leaves a meaningful gap: an agent knows the intent but not how to shape the call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the two parameters (`params` and `params_json`) are opaque passthroughs with no documentation in either schema or description. The description provides no parameter guidance at all, leaving the agent unable to know what to pass for the underlying CLI invocation.

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 gives a specific verb ("Download") and resource ("configured dependencies + type defs") and anchors it to the CLI command `now-sdk dependencies`. This distinguishes it from the sibling SDK tools (build/deploy/init/transform) that perform different lifecycle steps. It stops short of explicitly naming those siblings, so it is clear but not maximally differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no contrast with alternatives like servicenow_sdk_build or servicenow_sdk_deploy. The CLI-command reference hints at the workflow context, but the agent is left to infer when this step is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_sdk_deployDeployC

Install/update the app on the target instance (now-sdk install, alias deploy).

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the specific action ('install/update') and the CLI command, but does not disclose further behavior such as whether it overwrites an existing app, required authentication, or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no wasted words. It efficiently conveys the core action and the CLI alias.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no output schema and zero parameter documentation, the description is too sparse. It lacks critical context such as how the target instance is specified, what credentials are needed, and what happens on failure, leaving substantial gaps for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for both parameters (params and params_json). The description does not explain what these parameters represent or provide any syntax, examples, or constraints, leaving the agent with no guidance beyond the generic schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('install/update') and resource ('the app on the target instance'), and provides the CLI command alias. This distinguishes it from most siblings, though it does not explicitly differentiate from tools like servicenow_app_repo_install or servicenow_batch_install.

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 given on when to use this tool versus alternatives. The description does not mention prerequisites, target instance selection, or how it relates to sibling install/deploy tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_sdk_initInitB

Scaffold a new scoped app / Fluent project (now-sdk init, alias create).

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the agent knows this is a non-destructive write that may touch external state. The description adds that it scaffolds/creates a new project, consistent with those hints, but says nothing about filesystem effects, prerequisites, or whether it overwrites existing projects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler; the verb and resource lead, and the CLI reference is compactly parenthesized. Nothing here wastes space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, opaque parameters, and only a terse one-liner, the definition omits what gets created, where, and how to pass arguments via params_json. For a scaffolding operation with real write side effects, more context is needed for an agent to invoke it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for two opaque parameters ('params' and 'params_json'), and the description offers no explanation of their expected format or content. For a CLI-passthrough-style tool the agent is left guessing what to put in params_json (default '{}').

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 ('Scaffold') and resource ('a new scoped app / Fluent project'), and grounds it in the underlying CLI command with its alias. This lets an agent distinguish it from sibling sdk tools like servicenow_sdk_build or servicenow_sdk_deploy, though it doesn't explicitly name what it is not.

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 or when-not-to-use guidance, and no alternative tool is named. 'Scaffold a new ... project' only weakly implies this is a project-init step; nothing tells the agent when this is the right choice versus build/deploy/transform.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_sdk_transformTransformC

Download + convert XML records into Fluent source (now-sdk transform).

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds that the operation downloads (consistent with openWorldHint) and converts into Fluent source, clarifying the transform direction. It omits where output lands, whether existing files are overwritten, and any auth requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler, naming the operation and the command form. It is efficient but so terse that it leaves the tool under-explained for its 2-parameter surface.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool that mutates filesystem/project state with two undocumented parameters and no output schema, the description is too thin: it omits auth needs, working directory, overwrite behavior, and result format. Only the core transformation is conveyed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for two opaque parameters (params, params_json), and the description adds no meaning about what they accept or how they map to the transform. The agent gets no guidance on the JSON payload shape beyond what an empty schema reveals.

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 concrete compound verb (download + convert) and the transformation target (XML records into Fluent source), plus the backing CLI command. This is clearly more than a tautology. It does not differentiate from sibling SDK tools like sdk_build or sdk_deploy, so it falls 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives among the numerous SDK siblings (sdk_init, sdk_build, sdk_deploy). The only usage cue is the parenthetical CLI command, which implies but does not state context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_send_emailSend emailD

Invoke the send_email operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNo
htmlNo
textNo
sys_idNo
subjectNo

TDQS

D1.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. However, the description adds zero behavioral context — no mention that this actually delivers mail externally, what content fields are required, or what happens with missing recipients. No contradiction with annotations, but no added value either.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short sentence, but it is under-specified rather than concise — the brevity removes information rather than waste. There is no front-loaded purpose statement to build on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter, externally-facing, non-idempotent email tool with no output schema, the description should explain recipient semantics, content fields, and behavior on send. It supplies none of this, leaving the definition wholly inadequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Five parameters (to, html, text, sys_id, subject) all have 0% schema description coverage, and the description does not name or explain a single one. Because the schema provides no semantics, the description must compensate and instead contributes nothing, so the baseline-3 rule for high coverage does not apply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose1/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description is a tautology: 'Invoke the send_email operation' restates the tool name and title without stating what is actually done or what resource is affected. It offers no distinction from any sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no preconditions, no mention of alternatives, and no explanation of when a direct email send is appropriate versus other ServiceNow tools. The agent is given nothing to route with.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_set_ci_lifecycle_statusSet ci lifecycle statusC

Sets the operational state for a specified list of CIs.

ParametersJSON Schema
NameRequiredDescriptionDefault
sysIdsNo
opsLabelNo
leaseTimeNo
actionNameYes
requestorIdYes
oldOpsLabelsNo
oldActionNamesNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this a non-read-only, non-idempotent, open-world mutation, so those traits needn't be repeated. But the description adds nothing beyond that: it says nothing about required permissions, the requestorId/actionName validation flow, lease/expiry behavior, or reversibility — for a lifecycle-state mutation with zero schema coverage, this is a real gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler and no redundancy. It is efficient, though its brevity is the source of the completeness gap rather than a virtue here.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a non-idempotent, open-world mutation with 7 undocumented parameters, two required inputs, and no output schema, the description is far too thin. It omits preconditions, parameter meaning, and any sense of what changes or what is returned.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 7 parameters, so the description carries the full burden. 'Operational state' loosely evokes opsLabel and 'list of CIs' evokes sysIds, but actionName, requestorId, leaseTime, oldOpsLabels, and oldActionNames remain completely undescribed, leaving most parameters opaque.

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 ('Sets') and resource ('operational state for a specified list of CIs'), clearly distinguishing it from the get_ci_lifecycle_status sibling. However, it does not differentiate itself from the other lifecycle mutators (add/delete_ci_lifecycle_action, extend_ci_lifecycle_lease), so an agent can't route between them from the text alone.

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 when-to-use, prerequisites, or alternatives are given. The sibling set includes several validation tools (check_ci_lifecycle_requestor_valid, check_ci_lifecycle_compat_actions, check_ci_lifecycle_not_allowed_action, check_ci_lifecycle_not_allowed_ops_transition) that are obvious preconditions for this action; the description never mentions that these checks should precede a set.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_suite_scanSuite scanC

Initiate a suite scan based on the provided suite_sys_id and sys_ids.

:param suite_sys_id: The sys_id of the suite to be scanned. :type suite_sys_id: str :param sys_ids: List of sys_ids representing app_scope_sys_ids for the suite scan. :type sys_ids: list :param scan_type: Type of scan to be performed (default is "scoped_apps"). :type scan_type: str

:return: Response containing parsed Pydantic model with information about the suite scan. :rtype: Response

:raises MissingParameterError: If suite_sys_id or sys_ids is not provided. :raises ParameterError: If JSON serialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true, so the safety profile is partly covered. The description adds genuinely useful behavioral detail beyond the schema: the exception types raised (MissingParameterError, ParameterError) and the declared return type. It does not, however, say what a scan actually does (async? long-running? does it require a progress_id poll?) — although the repeated failure to mark any parameter required sits in tension with the 'raises MissingParameterError' claim.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The one-line purpose is front-loaded and clear, but the Sphinx-style :param:/:return:/:raises: block is boilerplate that partly restates the opening sentence. It is appropriately sized for a docstring, but not efficiently structured for tool selection.

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 43-parameter, zero-required, zero-coverage tool with no output schema, this description is far too thin. An agent cannot determine which of the many optional fields matter for a suite scan versus which are vestigial, nor map the described 'sys_ids' onto the actual schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 43 parameters and there is no output schema, so the description must carry the load — and it documents only three fields. Worse, it references a parameter named 'sys_ids' that does not exist in the schema (the schema has 'app_scope_sys_ids'), creating ambiguity about which field to populate. Forty parameters remain completely undocumented.

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: 'Initiate a suite scan based on the provided suite_sys_id and sys_ids.' An agent knows what the tool does. However, it does nothing to distinguish itself from close siblings like servicenow_combo_suite_scan, servicenow_full_scan, or servicenow_point_scan, so the boundary between scan flavors is left implicit.

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 when-to-use guidance, no conditions, no named alternatives. With combo_suite_scan, full_scan, point_scan, and run_test_suite all in the sibling list, the agent gets no help choosing among them.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_unregister_ci_lifecycle_operatorUnregister ci lifecycle operatorC
DestructiveIdempotent

Unregisters an operator for non-workflow users.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
params_jsonNo{}

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose destructiveHint=true, idempotentHint=true, readOnlyHint=false, and openWorldHint=true, so the safety profile is covered. The description adds only the scoping note 'for non-workflow users' and does not explain what unregistering does, whether it can be undone, or what permissions are required.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded and avoids repetition. However, it is so terse that the qualifier 'for non-workflow users' is ambiguous and does not sufficiently earn its place without further detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive operation with two undocumented parameters and no output schema, the description is incomplete. While annotations carry the safety profile, the agent still lacks essential context about the parameters and the operation's effects.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has two parameters (params, params_json) with 0% description coverage. The description provides no information about these parameters, how they should be populated, or what values are expected.

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 gives a clear verb and resource: 'Unregisters an operator.' The qualifier 'for non-workflow users' adds scope, though it does not explain what an operator is or name the sibling register_ci_lifecycle_operator. Still, the core action is immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, no prerequisites, and no mention of related tools such as register_ci_lifecycle_operator. The phrase 'for non-workflow users' implies a context but not an actionable usage rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_change_requestUpdate change requestC

Update details of a change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None :param name_value_pairs: New name-value pairs providing updated details for the change request. :type name_value_pairs: str or None :param change_type: Type of change (emergency, normal, standard, model). :type change_type: str or None

:return: Response containing parsed Pydantic model with information about the updated change request. :rtype: Response

:raises MissingParameterError: If change_request_sys_id or name_value_pairs is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If change_type is specified but not valid. :raises ParameterError: If JSON serialization or deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false, so the mutation/risk profile is partly covered. The description adds useful context via the :raises: block (MissingParameterError, ParameterError on bad change_type, serialization failures), which is genuinely beyond the annotations, but it says nothing about permissions required to modify a change request or the effect of partial updates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The docstring format is organized and front-loads the purpose sentence, but the param/type pairs restate the schema and consume most of the text while leaving most parameters uncovered. It is boilerplate rather than deliberately economical.

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 22-parameter mutation tool with zero required parameters, 0% schema description coverage, and no output schema, the description is far too thin — it explains roughly 14% of the inputs and gives no guidance on the many query/sys_id parameters an agent must understand to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 22 parameters and 0% schema description coverage, the description documents only three of them (change_request_sys_id, name_value_pairs, change_type). It does add real value for change_type by naming valid values (emergency, normal, standard, model) that the schema lacks as enums, but the remaining 19 parameters — sysparm_query, sysparm_limit, state, data, api_parameters, and the various *_sys_id fields — are undocumented in both places.

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 ('Update details of a change request'), which is clear. However, it does not distinguish itself from close siblings such as servicenow_update_change_request_first_available, servicenow_update_change_request_task, or the generic servicenow_update_table_record, so the agent gets no help disambiguating among near-identical update tools.

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 only implicit signal is the :raises: block stating sys_id and name_value_pairs are required, which hints at minimum inputs but not usage context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_change_request_first_availableUpdate change request first availableC

Update the schedule of a change request to the first available slot.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None

:return: Response containing parsed Pydantic model with information about the updated schedule. :rtype: Response

:raises MissingParameterError: If change_request_sys_id is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true) with no contradiction. The description adds useful behavior beyond this — the mutation target (schedule), the return payload, and three error conditions. However it does not address the non-idempotent implication (repeated calls may reschedule to a different slot) or auth/permission needs, so it only partially carries the burden.

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?

The core purpose is front-loaded in the first sentence, and the Sphinx-style param/return/raises blocks are compact and scannable. The boilerplate directives (:type:, :rtype:) add minor noise but the whole definition stays appropriately sized.

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 22-parameter mutation tool with 0% schema coverage and no output schema, the description is far too thin: it explains one parameter and a few error cases while leaving the schema's bulk undocumented. Annotations cover the safety profile, but the parameter-level completeness needed to actually invoke this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 22 parameters, so the description is the only source of parameter meaning — yet it documents just change_request_sys_id (and its missing-parameter error). The other 21 parameters, including ambiguous ones like data, association_type, and name_value_pairs, are left entirely unexplained.

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+resource+behavior: updating a change request's schedule to the first available slot. This is clearer than a generic 'update' and hints at the auto-scheduling semantic. It does not explicitly contrast with sibling servicenow_update_change_request, but the scope is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus servicenow_update_change_request or servicenow_get_change_request_schedule, nor any prerequisites or exclusions. The description only states what it does, leaving the agent to infer the routing decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_change_request_taskUpdate change request taskC

Update details of a task associated with a change request.

:param change_request_sys_id: Sys ID of the change request. :type change_request_sys_id: str or None :param change_request_task_sys_id: Sys ID of the change request task. :type change_request_task_sys_id: str or None :param name_value_pairs: New name-value pairs providing updated details for the task. :type name_value_pairs: str or None

:return: Response containing parsed Pydantic model with information about the updated task. :rtype: Response

:raises MissingParameterError: If change_request_sys_id, change_request_task_sys_id, or name_value_pairs is not provided. :raises ParameterError: If invalid parameters or responses are encountered. :raises ParameterError: If JSON serialization or deserialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
stateNo
change_typeNo
task_sys_idNo
text_searchNo
model_sys_idNo
sysparm_limitNo
sysparm_queryNo
worker_sys_idNo
api_parametersNo
cmdb_ci_sys_idNo
sysparm_offsetNo
cmdb_ci_sys_idsNo
response_lengthNo
template_sys_idNo
association_typeNo
name_value_pairsNo
change_model_sys_idNo
change_request_sys_idNo
refresh_impacted_servicesNo
change_request_task_sys_idNo
standard_change_template_idNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=true), so the bar is lower. The description adds genuine context beyond annotations by documenting the failure modes (MissingParameterError, ParameterError) and the return type, but it omits auth requirements, side effects on impacted services, and any rate/scope limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The summary sentence is front-loaded and clear, but the Sphinx-style :type:/:rtype: lines largely restate schema types and add boilerplate rather than new information. It is neither bloated nor maximally efficient.

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 22-parameter, zero-required mutation tool with no output schema, the description is far too thin: it neither explains the large set of undocumented parameters nor addresses why a task-update tool exposes search/pagination/CMDB parameters. An agent would have to guess at most of the call surface.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 22 parameters, so the description carries the full burden, yet it documents only 3 (change_request_sys_id, change_request_task_sys_id, name_value_pairs). The remaining 19 parameters — including state, change_type, task_sys_id, sysparm_query, response_length, and refresh_impacted_services — are completely unexplained, leaving an agent unable to reason about most of the input.

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 ('Update details of a task associated with a change request'), which clearly separates it from siblings like create_change_request_task, delete_change_request_task, and update_change_request. However, it never explicitly names those siblings or clarifies the boundary between updating the task vs. the parent change request.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as update_change_request or create_change_request_task, and no prerequisites (e.g. task must already exist, required permissions) are stated. The only usage signal is the implicit 'update' verb.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_cmdb_instanceUpdate cmdb instanceC
Idempotent

Updates the specified CI record (PUT).

:param className: CMDB class name. :type className: str :param sys_id: Sys_id of the CI. :type sys_id: str :param attributes: Data attributes to replace. :type attributes: dict :param source: Discovery source. :type source: str

:return: Response containing updated CI. :rtype: Response

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
sourceNo
sys_idNo
classNameNo
attributesNo
rel_sys_idNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_offsetNo
inbound_relationsNo
outbound_relationsNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare openWorld, idempotent, non-readOnly, non-destructive, so the safety profile is covered. The description adds the useful PUT/replace nuance and 'Data attributes to replace,' but it does not state whether unspecified attributes are cleared, what authorization is needed, or what happens on partial input.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence is front-loaded and clear, but the rest is Sphinx-style :param:/:type: boilerplate that repeats the schema's parameter names rather than adding meaning. Reasonable size, but roughly half the text earns little.

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 12-parameter mutation tool with zero schema description coverage, no output schema, and no required-parameter guidance, the description is too thin. It omits relation parameters, query/paging parameters, and any indication of the response shape, so an agent cannot safely call it without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 12 parameters, so the description carries the full burden, yet it only documents 4 of them (className, sys_id, attributes, source) via docstring tags. It leaves data, rel_sys_id, inbound_relations, outbound_relations, sysparm_limit/offset/query and api_parameters entirely unexplained.

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 ('Updates the specified CI record') and clarifies the HTTP verb as PUT, which distinguishes full-replacement semantics. However, it never names or contrasts with the obvious siblings servicenow_patch_cmdb_instance or servicenow_update_table_record, so an agent must open schemas to choose among them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance at all: nothing says when to prefer this PUT-based update over servicenow_patch_cmdb_instance or servicenow_update_table_record, and no prerequisites (permissions, required sys_id/className pairing) are stated. Only the implicit 'PUT' hint suggests a full-replace use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_incidentUpdate incidentC

Update an existing incident record.

:param incident_id: The sys_id of the incident record to update. :type incident_id: str :param data: Dictionary of field values to update. :type data: dict

:return: Response containing parsed Pydantic model with information about the updated incident record. :rtype: Response

:raises MissingParameterError: If incident_id or data is not provided. :raises ParameterError: If validation of parameters fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
incident_idNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the description does not need to restate that. It does add genuine value with the error contract (MissingParameterError when incident_id/data are absent, ParameterError on validation failure) and the return type, but is silent on what a partial update does to unspecified fields — even though idempotentHint=false makes that a real question.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is short, but the structure is a raw Sphinx docstring dump with :param/:type/:rtype boilerplate that duplicates the schema and is not front-loaded for an agent reader. The :raises and :return lines earn their place; the markup scaffolding does not.

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 15-parameter mutation tool with 0% schema coverage and no output schema, the definition is thin — it leaves twelve-plus parameters unexplained and gives no guidance on how `data` field names map to ServiceNow incident columns. An agent can call it, but will likely do so with parameters it does not understand.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 15 parameters, so the description must compensate and largely fails: it documents only incident_id and data, leaving all thirteen sysparm_* parameters (view, query, fields, limit, offset, display_value, exclude_reference_link, etc.) entirely undefined anywhere. It also describes incident_id as a "str" sys_id while the schema allows integer or string, creating mild inconsistency.

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 ("Update an existing incident record"), which cleanly separates it from servicenow_create_incident, servicenow_get_incident and servicenow_delete_incident. It does not, however, distinguish it from generic siblings like servicenow_update_table_record or servicenow_patch_table_record, so an agent still has to guess why the incident-specific variant exists.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus the generic table-update tools, nor any preconditions (e.g. the record must already exist, which field set is editable). The only conditional language is the Sphinx :raises block, which describes failures rather than usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_problemUpdate problemC

Update an existing problem record.

:param problem_id: The sys_id of the problem record to update. :type problem_id: str :param data: Dictionary of field values to update. :type data: dict

:return: Response containing parsed Pydantic model with information about the updated problem record. :rtype: Response

:raises MissingParameterError: If problem_id or data is not provided. :raises ParameterError: If validation of parameters fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
problem_idNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose the mutation profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true), so the bar is lower. The description adds useful error behavior (MissingParameterError, ParameterError) and the return shape, but says nothing about partial-update semantics, permissions, or what happens to unspecified fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The one-sentence purpose is well front-loaded, but the remainder is Sphinx directive boilerplate (:type/:rtype/:raises) that consumes space without adding semantic meaning for an agent choosing parameters.

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 15-parameter mutation tool with no output schema and no per-parameter schema descriptions, the description leaves most of the contract unspecified. An agent cannot tell what the remaining sysparm_* parameters do or which combinations are valid.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 15 parameters, and the docstring documents only problem_id and data, leaving 13 sysparm_* controls (view, query, fields, display_value, pagination flags, etc.) entirely unexplained. It also claims problem_id/data are mandatory via a raises clause while the schema marks every property optional with default null.

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?

First line states a specific verb and resource ('Update an existing problem record'), which cleanly separates it from servicenow_create_problem, servicenow_delete_problem, and servicenow_get_problem. It does not, however, distinguish itself from the generic servicenow_update_table_record alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to prefer this specialized problem-update tool over the generic table-record update, nor any prerequisites such as required role or state constraints. Usage is only implied by the tool name itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_set_back_outUpdate set back outC

Backs out an installation operation that was performed on an update set with a given sys_id.

:param update_set_id: Sys_id of the update set. :type update_set_id: str :param rollback_installs: Flag that indicates whether to rollback the batch installation performed during the update set commit. :type rollback_installs: bool

:return: Response containing parsed Pydantic model with progress information about the back out. :rtype: Response

:raises MissingParameterError: If update_set_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, so the safety profile is largely covered. The description adds real context beyond that: it explains rollback_installs as reversing the batch installation performed during commit, notes the return contains progress information, and documents a MissingParameterError. It still omits whether the back out is reversible, what permissions are required, or whether it is synchronous.

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?

The core behavior is front-loaded in a single clear sentence, followed by a structured docstring block for the two parameters, return, and one exception. The rtype/return lines are somewhat boilerplate, but there is no filler prose and the size is appropriate for a first-pass read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, 43 parameters with zero schema descriptions, and only two documented in the description. For an operation this large and mutation-oriented, an agent needs to know which parameters actually matter (only two are real here?) and what the effect on the update set is; the description leaves that entirely unresolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 43 parameters, so the description carries the full burden and only explains two of them (update_set_id and rollback_installs). The explanation of rollback_installs is genuinely useful, but 41 parameters—including many plausibly irrelevant or dangerous ones—remain wholly undocumented anywhere, so the description does not compensate for the coverage gap.

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: 'Backs out an installation operation that was performed on an update set.' Combined with the title this clearly distinguishes it from siblings like update_set_commit, update_set_preview, and update_set_retrieve without needing their schemas. It stops short of a 5 because it doesn't clarify the scope/effect of the back out (what it removes, on which instance).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the surrounding update-set tools (commit, commit_multiple, preview, retrieve). No prerequisites, no mention of the state the update set must be in, and no conditions under which backing out is appropriate or unsafe are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_set_commitUpdate set commitC

Commits an update set with a given sys_id.

:param remote_update_set_id: Sys_id of the update set to commit. :type remote_update_set_id: str :param force_commit: Flag that indicates whether to force commit the update set. :type force_commit: str

:return: Response containing parsed Pydantic model with progress information about the commit. :rtype: Response

:raises MissingParameterError: If remote_update_set_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, idempotentHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavioral detail: force_commit semantics and the MissingParameterError raised when remote_update_set_id is absent. It stops short of describing what committing actually does to the instance, whether it is reversible, or how the progress response should be polled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence is front-loaded and the section is short, but the raw Sphinx-style ':param:/:type:/:rtype:' markup is noisy boilerplate that repeats type information already present in the schema. It is adequately sized but not tightly edited.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must explain returns, and 'progress information about the commit' is thin for an asynchronous-looking operation. Combined with a 43-parameter schema where only two parameters are explained, an agent lacks enough context to call this mutation correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 43 parameters, so the description carries the full burden, yet it documents only remote_update_set_id and force_commit. Those two are given real meaning, but the remaining 41 optional properties are left entirely unexplained, and the description even mistypes force_commit as 'str' while the schema declares boolean.

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 ('Commits an update set with a given sys_id'), which is unambiguous on its own. However it never distinguishes itself from the close sibling servicenow_update_set_commit_multiple, so an agent cannot tell from the text alone which commit variant applies.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisite such as previewing first, and no reference to alternatives like update_set_preview or update_set_commit_multiple. The only usage signal is an implied one (remote_update_set_id must be supplied).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_set_commit_multipleUpdate set commit multipleB

Commits multiple update sets in a single request according to the order that they're provided.

:param remote_update_set_ids: List of sys_ids associated with any update sets to commit. Sys_ids are committed in the order given in the request. :type remote_update_set_ids: str :param force_commit: Flag that indicates whether to force commit the update set. :type force_commit: str

:return: Response containing parsed Pydantic model with progress information about the multiple commits. :rtype: Response

:raises MissingParameterError: If remote_update_set_ids is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, so the mutation profile is covered. The description adds genuinely useful behavior: commits execute in the supplied order, the return carries progress info, and it raises MissingParameterError when remote_update_set_ids is absent (important since the schema marks zero required params). It does not cover force_commit's actual effect or auth/permission needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose sentence is front-loaded and efficient, but the rest is a reST docstring dump whose :type: lines duplicate and contradict the schema, and whose :return:/:rtype: lines are boilerplate. Mixed signal-to-noise.

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 43-parameter commit tool with no output schema, the description is far too thin: it explains two parameters, gives no guidance on the other 41, no alternative-tool routing, and no disclosure of the consequences of committing (or forcing a commit). The Pydantic return note is the only compensating detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 43 parameters, so the description must carry the burden but documents only two (remote_update_set_ids, force_commit), leaving 41 undocumented. It does clarify ordering semantics for the id list, but the force_commit gloss ("Flag that indicates whether to force commit") is tautological, and it even types these as `str` while the schema declares an array and a boolean.

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 ("Commits multiple update sets") plus the notable scope of doing it "in a single request according to the order that they're provided." This clearly separates it from the singular servicenow_update_set_commit sibling by implication, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The "multiple update sets in a single request" framing implies the use case (batching several commits), but there is no explicit when-to-use vs. servicenow_update_set_commit, no when-not guidance, and no stated prerequisites. Usage is inferred rather than spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_set_createUpdate set createB

Creates a new update set and inserts the new record in the Update Sets [sys_update_set] table.

:param update_set_name: Name to give the update set. :type update_set_name: str :param description: Description of the update set. :type description: str :param scope: The scope name of the application in which to create the new update set. :type scope: str :param sys_id: Sys_id of the application in which to create the new update set. :type sys_id: str

:return: Response containing parsed Pydantic model with information about the created update set. :rtype: Response

:raises MissingParameterError: If update_set_name is not provided or both sys_id and scope are not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, and openWorldHint=true, so the mutation profile is covered structurally. The description adds real value beyond that by naming the persistence target table and disclosing the MissingParameterError failure mode, but says nothing about permissions, side effects on scope/application state, or whether re-creation is possible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The opening sentence is front-loaded and the docstring is ordered logically (purpose, params, return, raises). However, the :param/:type pairs are boilerplate that restate names with type info already inferable from the schema, and the block is longer than the effective information content warrants.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool exposing 43 parameters with zero schema coverage and no output schema, the description leaves most of the surface unexplained — an agent cannot know what most parameters do or which matter for a typical call. The return statement is a generic 'parsed Pydantic model' with no description of the contained fields, and no output schema exists to compensate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across 43 parameters, so the description carries the full burden — yet it documents only 4 of them (update_set_name, description, scope, sys_id). It does flag the required-name and scope/sys_id-either-or rules, which the schema marks as optional/nullable, but the remaining ~39 parameters (packages, repo_url, branch_name, rollback_id, etc.) are unexplained in both schema and description.

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 — 'Creates a new update set' — and even names the target table (sys_update_set), so the agent knows exactly what object is produced. It does not, however, distinguish itself from the sibling update-set tools (commit, preview, retrieve, back_out, commit_multiple), which all share the same resource.

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 context is only implied through the :raises block, which tells the agent that update_set_name is mandatory and that either sys_id or scope must be supplied — genuinely useful invocation constraints. There is no statement of when to prefer this tool over the sibling update-set operations, so the when-vs-alternatives guidance is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_set_previewUpdate set previewC

Previews an update set to check for any conflicts and retrieve progress information about the update set operation.

:param remote_update_set_id: Sys_id of the update set to preview. :type remote_update_set_id: str

:return: Response containing parsed Pydantic model with progress information about the preview. :rtype: Response

:raises MissingParameterError: If remote_update_set_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, openWorldHint=true, and non-idempotent, which is somewhat at odds with the word 'preview'; the description never explains why this is not read-only (likely it launches an async preview operation tracked by progress_id). It does add useful error behavior (MissingParameterError) and return type, but omits side effects, permissions, and async semantics.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence, which earns its place. The Sphinx-style :param:/:type:/:return:/:raises: block is boilerplate that partly restates rather than adds, though it is not bloated overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 43 parameters, no output schema, and a non-read-only annotation, the description leaves major questions open: what the other 42 parameters do, whether the operation mutates state, and how progress is polled. It is inadequate for the stated complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% across 43 parameters, and the description documents only remote_update_set_id, leaving 42 parameters (rollback_id, auto_preview, progress_id, etc.) entirely unexplained. The one documented parameter is accurate but far from compensating for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ("Previews an update set") and states the two outcomes: conflict checking and progress information. It is clear enough to distinguish from commit/retrieve siblings, though it does not explicitly name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to call this versus siblings like servicenow_update_set_commit or servicenow_update_set_retrieve, and no prerequisites or sequencing hints. The 'preview before commit' workflow an agent would need is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_set_retrieveUpdate set retrieveC

Retrieves an update set with a given sys_id and allows you to remove the existing retrieved update set from the instance.

:param update_set_id: Sys_id of the update set on the source instance from where the update set was retrieved. :type update_set_id: str :param update_source_id: Sys_id of the remote instance record. :type update_source_id: str :param update_source_instance_id: Instance ID of the remote instance. :type update_source_instance_id: str :param auto_preview: Flag that indicates whether to automatically preview the update set after retrieval. :type auto_preview: bool :param cleanup_retrieved: Flag that indicates whether to remove the existing retrieved update set from the instance. :type cleanup_retrieved: bool

:return: Response containing parsed Pydantic model with progress information about the retrieval. :rtype: Response

:raises MissingParameterError: If update_set_id is not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
nameNo
notesNo
scopeNo
sys_idNo
os_nameNo
versionNo
packagesNo
repo_urlNo
dev_notesNo
plugin_idNo
result_idNo
scan_typeNo
app_sys_idNo
os_versionNo
branch_nameNo
descriptionNo
progress_idNo
rollback_idNo
auto_previewNo
browser_nameNo
combo_sys_idNo
force_commitNo
suite_sys_idNo
target_tableNo
target_sys_idNo
update_set_idNo
api_parametersNo
browser_versionNo
test_suite_nameNo
update_set_nameNo
base_app_versionNo
update_source_idNo
app_scope_sys_idsNo
cleanup_retrievedNo
credential_sys_idNo
mid_server_sys_idNo
rollback_installsNo
test_suite_sys_idNo
remote_update_set_idNo
auto_upgrade_base_appNo
remote_update_set_idsNo
update_source_instance_idNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already supply readOnlyHint=false, openWorldHint=true, idempotentHint=false, and destructiveHint=false, so the safety profile is largely covered. The description adds real value beyond that by documenting the cleanup_retrieved side effect (removing the existing retrieved update set), the auto_preview behavior, the returned progress model, and a MissingParameterError on update_set_id — none of which the annotations disclose. It does not, however, reconcile its 'remove the existing retrieved update set' language with destructiveHint=false, nor explain idempotency or remote-side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the purpose sentence and organized into param/return/raises sections, which is easy to scan. The cost is boilerplate: every ':type:' line merely restates the JSON schema types, and the bulk of the text is a partial parameter list rather than added meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 43 parameters, no output schema, and no required-parameter constraints in the schema, the description covers only a small fraction of the surface area. It does explain the return type (progress information), which helps, but an agent still cannot correctly invoke most of the arguments, and the schema's 'required: 0' is in tension with the description's claim that update_set_id is mandatory.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 43 parameters with 0% description coverage, and the description documents only 5 of them (update_set_id, update_source_id, update_source_instance_id, auto_preview, cleanup_retrieved). Those five carry useful meaning, but 38 parameters — including oddly named ones like force_commit, rollback_installs, remote_update_set_ids — remain completely unexplained, so the description fails to compensate for the coverage gap.

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 ('Retrieves an update set with a given sys_id') and even clarifies the scoping of the sys_id ('on the source instance from where the update set was retrieved'). However, it never distinguishes this tool from close siblings such as update_set_preview, update_set_commit, update_set_back_out, or update_set_create, leaving the agent to infer the retrieve-vs-preview-vs-commit 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 explicit guidance on when to choose this tool over alternatives, nor any stated prerequisites or ordering (e.g., retrieve before preview before commit). The auto_preview and cleanup_retrieved flags imply a workflow but the description never explains it or warns about irreversible follow-up steps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_update_table_recordUpdate table recordC
Idempotent

Fully update a record in the specified table.

:param table: The name of the table. :type table: str :param table_record_sys_id: The sys_id of the record to be updated. :type table_record_sys_id: str :param data: Dictionary containing the fields to be updated. :type data: dict

:return: Response containing parsed Pydantic model with information about the updated record. :rtype: Response

:raises MissingParameterError: If table, table_record_sys_id, or data is not provided. :raises ParameterError: If JSON serialization fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo
tableNo
sysparm_viewNo
sysparm_limitNo
sysparm_queryNo
api_parametersNo
sysparm_fieldsNo
sysparm_offsetNo
name_value_pairsNo
sysparm_no_countNo
table_record_sys_idNo
sysparm_display_valueNo
sysparm_query_categoryNo
sysparm_query_no_domainNo
sysparm_exclude_reference_linkNo
sysparm_suppress_pagination_headerNo

TDQS

C2.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior detail by documenting the raised exceptions (MissingParameterError, ParameterError) and the return type, but it says nothing about the 13 sysparm_*/api_parameters fields that appear on an update tool, so the operation's full behavior remains opaque.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The docstring is reasonably compact, but the :param:/:type: pairing duplicates information and the return/raises sections consume space that could have gone toward the undocumented parameters. It is front-loaded with the core action, which helps.

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?

Given a 16-parameter mutation tool with no output schema and 0% schema description coverage, the description is far from complete. It explains only the three core fields and omits any account of the many sysparm_* parameters, so an agent cannot confidently construct a correct call.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and 16 parameters exist, yet the description documents only three (table, table_record_sys_id, data). The remaining parameters (sysparm_view, sysparm_limit, sysparm_query, api_parameters, name_value_pairs, etc.) are undefined in both schema and description, which is a severe gap for an update tool whose purpose those query-style params do not obviously serve.

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 ('Fully update a record in the specified table'), and the word 'Fully' implicitly distinguishes it from the sibling servicenow_patch_table_record (partial update). However, it never names that sibling or explicitly contrast the two, so the distinction is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus servicenow_patch_table_record or servicenow_add_table_record. It also provides no prerequisite or context information (e.g., that the record must already exist, or what permissions are needed), leaving the agent to infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_upload_attachmentUpload attachmentA

Upload a file as an attachment on a table record.

Accepts either a server-local file_path (back-compat) or inline base64-encoded data (via AttachmentModel) — the latter is written to a temp file server-side for the upload and cleaned up afterward, so JSON-only MCP tool callers can upload without a filesystem path.

:param file_path: Path to a file on disk to upload. Mutually exclusive with data; takes precedence if both are given. :type file_path: str or None

:raises MissingParameterError: If table_name, table_sys_id, or file_name is missing, or if neither file_path nor data is provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathNo
params_jsonNo{}

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly=false, destructive=false, idempotent=false, and openWorld=true. Beyond that, the description discloses a non-obvious implementation trait: inline base64 data is written to a temp file server-side and cleaned up afterward. It also names the error condition (MissingParameterError) when required identifiers are missing, adding real behavioral context.

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 core purpose, then the two input modes, then parameter and error detail. The Sphinx-style :param/:raises blocks are slightly heavy for a tool description but every line carries information rather than 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?

There is no output schema, yet the description never says what is returned (e.g. the created attachment sys_id). Combined with 0% schema coverage and an undocumented params_json envelope, an agent still lacks the shape of the call despite the useful mode and error disclosures.

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 0% and the top-level schema exposes only file_path and an opaque params_json blob. The description documents file_path semantics well (mutually exclusive with data, precedence when both supplied) and names table_name, table_sys_id, file_name, and data, which evidently travel inside params_json — but it never explains params_json itself, leaving the actual envelope undocumented.

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 — 'Upload a file as an attachment' — plus the target ('on a table record'), which is more than the name alone conveys. It does not explicitly distinguish itself from sibling attachment tools (get_attachment, delete_attachment), so it lands just 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 description explains the two input modes and when each is appropriate (server-local path for back-compat, inline base64 for JSON-only MCP callers), which is genuine conditional guidance. However, there is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

servicenow_workflow_to_mermaidWorkflow to mermaidA

Generates a Mermaid diagram representing the relationships between ServiceNow flows and subflows.

:param flow_identifiers: List of flow names or sys_ids to use as roots. If None, fetches all active flows. :param max_depth: Maximum recursion depth for subflow discovery. :param save_to_file: Whether to save the result to a markdown file. :param output_dir: Directory to save the report. Defaults to project/servicenow_flow_reports. :param mermaid_name: Base name for the generated file (used if destination_file is not provided). :param segment_by_root: If True, generates a separate diagram for each root flow. :param destination_file: Explicit full path to save the markdown report.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_depthNo
output_dirNo
mermaid_nameNoservicenow_workflow
save_to_fileNo
segment_by_rootNo
destination_fileNo
flow_identifiersNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true). The description adds real context beyond them: it writes a markdown file to disk, the default output directory (project/servicenow_flow_reports), and the fallback naming logic. It stops short of stating auth/instance requirements or what is returned when save_to_file=false.

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?

Classic docstring layout: a one-sentence purpose followed by a compact parameter list, front-loaded and free of filler. Efficient, though the prose could note what the diagram output looks like.

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 7-parameter tool with no output schema and file-writing behavior, the description covers inputs well but leaves an important gap: whether the diagram is returned inline or only written to disk, and what the agent should expect when save_to_file=false. Adequate but not complete.

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 0%, so the description carries the full load, and it documents all seven parameters, including non-obvious ones like flow_identifiers accepting names or sys_ids and mermaid_name being used only when destination_file is absent. Some parameters (max_depth, segment_by_root) get only one-line glosses, but coverage of an otherwise undocumented schema is strong.

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 artifact ("Generates a Mermaid diagram") plus the exact domain ("relationships between ServiceNow flows and subflows"). This is clearly distinguishable from siblings like servicenow_get_flow_metadata or servicenow_collect_graph_for_roots.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance or routing to alternatives. The only conditional statement ("If None, fetches all active flows") describes default behavior, not a usage decision. An agent gets no help choosing between this and the other flow/graph tools.

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. 133 tool updatesv2.4.0
    • First observedservicenow_activate_plugin
    • First observedservicenow_add_ci_lifecycle_action
    • First observedservicenow_add_table_record
    • First observedservicenow_api_request
    • First observedservicenow_app_repo_install
    • First observedservicenow_app_repo_publish
    • First observedservicenow_app_repo_rollback
    • First observedservicenow_apply_remote_source_control_changes
    • First observedservicenow_approve_change_request
    • First observedservicenow_batch_install
    • First observedservicenow_batch_install_result
    • First observedservicenow_batch_request
    • First observedservicenow_batch_rollback
    • First observedservicenow_calculate_standard_change_request_risk
    • First observedservicenow_check_change_request_conflict
    • First observedservicenow_check_ci_lifecycle_compat_actions
    • First observedservicenow_check_ci_lifecycle_lease_expired
    • First observedservicenow_check_ci_lifecycle_not_allowed_action
    • First observedservicenow_check_ci_lifecycle_not_allowed_ops_transition
    • First observedservicenow_check_ci_lifecycle_requestor_valid
    • First observedservicenow_check_devops_change_control
    • First observedservicenow_check_devops_step_mapping
    • First observedservicenow_check_service_qualification
    • First observedservicenow_collect_graph_for_roots
    • First observedservicenow_combo_suite_scan
    • First observedservicenow_create_change_request
    • First observedservicenow_create_change_request_ci_association
    • First observedservicenow_create_change_request_task
    • First observedservicenow_create_cmdb_instance
    • First observedservicenow_create_cmdb_relation
    • First observedservicenow_create_incident
    • First observedservicenow_create_problem
    • First observedservicenow_delete_attachment
    • First observedservicenow_delete_change_request
    • First observedservicenow_delete_change_request_conflict_scan
    • First observedservicenow_delete_change_request_task
    • First observedservicenow_delete_ci_lifecycle_action
    • First observedservicenow_delete_cmdb_relation
    • First observedservicenow_delete_incident
    • First observedservicenow_delete_problem
    • First observedservicenow_delete_product_inventory
    • First observedservicenow_delete_table_record
    • First observedservicenow_extend_ci_lifecycle_lease
    • First observedservicenow_full_scan
    • First observedservicenow_get_account
    • First observedservicenow_get_activity_subscriptions
    • First observedservicenow_get_application
    • First observedservicenow_get_attachment
    • First observedservicenow_get_change_request
    • First observedservicenow_get_change_request_ci
    • First observedservicenow_get_change_request_conflict
    • First observedservicenow_get_change_request_models
    • First observedservicenow_get_change_request_nextstate
    • First observedservicenow_get_change_request_schedule
    • First observedservicenow_get_change_request_tasks
    • First observedservicenow_get_change_request_worker
    • First observedservicenow_get_change_requests
    • First observedservicenow_get_ci_lifecycle_active_actions
    • First observedservicenow_get_ci_lifecycle_status
    • First observedservicenow_get_cmdb
    • First observedservicenow_get_cmdb_instance
    • First observedservicenow_get_cmdb_instances
    • First observedservicenow_get_data_classification
    • First observedservicenow_get_devops_change_info
    • First observedservicenow_get_devops_code_schema
    • First observedservicenow_get_devops_onboarding_status
    • First observedservicenow_get_devops_orchestration_schema
    • First observedservicenow_get_devops_plan_schema
    • First observedservicenow_get_featured_knowledge_article
    • First observedservicenow_get_flow_metadata
    • First observedservicenow_get_hr_profile
    • First observedservicenow_get_import_set
    • First observedservicenow_get_incident
    • First observedservicenow_get_incidents
    • First observedservicenow_get_knowledge_article
    • First observedservicenow_get_knowledge_article_attachment
    • First observedservicenow_get_knowledge_articles
    • First observedservicenow_get_most_viewed_knowledge_articles
    • First observedservicenow_get_problem
    • First observedservicenow_get_problems
    • First observedservicenow_get_product_inventory
    • First observedservicenow_get_service_qualification
    • First observedservicenow_get_standard_change_request_model
    • First observedservicenow_get_standard_change_request_template
    • First observedservicenow_get_standard_change_request_templates
    • First observedservicenow_get_stats
    • First observedservicenow_get_table
    • First observedservicenow_get_table_record
    • First observedservicenow_import_repository
    • First observedservicenow_ingest_cmdb_data
    • First observedservicenow_ingest_incidents
    • First observedservicenow_insert_cost_plans
    • First observedservicenow_insert_import_set
    • First observedservicenow_insert_multiple_import_sets
    • First observedservicenow_insert_project_tasks
    • First observedservicenow_instance_scan_progress
    • First observedservicenow_metricbase_insert
    • First observedservicenow_patch_cmdb_instance
    • First observedservicenow_patch_table_record
    • First observedservicenow_point_scan
    • First observedservicenow_process_service_qualification_result
    • First observedservicenow_progress
    • First observedservicenow_refresh_auth_token
    • First observedservicenow_refresh_change_request_impacted_services
    • First observedservicenow_register_ci_lifecycle_operator
    • First observedservicenow_register_devops_artifact
    • First observedservicenow_rollback_plugin
    • First observedservicenow_run_test_suite
    • First observedservicenow_sdk_auth
    • First observedservicenow_sdk_build
    • First observedservicenow_sdk_dependencies
    • First observedservicenow_sdk_deploy
    • First observedservicenow_sdk_init
    • First observedservicenow_sdk_transform
    • First observedservicenow_send_email
    • First observedservicenow_set_ci_lifecycle_status
    • First observedservicenow_suite_scan
    • First observedservicenow_unregister_ci_lifecycle_operator
    • First observedservicenow_update_change_request
    • First observedservicenow_update_change_request_first_available
    • First observedservicenow_update_change_request_task
    • First observedservicenow_update_cmdb_instance
    • First observedservicenow_update_incident
    • First observedservicenow_update_problem
    • First observedservicenow_update_set_back_out
    • First observedservicenow_update_set_commit
    • First observedservicenow_update_set_commit_multiple
    • First observedservicenow_update_set_create
    • First observedservicenow_update_set_preview
    • First observedservicenow_update_set_retrieve
    • First observedservicenow_update_table_record
    • First observedservicenow_upload_attachment
    • First observedservicenow_workflow_to_mermaid

TDQS

C2.2/5.0

Scored across 133 tools

Disambiguation2/5

Many tools overlap heavily: generic table CRUD tools (add/get/patch/update/delete_table_record) duplicate entity-specific incident, problem, and change request operations, while servicenow_api_request and servicenow_batch_request are broad escape hatches. Numerous tools such as 'Invoke the ... operation' lack enough description to distinguish their boundaries, making misselection likely despite some clearly distinct domains.

Naming Consistency3/5

Most tool names use the servicenow_ prefix and snake_case verb_noun structure (e.g., get_incident, create_change_request, delete_problem), which is readable. However, there are notable deviations such as noun-only or vague names (servicenow_progress, servicenow_full_scan, servicenow_metricbase_insert) and inconsistent singular/plural/alias patterns that reduce predictability.

Tool Count1/5

133 tools is an extreme mismatch for a coherent MCP server surface; the recommended well-scoped range is typically 3-15 tools. The count is inflated by many redundant wrappers, generic table operations, and fine-grained SDK/administrative actions that likely belong in fewer, more parameterized tools.

Completeness4/5

The surface covers a broad range of ServiceNow domains: incidents, problems, change management, CMDB, knowledge, DevOps, app repository, plugins, update sets, import sets, scanning, attachments, and SDK lifecycle. Some entity-specific gaps remain, such as knowledge article write operations and CI instance deletion, but the generic table CRUD and api_request tools provide workarounds for many missing operations.

Maintenance

ActivityActive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers