RepairDesk MCP Server
Servidor MCP de RepairDesk
Un servidor MCP (Model Context Protocol) que da a cualquier asistente de IA compatible con MCP — Claude Code, Claude Desktop, Codex CLI, OpenCode, Cursor, Windsurf, o cualquier otro cliente MCP — acceso directo de lectura/escritura a los datos de tu tienda RepairDesk. Apúntalo a la clave API de tu tienda y empieza a preguntar cosas como "busca el ticket T-15423", "¿qué está pendiente en la factura 8821?", o "asigna el trabajo de pantalla del iPhone a Dave".
No es un producto oficial de RepairDesk — es una herramienta independiente creada por una tienda RepairDesk para tiendas RepairDesk. Sin garantía, úsalo bajo tu propio riesgo (ver Licencia) — pero está en uso diario gestionando la cola de tickets de una tienda de reparación real, no una prueba de concepto.
Contenido
Related MCP server: RogerRoger MCP Server
Lo que realmente puedes hacer con esto
Una vez conectado a tu asistente de IA, puedes simplemente hablar con tus datos de RepairDesk en lugar de hacer clic en la interfaz web. Algunos ejemplos reales:
Mostrador / triaje
"Busca el ticket T-15423" — detalle completo del ticket: cliente, dispositivo, estado por dispositivo, notas.
"¿Cuál es el estado del teléfono de Sarah Miller?" — busca tickets por nombre/palabra clave del cliente.
"Muéstrame todo lo que esté Pendiente o Esperando piezas" — filtra tickets por estado.
"¿Qué tiene asignado Dave ahora mismo?" — filtra tickets por técnico.
"Saca los datos de contacto de John" — búsqueda de clientes por nombre, teléfono o correo electrónico.
Flujo de trabajo / trabajo en banco
"Añade una nota de diagnóstico a T-15423: pantalla reemplazada, batería probada OK"
"Asigna el ticket T-15490 a Dave"
"Marca T-15423 como Reparado" — el servidor te pedirá confirmación primero, y avisa de que este estado dispara automáticamente un SMS/correo al cliente en RepairDesk.
"Crea un ticket para este cliente: iPhone 13, reemplazo de pantalla" — de nuevo, se requiere confirmación antes de crear nada realmente.
Dinero / administración
"¿Qué facturas siguen sin pagar del mes pasado?"
"¿Cuál es el saldo pendiente de la factura 8821?"
"¿Tenemos una batería de iPhone 13 en stock?" — búsqueda de inventario.
"Lista todos nuestros técnicos" / "¿Qué métodos de pago tenemos configurados?"
"¿Qué categorías de reparación/tipos de dispositivo tenemos configurados?" — contexto útil al crear un ticket o diagnosticar qué modelo de dispositivo es en tu sistema.
Como esto funciona a través de un asistente de IA real en lugar de un panel fijo, puedes encadenar estas acciones de forma natural — "encuentra facturas vencidas de clientes con un ticket aún abierto" — y el asistente lo resuelve entre herramientas en lugar de que tú cruces dos pantallas manualmente.
Referencia de herramientas
Herramienta | Qué hace |
| Busca tickets por estado/fecha/palabra clave/técnico, u obtén el detalle completo de un ticket (incluido el estado por dispositivo) |
| Crea tickets, actualiza estado/campos de dispositivo, añade notas internas o de diagnóstico, asigna un técnico |
| Busca clientes por nombre, teléfono, correo electrónico o ID |
| Busca facturas, obtén una factura, o comprueba su importe pendiente/vencido |
| Busca stock de piezas por palabra clave |
| Lista empleados/técnicos |
| Consultas de referencia: dispositivos, categorías, estados, colores, redes, clases de impuestos, métodos de pago, fuentes de referencia, tipos de reparación/servicio, ubicaciones, problemas (por dispositivo), trade-ins, órdenes de compra |
Barra de seguridad: repairdesk_tickets_write requiere confirmed: true antes de aplicar un cambio
de estado, y avisa cuando el estado objetivo es uno sobre el que RepairDesk notifica automáticamente al cliente
(Reparado, Listo para recoger, Completado, Esperando al cliente, Esperando presupuesto, Cancelado). No
necesitas hacer nada para que esto funcione — solo responde "sí" cuando tu asistente transmita la
solicitud de confirmación.
Detalle útil: las búsquedas/escrituras de tickets aceptan tanto el formato de ID de pedido de RepairDesk (T-15423)
como el ID numérico interno del ticket — nunca necesitas saber cuál tienes, el servidor
lo resuelve por ti.
Lo que esto no es
Esto cubre el lado de lectura de RepairDesk más las escrituras básicas del flujo de trabajo de tickets. No cubre presupuestos, creación de citas, transacciones de POS/ventas, escrituras de inventario, registro de pagos, subida de imágenes/adjuntos de tickets, ni webhooks. Se aceptan PRs si necesitas alguna de esas funciones.
Inicio rápido
No necesitas ser desarrollador para ejecutar esto — solo sentirte cómodo escribiendo un puñado de comandos en una terminal. Tiempo total: unos 5 minutos.
1. Instala Node.js (si no lo tienes)
Descárgalo e instálalo desde nodejs.org — elige la versión "LTS". Esto
instala tanto node como npm. Para comprobar que funcionó, abre una terminal y ejecuta:
node --versionDeberías ver algo como v20.x.x (cualquier versión 18 o superior está bien).
2. Obtén el código
Si tienes Git:
git clone https://github.com/codeyoc/repairdesk-mcp.git
cd repairdesk-mcpSi no: haz clic en el botón verde Code en la página del repositorio de GitHub → Download ZIP → descomprímelo en algún lugar → abre una terminal en esa carpeta.
3. Obtén tu clave API de RepairDesk
En tu administración de RepairDesk: Settings → API. Copia la clave que se muestra allí — el script de configuración te la pedirá en el siguiente paso. Trátala como una contraseña: otorga acceso completo de lectura/escritura a los datos de tu tienda (ver Seguridad).
4. Ejecuta el script de configuración
node setup.mjsEste es el camino más rápido y se encarga de todo: ejecuta npm install por ti si es necesario, te pide
tu clave API, pregunta qué asistente de IA estás usando (Claude Code, Claude Desktop, Codex CLI,
o OpenCode), y escribe la configuración automáticamente — haciendo una copia de seguridad de cualquier archivo de configuración existente
primero. Si estás en otro, imprime el bloque de configuración para que lo pegues tú mismo.
Si prefieres hacerlo a mano — o tu cliente no es uno de los cuatro anteriores — consulta
Configuración manual a continuación. De cualquier manera, ejecuta npm install tú mismo primero si
omites el script.
5. Pruébalo
Pregunta a tu asistente algo como "Usando RepairDesk, lista mis 5 tickets más recientes". Si responde con datos reales de tickets, has terminado.
Configuración manual
Omite esto si node setup.mjs ya funcionó para ti. De lo contrario, ejecuta npm install en esta
carpeta primero, y luego conecta tu cliente a mano:
Ejecuta esto desde cualquier lugar, reemplazando la ruta con la ruta completa a donde descomprimiste/clonaste la carpeta, y la clave con la tuya real:
claude mcp add repairdesk \
--env REPAIRDESK_API_KEY=your_key_here \
--env REPAIRDESK_USER_AGENT=YourShopName-MCP/1.0 \
-- node /full/path/to/repairdesk-mcp/server.mjsAbre (o crea) el archivo de configuración para tu sistema operativo:
Mac:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Añade esto (combínalo con lo que ya haya en mcpServers si el archivo no está vacío):
{
"mcpServers": {
"repairdesk": {
"command": "node",
"args": ["/full/path/to/repairdesk-mcp/server.mjs"],
"env": {
"REPAIRDESK_API_KEY": "your_key_here",
"REPAIRDESK_USER_AGENT": "YourShopName-MCP/1.0"
}
}
}
}Guarda el archivo, luego cierra y vuelve a abrir completamente Claude Desktop (no solo cierres la ventana).
Edita (o crea) ~/.codex/config.toml y añade:
[mcp_servers.repairdesk]
command = "node"
args = ["/full/path/to/repairdesk-mcp/server.mjs"]
[mcp_servers.repairdesk.env]
REPAIRDESK_API_KEY = "your_key_here"
REPAIRDESK_USER_AGENT = "YourShopName-MCP/1.0"Inicia una nueva sesión de Codex y ejecuta /mcp para confirmar que se conectó. (Codex también tiene un comando interactivo
codex mcp add si prefieres eso a editar el archivo — consulta codex mcp add --help
para las banderas exactas en tu versión instalada.)
Abre (o crea) el archivo de configuración para tu sistema operativo:
Mac/Linux:
~/.config/opencode/opencode.jsonWindows:
%APPDATA%\opencode\opencode.json
Añade esto (combínalo con lo que ya haya en mcp si el archivo no está vacío):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"repairdesk": {
"type": "local",
"command": ["node", "/full/path/to/repairdesk-mcp/server.mjs"],
"enabled": true,
"environment": {
"REPAIRDESK_API_KEY": "your_key_here",
"REPAIRDESK_USER_AGENT": "YourShopName-MCP/1.0"
}
}
}
}Reinicia OpenCode para que lo recoja.
La forma command/args/env usada arriba (Claude Code/Desktop) es el estándar de facto —
la mayoría de los clientes MCP la siguen, solo que en un archivo de configuración diferente. Consulta la documentación de tu cliente para saber
dónde está ese archivo; el bloque en sí debería funcionar tal cual.
Usa la ruta completa y absoluta a server.mjs (por ejemplo, /Users/you/repairdesk-mcp/server.mjs o
C:\Users\you\repairdesk-mcp\server.mjs) — una ruta relativa fallará porque tu cliente de IA
no se ejecuta desde dentro de esta carpeta.
Todas las opciones de configuración
Todo lo siguiente va en el bloque env/environment que usa la configuración de tu cliente (setup.mjs
lo maneja por ti) — no en un archivo .env, ya que la mayoría de los clientes MCP no lo leen automáticamente.
.env.example en este repositorio lista las mismas variables como referencia.
Variable | Requerida | Por defecto | Propósito |
| Sí | — | Tu clave API de RepairDesk |
| No |
| Sobrescribe la URL base de la API |
| No |
| User-Agent enviado en cada solicitud. Pon el nombre de tu tienda/herramienta si quieres — solo que no puede estar vacío (ver Solución de problemas) |
| No |
| Mínimo de ms entre llamadas API salientes — ver límite de velocidad a continuación |
| No |
| Dónde se escribe |
| No |
| Ruta a un archivo de configuración JSON, si prefieres usarlo en lugar de variables de entorno (ver a continuación) |
Alternativa: archivo de configuración en lugar de variables de entorno. Si tu configuración hace que las variables de entorno sean incómodas, crea un config.json (ignorado por git) junto a server.mjs:
{
"repairdesk_api_key": "your_key_here",
"repairdesk_base_url": "https://api.repairdesk.co/api/web/v1"
}Se vuelve a leer en cada llamada a la API, así que puedes rotar la clave sin reiniciar el servidor. Las variables de entorno tienen prioridad sobre este archivo cuando ambos están presentes.
Límite de velocidad: lo de 100/minuto
El límite documentado de RepairDesk es de 100 solicitudes por minuto por clave de API (algunos planes permiten hasta 120; comprueba tu propio plan si no estás seguro). Este servidor lo maneja automáticamente por ti:
Cada llamada saliente se pone en cola a través de un único limitador que espera al menos
REPAIRDESK_MIN_INTERVAL_MS(por defecto 600 ms ≈ 100/min) entre solicitudes, de modo que pedir un gran lote de tickets no provocará por sí mismo un error de límite de velocidad.Si RepairDesk aún devuelve un 429 (límite de velocidad alcanzado), por ejemplo, si otra herramienta también está golpeando la misma clave, el servidor espera automáticamente y reintenta una vez antes de rendirse.
No necesitas configurar nada para que esto funcione. Solo toca
REPAIRDESK_MIN_INTERVAL_MSsi ves errores de límite de velocidad de forma constante (súbelo) o si sabes que tu plan permite un límite más alto y quieres búsquedas masivas más rápidas (bájalo, con cuidado).
Solución de problemas
"RepairDesk API returned 401 Unauthorized" / "Unauthorized" en la respuesta
Tu clave de API es incorrecta, fue revocada o no se recogió. Vuelve a comprobar la clave en Configuración → API en RepairDesk, y que esté escrita correctamente en la configuración de tu cliente MCP (sin un espacio suelto, y que no siga siendo YOUR_REPAIRDESK_API_KEY_HERE). Reinicia completamente tu cliente de IA después de cualquier cambio de configuración; la mayoría no recarga la configuración de MCP en vivo.
Las solicitudes fallan inmediatamente / parecen estar bloqueadas, no autenticadas
El Cloudflare de RepairDesk bloquea solicitudes con un User-Agent vacío o con apariencia predeterminada. No establezcas REPAIRDESK_USER_AGENT como una cadena vacía.
"RepairDesk API rate limit hit twice in a row (429)"
Estás haciendo solicitudes más rápido de lo que permite tu clave incluso después del reintento integrado. Sube REPAIRDESK_MIN_INTERVAL_MS (prueba con 1000) en tu configuración.
"Ticket T-XXXXX not found — could not resolve to internal ID" Comprueba que el ID del pedido sea correcto y que exista en esta tienda de RepairDesk. Si tienes el ID numérico interno, también funciona: pásalo directamente.
"RepairDesk API request timed out after 15000ms"
Normalmente es un problema de red/firewall para llegar a api.repairdesk.co, o REPAIRDESK_BASE_URL es incorrecto. Comprueba que puedes alcanzar ese host desde donde se ejecuta este servidor.
Tu asistente de IA no ve la herramienta en absoluto
Confirma que la ruta en
argses absoluta, no relativa, y que apunta realmente aserver.mjs.Confirma que ejecutaste
npm installen esa carpeta (si faltanode_modules, el servidor no puede arrancar).Cierra y reinicia por completo tu cliente de IA; no basta con cerrar la ventana de chat.
Ejecuta
node /ruta/completa/a/server.mjsdirectamente en una terminal; si da error, verás el problema real en lugar de un "herramienta no disponible" genérico de tu cliente.
node setup.mjs dice que no pudo encontrar claude/codex en tu PATH
No pasa nada: recurre a imprimir el bloque de configuración para que lo pegues manualmente (consulta Configuración manual). Esto solo significa que esa CLI no está instalada o no está en tu PATH; no significa que el servidor MCP en sí esté roto.
¿Sigue atascado? Abre un issue en este repositorio con el mensaje de error (redacta tu clave de API primero si aparece en algún lugar de la salida).
Preguntas frecuentes
¿Es esta una herramienta oficial de RepairDesk? No. Está construida y mantenida de forma independiente, utilizando la API pública de RepairDesk. Úsala bajo tu propio criterio.
¿Cuesta algo ejecutarla? No: solo realiza las mismas llamadas a la API que tu plan de RepairDesk ya permite. No hay ninguna tarifa adicional de este proyecto. (Tu suscripción de asistente de IA, por ejemplo Claude, es separada y no está relacionada con este servidor).
¿Puedo usar esto con algo que no sea Claude?
Sí: MCP es un estándar abierto. setup.mjs configura Claude Code, Claude Desktop, Codex CLI y OpenCode directamente; cualquier otra cosa que hable MCP sobre stdio (Cursor, Windsurf, etc.) también puede usar este servidor, mediante la configuración manual en Configuración manual.
¿Puedo ejecutar esto para varias tiendas de RepairDesk?
Sí: regístralo varias veces con diferentes nombres (por ejemplo, repairdesk-store1, repairdesk-store2) en tu cliente MCP, cada uno con su propia REPAIRDESK_API_KEY.
¿Mi asistente de IA enviará accidentalmente correos o mensajes de texto a mis clientes?
Solo repairdesk_tickets_write puede provocar eso, y solo mediante un cambio de estado, que siempre requiere un confirmed: true explícito y se marca en la descripción de la herramienta cuando el estado objetivo es uno de los estados notificadores de RepairDesk. No ocurrirá en silencio.
Seguridad
Tu REPAIRDESK_API_KEY otorga acceso completo de lectura/escritura a los datos de clientes y financieros de tu tienda. Mantenla en la configuración de entorno de tu cliente MCP, nunca en un archivo versionado. config.json y .env están ignorados por git aquí precisamente por esa razón: úsalos localmente si prefieres un archivo en lugar de variables de entorno, pero no subas una copia rellenada. ¿Encontraste un problema de seguridad? Abre un issue (o un informe privado si tu host lo permite) en lugar de un PR público con detalles del exploit.
Licencia
MIT: consulta LICENSE. Se proporciona tal cual, sin garantía: eres responsable de cómo lo usas con tu propia cuenta de RepairDesk.
Available Tools
7 toolsrepairdesk_customersB
Look up customers by name, phone, email, or ID.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| action | Yes | ||
| keyword | No | Search by name, phone, or email | |
| pagesize | No | ||
| customer_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It states 'look up' which suggests a read-only operation, and the action enum (list/get) reinforces this. However, it does not explicitly confirm read-only semantics, nor does it mention pagination behavior or any permissions required. The description is adequate but leaves room for inference about side effects and constraints.
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 concise sentence with no redundancy. It efficiently conveys the core purpose. However, it could include a bit more detail (e.g., mention of action modes) without losing conciseness, so it's not a perfect 5.
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 tool has 5 parameters including an action enum and pagination, yet the description does not explain the 'action' parameter, the difference between list and get, or how pagination works. It also doesn't address how 'customer_id' vs 'keyword' are used together. For a tool of this complexity, the description is incomplete and requires the agent to infer critical usage details from the schema alone.
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?
The schema description coverage is only 20% (only 'keyword' is described). The tool description adds partial meaning by mentioning name, phone, email, or ID, mapping roughly to 'keyword' and 'customer_id', but it does not explain the 'action' parameter, nor does it clarify how 'keyword' and 'customer_id' relate or when to use each. It also omits pagination parameters (page, pagesize). The description adds some value but insufficiently compensates for the low 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?
The description clearly states the action (look up) and resource (customers), and lists the search fields. It is distinct from sibling tools (tickets, invoices, etc.) which target different resources. However, it does not mention the 'action' parameter that distinguishes between listing and getting a single customer, leaving some ambiguity about the exact operation.
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 implies this tool is for customer lookup but provides no explicit guidance on when to use it versus alternatives. Since siblings are for other resources, the use case is fairly obvious, yet there is no mention of scenarios like retrieving a specific customer vs. browsing all customers, which the action parameter addresses.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repairdesk_employeesC
List employees/technicians.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| pagesize | No |
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 only says 'List', which implies a read operation, but it does not disclose pagination behavior, return format, or any side effects. For a simple listing tool, the lack of even basic behavioral context (e.g., that results are paged) leaves the agent guessing about what to expect.
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, concise sentence that front-loads the verb and resource. It is not verbose or redundant, and it follows a clear structure. However, it is so terse that it borders on under-specification, but the dimension is about conciseness and structure, not completeness, so it earns a 4.
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 no output schema and no annotations, the description should at least hint at pagination and typical response characteristics. The description covers only the basic action and does not mention that results may be paged (as implied by the parameters) or what fields to expect. An agent cannot fully anticipate the tool's behavior from this description alone.
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 0%, and the description does not mention the 'page' or 'pagesize' parameters at all. Since the schema properties have no descriptions, the agent has no explanation of these parameters beyond their names and defaults. The description fails to compensate for the lack of schema documentation.
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 clearly states the action ('List') and the resource ('employees/technicians'). It is not a tautology and provides a specific verb+resource pair. However, it does not explicitly differentiate from sibling tools, though no other sibling handles employees, so it is reasonably distinct.
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 provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, exclusions, or contexts where another tool like repairdesk_tickets or repairdesk_customers would be more appropriate. The only intended use is implicit from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repairdesk_inventoryC
Search inventory/parts stock.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| keyword | No | ||
| pagesize | No |
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. The tool is a search, which implies a read-only operation, but the description does not state that explicitly, nor does it mention pagination behavior, response structure, or any side effects. It only states the purpose without disclosing observable behaviors or constraints. Both the read-only nature and pagination are left entirely to inference.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence with no fluff or redundancy, which is technically concise. However, it is under-specified for an agent; the brevity does not earn its place because it omits essential information. It is neither front-loaded with useful details nor structured to guide usage. It is compact but not informative, so a middle score is appropriate.
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 tool with 3 parameters, no output schema, and no annotations, the description is severely incomplete. It does not explain what the search returns, what fields are searched, how to paginate, or what a typical response looks like. An agent cannot confidently call this tool correctly because it lacks the context needed to construct a valid query or interpret results. The description is virtually absent.
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?
The input schema has 0% coverage (no descriptions for page, keyword, or pagesize), so the description must compensate and explain parameter meaning. It does not mention any of the parameters at all. The agent is left to guess what 'keyword' searches against (e.g., part name, SKU) and how pagination is applied. The description provides zero value beyond the schema structure.
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 clear action ('Search') and a clear resource ('inventory/parts stock'). It distinguishes the tool from siblings like repairdesk_tickets, repairdesk_customers, and repairdesk_invoices by naming the resource domain. However, it could be more specific about what 'inventory/parts' means in the repair-desk context (e.g., parts availability), but the core purpose is unambiguous.
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 provides no guidance on when to use this tool versus alternatives. It does not mention any context such as 'use this to find parts available for a repair' or 'use this to check stock levels.' There are no exclusions or references to sibling tools. The only implied usage is searching inventory, which is not explicit enough to route an agent effectively.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repairdesk_invoicesC
Search invoices, get details, or check due/outstanding amounts.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| action | Yes | ||
| status | No | ||
| keyword | No | ||
| to_date | No | ||
| pagesize | No | ||
| from_date | No | ||
| invoice_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions three distinct operations but does not disclose side effects, permission requirements, rate limits, or return behavior. The description adds little beyond what the tool name implies, leaving the agent uncertain about operational impact.
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 concise sentence with no waste, front-loading the core purpose. However, given the tool's complexity (8 parameters, 3 actions), it is under-specified. The conciseness itself is good, but the structure lacks the necessary detail to be fully valuable.
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 tool has 8 parameters, an action enum, and no output schema, yet the description provides almost no contextual information. It does not explain how the three actions map to the enum values, what each parameter does, or what the response format looks like. This is critically incomplete for an agent to use effectively.
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 0% because the description does not mention any parameters. It fails to explain the meaning of action values, how keyword filtering works, date ranges, pagination, or the purpose of invoice_id. With 8 parameters and zero description coverage, the agent is left to guess parameter usage from the schema alone, which is insufficient.
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 clear verb+resource: search, get details, and check amounts specifically for invoices. It distinguishes itself from sibling tools that handle tickets, customers, etc., even though it doesn't name them. The three actions are explicit and convey the tool's scope.
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 on when to use this tool versus alternatives. It does not mention any exclusions, prerequisites, or conditions for using one action over another. An agent must infer usage context from the action enum, but the description provides no such context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repairdesk_shop_infoB
Look up reference data: devices, categories, statuses, colors, networks, tax classes, payment methods, referral sources, repair types, service types, locations, problems (by device), trade-ins, purchase orders.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| brand | No | Filter devices by brand | |
| lookup | Yes | ||
| keyword | No | ||
| pagesize | No | ||
| device_id | No | Required when lookup=problems | |
| device_name | No | Filter devices by name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of disclosing behavioral traits. It indicates a read operation ('look up') and hints at a dependency for problems ('by device'), but it does not explicitly state that the tool is read-only, has no side effects, requires authentication, or handles pagination. The description lacks essential behavioral context for an agent to call it safely without assumptions.
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 compact, consisting of a single sentence that front-loads the verb and resource. It efficiently enumerates the lookup types without unnecessary filler. While the list is long, it is still concise and well-structured, earning a high but not perfect score for brevity.
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's complexity (7 parameters, one required, low schema coverage, no output schema), the description is far too sparse. It does not explain return values, pagination behavior, required dependencies (e.g., device_id for problems), or how to effectively use filters. An agent would need to infer much from the sparse schema descriptions, making the tool under-documented.
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 only 43% (only brand, device_id, and device_name have descriptions), so the description needs to compensate by explaining parameter usage. However, it only lists the lookup enum values and mentions 'problems (by device)' without tying that to the device_id parameter. It does not clarify the role of page, pagesize, keyword, or how filters work, leaving a significant semantic gap.
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 uses a clear verb ('Look up') and a specific resource ('reference data'), then enumerates the exact entity types supported. This makes the tool's purpose unambiguous and distinguishes it from siblings like repairdesk_tickets or repairdesk_inventory, which handle operational entities rather than lookups.
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 implies this tool is for retrieving reference data, and its distinct name and content signal a different usage context from the sibling tools. However, there is no explicit statement about when to use this tool versus alternatives, nor exclusions for when not to use it. The guidance is only implied by the tool's nature, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repairdesk_ticketsB
Search and look up repair tickets. List tickets filtered by status, date, keyword, or tech. Get full details by ticket ID.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| action | Yes | "list" to search, "get" for specific ticket | |
| status | No | Filter by status (Pending, In Progress, Repaired, etc.) | |
| keyword | No | Search keyword (customer name, device, etc.) | |
| to_date | No | End date as Unix timestamp | |
| pagesize | No | ||
| from_date | No | Start date as Unix timestamp | |
| ticket_id | No | Ticket ID (for action=get) | |
| assigned_to | No | Filter by assigned employee ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It uses read-oriented verbs ('search', 'look up', 'list', 'get') implying a non-destructive operation, but it never explicitly states that no changes are made. It also discloses filtering capabilities but omits details like pagination behavior or any side effects, which is a moderate gap for a read 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?
The description is two sentences with no fluff. It front-loads the primary action and then lists the filter options in a logical order. Every word contributes to understanding the tool's purpose and usage.
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 search tool with no output schema and moderate complexity (9 parameters, but only one required), the description covers the main actions (list with filters, get by ID). It does not explicitly mention pagination or the response format, but given the simple read nature and the schema covering parameters, it is reasonably complete. A slightly more detailed mention of return contents would push it higher.
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 78% (slightly below the high threshold), so the description partially compensates by enumerating filter categories (status, date, keyword, tech) and mentioning 'get by ticket ID'. This maps to several parameters, but it adds little beyond the schema's own descriptions, which already explain each parameter's purpose. Overall, it meets the baseline for a moderately covered 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?
The description clearly identifies the tool as a search/lookup for repair tickets with specific verbs (search, look up, list, get) and a resource (repair tickets). It effectively conveys the read-only nature, though it does not explicitly mention the sibling write tool or contrast itself, so it stops short of full differentiation.
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 implies the tool is for reading/searching but provides no explicit guidance on when to use this tool versus alternatives like repairdesk_tickets_write. There are no statements about when not to use it or prerequisites, leaving the agent to infer usage context from the action enum and filter descriptions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
repairdesk_tickets_writeA
Create/update tickets, add notes, assign techs. WARNING: Status changes may trigger automatic customer SMS/email! Statuses that notify: Repaired, Ready for Pickup, Completed, Waiting on Customer, Waiting For Quote, Cancelled. ALWAYS confirm with user before status changes.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Note text (for add_note) | |
| action | Yes | ||
| status | No | Ticket status — MAY TRIGGER NOTIFICATION | |
| confirmed | No | Must be true for status changes | |
| device_id | No | Device type ID (for create) | |
| note_type | No | internal or diagnostic | internal |
| ticket_id | No | Ticket ID (for update/add_note/assign) | |
| service_id | No | Service/repair item ID | |
| customer_id | No | Customer ID (for create) | |
| device_name | No | Device name/model | |
| service_name | No | Service name | |
| security_code | No | Device PIN/password | |
| serial_number | No | ||
| technician_id | No | Employee ID (for assign) | |
| additional_notes | No | Internal notes |
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 discloses the major side effect: status changes may trigger automatic customer SMS/email and lists the specific statuses that notify. It also mandates confirmation. This covers the primary behavioral risk, though it does not mention authentication or rate limits, which is acceptable for this context.
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 concise and effective: a single sentence states the purpose, then a warning in caps draws attention to the critical side effect and the confirmation requirement. Every sentence earns its place with no fluff, and the critical warning is front-loaded.
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 tool is complex with 15 parameters and multiple actions, but the schema provides detailed per-parameter descriptions and the action enum clarifies usage. The description covers the essential context: what the tool does and the notification risk. It does not need to explain return values since there is no output schema. The description is sufficiently complete for an agent to call it correctly with the schema's help.
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 87%, so the schema already explains most parameters well (e.g., note, ticket_id, customer_id). The description's warning about status notifications adds context to the status parameter, but the schema already includes 'MAY TRIGGER NOTIFICATION'. The description does not add significant semantic value beyond the schema; it meets the baseline for high 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?
The description clearly states the tool's actions: create/update tickets, add notes, assign techs. It names the specific resource (tickets) and verb, distinguishing it from the read-focused sibling repairdesk_tickets. The purpose is unambiguous and not a tautology.
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 includes explicit guidance to always confirm with the user before status changes, which is critical for safe usage. It implies this is the write tool vs. the read tool repairdesk_tickets, though it does not explicitly name alternatives. The confirmation requirement is a clear usage rule.
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.
7 tool updates
v1.0.0- First observed
repairdesk_customers - First observed
repairdesk_employees - First observed
repairdesk_inventory - First observed
repairdesk_invoices - First observed
repairdesk_shop_info - First observed
repairdesk_tickets - First observed
repairdesk_tickets_write
TDQS
Scored across 7 tools
Each tool targets a distinct domain entity (tickets, customers, invoices, inventory, employees, reference data), with read and write operations clearly separated. There is no overlap or ambiguity between tool purposes.
All tools share a consistent 'repairdesk_' prefix and noun-based names (customers, invoices, inventory, etc.). The 'tickets' vs 'tickets_write' pair introduces a minor inconsistency, but overall the naming pattern is predictable and clear.
Seven tools is well-scoped for a repair shop management domain. Each tool covers a necessary function without redundancy, making the set compact and purposeful.
The surface provides full ticket lifecycle (search, create, update), customer lookup, invoice queries, inventory search, employee list, and reference data. Minor gaps like ticket deletion or invoice creation exist, but the core workflows are covered.
Maintenance
Related MCP Connectors
Let AI agents query data and act across all your business apps via MCP.
- PressoOAuthnow.presso
Connect e-commerce and marketing data to AI assistants via MCP.
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
Connect AI to store orders, products and inventory with scoped access and human approvals.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to analyze IT support tickets, categorize urgency, suggest responses, and retrieve statistics via MCP tools.-
- AlicenseBqualityCmaintenanceEnables AI assistants to manage RogerRoger CRM data including people, organizations, lists, tags, and tasks through standardized MCP tools.224 npmMIT
- AlicenseAqualityBmaintenanceEnables AI assistants to read and manage a Jobkeepr field service business including jobs, customers, scheduling, estimates, invoices, and payments via MCP.19MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to query and operate a help desk and service desk through MCP over HTTP, including tickets, requester communications, internal notes, attachments, stage and SLA history, time entries, clients, requesters, desks, knowledge base, contracts, and billing/satisfaction reports.MIT