Enchant MCP by usefulapi

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

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
95%
Integridad del esquema
96%
Calidad de los nombres
79%
Riesgo de envenenamiento
100%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (1)

  • LOWTool 'enchant_delete_customer_contact' name length outside 3-30 rangeen enchant_delete_customer_contact

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~3,246Tokens (definiciones de herramientas)
~1.7 KBTamaño de respuesta típico
Impacto significativo en la atención (2.54% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "enchant": {
      "url": "https://enchant.usefulapi.io/mcp"
    }
  }
}

Puntos de conexión remotos

https://enchant.usefulapi.io/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (16)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢enchant_list_tickets(ids, inbox_ids, states, user_ids, label_ids, ...)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "ids": {
      "description": "Only these ticket ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "inbox_ids": {
      "description": "Only tickets in these inbox ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "states": {
      "description": "Only tickets in these states.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "open",
          "hold",
          "closed"
        ]
      }
    },
    "user_ids": {
      "description": "Only tickets assigned to these user ids (\"null\" = unassigned).",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "label_ids": {
      "description": "Only tickets with these label ids.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "types": {
      "description": "Ticket types, e.g. email, chat, sms, phone, web, twitter, whatsapp.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "spam": {
      "description": "Only spam (true) or only non-spam (false) tickets.",
      "type": "boolean"
    },
    "trash": {
      "description": "Only trashed (true) or only non-trashed (false) tickets.",
      "type": "boolean"
    },
    "since_created_at": {
      "description": "Only tickets created since this UTC ISO 8601 time, e.g. 2026-01-31T13:41:10Z.",
      "type": "string"
    },
    "since_updated_at": {
      "description": "Only tickets updated since this UTC ISO 8601 time.",
      "type": "string"
    },
    "sort": {
      "description": "Sort order; a leading - means descending.",
      "type": "string",
      "enum": [
        "updated_at",
        "-updated_at",
        "created_at",
        "-created_at",
        "user_id",
        "user_id,-updated_at"
      ]
    },
    "per_page": {
      "description": "Results per page (0-100, default 10). Use 0 with count to get only the total.",
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "page": {
      "description": "Page number (1-based). Past 10,000 results, filter by since_created_at instead.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "count": {
      "description": "If true, also return the total number of matching results (costs 1 extra rate-limit credit).",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢enchant_get_ticket(id, embed)

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}.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Ticket id (the string id, not the friendly ticket number)."
    },
    "embed": {
      "description": "Related resources to embed.",
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "messages",
          "customer",
          "user",
          "inbox",
          "labels"
        ]
      }
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢enchant_list_users(per_page, page)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "per_page": {
      "description": "Results per page (0-100, default 10). Use 0 with count to get only the total.",
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "page": {
      "description": "Page number (1-based). Past 10,000 results, filter by since_created_at instead.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢enchant_list_customers(contact_type, contact_value, since_created_at, per_page, page, ...)

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

Esquema de entrada

{
  "type": "object",
  "properties": {
    "contact_type": {
      "description": "Contact type to match (use with contact_value).",
      "type": "string",
      "enum": [
        "email",
        "twitter",
        "phone"
      ]
    },
    "contact_value": {
      "description": "Email address or Twitter screen name to match (use with contact_type).",
      "type": "string"
    },
    "since_created_at": {
      "description": "Only customers created since this UTC ISO 8601 time.",
      "type": "string"
    },
    "per_page": {
      "description": "Results per page (0-100, default 10). Use 0 with count to get only the total.",
      "type": "integer",
      "minimum": 0,
      "maximum": 100
    },
    "page": {
      "description": "Page number (1-based). Past 10,000 results, filter by since_created_at instead.",
      "type": "integer",
      "minimum": 1,
      "maximum": 9007199254740991
    },
    "count": {
      "description": "If true, also return the total number of matching results (costs 1 extra rate-limit credit).",
      "type": "boolean"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢enchant_get_customer(id)

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

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Customer id."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢enchant_get_attachment(id)

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

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Attachment id."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴enchant_create_ticket(subject, customer_id, customer, body, user_id, ...)

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.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "subject": {
      "type": "string",
      "minLength": 1,
      "description": "Ticket subject."
    },
    "customer_id": {
      "description": "Existing customer id. Give this or customer.",
      "type": "string"
    },
    "customer": {
      "description": "Customer to find or create, instead of customer_id.",
      "type": "object",
      "properties": {
        "first_name": {
          "type": "string"
        },
        "last_name": {
          "type": "string"
        },
        "email": {
          "description": "Email address; used to find or create the customer.",
          "type": "string"
        }
      }
    },
    "body": {
      "description": "First inbound message from the customer (plain text).",
      "type": "string"
    },
    "user_id": {
      "description": "User id to assign the ticket to.",
      "type": "string"
    },
    "inbox_id": {
      "description": "Inbox id (the default inbox if omitted).",
      "type": "string"
    }
  },
  "required": [
    "subject"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴enchant_update_ticket(id, state, user_id, inbox_id, subject, ...)

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}.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Ticket id."
    },
    "state": {
      "description": "New state.",
      "type": "string",
      "enum": [
        "open",
        "hold",
        "closed"
      ]
    },
    "user_id": {
      "description": "Assign to this user id; null unassigns the ticket.",
      "type": [
        "string",
        "null"
      ]
    },
    "inbox_id": {
      "description": "Move to this inbox id.",
      "type": "string"
    },
    "subject": {
      "description": "New subject.",
      "type": "string"
    },
    "label_ids": {
      "description": "The full new set of label ids (replaces existing labels).",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "spam": {
      "description": "Mark as spam. Cannot be true together with trash.",
      "type": "boolean"
    },
    "trash": {
      "description": "Send to trash. Cannot be true together with spam.",
      "type": "boolean"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴enchant_add_ticket_labels(id, label_ids)

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

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Ticket id."
    },
    "label_ids": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Label ids to add."
    }
  },
  "required": [
    "id",
    "label_ids"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴enchant_remove_ticket_labels(id, label_ids)

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

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Ticket id."
    },
    "label_ids": {
      "minItems": 1,
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Label ids to remove."
    }
  },
  "required": [
    "id",
    "label_ids"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴enchant_reply_to_ticket(id, user_id, to, body, html, ...)

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).

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Ticket id."
    },
    "user_id": {
      "type": "string",
      "description": "Id of the user (agent) the reply is sent as; see enchant_list_users."
    },
    "to": {
      "type": "string",
      "minLength": 1,
      "description": "Recipient address, normally the customer's email."
    },
    "body": {
      "type": "string",
      "minLength": 1,
      "description": "Reply body."
    },
    "html": {
      "description": "True if body is HTML (default false: plain text).",
      "type": "boolean"
    },
    "attachment_ids": {
      "description": "Ids of attachments already uploaded.",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "id",
    "user_id",
    "to",
    "body"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴enchant_add_note(id, user_id, body, html, attachment_ids)

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

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Ticket id."
    },
    "user_id": {
      "type": "string",
      "description": "Id of the user (agent) the note is from; see enchant_list_users."
    },
    "body": {
      "type": "string",
      "minLength": 1,
      "description": "Note body."
    },
    "html": {
      "description": "True if body is HTML (default false: plain text).",
      "type": "boolean"
    },
    "attachment_ids": {
      "description": "Ids of attachments already uploaded.",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "required": [
    "id",
    "user_id",
    "body"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴enchant_create_customer(first_name, last_name, summary, contacts)

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

Esquema de entrada

{
  "type": "object",
  "properties": {
    "first_name": {
      "type": "string"
    },
    "last_name": {
      "type": "string"
    },
    "summary": {
      "description": "Short free-text summary shown on the customer profile.",
      "type": "string"
    },
    "contacts": {
      "description": "Contacts of the customer.",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "email",
              "twitter",
              "phone"
            ],
            "description": "Contact type."
          },
          "value": {
            "type": "string",
            "minLength": 1,
            "description": "Email address, Twitter screen name or phone number."
          }
        },
        "required": [
          "type",
          "value"
        ]
      }
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴enchant_update_customer(id, first_name, last_name, summary, contacts)

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}.

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Customer id."
    },
    "first_name": {
      "type": "string"
    },
    "last_name": {
      "type": "string"
    },
    "summary": {
      "description": "Short free-text summary shown on the customer profile.",
      "type": "string"
    },
    "contacts": {
      "description": "The full new contact list (replaces the existing one).",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "email",
              "twitter",
              "phone"
            ],
            "description": "Contact type."
          },
          "value": {
            "type": "string",
            "minLength": 1,
            "description": "Email address, Twitter screen name or phone number."
          }
        },
        "required": [
          "type",
          "value"
        ]
      }
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴enchant_add_customer_contact(id, type, value)

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

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Customer id."
    },
    "type": {
      "type": "string",
      "enum": [
        "email",
        "twitter",
        "phone"
      ],
      "description": "Contact type."
    },
    "value": {
      "type": "string",
      "minLength": 1,
      "description": "Email address, Twitter screen name or phone number."
    }
  },
  "required": [
    "id",
    "type",
    "value"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴enchant_delete_customer_contact(id, contact_id)

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

Esquema de entrada

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "Customer id."
    },
    "contact_id": {
      "type": "string",
      "description": "Contact id (from the customer's contacts)."
    }
  },
  "required": [
    "id",
    "contact_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada16 herramientas