MCP Request Tracker CrunchTools
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Request Tracker CrunchToolsShow me my open tickets in the queue"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Option 1: Using uvx (Recommended)
uvx mcp-request-tracker-crunchtoolsOption 2: Using pip
pip install mcp-request-tracker-crunchtoolsOption 3: Using Container
podman run -e RT_URL=... -e RT_USER=... -e RT_PASS=... quay.io/crunchtools/mcp-request-trackerConfiguration
Set the following environment variables:
Variable | Required | Description |
| Yes | Base URL of your RT server |
| Yes | RT username |
| Yes | RT password |
| No | HTTP Basic Auth username |
| 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-crunchtoolsUsing 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-trackerAvailable Tools
Search and View
search_tickets- Search tickets using RT query syntaxget_ticket- Get ticket detailsget_ticket_history- Get ticket history/changelogget_my_open_tickets- Get open tickets for a userget_new_tickets- Get new/unassigned tickets
Update Tickets
set_ticket_owner- Set ticket ownerset_ticket_status- Set ticket statusopen_ticket- Open a ticketresolve_ticket- Resolve/close a tickettake_ticket- Take ownership and open
Time Tracking
set_time_worked- Set total time workedadd_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 srcLicense
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0). See LICENSE for details.
Available Tools
17 toolsadd_ticket_comment_toolAdd Ticket Comment ToolA
Add a private comment/note to a ticket (not visible to requestor).
| Name | Required | Description | Default |
|---|---|---|---|
| comment | Yes | The comment text | |
| ticket_id | Yes | The ticket ID number |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| minutes | Yes | Additional time to add in minutes | |
| ticket_id | Yes | The ticket ID number |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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:
Takes ownership of the ticket
Opens the ticket
Adds correspondence with checklist results
Adds time worked (if specified)
Adds a "Completed" comment
Resolves the ticket
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Username taking the ticket | |
| ticket_id | Yes | The ticket ID number | |
| time_minutes | No | Time spent on checklist (optional) | |
| checklist_results | Yes | The checklist completion results |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Initial ticket content/description | |
| owner | No | Username to assign as owner | |
| queue | Yes | Queue name (e.g., 'General', 'Professional') | |
| subject | Yes | Ticket subject/title | |
| priority | No | Ticket priority (0-99) | |
| requestor | No | Email of the requestor |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 ToolBRead-only
Get all open tickets assigned to a user.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Username to search for |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 ToolBRead-only
Get all new (unassigned) tickets, optionally filtered by queue.
| Name | Required | Description | Default |
|---|---|---|---|
| queue | No | Optional queue name to filter by |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 ToolBRead-only
Get the history/changelog of a ticket.
| Name | Required | Description | Default |
|---|---|---|---|
| ticket_id | Yes | The ticket ID number |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 ToolCRead-only
Get details of a specific ticket.
| Name | Required | Description | Default |
|---|---|---|---|
| ticket_id | Yes | The ticket ID number |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | No | Optional username to assign as owner | |
| ticket_id | Yes | The ticket ID number |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The reply message | |
| ticket_id | Yes | The ticket ID number |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | Optional comment to add before resolving | |
| ticket_id | Yes | The ticket ID number |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 ToolCRead-only
Search for tickets using RT query syntax.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | RT query string (e.g., "Status = 'new'", "Subject LIKE 'checklist'", "Owner = 'scott'", "Queue = 'Professional'") | |
| order_by | No | Field to order by, prefix with - for descending (default: -Created) | -Created |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | Username of the new owner | |
| ticket_id | Yes | The ticket ID number |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| status | Yes | New status (e.g., 'new', 'open', 'stalled', 'resolved', 'rejected', 'deleted') | |
| ticket_id | Yes | The ticket ID number |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| minutes | Yes | Total time worked in minutes | |
| ticket_id | Yes | The ticket ID number |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes | Your username | |
| ticket_id | Yes | The ticket ID number |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| queue | No | New queue name (e.g., 'General', 'Professional') | |
| subject | No | New subject/title for the ticket | |
| priority | No | New priority (0-99) | |
| ticket_id | Yes | The ticket ID number |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
17 tool updates
v0.6.0- Changed
add_ticket_comment_tool5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / comment / descriptionAdded value: +"The comment text" - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
add_time_worked_tool6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / minutes / descriptionAdded value: +"Additional time to add in minutes" - added
Input schema / properties / minutes / minimumAdded value: +1 - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
complete_weekly_checklist_tool8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / checklist_results / descriptionAdded value: +"The checklist completion results" - added
Input schema / properties / owner / descriptionAdded value: +"Username taking the ticket" - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - added
Input schema / properties / time_minutes / descriptionAdded value: +"Time spent on checklist (optional)" - added
Input schema / properties / time_minutes / minimumAdded value: +0 - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
create_ticket_tool8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / owner / descriptionAdded value: +"Username to assign as owner" - added
Input schema / properties / priority / descriptionAdded value: +"Ticket priority (0-99)" - added
Input schema / properties / queue / descriptionAdded value: +"Queue name (e.g., 'General', 'Professional')" - added
Input schema / properties / requestor / descriptionAdded value: +"Email of the requestor" - added
Input schema / properties / subject / descriptionAdded value: +"Ticket subject/title" - added
Input schema / properties / text / descriptionAdded value: +"Initial ticket content/description" - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
get_my_open_tickets_tool3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / owner / descriptionAdded value: +"Username to search for" - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
get_new_tickets_tool3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / queue / descriptionAdded value: +"Optional queue name to filter by" - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
get_ticket_history_tool4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
get_ticket_tool4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
open_ticket_tool5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / owner / descriptionAdded value: +"Optional username to assign as owner" - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
reply_to_ticket_tool5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / message / descriptionAdded value: +"The reply message" - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
resolve_ticket_tool5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / comment / descriptionAdded value: +"Optional comment to add before resolving" - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
search_tickets_tool4 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / order_by / descriptionAdded value: +"Field to order by, prefix with - for descending (default: -Created)" - added
Input schema / properties / query / descriptionAdded value: +"RT query string (e.g., \"Status = 'new'\", \"Subject LIKE 'checklist'\",\n \"Owner = 'scott'\", \"Queue = 'Professional'\")" - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
set_ticket_owner_tool5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / owner / descriptionAdded value: +"Username of the new owner" - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
set_ticket_status_tool5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / status / descriptionAdded value: +"New status (e.g., 'new', 'open', 'stalled', 'resolved', 'rejected', 'deleted')" - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
set_time_worked_tool6 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / minutes / descriptionAdded value: +"Total time worked in minutes" - added
Input schema / properties / minutes / minimumAdded value: +0 - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
take_ticket_tool5 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - added
Input schema / properties / username / descriptionAdded value: +"Your username" - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
- Changed
update_ticket_tool7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / priority / descriptionAdded value: +"New priority (0-99)" - added
Input schema / properties / queue / descriptionAdded value: +"New queue name (e.g., 'General', 'Professional')" - added
Input schema / properties / subject / descriptionAdded value: +"New subject/title for the ticket" - added
Input schema / properties / ticket_id / descriptionAdded value: +"The ticket ID number" - added
Input schema / properties / ticket_id / minimumAdded value: +1 - removed
Output schema / descriptionRemoved value: -"Generic wrapper for non-object return types."
17 tool updates
- Changed
add_ticket_comment_tool4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / comment / descriptionRemoved value: -"The comment text" - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
add_time_worked_tool4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / minutes / descriptionRemoved value: -"Additional time to add in minutes" - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
complete_weekly_checklist_tool6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / checklist_results / descriptionRemoved value: -"The checklist completion results" - removed
Input schema / properties / owner / descriptionRemoved value: -"Username taking the ticket" - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - removed
Input schema / properties / time_minutes / descriptionRemoved value: -"Time spent on checklist (optional)" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
create_ticket_tool8 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / owner / descriptionRemoved value: -"Username to assign as owner" - removed
Input schema / properties / priority / descriptionRemoved value: -"Ticket priority (0-99)" - removed
Input schema / properties / queue / descriptionRemoved value: -"Queue name (e.g., 'General', 'Professional')" - removed
Input schema / properties / requestor / descriptionRemoved value: -"Email of the requestor" - removed
Input schema / properties / subject / descriptionRemoved value: -"Ticket subject/title" - removed
Input schema / properties / text / descriptionRemoved value: -"Initial ticket content/description" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
get_my_open_tickets_tool3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / owner / descriptionRemoved value: -"Username to search for" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
get_new_tickets_tool3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / queue / descriptionRemoved value: -"Optional queue name to filter by" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
get_ticket_history_tool3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
get_ticket_tool3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
open_ticket_tool4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / owner / descriptionRemoved value: -"Optional username to assign as owner" - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
reply_to_ticket_tool4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / message / descriptionRemoved value: -"The reply message" - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
resolve_ticket_tool4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / comment / descriptionRemoved value: -"Optional comment to add before resolving" - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
search_tickets_tool4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / order_by / descriptionRemoved value: -"Field to order by, prefix with - for descending (default: -Created)" - removed
Input schema / properties / query / descriptionRemoved value: -"RT query string (e.g., \"Status = 'new'\", \"Subject LIKE 'checklist'\",\n \"Owner = 'scott'\", \"Queue = 'Professional'\")" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
set_ticket_owner_tool4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / owner / descriptionRemoved value: -"Username of the new owner" - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
set_ticket_status_tool4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / status / descriptionRemoved value: -"New status (e.g., 'new', 'open', 'stalled', 'resolved', 'rejected', 'deleted')" - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
set_time_worked_tool4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / minutes / descriptionRemoved value: -"Total time worked in minutes" - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
take_ticket_tool4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - removed
Input schema / properties / username / descriptionRemoved value: -"Your username" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
- Changed
update_ticket_tool6 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - removed
Input schema / properties / priority / descriptionRemoved value: -"New priority (0-99)" - removed
Input schema / properties / queue / descriptionRemoved value: -"New queue name (e.g., 'General', 'Professional')" - removed
Input schema / properties / subject / descriptionRemoved value: -"New subject/title for the ticket" - removed
Input schema / properties / ticket_id / descriptionRemoved value: -"The ticket ID number" - added
Output schema / descriptionAdded value: +"Generic wrapper for non-object return types."
17 tool updates
v0.4.0- First observed
add_ticket_comment_tool - First observed
add_time_worked_tool - First observed
complete_weekly_checklist_tool - First observed
create_ticket_tool - First observed
get_my_open_tickets_tool - First observed
get_new_tickets_tool - First observed
get_ticket_history_tool - First observed
get_ticket_tool - First observed
open_ticket_tool - First observed
reply_to_ticket_tool - First observed
resolve_ticket_tool - First observed
search_tickets_tool - First observed
set_ticket_owner_tool - First observed
set_ticket_status_tool - First observed
set_time_worked_tool - First observed
take_ticket_tool - First observed
update_ticket_tool
TDQS
Scored across 17 tools
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.
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.
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.
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
Related MCP Connectors
Read tickets, contacts, companies, agents and groups; create, update and reply to tickets.
Search and read Zammad tickets, customers and organizations; add notes, replies and ticket updates.
Read tickets, users, orgs, macros and satisfaction ratings; create, update and comment on tickets.
Helpdesk tickets from your AI: find, reply, take, hold, complete — within your own role. OAuth.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables 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).1436 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables 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
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to create, search, and manage OTRS tickets and configuration items via the OTRS API.8Apache 2.0

mcp-server-rtofficial
AlicenseAqualityAmaintenanceConnects AI assistants to a Request Tracker (RT) instance, enabling natural language ticket search, creation, updates, and queue management via the MCP protocol.4347 npm9GPL 2.0