# Herramientas · Soporte

> Herramientas MCP del módulo Soporte (coworking): abrir un ticket con fotos, listar la cola y mis tickets, clasificar, asignar, resolver, nota interna, cancelar, reabrir, fotos y plazos, además de la configuración de quién responde y del plazo por categoría.

El módulo [Soporte](/espacos/suporte) con el asistente: el residente abre y sigue tickets (con fotos), el equipo clasifica la cola, responde, escribe notas internas y resuelve, y el administrador configura quién responde y los plazos. Los roles son los de la pantalla: el asistente nunca hace más de lo que haría la persona conectada.

Cada herramienta lleva un sello: <span class="tool-kind tool-kind-read">Solo consulta</span> no cambia nada, <span class="tool-kind tool-kind-write">Modifica</span> crea o cambia algo al momento, y <span class="tool-kind tool-kind-confirm">Pide confirmación</span> solo actúa después de tu sí a un resumen. Consulta [Dinero y confirmación](/mcp/dinheiro-e-confirmacao).

## En resumen

| Herramienta | Qué hace | Rol mínimo | Tipo |
|---|---|---|---|
| [`get_support_space_settings`](#get-support-space-settings) | Cómo funciona el espacio: límites, plazos y, para el equipo, quién responde | Cualquiera | <span class="tool-kind tool-kind-read">Solo consulta</span> |
| [`get_support_overview`](#get-support-overview) | La cola en números | Moderador o financiero | <span class="tool-kind tool-kind-read">Solo consulta</span> |
| [`list_support_tickets`](#list-support-tickets) | Toda la cola, con filtros y plazos | Moderador o financiero | <span class="tool-kind tool-kind-read">Solo consulta</span> |
| [`list_my_support_tickets`](#list-my-support-tickets) | Tus tickets | Cualquiera | <span class="tool-kind tool-kind-read">Solo consulta</span> |
| [`get_support_ticket`](#get-support-ticket) | Un ticket con la conversación y las fotos | Cualquiera (el residente lee los suyos) | <span class="tool-kind tool-kind-read">Solo consulta</span> |
| [`get_support_resource_open_count`](#get-support-resource-open-count) | Cuántos tickets abiertos tiene un elemento | Cualquiera | <span class="tool-kind tool-kind-read">Solo consulta</span> |
| [`create_support_ticket`](#create-support-ticket) | Abre un ticket, con fotos | Cualquiera | <span class="tool-kind tool-kind-write">Modifica</span> |
| [`update_support_ticket`](#update-support-ticket) | Clasificación: estado, prioridad, categoría, responsable, lugar | Moderador o financiero, y responder la categoría | <span class="tool-kind tool-kind-write">Modifica</span> |
| [`add_support_comment`](#add-support-comment) | Comenta, o escribe una nota interna | Cualquiera (la nota, solo quien responde) | <span class="tool-kind tool-kind-write">Modifica</span> |
| [`cancel_support_ticket`](#cancel-support-ticket) | Cancela un ticket | Cualquiera (el residente, el suyo) | <span class="tool-kind tool-kind-confirm">Pide confirmación</span> |
| [`reopen_support_ticket`](#reopen-support-ticket) | Reabre un ticket | Cualquiera (el residente, el suyo resuelto) | <span class="tool-kind tool-kind-write">Modifica</span> |
| [`add_support_photo`](#add-support-photo) | Adjunta una foto | Cualquiera | <span class="tool-kind tool-kind-write">Modifica</span> |
| [`replace_support_photo`](#replace-support-photo) | Cambia una foto por otra | Cualquiera | <span class="tool-kind tool-kind-write">Modifica</span> |
| [`remove_support_photo`](#remove-support-photo) | Quita una foto | Cualquiera | <span class="tool-kind tool-kind-confirm">Pide confirmación</span> |
| [`delete_support_comment`](#delete-support-comment) | Borra un mensaje de la conversación | Administrador | <span class="tool-kind tool-kind-confirm">Pide confirmación</span> |
| [`delete_support_ticket`](#delete-support-ticket) | Borra un ticket y sus fotos | Administrador | <span class="tool-kind tool-kind-confirm">Pide confirmación</span> |

Por rol, el propietario y el administrador ven las 16; el moderador y el financiero, 14; el miembro, 11. El equipo es el propietario, el administrador, el moderador y el financiero, pero **quien responde** (clasificar, asignar, responder, anotar) es solo quien está en la selección de la categoría; **fuera de ella, la API rechaza con un `403` traducido** y el asistente lo cuenta. Consulta [Quién responde](/espacos/suporte#quien-responde).

El espacio se crea con [`create_space`](/mcp/ferramentas-comunidade#create-space) y `module: "support"`; [`update_space`](/mcp/ferramentas-comunidade#update-space) cambia solo lo que envíes.

## La configuración del espacio

El argumento `support` de `create_space` y `update_space` acepta (lo que envíes se combina con lo que ya existe):

| Campo | Tipo | Descripción |
|---|---|---|
| `allow_urgent_flag` | verdadero o falso | El residente puede marcar "es urgente" (pasa a prioridad alta). Por defecto: sí |
| `max_open_per_member` | 0 a 1000 | Tickets abiertos por residente; 0 = sin límite. Por defecto: 10 |
| `location_hint` | texto hasta 200 | La pista del campo "Lugar" |
| `default_assignee_id` | id o `null` | Quién recibe los tickets nuevos |
| `responders` | objeto | Quién responde: `tags` (**nombres** de etiqueta), `group_ids`, `profile_ids` y `by_category` (la selección de cada categoría, que sustituye a la del espacio). Owner y admin siempre responden; sin selección, responde todo el equipo |
| `sla.enabled` | verdadero o falso | Activa los plazos. Por defecto: sí |
| `sla.business_hours` | `{days, start, end}` | Días de la semana (0 = domingo a 6 = sábado) y horario `HH:MM`, en la zona horaria de la comunidad. Por defecto: de lunes a viernes, de 09:00 a 18:00. Sin festivos |
| `sla.categories` | por categoría | `first_response` y `resolution`, cada uno con `value` (entero) y `unit` (`hours` o `days`). Por defecto: 4 horas y 1 día |

Las categorías son `FACILITIES`, `CLEANING`, `EQUIPMENT`, `INTERNET`, `ACCESS`, `BILLING` y `OTHER`; los tipos, `MAINTENANCE` y `REQUEST`; los estados, `OPEN`, `IN_PROGRESS`, `WAITING_REQUESTER`, `RESOLVED` y `CANCELED`; las prioridades, `LOW`, `NORMAL`, `HIGH` y `URGENT`.

## `get_support_space_settings`

<span class="tool-kind tool-kind-read">Solo consulta</span>

**Cómo funciona el espacio.** `allowUrgentFlag`, `maxOpenPerMember`, `locationHint`, `hasBookings` (si se puede usar `resource_id`) y `sla`. El equipo recibe además `responders`, `defaultAssigneeId` y `canAnswerCategories` (las categorías que **tú** respondes); el residente nunca recibe `responders`. *Rol: cualquiera con acceso al espacio.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `space` | id o enlace | Sí | El espacio Soporte (`list_spaces`) |

## `get_support_overview`

<span class="tool-kind tool-kind-read">Solo consulta</span>

**La cola en números:** `open`, `inProgress`, `waitingRequester`, `unassigned`, `mine`, `overdue` (plazo vencido, reloj corriendo) y `total`. Sin `space`, suma todos los espacios de Soporte. *Rol: moderador o financiero.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `space` | id o enlace | No | |

**Pídelo así:** *"¿Cómo está la cola de tickets?"*

## `list_support_tickets`

<span class="tool-kind tool-kind-read">Solo consulta</span>

**Toda la cola**, por la actividad más reciente o por la prioridad. Con los plazos activados, cada ticket trae `sla` (`firstResponseDueAt`, `resolveDueAt`, `paused`, y las fechas legibles en la zona horaria de la comunidad) y, para el equipo, `sla.overdue`. Cada elemento dice qué puedes hacer (`canAnswer`, `canAssign`...). El residente usa `list_my_support_tickets`. *Rol: moderador o financiero.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `space` | id o enlace | No | |
| `kind`, `status`, `priority`, `category` | valores de arriba | No | Un valor de cada uno |
| `assignee_profile_id` | id | No | Tickets de ese responsable |
| `unassigned` | verdadero o falso | No | Sin responsable |
| `mine` | verdadero o falso | No | Asignados a ti |
| `overdue` | verdadero o falso | No | Plazo vencido y reloj corriendo (**Esperando respuesta** no cuenta) |
| `due_today` | verdadero o falso | No | El siguiente plazo vence hoy; solo en espacios con plazos |
| `requester_profile_id` | id | No | Tickets de esa persona |
| `resource_id` | id | No | Tickets de ese elemento de Reservas |
| `q` | texto | No | Número, `#42` o parte del título |
| `sort` | `activity` o `priority` | No | |
| `page`, `limit` | números | No | Paginación (hasta 100) |

**Pídelo así:** *"¿Qué tickets están atrasados o vencen hoy?"*

## `list_my_support_tickets`

<span class="tool-kind tool-kind-read">Solo consulta</span>

**Los tickets que abriste**, del más reciente al más antiguo. *Rol: cualquiera con acceso al espacio.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `space` | id o enlace | No | |
| `kind`, `status`, `priority`, `category` | valores de arriba | No | |
| `resource_id` | id | No | |
| `q` | texto | No | |
| `page`, `limit` | números | No | |

## `get_support_ticket`

<span class="tool-kind tool-kind-read">Solo consulta</span>

**Un ticket con la línea de tiempo:** mensajes, historial de cambios, las notas internas (**solo para el equipo**) y las fotos como enlaces de corta duración. El residente lee los suyos; el equipo lee todos, también fuera de la selección de quién responde. Otro ticket: `404`. *Rol: cualquiera.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `ticket_id` | id | Sí | De `list_support_tickets` o `list_my_support_tickets` |

## `get_support_resource_open_count`

<span class="tool-kind tool-kind-read">Solo consulta</span>

**El aviso de duplicado.** Solo el número de tickets abiertos de una sala, mesa o equipo de Reservas, sin título ni autor, para avisar antes de abrir otro más. *Rol: cualquiera.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `resource_id` | id | Sí | De `list_booking_resources` |

## `create_support_ticket`

<span class="tool-kind tool-kind-write">Modifica</span>

**Abrir un ticket**, con fotos. Se avisa al equipo por la cola de correos. Quien responde la categoría puede además definir la `priority` y abrir **en nombre de un residente** (`requester_profile_id`): el residente recibe un correo, así que el asistente muestra antes quién lo va a recibir. Por encima del límite de tickets abiertos del espacio, `409`; por encima de 10 aperturas por hora, `429`. Repetir la llamada con el mismo `client_request_id` devuelve el mismo ticket. *Rol: cualquiera con acceso al espacio.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `space` | id o enlace | Sí | El espacio Soporte |
| `kind` | `MAINTENANCE` o `REQUEST` | Sí | |
| `category` | categoría | Sí | |
| `title` | texto | Sí | Hasta 140 caracteres |
| `description` | texto | Sí | Hasta 10000 |
| `resource_id` | id | No | Sala, mesa o equipo (`list_booking_resources`) |
| `location_text` | texto | No | Hasta 120 caracteres; vale sin elemento |
| `urgent` | verdadero o falso | No | Pasa a prioridad alta, si el espacio lo permite |
| `priority` | prioridad | No | Solo quien responde |
| `requester_profile_id` | id | No | Solo quien responde: abre en nombre de ese residente |
| `photos` | lista | No | Hasta 5, cada una con `image_url` o `image_base64` (+ `image_type`) |
| `client_request_id` | texto | No | Evita duplicar con un toque repetido |

**Pídelo así:** *"Abre un ticket de mantenimiento: el proyector de la Sala 3 no enciende, aquí está la foto."*

## `update_support_ticket`

<span class="tool-kind tool-kind-write">Modifica</span>

**La clasificación.** Solo quien **responde la categoría** del ticket; fuera de ella, `403` traducido. Envía solo lo que cambia. `message` acompaña a `RESOLVED` o `WAITING_REQUESTER` como respuesta pública, y el residente recibe un correo; asignar avisa al responsable. `RESOLVED` y `CANCELED` solo vuelven a `OPEN`. `URGENT` solo se define aquí. Cada cambio entra en la conversación. *Rol: moderador o financiero, y responder la categoría.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `ticket_id` | id | Sí | |
| `status` | estado | No | |
| `priority` | prioridad | No | |
| `kind`, `category` | valores | No | La categoría solo cambia a una que tú también respondes |
| `assignee_profile_id` | id o `null` | No | Tiene que responder la categoría; `null` quita el responsable |
| `resource_id` | id o `null` | No | El elemento de Reservas |
| `location_text` | texto o `null` | No | |
| `title` | texto | No | |
| `message` | texto | No | Junto con `RESOLVED` o `WAITING_REQUESTER` |

**Pídelo así:** *"Asigna el ticket #42 a Pedro y resuélvelo diciendo que cambiamos la bombilla."*

## `add_support_comment`

<span class="tool-kind tool-kind-write">Modifica</span>

**Comentar, con fotos.** El residente comenta en los suyos (en **Esperando respuesta** vuelve a **En curso**; en uno **Resuelto**, lo **reabre**); quien responde también, y el residente recibe un correo (dos respuestas en 10 minutos generan un solo correo). Con `internal: true` es una **nota interna**: solo quien responde puede escribirla, el residente nunca la ve y **no envía correo**. Los comentarios no se editan. *Rol: cualquiera (la nota, solo quien responde).*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `ticket_id` | id | Sí | |
| `body` | texto | Sí | Hasta 10000 caracteres |
| `internal` | verdadero o falso | No | Nota interna |
| `photos` | lista | No | Hasta 5, como en `create_support_ticket` |

**Pídelo así:** *"En el ticket #42, anota de forma interna que el técnico viene el jueves."*

## `cancel_support_ticket`

<span class="tool-kind tool-kind-confirm">Pide confirmación</span>

**Cancelar un ticket abierto.** Pasa a **Cancelado**; no se borra nada. El residente cancela el suyo mientras no esté resuelto; quien responde la categoría también (un duplicado, por ejemplo). Resuelto o ya cancelado: `400`. *Rol: cualquiera, dentro de los límites de arriba.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `ticket_id` | id | Sí | |

**Devuelve:** en la primera llamada, el resumen (número, título, estado, residente) y el código de confirmación.

## `reopen_support_ticket`

<span class="tool-kind tool-kind-write">Modifica</span>

**Reabrir.** El residente reabre su ticket **Resuelto**, y se avisa al equipo; quien responde reabre también el **Cancelado**. Otro estado: `400`. El plazo de resolución empieza de nuevo. *Rol: cualquiera, dentro de los límites de arriba.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `ticket_id` | id | Sí | |

## `add_support_photo`

<span class="tool-kind tool-kind-write">Modifica</span>

**Adjuntar una foto** (JPEG, PNG o WebP, hasta 20 MB), guardada en privado: solo el residente y el equipo la abren. Hasta 20 por ticket (`409` por encima). El residente en el suyo; quien responde en cualquiera. *Rol: cualquiera.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `ticket_id` | id | Sí | |
| `image_url` o `image_base64` | enlace o texto | Sí | La imagen; `image_base64` va con `image_type` |

## `replace_support_photo`

<span class="tool-kind tool-kind-write">Modifica</span>

**Cambiar una foto.** Primero se adjunta la nueva; después se quita la antigua y se borra el archivo. El residente cambia las fotos de la apertura y de sus comentarios; quien responde, cualquiera. *Rol: cualquiera.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `ticket_id` | id | Sí | |
| `photo_id` | id | Sí | De `get_support_ticket` |
| `image_url` o `image_base64` | enlace o texto | Sí | La imagen nueva |

## `remove_support_photo`

<span class="tool-kind tool-kind-confirm">Pide confirmación</span>

**Quitar una foto** (el archivo se borra para siempre). Quien responde quita cualquiera; el residente, las de la apertura y las de sus comentarios. *Rol: cualquiera, dentro de los límites de arriba.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `ticket_id` | id | Sí | |
| `photo_id` | id | Sí | De `get_support_ticket` |

**Devuelve:** en la primera llamada, el resumen y el código de confirmación.

## `delete_support_comment`

<span class="tool-kind tool-kind-confirm">Pide confirmación</span>

**Borrar un mensaje de la conversación**, con sus fotos. Las líneas del historial no se borran. *Rol: administrador.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `ticket_id` | id | Sí | |
| `comment_id` | id | Sí | De `get_support_ticket` |

## `delete_support_ticket`

<span class="tool-kind tool-kind-confirm">Pide confirmación</span>

**Borrar un ticket y sus fotos**; no se anonimiza ni se guarda nada. Para cerrar de verdad un ticket usa `update_support_ticket` (Resuelto) o `cancel_support_ticket`. *Rol: administrador.*

| Parámetro | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| `ticket_id` | id | Sí | |

**Devuelve:** en la primera llamada, el resumen (número, título, estado, residente, fotos) y el código de confirmación.

## Relacionados

- [Soporte](/espacos/suporte)
- [Recetas](/mcp/receitas)
- [Reservas y Agendamiento](/mcp/ferramentas-reservas)
- [Dinero y confirmación](/mcp/dinheiro-e-confirmacao)
