Skip to main content
Glama

Enchant MCP by usefulapi

Server Details

Work with Enchant help desk tickets: list, read, reply, add notes and labels, manage customers.

Ownership verified
Status
Healthy
Uptime
99.3% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-06-18
URL
Repository
m190/usefulapi-mcp
GitHub Stars
0

TDQS

A3.7/5.0

Scored across 16 tools

Disambiguation4/5

Most tools are clearly distinct: customers, tickets, notes, replies, labels, attachments. However, enchant_add_ticket_labels vs enchant_update_ticket both can set labels, and enchant_add_note vs enchant_reply_to_ticket differ only by message type, which could cause misselection despite descriptions clarifying the distinction.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with domain prefixes (enchant_*), using clear verbs like add, create, get, list, reply, update. No mixed conventions, making the set predictable.

Tool Count4/5

16 tools is reasonable for a help desk API covering customers, tickets, users, attachments, and contacts. Slightly heavy but each tool has a clear role and no obvious redundancy.

Completeness4/5

Covers core CRUD for customers, tickets, and contacts, plus notes, replies, labels, and attachments. Missing explicit get for users or inboxes, and no create/update for attachments, but these are minor since the main support workflows are supported.

Available Tools

16 tools
enchant_add_customer_contactAdd customer contactB
Destructive
Inspect

WRITE: add one contact (email, twitter or phone) to a customer. Enchant REST: POST /customers/{id}/contacts.

NameRequiredDescriptionDefault
idYesCustomer id.
typeYesContact type.
valueYesEmail address, Twitter screen name or phone number.

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, and the description only repeats that this is a WRITE operation and gives the REST endpoint. It adds no behavioral details such as permissions required, duplicate handling, reversibility, or side effects beyond what the annotation implies.

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

Conciseness5/5

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

The description is two short sentences, front-loads the WRITE nature, and includes the endpoint. It is efficiently sized with no wasted words.

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 three-parameter write tool with 100% schema description coverage and an annotation, the description covers purpose and endpoint adequately. The main missing context is guidance on when to use this versus related contact or customer operations.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all three parameters. The description adds the contact types but no syntax or format details beyond what the schema already provides, making the baseline score of 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?

The description states a specific verb ('add') and resource ('one contact') and names the three contact types. It is clear what the tool does, though it does not explicitly distinguish itself from sibling operations like update_customer or delete_customer_contact.

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

Usage Guidelines2/5

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

The description gives no explicit when-to-use guidance, prerequisites, or alternatives. It implies the tool is for adding a contact, but an agent must infer when to choose this over deleting, updating, or creating a customer.

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

enchant_add_noteAdd internal noteA
Destructive
Inspect

WRITE: add an internal note to a ticket (not sent to the customer). Enchant REST: POST /tickets/{id}/messages (type note).

NameRequiredDescriptionDefault
idYesTicket id.
bodyYesNote body.
htmlNoTrue if body is HTML (default false: plain text).
user_idYesId of the user (agent) the note is from; see enchant_list_users.
attachment_idsNoIds of attachments already uploaded.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only declare destructiveHint=true and the title, so the description earns credit for disclosing the key behavioral fact that the note is internal-only and invisible to the customer, plus the underlying write operation (POST .../messages type note). It does not cover permissions, idempotency, or whether the note appears in ticket history, leaving some mutation behavior undisclosed.

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

Conciseness5/5

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

Two short clauses, front-loaded with the WRITE classification and the core action, followed by the API mapping. No filler sentences.

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?

Covers what is created, its visibility, and the endpoint for a 5-parameter mutation with no output schema. Return value is not described, which is a minor gap since no output schema exists to carry it, but nothing required to call it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (id, body, html, user_id, attachment_ids) are already documented with semantics like default plain text and the enchant_list_users cross-reference. The description adds no format 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.

Purpose5/5

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

States a specific verb (add) plus resource (internal note to a ticket), and the parenthetical 'not sent to the customer' pins down the exact artifact being created. An agent can distinguish it from enchant_reply_to_ticket without opening either schema.

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

Usage Guidelines4/5

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

The 'not sent to the customer' qualifier effectively communicates when to use this rather than the customer-facing reply_to_ticket sibling, and the REST endpoint mapping anchors it to a known operation. It stops short of an explicit when-not/alternative statement, so it is clear context rather than full routing guidance.

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

enchant_add_ticket_labelsAdd labels to ticketA
Destructive
Inspect

WRITE: add one or more labels to a ticket without changing its other labels. Enchant REST: PUT /tickets/{id}/labels/{label_ids}.

NameRequiredDescriptionDefault
idYesTicket id.
label_idsYesLabel ids to add.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only supply destructiveHint=true, so the description usefully adds that this is a WRITE, that it is additive/partial (existing labels preserved), and the exact REST endpoint. It does not cover idempotency, auth/permission requirements, or what happens on invalid label ids, which is why it is not a 5.

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

Conciseness5/5

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

Two short sentences with no filler; the operation type and the key behavioral constraint come first, followed by the API mapping. Every clause earns its place.

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 two-parameter mutation with an easy schema, no output schema, and annotations that only carry a destructive hint, the description covers operation type, partial-update semantics, and endpoint. Minor gaps such as permission requirements or error behavior remain, but nothing essential to invoking it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented ('Ticket id.', 'Label ids to add.'), which sets the baseline at 3. The description adds only the URL template mapping, not new meaning about formats or constraints beyond minItems=1.

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 (add), resource (labels), and target (ticket), and explicitly scopes the effect with 'without changing its other labels', which separates it from enchant_remove_ticket_labels and any label-replacement tool. The REST mapping reinforces exactly which operation is performed.

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 additive-semantics phrasing ('add ... without changing its other labels') implies when to reach for this tool rather than a replace or remove operation, and the sibling enchant_remove_ticket_labels makes the opposite case obvious. It stops short of explicitly naming the alternative or stating preconditions, so it falls short of a 5.

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

enchant_create_customerCreate customerB
Destructive
Inspect

WRITE: create a customer with optional contacts (email, twitter, phone). Enchant REST: POST /customers.

NameRequiredDescriptionDefault
summaryNoShort free-text summary shown on the customer profile.
contactsNoContacts of the customer.
last_nameNo
first_nameNo

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, so the write nature is covered by structured data. The description adds the REST mapping (POST /customers) and the fact that contacts are optional, but says nothing about auth requirements, duplicate handling, or side effects beyond creation.

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 sentences, front-loaded with the operation type and resource before the transport detail. No filler, though the REST endpoint line is of limited selection value.

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

Completeness3/5

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

For a create tool with all-optional parameters, no output schema, and destructiveHint=true, the description is minimally adequate: it says what is created and that contacts are optional. It omits what the call returns, whether an empty-name customer is valid, and how duplicates are handled.

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

Parameters2/5

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

Schema coverage is only 50% (first_name and last_name have no descriptions), and the description does not compensate: it merely repeats the contact types that the schema enum already enumerates, and adds nothing about the two undocumented name fields. The description therefore adds no meaning 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 ('create a customer') plus the notable payload element ('optional contacts'), which separates it by verb from siblings like enchant_get_customer, enchant_update_customer and enchant_list_customers. It never names a sibling explicitly, 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 'WRITE:' prefix signals a mutation, but there is no when-to-use guidance, no statement of prerequisites, and no contrast with enchant_update_customer or enchant_add_customer_contact. An agent must infer the selection rule purely from the verb.

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

enchant_create_ticketCreate ticketA
Destructive
Inspect

WRITE: create an email ticket. Give customer_id, or a customer (matched by contact email, created if new). Optionally add the customer's first message with body (needs the customer's email). Enchant REST: POST /tickets.

NameRequiredDescriptionDefault
bodyNoFirst inbound message from the customer (plain text).
subjectYesTicket subject.
user_idNoUser id to assign the ticket to.
customerNoCustomer to find or create, instead of customer_id.
inbox_idNoInbox id (the default inbox if omitted).
customer_idNoExisting customer id. Give this or customer.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations only supply destructiveHint=true, so the description carries the behavioral burden. It discloses the key side effect that the customer is "created if new" and that body requires the customer's email, which the annotations do not convey. It omits auth/permission and error behavior, but adds meaningful context beyond the structured fields.

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?

Four short clauses, no filler, and the WRITE marker plus operation are front-loaded before the parameter guidance. The trailing REST endpoint note is marginally useful but does not distract, so structure is efficient.

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 write tool with a nested customer object and no output schema, the description covers the required input logic and the significant side effect of creating a customer. It does not address the return payload or error cases, but no output schema exists to relieve it of that, so a small gap remains.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter logic the schema does not encode: the customer_id-vs-customer alternative and the dependency that body needs a customer email. That relational guidance goes beyond the per-field descriptions.

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

Purpose5/5

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

Specific verb+resource: "create an email ticket," front-loaded with a "WRITE:" marker. It is clearly differentiated from sibling creators like enchant_create_customer and from enchant_reply_to_ticket, so an agent can pick it without opening a schema.

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

Usage Guidelines3/5

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

The description explains how to satisfy the customer linkage (customer_id OR customer) and the optional first message, which is genuinely useful context. However, it never states when to prefer this tool over siblings such as reply_to_ticket or update_ticket, and gives no exclusions, so usage is only implied.

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

enchant_delete_customer_contactDelete customer contactA
Destructive
Inspect

WRITE, DELETES DATA: remove one contact from a customer. Enchant REST: DELETE /customers/{id}/contacts/{contact_id}.

NameRequiredDescriptionDefault
idYesCustomer id.
contact_idYesContact id (from the customer's contacts).

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, so the bar is lower. The description reinforces this with 'WRITE, DELETES DATA' and adds the concrete DELETE endpoint, which confirms a hard delete rather than an archive. However, it says nothing about irreversibility, required permissions, or side effects on related records.

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

Conciseness4/5

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

Two short sentences, front-loaded with the destructive-write warning followed by the endpoint. Every clause earns its place; the all-caps prefix is slightly loud but serves as an effective safety flag.

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 two-parameter delete with full schema coverage and a destructiveHint annotation, the description covers purpose, target, and API mapping adequately. Only irreversibility/error behavior is left unstated, which is a minor gap given no output schema exists.

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 (customer id and contact id), so the schema already carries parameter meaning. The REST path echoes the {id}/{contact_id} mapping but adds no new semantics beyond what is documented.

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 (remove/delete) and resource (one contact from a customer), and the REST mapping (DELETE /customers/{id}/contacts/{contact_id}) removes any ambiguity about the target entity. An agent can distinguish this from enchant_add_customer_contact and enchant_update_customer without opening a schema.

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

Usage Guidelines2/5

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

The phrase 'remove one contact' implies per-contact granularity rather than bulk deletion, but there is no explicit when-to-use, when-not-to-use, or mention of alternatives. No prerequisites or confirmation requirements are stated.

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

enchant_get_attachmentGet attachmentA
Read-only
Inspect

Get the metadata of an attachment (name, size, MIME type) by id; attachment ids appear in ticket messages. Enchant REST: GET /attachments/{id}.

NameRequiredDescriptionDefault
idYesAttachment id.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds genuinely useful context: this returns metadata only (name, size, MIME type) rather than the file body, which is an important expectation-setter. It stops short of describing auth requirements or error behavior for invalid ids.

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 dense sentence that front-loads the action, the returned fields, and the id provenance, followed by the REST mapping. 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?

With no output schema, the description carries the return-value burden and does so by listing the metadata fields and implying no file content. For a one-parameter read tool this is nearly complete, with only error/not-found behavior unaddressed.

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

Parameters4/5

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

Schema coverage is 100% and there is a single id parameter, so the baseline is 3. The description adds real meaning beyond the schema by telling the agent where the id comes from (ticket messages), which the schema's 'Attachment id.' does not.

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

Purpose5/5

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

States a specific verb (get) and resource (attachment metadata) and enumerates the returned fields (name, size, MIME type), which distinguishes it from enchant_get_ticket and enchant_get_customer. The REST endpoint mapping reinforces exactly what is fetched.

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?

Provides clear context for when this tool is relevant: attachment ids appear in ticket messages, so it is the follow-up call after reading a ticket. It does not name exclusions or alternatives, but no sibling tool performs attachment retrieval, so the differentiation burden is low.

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

enchant_get_customerGet customerA
Read-only
Inspect

Get one customer by id, with the contacts (emails, phones, Twitter names). Enchant REST: GET /customers/{id}.

NameRequiredDescriptionDefault
idYesCustomer id.

TDQS

A3.7/5.0
Behavior3/5

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

readOnlyHint=true already declares the safety profile, so the bar is lower. The description adds that the response includes contacts, which is useful, but discloses nothing about pagination, error behavior, auth, or whether contacts can be absent.

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 compact sentences that front-load the action and drop the REST endpoint line as supporting detail. No filler, though the endpoint is somewhat redundant with the tool name.

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 no output schema, the description covers the essential shape: single record, content includes contacts. Missing only return-shape or edge-case details, which is acceptable here.

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 id parameter is documented in the schema. The description adds no format or sourcing details for the id beyond what the schema provides, so 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 (Get) and resource (customer by id), and enumerates the included payload (contacts: emails, phones, Twitter names), which distinguishes it from enchant_list_customers and enchant_get_ticket.

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

Usage Guidelines3/5

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

The 'by id' phrasing implies single-record lookup versus the list sibling, and the explicit enrichment detail signals scope, but no explicit when-to-use or when-not-to-use guidance is given.

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

enchant_get_ticketGet ticketA
Read-only
Inspect

Get one ticket by id. Embed related data with embed: messages (the conversation: replies and notes), customer, user, inbox, labels. Each embedded type costs 1 extra rate-limit credit. Enchant REST: GET /tickets/{id}.

NameRequiredDescriptionDefault
idYesTicket id (the string id, not the friendly ticket number).
embedNoRelated resources to embed.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered; the description adds genuinely new behavioral context by disclosing that each embedded type consumes 1 extra rate-limit credit. It stops short of describing error behavior (e.g., unknown id) or auth requirements.

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

Conciseness5/5

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

Three compact sentences: purpose first, then embed semantics and cost, then the underlying REST endpoint. No filler and the most important constraint is front-loaded.

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 two-parameter read tool with no output schema and full schema coverage, the description supplies the embed semantics and rate-limit cost an agent needs. It could be richer on return shape or failure modes, but nothing essential for correct invocation is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description goes beyond the raw enum by explaining what 'messages' contains (replies and notes) and attaching a cost to each embed choice. That is real semantic value not present in the schema.

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

Purpose5/5

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

States a specific verb and resource with scope: 'Get one ticket by id', which cleanly separates it from enchant_list_tickets. The embed mention further clarifies it is a single-record retrieval that can expand related data.

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

Usage Guidelines3/5

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

Usage is implied (fetch a single ticket when the id is known), and the description usefully explains what each embed value yields, but it never states when to prefer this over enchant_list_tickets or when embeds are worth the extra credit cost.

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

enchant_list_customersList customersA
Read-only
Inspect

List customers, or find one by contact: set contact_type and contact_value (for example email + an address). Enchant REST: GET /customers.

NameRequiredDescriptionDefault
pageNoPage number (1-based). Past 10,000 results, filter by since_created_at instead.
countNoIf true, also return the total number of matching results (costs 1 extra rate-limit credit).
per_pageNoResults per page (0-100, default 10). Use 0 with count to get only the total.
contact_typeNoContact type to match (use with contact_value).
contact_valueNoEmail address or Twitter screen name to match (use with contact_type).
since_created_atNoOnly customers created since this UTC ISO 8601 time.

TDQS

A3.5/5.0
Behavior3/5

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

readOnlyHint=true already establishes that this is a safe read, so the description's duty is reduced. It adds the dual behavior (list vs. contact lookup) and the underlying REST mapping (GET /customers), but says nothing about pagination caps, rate-limit cost, or result ordering — all of which the schema, not the description, carries.

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 tight sentences with no filler; the primary list purpose is front-loaded before the secondary lookup mode. The trailing REST endpoint notation is marginally useful for agents mapping to the API but is not strictly necessary.

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

Completeness4/5

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

For a zero-required-parameter, flat-schema list tool with only readOnlyHint annotations, the description covers the two operational modes and the required parameter pairing. The absence of any statement about what a result looks like is a minor gap given there is no output schema, but the schema's pagination notes compensate.

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 already documented at the schema level, setting the baseline at 3. The description only reinforces the contact_type/contact_value pairing with a short example ('email + an address'), adding minor value 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 ('List customers') and adds a second, clearly described mode ('find one by contact'), which an agent can distinguish from the plain listing. It does not name or differentiate from the closest sibling, enchant_get_customer, which also retrieves a single customer, leaving the boundary to inference.

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

Usage Guidelines3/5

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

It tells the agent how to trigger the lookup mode (set contact_type and contact_value) and gives a concrete example, which is genuine usage guidance. It never says when to prefer this tool over enchant_get_customer or enchant_list_tickets, and there are no exclusion conditions.

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

enchant_list_ticketsList ticketsA
Read-only
Inspect

List and filter tickets (newest first by default). Enchant REST: GET /tickets. Use user_ids ["null"] for unassigned tickets. Each result has a short summary; use enchant_get_ticket for messages.

NameRequiredDescriptionDefault
idsNoOnly these ticket ids.
pageNoPage number (1-based). Past 10,000 results, filter by since_created_at instead.
sortNoSort order; a leading - means descending.
spamNoOnly spam (true) or only non-spam (false) tickets.
countNoIf true, also return the total number of matching results (costs 1 extra rate-limit credit).
trashNoOnly trashed (true) or only non-trashed (false) tickets.
typesNoTicket types, e.g. email, chat, sms, phone, web, twitter, whatsapp.
statesNoOnly tickets in these states.
per_pageNoResults per page (0-100, default 10). Use 0 with count to get only the total.
user_idsNoOnly tickets assigned to these user ids ("null" = unassigned).
inbox_idsNoOnly tickets in these inbox ids.
label_idsNoOnly tickets with these label ids.
since_created_atNoOnly tickets created since this UTC ISO 8601 time, e.g. 2026-01-31T13:41:10Z.
since_updated_atNoOnly tickets updated since this UTC ISO 8601 time.

TDQS

A4.2/5.0
Behavior4/5

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

readOnlyHint=true already establishes safety, so the bar is lower; the description adds useful context beyond annotations — default sort order, the REST endpoint, the return-shape note about summaries, and the pagination caveat. It does not cover rate-limit nuances beyond what the schema's count description already states.

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

Conciseness5/5

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

Three short sentences, front-loaded with purpose and default behavior, with no filler. Every clause carries usable information.

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

Completeness4/5

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

For a 14-param read tool with full schema coverage, readOnly annotation, and no output schema, the description covers purpose, default ordering, the unassigned filter trick, and the summary-vs-messages distinction. Only minor gaps remain (e.g., no explicit note on the large result-set guidance beyond the schema's since_created_at hint).

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

Parameters3/5

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

Schema coverage is 100%, so every parameter already has documentation; the description only reinforces existing facts (default sort, the "null" unassigned convention) rather than adding new syntax or semantics. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb+resource ('List and filter tickets') with scope (newest first by default), and explicitly distinguishes itself from enchant_get_ticket by noting results carry only short summaries while messages require the sibling.

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

Usage Guidelines4/5

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

Gives the alternative for detail retrieval (enchant_get_ticket for messages) and a concrete usage trick (user_ids ["null"] for unassigned), but offers no when-not guidance for listing itself or exclusions relative to other list tools.

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

enchant_list_usersList users (agents)A
Read-only
Inspect

List the help desk users (agents): id, name, email. Use the ids to assign tickets and to author replies and notes. Enchant REST: GET /users.

NameRequiredDescriptionDefault
pageNoPage number (1-based). Past 10,000 results, filter by since_created_at instead.
per_pageNoResults per page (0-100, default 10). Use 0 with count to get only the total.

TDQS

A3.8/5.0
Behavior3/5

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

readOnlyHint=true already declares this is a safe read, so the description owes little in the way of safety disclosure. Its only added behavioral context is the REST mapping ('GET /users'), which helps endpoint-aware agents but says nothing about pagination defaults or completeness that isn't already in the schema.

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

Conciseness5/5

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

Two sentences, no filler: the first names the resource and its fields, the second states the downstream purpose, and the REST endpoint is appended. Everything is front-loaded and each clause carries information.

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

Completeness4/5

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

With no output schema, the description usefully enumerates the returned fields (id, name, email) and points at the downstream use of those ids; pagination is handled by the schema and safety by annotations. Minor gap: no total/count or pagination-shape hint beyond what the parameter docs imply.

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?

Both parameters are fully documented in the schema, including the 10,000-result pagination workaround and the per_page=0 count trick. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('List the help desk users (agents)') and enumerates the returned fields (id, name, email). The '(agents)' qualifier implicitly distinguishes it from enchant_list_customers, but it never names the sibling it differs from, so the differentiation is left for the agent to infer.

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?

Says explicitly what the result is for: 'Use the ids to assign tickets and to author replies and notes,' which ties directly to siblings like enchant_reply_to_ticket and enchant_create_ticket. It gives clear context but no exclusions or named alternatives for when this list is the wrong call.

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

enchant_remove_ticket_labelsRemove labels from ticketA
Destructive
Inspect

WRITE: remove one or more labels from a ticket; its other labels stay. Enchant REST: DELETE /tickets/{id}/labels/{label_ids}.

NameRequiredDescriptionDefault
idYesTicket id.
label_idsYesLabel ids to remove.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, and the description adds meaningful context beyond that: it is a write operation, it is partially destructive (only the named labels are removed, others remain), and it surfaces the underlying DELETE endpoint. It stops short of idempotency or error behavior, so not a 5.

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 compact sentence with the operation type front-loaded, followed by the key behavioral caveat and the endpoint mapping. No filler; every clause carries information.

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

Completeness4/5

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

For a two-parameter, no-output-schema tool whose annotations already carry the destructive profile, the description covers the essentials: write nature, partial-mutation semantics, and endpoint. Only minor gaps (idempotency, behavior on invalid label ids) remain.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters with their types and the minItems:1 constraint. The description restates 'one or more labels' but adds no syntax, format, or edge-case detail beyond what the schema provides.

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 (remove) and resource (labels on a ticket), plus the scope 'one or more.' The 'WRITE' prefix and the distinction from adding labels make it immediately separable from the sibling enchant_add_ticket_labels.

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

Usage Guidelines3/5

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

Usage is implied by the verb and the 'other labels stay' clarification, but there is no explicit when-to-use guidance or named alternative (the sibling enchant_add_ticket_labels is never referenced, nor any condition that would select one over the other).

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

enchant_reply_to_ticketReply to customerA
Destructive
Inspect

WRITE: send an outbound reply on a ticket. This SENDS A REAL EMAIL to the customer address in to. Use enchant_add_note for an internal note. Enchant REST: POST /tickets/{id}/messages (type reply, direction out).

NameRequiredDescriptionDefault
idYesTicket id.
toYesRecipient address, normally the customer's email.
bodyYesReply body.
htmlNoTrue if body is HTML (default false: plain text).
user_idYesId of the user (agent) the reply is sent as; see enchant_list_users.
attachment_idsNoIds of attachments already uploaded.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only declare destructiveHint=true; the description goes further by warning that this SENDS A REAL EMAIL to the customer address, which conveys the irreversible external side effect. It does not cover send timing, permissions required, or failure behavior, so it falls short of a 5.

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

Conciseness5/5

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

Three short sentences, no waste, with the write/side-effect warning front-loaded ahead of the alternative-tool routing. Every sentence earns its place.

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?

Covers the side effect, the sibling routing, and the underlying endpoint for a six-parameter mutation tool with no output schema. It omits what the call returns and whether sending is immediate or queued, which are minor gaps given the annotations and full schema coverage.

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 already documented in the schema. The description only echoes that `to` is the recipient customer address, adding no syntax, format, or constraint detail beyond the structured fields. 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 and resource ('send an outbound reply on a ticket') with a front-loaded WRITE marker, and explicitly distinguishes itself from the sibling enchant_add_note (internal note). An agent can select this over nearby tools without opening a schema.

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

Usage Guidelines5/5

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

Names the alternative tool (enchant_add_note) and the condition that selects it (internal vs. customer-facing), which is exactly the decision boundary an agent needs. Also grounds the call in the underlying REST operation for verification.

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

enchant_update_customerUpdate customerA
Destructive
Inspect

WRITE: update a customer's name or summary. If contacts is given, it REPLACES the contact list; use enchant_add_customer_contact to add one. Enchant REST: PATCH /customers/{id}.

NameRequiredDescriptionDefault
idYesCustomer id.
summaryNoShort free-text summary shown on the customer profile.
contactsNoThe full new contact list (replaces the existing one).
last_nameNo
first_nameNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations only supply destructiveHint=true; the description goes further by spelling out the concrete destructive behavior (the contacts array overwrites the existing list) and flags this as a write. It does not cover permission requirements or whether omitted fields (first_name, last_name, summary) are left unchanged, so it stops short of full behavioral disclosure.

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

Conciseness5/5

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

Three sentences with the 'WRITE:' marker front-loaded, then the destructive-contact warning, then the API mapping. Every sentence carries distinct information and none repeats structured fields needlessly.

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 5-parameter mutation tool with no output schema, the definition covers the write nature, the destructive contacts behavior, sibling routing, and the endpoint. Gaps remain around permissions, partial-update semantics for omitted fields, and whether a bare `id` with no other fields is a no-op error, but the essentials are present.

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 60%, and the description's only added parameter insight is that `contacts` replaces the list — which the schema already states nearly verbatim ('replaces the existing one'). Fields like `id`, `first_name`, and `last_name` carry no description, but the enum-less nested contact shape is at least documented in the schema, so baseline 3 is warranted.

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

Purpose5/5

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

States a specific verb and resource ('update a customer'), leads with a 'WRITE:' marker, and even names the underlying Enchant REST call (PATCH /customers/{id}). The sibling-routing sentence plus the distinct write semantics let an agent separate this from enchant_get_customer, enchant_list_customers, and enchant_add_customer_contact without opening a schema.

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

Usage Guidelines5/5

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

Gives an explicit conditional rule: if `contacts` is supplied it REPLACES the list, and directs the agent to enchant_add_customer_contact when the intent is to add a single contact. That names both the alternative tool and the condition that selects it, leaving nothing to inference.

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

enchant_update_ticketUpdate ticketA
Destructive
Inspect

WRITE: change a ticket: state (open, hold, closed), assignee, inbox, subject, spam or trash (not both true). label_ids REPLACES all labels (empty array clears them); use enchant_add_ticket_labels to keep existing ones. Enchant REST: PATCH /tickets/{id}.

NameRequiredDescriptionDefault
idYesTicket id.
spamNoMark as spam. Cannot be true together with trash.
stateNoNew state.
trashNoSend to trash. Cannot be true together with spam.
subjectNoNew subject.
user_idNoAssign to this user id; null unassigns the ticket.
inbox_idNoMove to this inbox id.
label_idsNoThe full new set of label ids (replaces existing labels).

TDQS

A4.2/5.0
Behavior4/5

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

The destructiveHint annotation already flags risk, but the description adds what actually gets destroyed ('label_ids REPLACES all labels', 'empty array clears them') and the spam/trash mutual-exclusion constraint. It also signals the underlying PATCH endpoint. It stops short of noting permissions or partial-update semantics.

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?

Front-loaded with 'WRITE:' and packed into three tight clauses with no filler. Every phrase (field enumeration, replace semantics, alternative tool, endpoint) carries actionable information.

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

Completeness4/5

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

For a mutation tool with no output schema and a destructiveHint annotation, this covers the write nature, mutable fields, the destructive label behavior, and the conflicting-flag rule. Missing only auth/partial-update nuance, which is not critical for correct invocation.

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

Parameters3/5

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

Schema description coverage is 100% and the schema already documents replace semantics ('replaces existing labels') and the spam/trash exclusion, so the baseline is 3. The description adds only the marginal 'empty array clears them' detail and the sibling routing, which largely repeats structured data.

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

Purpose5/5

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

States a specific verb and resource ('change a ticket') and enumerates exactly which attributes can be mutated (state, assignee, inbox, subject, spam/trash, labels). It distinguishes itself from the label siblings by naming enchant_add_ticket_labels and the condition that selects it, so an agent can route correctly without opening schemas.

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

Usage Guidelines4/5

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

Explicitly routes label-append intent to enchant_add_ticket_labels ('use ... to keep existing ones') and states the replace-vs-append condition, which is genuine when-to-use guidance. It does not cover the other plausible siblings (enchant_reply_to_ticket, enchant_remove_ticket_labels), so it falls short of full alternative coverage.

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

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables reading and writing Zendesk tickets, including searching, fetching comments, posting replies and internal notes, setting ticket status, assigning tickets, logging time, and formatting tickets as Markdown issue drafts for handoff to GitLab, GitHub, or Jira.
    29
    239 PyPI
    7
    Apache 2.0
  • A
    license
    B
    quality
    B
    maintenance
    TomTicket helpdesk MCP: list, reply, log time, and finish tickets plus customers, chats, and knowledge base.
    49
    9 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.