Skip to main content
Glama
crunchtools

MCP Request Tracker CrunchTools

by crunchtools

MCP Request Tracker CrunchTools

A secure MCP (Model Context Protocol) server for Request Tracker (RT) ticket management.

Features

  • Secure Credential Handling: Passwords stored as SecretStr, never logged

  • Full Ticket Management: Search, view, create, update, and resolve tickets

  • Time Tracking: Track time worked on tickets

  • Workflow Automation: Pre-built workflows like checklist completion

  • Cross-Platform: Works on Linux, macOS, and Windows

Related MCP server: YaTracker Connector

Installation

uvx mcp-request-tracker-crunchtools

Option 2: Using pip

pip install mcp-request-tracker-crunchtools

Option 3: Using Container

podman run -e RT_URL=... -e RT_USER=... -e RT_PASS=... quay.io/crunchtools/mcp-request-tracker

Configuration

Set the following environment variables:

Variable

Required

Description

RT_URL

Yes

Base URL of your RT server

RT_USER

Yes

RT username

RT_PASS

Yes

RT password

RT_HTTP_USER

No

HTTP Basic Auth username

RT_HTTP_PASS

No

HTTP Basic Auth password

Usage with Claude Code

Using uvx

claude mcp add mcp-request-tracker-crunchtools \
    --env RT_URL=https://rt.example.com \
    --env RT_USER=your_username \
    --env RT_PASS=your_password \
    -- uvx mcp-request-tracker-crunchtools

Using Container

claude mcp add mcp-request-tracker-crunchtools \
    --env RT_URL=https://rt.example.com \
    --env RT_USER=your_username \
    --env RT_PASS=your_password \
    -- podman run -i --rm -e RT_URL -e RT_USER -e RT_PASS quay.io/crunchtools/mcp-request-tracker

Available Tools

Search and View

  • search_tickets - Search tickets using RT query syntax

  • get_ticket - Get ticket details

  • get_ticket_history - Get ticket history/changelog

  • get_my_open_tickets - Get open tickets for a user

  • get_new_tickets - Get new/unassigned tickets

Update Tickets

  • set_ticket_owner - Set ticket owner

  • set_ticket_status - Set ticket status

  • open_ticket - Open a ticket

  • resolve_ticket - Resolve/close a ticket

  • take_ticket - Take ownership and open

Time Tracking

  • set_time_worked - Set total time worked

  • add_time_worked - Add time to existing time

Communication

  • add_ticket_comment - Add private comment (not visible to requestor)

  • reply_to_ticket - Add correspondence (visible to requestor)

Creation

  • create_ticket - Create a new ticket

Workflows

  • complete_weekly_checklist - Complete a weekly checklist ticket with results

RT Query Syntax Examples

Status = 'new'
Status = 'open' AND Owner = 'scott'
Subject LIKE 'checklist'
Queue = 'Professional'
Created > '2025-01-01'
Owner = 'Nobody'

Security

This server is built with security in mind:

  • SecretStr: Passwords are stored using Pydantic's SecretStr to prevent accidental logging

  • Error Sanitization: Credentials are scrubbed from all error messages

  • No Filesystem Access: The server never reads or writes files

  • No Shell Execution: No subprocess or shell commands

  • Minimal Dependencies: Only essential packages to reduce attack surface

  • Automated CVE Scanning: Weekly security scans via GitHub Actions

  • Container Security: Built on Hummingbird images with minimal CVE count

See SECURITY.md for the full security design document.

Development

# Clone the repository
git clone https://github.com/crunchtools/mcp-request-tracker.git
cd mcp-request-tracker

# Install dependencies
uv sync --all-extras

# Run tests
uv run pytest

# Lint
uv run ruff check src tests

# Type check
uv run mypy src

License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See LICENSE for details.

Available Tools

17 tools
add_ticket_comment_toolAdd Ticket Comment ToolA

Add a private comment/note to a ticket (not visible to requestor).

ParametersJSON Schema
NameRequiredDescriptionDefault
commentYesThe comment text
ticket_idYesThe ticket ID number

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden, and it usefully discloses the visibility constraint (the requestor never sees the comment). However it says nothing about permissions required, whether editing or deletion is possible afterward, whether notifications are triggered, or the mutation's permanence.

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 sentence with zero padding, and the most decision-relevant detail (privacy) is placed immediately in the parenthetical.

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?

An output schema exists, so return values need no explanation, and the tool is a simple two-parameter append. The only real gap is disambiguation from reply_to_ticket_tool, which the description does not address.

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

Parameters3/5

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

Schema description coverage is 100%, so both ticket_id and comment are already documented in the schema. The description adds no syntax, format, or length guidance beyond that, so the 3 baseline 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?

Names a specific verb (add) and resource (comment/note on a ticket), and the parenthetical '(not visible to requestor)' implicitly separates it from reply_to_ticket_tool. It stops short of naming that sibling, so an agent still has to infer the routing rather than being told.

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 or when-not-to-use statement, and the closest alternative (reply_to_ticket_tool) is never mentioned. Usage is only implied by the word 'private' — an agent can infer this is for internal notes, but the guidance is not stated.

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

add_time_worked_toolAdd Time Worked ToolC

Add time to the time worked on a ticket.

ParametersJSON Schema
NameRequiredDescriptionDefault
minutesYesAdditional time to add in minutes
ticket_idYesThe ticket ID number

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a mutation ('Add time') but says nothing about whether the time is appended to a running total, whether it requires the ticket to be owned by the caller, or how invalid/rejected entries behave. For an unannotated mutation tool this is a significant gap.

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

Conciseness4/5

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

One short, front-loaded sentence with no filler. It is appropriately sized but arguably under-specified rather than deliberately concise.

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 values need no explanation, and the input surface is small (2 params at 100% coverage). Still, as an unannotated write tool with a near-identical sibling, the description should at least clarify additive semantics and the add-vs-set distinction.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (ticket_id, minutes) are already documented in the schema, including that minutes is 'Additional time to add in minutes'. The description adds no format, unit, or constraint detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('Add time ... on a ticket') and the word 'Add' distinguishes it semantically from the sibling set_time_worked_tool by implying an increment rather than a replacement. However, it never names or contrasts with that sibling, so the differentiation is only 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?

There is no when-to-use guidance and no mention of set_time_worked_tool, the obvious alternative for logging time. An agent must infer from the tool name alone whether to add or set time, and no prerequisites (e.g. ticket must be assigned to the caller) are stated.

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

complete_weekly_checklist_toolComplete Weekly Checklist ToolA

Complete a weekly checklist ticket with results.

This is a workflow shortcut that:

  1. Takes ownership of the ticket

  2. Opens the ticket

  3. Adds correspondence with checklist results

  4. Adds time worked (if specified)

  5. Adds a "Completed" comment

  6. Resolves the ticket

ParametersJSON Schema
NameRequiredDescriptionDefault
ownerYesUsername taking the ticket
ticket_idYesThe ticket ID number
time_minutesNoTime spent on checklist (optional)
checklist_resultsYesThe checklist completion results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the full burden, and it does so well by disclosing every state change in order: ownership transfer, opening, correspondence, time entry, comment, and resolution. It stops short of stating permission requirements, idempotency, or what happens if a mid-sequence step fails.

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

Conciseness5/5

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

One summary sentence followed by a tight numbered list; the composite nature is front-loaded and every line maps to a real side effect. No filler.

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

Completeness4/5

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

For a multi-step mutating shortcut, the description fully enumerates the sequence, and the existing output schema covers return values. The remaining gap is partial-failure behavior across six non-atomic steps, which an agent would want to know.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters are already documented. The description only loosely ties inputs to steps ('results', 'time worked (if specified)'), adding little beyond the schema. Baseline 3 applies.

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+resource ('Complete a weekly checklist ticket with results') and then enumerates the exact six-step effect. It is immediately distinguishable from the many atomic siblings (take_ticket_tool, resolve_ticket_tool) because it declares itself a composite shortcut.

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

Usage Guidelines4/5

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

The phrase 'This is a workflow shortcut' signals when to reach for it — when the whole sequence is wanted rather than individual steps. It never explicitly names the alternative atomic tools or states a when-not condition, so it's clear context without exclusions.

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

create_ticket_toolCreate Ticket ToolC

Create a new ticket.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoInitial ticket content/description
ownerNoUsername to assign as owner
queueYesQueue name (e.g., 'General', 'Professional')
subjectYesTicket subject/title
priorityNoTicket priority (0-99)
requestorNoEmail of the requestor

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.5/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden. It does not disclose side effects (e.g., notifications sent, ticket ID returned, default status), permissions required, or what happens on duplicate creation. For a mutation tool with zero annotation coverage, this is a significant gap.

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

Conciseness3/5

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

The description is a single four-word sentence, which is concise but arguably under-specified for a creation tool. It is front-loaded but does not earn its place by adding value beyond the tool name. No structure issues, but minimal 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?

Given the tool has no annotations, no output schema is mentioned (though context says it exists), and the description is minimal, it is incomplete. It fails to mention required parameters, side effects, or return behavior. For a mutation tool in a rich sibling environment, more context is needed.

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

Parameters3/5

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

Schema description coverage is 100%, so all six parameters are documented in the schema itself. The description adds no additional parameter meaning, which is acceptable per the baseline rule when coverage is high. A 3 is appropriate because the schema does the heavy lifting.

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 'Create a new ticket' states a clear verb and resource, but it is essentially a restatement of the tool name and title. It does not distinguish this tool from siblings like update_ticket_tool or open_ticket_tool beyond the obvious 'create' action. Still, the core purpose is identifiable.

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 about when to use this tool versus alternatives. There is no mention of prerequisites (e.g., queue must exist), when to prefer update_ticket_tool, or any context about the creation workflow. The agent is left to infer everything.

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

get_my_open_tickets_toolGet My Open Tickets ToolB
Read-only

Get all open tickets assigned to a user.

ParametersJSON Schema
NameRequiredDescriptionDefault
ownerYesUsername to search for

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

readOnlyHint=true already establishes this as a safe, non-mutating read, and an output schema exists so return shape need not be described. The description adds only that results are scoped to one assignee's open tickets; it says nothing about pagination, ordering, or how 'open' is defined relative to 'new'.

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

Conciseness4/5

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

A single sentence with the scope qualifier front-loaded and no filler; nothing needs to be cut. It is lean to the point of omitting useful context, but that is a completeness problem rather than a structural one.

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

Completeness3/5

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

With annotations covering safety and an output schema covering the response, the remaining burden on the description is mostly disambiguation. Given seven ticket-related siblings, the definition does not do enough to establish when this tool is the right pick over get_new_tickets_tool or search_tickets_tool, which is the one real gap an agent faces.

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

Parameters3/5

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

Schema description coverage is 100% and the single parameter is documented as 'Username to search for'. The description's phrase 'assigned to a user' loosely corresponds to the owner parameter but adds no format, casing, or matching semantics beyond what the schema already states, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific verb and resource ('Get all open tickets') plus a scope qualifier ('assigned to a user'), which is enough to understand the operation at a glance. It does not, however, differentiate itself from siblings like get_new_tickets_tool or search_tickets_tool, so the agent must infer whether 'open' overlaps with 'new'.

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 exclusions, and no mention of the obvious alternatives (search_tickets_tool for filtered queries, get_new_tickets_tool for newly created tickets). The routing decision among these closely named siblings is left entirely to inference.

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

get_new_tickets_toolGet New Tickets ToolB
Read-only

Get all new (unassigned) tickets, optionally filtered by queue.

ParametersJSON Schema
NameRequiredDescriptionDefault
queueNoOptional queue name to filter by

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

readOnlyHint=true already tells the agent this is a safe read, so the description's remaining job is lighter. It adds the definitional clarification that 'new' means unassigned, but says nothing about volume, ordering, or pagination behavior for a tool that claims to return 'all' tickets, which is a real gap for a bulk read.

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

Conciseness5/5

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

One short sentence, front-loaded with the verb and scope, with zero filler. Nothing in it is redundant and nothing could be trimmed without losing meaning.

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 simple single-parameter read tool with full schema coverage, an output schema (so return values need no explanation), and a readOnly annotation covering safety, the description is close to sufficient. The only substantive omission is routing guidance relative to the many sibling retrieval tools.

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

Parameters3/5

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

Schema description coverage is 100% and the single optional parameter is fully documented in the schema, so baseline 3 applies. The description's 'optionally filtered by queue' merely restates what the schema already conveys and adds no format or matching 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 (get tickets) plus a scope qualifier, and usefully defines 'new' as 'unassigned', which an agent could not infer from the name alone. It does not, however, distinguish this from overlapping siblings such as search_tickets_tool or get_my_open_tickets_tool, so the agent must guess whether this is the right entry point.

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 named alternative, despite a sibling set containing search_tickets_tool and get_my_open_tickets_tool that plausibly return overlapping ticket sets. The queue filter is mentioned but no condition selecting this tool over those is given.

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

get_ticket_history_toolGet Ticket History ToolB
Read-only

Get the history/changelog of a ticket.

ParametersJSON Schema
NameRequiredDescriptionDefault
ticket_idYesThe ticket ID number

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

The readOnlyHint=true annotation already establishes this as a safe, non-mutating read, so the description carries a lighter burden. It adds only the clarification that the payload is a history/changelog rather than current state; it says nothing about ordering, volume, or pagination, but the output schema covers the return 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 with no filler and the resource front-loaded after the verb. It is efficient, though it is terse to the point of omitting any routing or scoping detail.

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 one-parameter read tool with readOnlyHint and a full output schema, the description covers the essential contract. The only real omission is how this differs from get_ticket_tool, which is a minor gap given the rich structured metadata.

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

Parameters3/5

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

Schema description coverage is 100% and the single ticket_id parameter is fully documented in the schema, so the description neither needs to nor does add syntax or format detail. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb (Get) and resource (history/changelog of a ticket), so the agent knows exactly what it retrieves. It does not, however, distinguish itself from the sibling get_ticket_tool, which an agent must disambiguate on its own.

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 the sibling get_ticket_tool as the alternative for current (non-historical) data. The agent can infer that this is for changelog retrieval, but nothing in the text routes it among the 17 sibling tools.

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

get_ticket_toolGet Ticket ToolC
Read-only

Get details of a specific ticket.

ParametersJSON Schema
NameRequiredDescriptionDefault
ticket_idYesThe ticket ID number

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

The readOnlyHint=true annotation already establishes that this is a safe read, so the safety profile is covered. The description adds no behavioral context beyond that — no note on permissions, missing-ticket behavior, or what the detail payload includes.

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, front-loaded sentence with no filler. It is efficiently sized, though the terseness is also what leaves behavioral and routing gaps.

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 values need not be explained, and the single param is documented. But given 16 sibling tools including several other ticket-retrieval tools, the description is too thin to help an agent confidently select this one.

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

Parameters3/5

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

Schema coverage is 100% and there is a single required ticket_id parameter, so the schema fully documents the input. The description's phrase 'specific ticket' adds only marginal meaning over the schema, making the baseline 3 appropriate.

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

Purpose4/5

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

States a specific verb and resource (fetch details of a ticket), so the basic operation is clear. However, it does nothing to distinguish itself from siblings like get_ticket_history_tool, get_my_open_tickets_tool, or search_tickets_tool, so an agent cannot tell from the text which retrieval tool is appropriate.

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 is given, and no alternatives are named despite a crowded sibling set of retrieval tools (search, history, my-open, new tickets). The agent must infer the correct routing condition on its own.

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

open_ticket_toolOpen Ticket ToolB

Open a ticket (change status from new to open), optionally taking ownership.

ParametersJSON Schema
NameRequiredDescriptionDefault
ownerNoOptional username to assign as owner
ticket_idYesThe ticket ID number

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

No annotations exist, so the description carries the full behavioral burden. It usefully discloses the underlying state machine (new -> open) and that ownership assignment is optional, which is real behavior beyond the schema. But it omits what happens if the ticket is not in 'new' state, permission requirements, and whether the change 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.

Conciseness5/5

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

A single sentence with the action front-loaded and the clarifying state transition in parentheses; every clause earns its place and nothing is wasted.

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

Completeness3/5

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

An output schema exists, so return values need no explanation, and the two-parameter surface is simple. Still, as an unannotated mutation tool it lacks preconditions and failure modes (e.g., ticket already open), leaving the agent to discover the state-machine contract by trial.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (ticket_id, owner) are already documented, setting the baseline at 3. The description reinforces that owner is optional but adds no format, defaulting, or side-effect detail beyond the schema.

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

Purpose4/5

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

States a specific verb and resource ('Open a ticket') and clarifies the exact state transition involved ('change status from new to open'), which is more precise than the bare name. However, it never distinguishes itself from close siblings like set_ticket_status_tool (which can likely also set status to open) or take_ticket_tool, so an agent cannot route between them 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?

No when-to-use guidance and no exclusions are given. With three overlapping siblings (set_ticket_status_tool, take_ticket_tool, set_ticket_owner_tool), the description leaves the agent to guess which tool owns this transition, especially since 'optionally taking ownership' overlaps take_ticket_tool.

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

reply_to_ticket_toolReply To Ticket ToolA

Reply to a ticket (correspondence visible to requestor).

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe reply message
ticket_idYesThe ticket ID number

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It does disclose the key behavioral trait — the message is externally visible to the requestor — but says nothing about notification/email side effects, editability, permissions, or irreversibility of a mutation.

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

Conciseness5/5

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

A single short sentence with the visibility constraint front-loaded and zero filler. Nothing could be removed without losing meaning.

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?

Parameters are well covered and an output schema exists, so return values need no explanation. However, for a no-annotation mutation tool, the description omits whether the reply triggers a requestor notification and whether it can be amended — gaps an agent would care about.

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

Parameters3/5

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

Schema description coverage is 100% for both parameters (message, ticket_id), so the schema documents them fully. The description adds no format, length, or ID-resolution guidance beyond what the schema already states; 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 (reply) and resource (ticket), plus a scope qualifier — correspondence is visible to the requestor. That qualifier meaningfully separates it from sibling add_ticket_comment_tool, though the sibling is not named 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 parenthetical implies the public/customer-facing case versus an internal comment, but there is no explicit when-to-use statement or named alternative. An agent must infer that add_ticket_comment_tool covers the private case.

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

resolve_ticket_toolResolve Ticket ToolB

Resolve/close a ticket, optionally adding a comment.

ParametersJSON Schema
NameRequiredDescriptionDefault
commentNoOptional comment to add before resolving
ticket_idYesThe ticket ID number

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries full behavioral burden yet discloses almost nothing beyond the mutation itself. It does not state whether resolving is reversible, what status the ticket lands in, whether notifications are sent, or permission requirements; only the 'comment added before resolving' ordering is conveyed, which is minor.

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

Conciseness5/5

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

A single short sentence that is front-loaded with the core action and appends the optional behavior. Nothing superfluous.

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 values need not be described. But for a mutating tool with zero annotations on a platform full of overlapping status/update tools, the description should at minimum clarify its relationship to set_ticket_status_tool; it does not.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (comment, ticket_id) are already documented in the schema, establishing the baseline of 3. The description's 'optionally adding a comment' only restates what the schema already says and adds no new syntax or format detail.

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 (resolve/close) and resource (ticket), which is clear on its own. However it does not differentiate from the very similar sibling set_ticket_status_tool, which could plausibly achieve the same outcome, so an agent cannot fully disambiguate from the name and 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 guidance about when to pick this tool over set_ticket_status_tool or update_ticket_tool, nor any preconditions such as whether the ticket must be owned/assigned. There is only implied usage from the verb.

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

search_tickets_toolSearch Tickets ToolC
Read-only

Search for tickets using RT query syntax.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesRT query string (e.g., "Status = 'new'", "Subject LIKE 'checklist'", "Owner = 'scott'", "Queue = 'Professional'")
order_byNoField to order by, prefix with - for descending (default: -Created)-Created

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

readOnlyHint=true already tells the agent this is a safe read, so the annotation carries the safety profile. The description adds no behavioral context at all — nothing about result limits, pagination, whether the query must be valid RT syntax or how failures are surfaced.

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 waste. It is efficient but so terse that the brevity edges toward under-specification rather than crispness.

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 the description need not explain return values, and the annotation covers safety. Still, for a query-driven search tool in a crowded sibling set, the absence of any scoping, limit, or alternative-tool information leaves a real gap.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are documented inline with concrete RT examples, so the schema does the heavy lifting. The description only names the dialect ('RT query syntax'), which adds little beyond the schema. 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 (Search) and resource (tickets) plus the query dialect, so the agent knows this is a free-form query tool over the ticket collection. It does not distinguish itself from siblings like get_new_tickets_tool or get_my_open_tickets_tool, which also retrieve tickets, 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 when-to-use guidance and does not mention any alternative. With 17 siblings including several prefixed 'get_*' ticket retrievers, the agent gets no signal about when a raw RT query is preferable to the specialized convenience tools.

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

set_ticket_owner_toolSet Ticket Owner ToolC

Set the owner of a ticket (take/assign ticket).

ParametersJSON Schema
NameRequiredDescriptionDefault
ownerYesUsername of the new owner
ticket_idYesThe ticket ID number

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure for what is clearly a mutation. It does not say whether this requires permissions, whether it is idempotent, whether it overwrites a prior assignee or records history, or whether it interacts with ticket status.

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

Conciseness4/5

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

A single short sentence with the action front-loaded and no filler. The parenthetical is the only questionable element, since it introduces synonym ambiguity rather than useful 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?

The output schema covers return values, but for a two-parameter mutation tool with zero annotations and an overlapping sibling, the description leaves too much unstated: prerequisites, effect on existing assignment/history, and a clear route to take_ticket_tool.

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

Parameters3/5

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

Schema description coverage is 100% (owner = 'Username of the new owner', ticket_id = 'The ticket ID number'), so the schema already documents both parameters. The description adds no format, source, or constraint detail beyond that, making the baseline 3 appropriate.

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

Purpose4/5

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

States a specific verb (set) and resource (ticket owner) with a concrete effect, so an agent knows what happens. However, it does not distinguish itself from the sibling take_ticket_tool, which the parenthetical '(take/assign ticket)' actually blurs rather than clarifies.

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 is given, and the parenthetical synonyms '(take/assign ticket)' do not resolve the ambiguity with the sibling take_ticket_tool, which appears to do the same thing. There is no indication of prerequisites, exclusions, or which of the two tools an agent should prefer.

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

set_ticket_status_toolSet Ticket Status ToolC

Set the status of a ticket.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYesNew status (e.g., 'new', 'open', 'stalled', 'resolved', 'rejected', 'deleted')
ticket_idYesThe ticket ID number

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing beyond the bare action. It does not say whether the change is destructive/reversible, what side effects occur (notifications, reopening resolved tickets, audit entries), or what permissions are required for a mutation with enumerated lifecycle states.

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 waste, but it is under-specified rather than genuinely concise — brevity here comes at the cost of routing and behavioral information an agent 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?

An output schema exists, so return values need not be explained. But for a status-mutating tool with no annotations and heavy sibling overlap, the description omits the crucial distinction of when this generic setter is correct versus the specialized resolve/open/take tools.

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

Parameters3/5

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

Schema description coverage is 100% and the schema documents both ticket_id and the enumerated status values, so the baseline is 3. The description adds no syntax, constraints, or meaning beyond what the schema already provides.

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

Purpose4/5

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

The description states a specific verb and resource ('set the status of a ticket'), so the agent knows what the tool does. However, it offers no differentiation from siblings that likely also change status (resolve_ticket_tool, open_ticket_tool, take_ticket_tool), which is the main risk here.

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 alternatives, despite several sibling tools (resolve_ticket_tool, open_ticket_tool, take_ticket_tool) that plausibly overlap with generic status setting. The agent must guess which tool is appropriate.

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

set_time_worked_toolSet Time Worked ToolC

Set the total time worked on a ticket.

ParametersJSON Schema
NameRequiredDescriptionDefault
minutesYesTotal time worked in minutes
ticket_idYesThe ticket ID number

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full behavioral burden. It implies an overwrite ('set the total') but does not state whether prior time values are replaced or merged, whether any permission is required, or whether the operation is reversible — all of which matter for a mutating tool.

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 arguably too terse for a mutation tool with no annotations, which slightly undercuts '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?

The presence of an output schema means return values need not be described, but the description still leaves critical gaps: no annotation coverage, no routing guidance against add_time_worked_tool, and no disclosure of overwrite semantics. For a write operation in a toolset with a very similar sibling, more context is warranted.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (ticket_id, minutes) are already documented with types and constraints. The description adds no additional meaning beyond what the schema provides, which is the baseline case for complete schema coverage.

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 ('Set') and resource ('total time worked on a ticket'), which is clear enough for an agent to understand the operation. However, it does not differentiate itself from the sibling add_time_worked_tool, which is the most directly competing tool — the word 'total' hints at an overwrite semantic, but the description never confirms this 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 add_time_worked_tool or update_ticket_tool. The absence of any conditional or alternative-tool routing is a notable gap given that a near-identical sibling exists in the toolset.

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

take_ticket_toolTake Ticket ToolC

Take ownership of a ticket and open it.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesYour username
ticket_idYesThe ticket ID number

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not say whether the operation fails if the ticket already has an owner, whether it reassigns or errors, whether it is idempotent, whether special permissions are required, or that it is a mutation that changes status to open. For a write tool with zero annotation coverage this is a substantial gap.

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

Conciseness4/5

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

A single short sentence with the action front-loaded and no filler. It is arguably too terse to be fully appropriate for an unannotated mutation tool, but as pure conciseness it is efficient and 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?

An output schema exists, so return values need not be explained. But for a two-parameter mutating tool with no annotations and several overlapping siblings, the description omits side effects, failure conditions, permissions, and sibling routing, leaving the agent under-informed about the consequences of the call.

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

Parameters3/5

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

Schema description coverage is 100%, so both required parameters (ticket_id, username) are already documented in the schema. The description adds only the implication that username becomes the owner, which the field description ('Your username') already conveys. Baseline 3 is appropriate when the schema does the work.

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

Purpose4/5

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

The description names a specific compound action on a specific resource: taking ownership of a ticket and opening it. An agent can tell it is a self-assignment plus status-change operation. However, it never distinguishes itself from the sibling tools set_ticket_owner_tool and open_ticket_tool, which appear to do the same things separately.

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 combined tool versus calling set_ticket_owner_tool and open_ticket_tool, nor any prerequisite (e.g. ticket must be unassigned) or exclusion. Usage is only weakly implied by the word 'ownership'.

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

update_ticket_toolUpdate Ticket ToolC

Update ticket fields (subject, priority, queue). All fields are optional.

ParametersJSON Schema
NameRequiredDescriptionDefault
queueNoNew queue name (e.g., 'General', 'Professional')
subjectNoNew subject/title for the ticket
priorityNoNew priority (0-99)
ticket_idYesThe ticket ID number

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full behavioral burden and falls short: it never states whether a permission/role is required, whether changes are reversible, or what an empty value does. This last point is critical because string parameters default to "" — the description leaves ambiguous whether an empty string means 'no change' or 'clear this field'.

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 short, front-loaded sentences with no filler. The only mild redundancy is 'All fields are optional,' which partially restates the schema's required list, though it does convey the partial-update intent.

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 explained, but for a mutation tool with zero annotations the description is inadequate. It does not resolve the empty-string default ambiguity, name required permissions, or clarify how it relates to the many field-specific sibling mutation tools.

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

Parameters3/5

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

Schema description coverage is 100%, so each parameter is already documented in the schema with examples and ranges. The description only restates the field names already listed in the schema, adding no syntax, format, or default-handling semantics beyond the baseline.

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 ticket fields') and names the exact editable fields (subject, priority, queue). However, it does not distinguish itself from siblings that mutate other ticket fields, such as set_ticket_status_tool, set_ticket_owner_tool, or set_time_worked_tool, so an agent must infer the boundary.

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

Usage Guidelines2/5

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

The description gives no when-to-use context and no alternatives. Given a dense sibling set where other tools handle status, owner, and time-worked updates, the agent is left to guess which mutation tool to pick for a given field.

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. 17 tool updatesv0.6.0
    • Changedadd_ticket_comment_tool5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / comment / description
        Added value: +"The comment text"
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedadd_time_worked_tool6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / minutes / description
        Added value: +"Additional time to add in minutes"
      • addedInput schema / properties / minutes / minimum
        Added value: +1
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedcomplete_weekly_checklist_tool8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / checklist_results / description
        Added value: +"The checklist completion results"
      • addedInput schema / properties / owner / description
        Added value: +"Username taking the ticket"
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • addedInput schema / properties / time_minutes / description
        Added value: +"Time spent on checklist (optional)"
      • addedInput schema / properties / time_minutes / minimum
        Added value: +0
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedcreate_ticket_tool8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / owner / description
        Added value: +"Username to assign as owner"
      • addedInput schema / properties / priority / description
        Added value: +"Ticket priority (0-99)"
      • addedInput schema / properties / queue / description
        Added value: +"Queue name (e.g., 'General', 'Professional')"
      • addedInput schema / properties / requestor / description
        Added value: +"Email of the requestor"
      • addedInput schema / properties / subject / description
        Added value: +"Ticket subject/title"
      • addedInput schema / properties / text / description
        Added value: +"Initial ticket content/description"
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedget_my_open_tickets_tool3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / owner / description
        Added value: +"Username to search for"
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedget_new_tickets_tool3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / queue / description
        Added value: +"Optional queue name to filter by"
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedget_ticket_history_tool4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedget_ticket_tool4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedopen_ticket_tool5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / owner / description
        Added value: +"Optional username to assign as owner"
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedreply_to_ticket_tool5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / message / description
        Added value: +"The reply message"
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedresolve_ticket_tool5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / comment / description
        Added value: +"Optional comment to add before resolving"
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedsearch_tickets_tool4 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / order_by / description
        Added value: +"Field to order by, prefix with - for descending (default: -Created)"
      • addedInput schema / properties / query / description
        Added value: +"RT query string (e.g., \"Status = 'new'\", \"Subject LIKE 'checklist'\",\n   \"Owner = 'scott'\", \"Queue = 'Professional'\")"
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedset_ticket_owner_tool5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / owner / description
        Added value: +"Username of the new owner"
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedset_ticket_status_tool5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / status / description
        Added value: +"New status (e.g., 'new', 'open', 'stalled', 'resolved', 'rejected', 'deleted')"
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedset_time_worked_tool6 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / minutes / description
        Added value: +"Total time worked in minutes"
      • addedInput schema / properties / minutes / minimum
        Added value: +0
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedtake_ticket_tool5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • addedInput schema / properties / username / description
        Added value: +"Your username"
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
    • Changedupdate_ticket_tool7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / priority / description
        Added value: +"New priority (0-99)"
      • addedInput schema / properties / queue / description
        Added value: +"New queue name (e.g., 'General', 'Professional')"
      • addedInput schema / properties / subject / description
        Added value: +"New subject/title for the ticket"
      • addedInput schema / properties / ticket_id / description
        Added value: +"The ticket ID number"
      • addedInput schema / properties / ticket_id / minimum
        Added value: +1
      • removedOutput schema / description
        Removed value: -"Generic wrapper for non-object return types."
  2. 17 tool updates
    • Changedadd_ticket_comment_tool4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / comment / description
        Removed value: -"The comment text"
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedadd_time_worked_tool4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / minutes / description
        Removed value: -"Additional time to add in minutes"
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedcomplete_weekly_checklist_tool6 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / checklist_results / description
        Removed value: -"The checklist completion results"
      • removedInput schema / properties / owner / description
        Removed value: -"Username taking the ticket"
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • removedInput schema / properties / time_minutes / description
        Removed value: -"Time spent on checklist (optional)"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedcreate_ticket_tool8 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / owner / description
        Removed value: -"Username to assign as owner"
      • removedInput schema / properties / priority / description
        Removed value: -"Ticket priority (0-99)"
      • removedInput schema / properties / queue / description
        Removed value: -"Queue name (e.g., 'General', 'Professional')"
      • removedInput schema / properties / requestor / description
        Removed value: -"Email of the requestor"
      • removedInput schema / properties / subject / description
        Removed value: -"Ticket subject/title"
      • removedInput schema / properties / text / description
        Removed value: -"Initial ticket content/description"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedget_my_open_tickets_tool3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / owner / description
        Removed value: -"Username to search for"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedget_new_tickets_tool3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / queue / description
        Removed value: -"Optional queue name to filter by"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedget_ticket_history_tool3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedget_ticket_tool3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedopen_ticket_tool4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / owner / description
        Removed value: -"Optional username to assign as owner"
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedreply_to_ticket_tool4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / message / description
        Removed value: -"The reply message"
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedresolve_ticket_tool4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / comment / description
        Removed value: -"Optional comment to add before resolving"
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedsearch_tickets_tool4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / order_by / description
        Removed value: -"Field to order by, prefix with - for descending (default: -Created)"
      • removedInput schema / properties / query / description
        Removed value: -"RT query string (e.g., \"Status = 'new'\", \"Subject LIKE 'checklist'\",\n   \"Owner = 'scott'\", \"Queue = 'Professional'\")"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedset_ticket_owner_tool4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / owner / description
        Removed value: -"Username of the new owner"
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedset_ticket_status_tool4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / status / description
        Removed value: -"New status (e.g., 'new', 'open', 'stalled', 'resolved', 'rejected', 'deleted')"
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedset_time_worked_tool4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / minutes / description
        Removed value: -"Total time worked in minutes"
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedtake_ticket_tool4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • removedInput schema / properties / username / description
        Removed value: -"Your username"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
    • Changedupdate_ticket_tool6 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / priority / description
        Removed value: -"New priority (0-99)"
      • removedInput schema / properties / queue / description
        Removed value: -"New queue name (e.g., 'General', 'Professional')"
      • removedInput schema / properties / subject / description
        Removed value: -"New subject/title for the ticket"
      • removedInput schema / properties / ticket_id / description
        Removed value: -"The ticket ID number"
      • addedOutput schema / description
        Added value: +"Generic wrapper for non-object return types."
  3. 17 tool updatesv0.4.0
    • First observedadd_ticket_comment_tool
    • First observedadd_time_worked_tool
    • First observedcomplete_weekly_checklist_tool
    • First observedcreate_ticket_tool
    • First observedget_my_open_tickets_tool
    • First observedget_new_tickets_tool
    • First observedget_ticket_history_tool
    • First observedget_ticket_tool
    • First observedopen_ticket_tool
    • First observedreply_to_ticket_tool
    • First observedresolve_ticket_tool
    • First observedsearch_tickets_tool
    • First observedset_ticket_owner_tool
    • First observedset_ticket_status_tool
    • First observedset_time_worked_tool
    • First observedtake_ticket_tool
    • First observedupdate_ticket_tool

TDQS

B3.4/5.0

Scored across 17 tools

Disambiguation4/5

Tools are mostly distinct, but there is overlap among set_ticket_owner_tool, take_ticket_tool, and open_ticket_tool, which all can set ownership or change status. complete_weekly_checklist_tool also duplicates a multi-step workflow, though its description clearly marks it as a shortcut. An agent may struggle to choose between the ownership/open variants.

Naming Consistency5/5

All tools use snake_case with a consistent _tool suffix and follow a verb_noun pattern (e.g., get_ticket_tool, set_ticket_status_tool). This is highly predictable and uniform throughout.

Tool Count4/5

17 tools is slightly above the typical 3-15 range but remains reasonable for a full ticket-tracking workflow with specialized actions. A few tools could be consolidated, but each generally has a clear role.

Completeness5/5

The surface covers the full ticket lifecycle: create, search, get, update, assign, status changes, comments (private/public), time tracking, history, and resolution. No major gaps for typical RT workflows.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables AI agents to interact with Redmine API for managing tickets, projects, users, and time entries. Supports comprehensive operations including issue creation/updates, project management, time logging, and search with dual authentication (Basic Auth + API Key).
    14
    36 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Yandex Tracker through its API for managing tasks, comments, and attachments. It supports issue searching, status transitions, and metadata retrieval for automated project management.
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Connects AI assistants to a Request Tracker (RT) instance, enabling natural language ticket search, creation, updates, and queue management via the MCP protocol.
    43
    47 npm
    9
    GPL 2.0