# Tools · Support

> MCP tools for the Support module (coworking): open a ticket with photos, list the queue and my tickets, triage, assign, resolve, internal note, cancel, reopen, photos and deadlines, plus the settings for who answers and the deadline per category.

The [Support](/espacos/suporte) module through the assistant: the resident opens and follows tickets (with photos), the team triages the queue, answers, writes internal notes and resolves, and the admin configures who answers and the deadlines. The roles are those of the screen: the assistant never does more than the connected person would do.

Each tool carries a badge: <span class="tool-kind tool-kind-read">Read-only</span> changes nothing, <span class="tool-kind tool-kind-write">Changes</span> creates or changes something right away, and <span class="tool-kind tool-kind-confirm">Asks to confirm</span> only acts after your yes to a summary. See [Money and confirmation](/mcp/dinheiro-e-confirmacao).

## In short

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| [`get_support_space_settings`](#get-support-space-settings) | How the space works: limits, deadlines and, for the team, who answers | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_support_overview`](#get-support-overview) | The queue in numbers | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_support_tickets`](#list-support-tickets) | The whole queue, with filters and deadlines | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_my_support_tickets`](#list-my-support-tickets) | Your tickets | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_support_ticket`](#get-support-ticket) | One ticket with the conversation and the photos | Any (the resident reads their own) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_support_resource_open_count`](#get-support-resource-open-count) | How many open tickets an item has | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`create_support_ticket`](#create-support-ticket) | Opens a ticket, with photos | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_support_ticket`](#update-support-ticket) | Triage: status, priority, category, assignee, place | Moderator or finance, and answering the category | <span class="tool-kind tool-kind-write">Changes</span> |
| [`add_support_comment`](#add-support-comment) | Comments, or writes an internal note | Any (the note, only whoever answers) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`cancel_support_ticket`](#cancel-support-ticket) | Cancels a ticket | Any (the resident, their own) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`reopen_support_ticket`](#reopen-support-ticket) | Reopens a ticket | Any (the resident, their own resolved one) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`add_support_photo`](#add-support-photo) | Attaches a photo | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`replace_support_photo`](#replace-support-photo) | Swaps one photo for another | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`remove_support_photo`](#remove-support-photo) | Removes a photo | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`delete_support_comment`](#delete-support-comment) | Deletes a message from the conversation | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`delete_support_ticket`](#delete-support-ticket) | Deletes a ticket and its photos | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |

By role, the owner and the admin see all 16; the moderator and finance, 14; the member, 11. The team is the owner, the admin, the moderator and finance, but **whoever answers** (triage, assign, answer, write notes) is only whoever is in the category's selection; **outside it, the API refuses with a translated `403`** and the assistant tells you so. See [Who answers](/espacos/suporte#who-answers).

The space is created with [`create_space`](/mcp/ferramentas-comunidade#create-space) and `module: "support"`; [`update_space`](/mcp/ferramentas-comunidade#update-space) changes only what you send.

## The space settings

The `support` argument of `create_space` and `update_space` accepts (what you send is merged with what already exists):

| Field | Type | Description |
|---|---|---|
| `allow_urgent_flag` | true or false | The resident can tick "it is urgent" (becomes high priority). Default: yes |
| `max_open_per_member` | 0 to 1000 | Open tickets per resident; 0 = no limit. Default: 10 |
| `location_hint` | text up to 200 | The hint for the "Place" field |
| `default_assignee_id` | id or `null` | Who receives new tickets |
| `responders` | object | Who answers: `tags` (tag **names**), `group_ids`, `profile_ids` and `by_category` (each category's selection, which replaces the space's). Owner and admin always answer; with no selection, the whole team answers |
| `sla.enabled` | true or false | Turns deadlines on. Default: yes |
| `sla.business_hours` | `{days, start, end}` | Days of the week (0 = Sunday to 6 = Saturday) and `HH:MM` times, in the community's time zone. Default: Mon to Fri, 09:00 to 18:00. No holidays |
| `sla.categories` | per category | `first_response` and `resolution`, each with `value` (whole number) and `unit` (`hours` or `days`). Default: 4 hours and 1 day |

The categories are `FACILITIES`, `CLEANING`, `EQUIPMENT`, `INTERNET`, `ACCESS`, `BILLING` and `OTHER`; the kinds, `MAINTENANCE` and `REQUEST`; the statuses, `OPEN`, `IN_PROGRESS`, `WAITING_REQUESTER`, `RESOLVED` and `CANCELED`; the priorities, `LOW`, `NORMAL`, `HIGH` and `URGENT`.

## `get_support_space_settings`

<span class="tool-kind tool-kind-read">Read-only</span>

**How the space works.** `allowUrgentFlag`, `maxOpenPerMember`, `locationHint`, `hasBookings` (whether `resource_id` can be used) and `sla`. The team also gets `responders`, `defaultAssigneeId` and `canAnswerCategories` (the categories **you** answer); the resident never gets `responders`. *Role: any with access to the space.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | Yes | The Support space (`list_spaces`) |

## `get_support_overview`

<span class="tool-kind tool-kind-read">Read-only</span>

**The queue in numbers:** `open`, `inProgress`, `waitingRequester`, `unassigned`, `mine`, `overdue` (deadline passed, clock running) and `total`. Without `space`, it adds up all Support spaces. *Role: moderator or finance.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | No | |

**Ask like this:** *"How's the ticket queue?"*

## `list_support_tickets`

<span class="tool-kind tool-kind-read">Read-only</span>

**The whole queue**, by most recent activity or by priority. With deadlines on, each ticket carries `sla` (`firstResponseDueAt`, `resolveDueAt`, `paused`, and the readable dates in the community's time zone) and, for the team, `sla.overdue`. Each item says what you can do (`canAnswer`, `canAssign`...). The resident uses `list_my_support_tickets`. *Role: moderator or finance.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | No | |
| `kind`, `status`, `priority`, `category` | values above | No | One value each |
| `assignee_profile_id` | id | No | Tickets of this assignee |
| `unassigned` | true or false | No | Unassigned |
| `mine` | true or false | No | Assigned to you |
| `overdue` | true or false | No | Deadline passed and clock running (**Waiting for a reply** doesn't count) |
| `due_today` | true or false | No | The next deadline falls today; only in spaces with deadlines |
| `requester_profile_id` | id | No | Tickets from this person |
| `resource_id` | id | No | Tickets for this Bookings item |
| `q` | text | No | Number, `#42` or part of the title |
| `sort` | `activity` or `priority` | No | |
| `page`, `limit` | numbers | No | Pagination (up to 100) |

**Ask like this:** *"Which tickets are overdue or due today?"*

## `list_my_support_tickets`

<span class="tool-kind tool-kind-read">Read-only</span>

**The tickets you opened**, most recent first. *Role: any with access to the space.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | No | |
| `kind`, `status`, `priority`, `category` | values above | No | |
| `resource_id` | id | No | |
| `q` | text | No | |
| `page`, `limit` | numbers | No | |

## `get_support_ticket`

<span class="tool-kind tool-kind-read">Read-only</span>

**One ticket with its timeline:** messages, change history, internal notes (**team only**) and photos as short-lived links. The resident reads their own; the team reads all of them, also outside the selection of who answers. Another person's ticket: `404`. *Role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `ticket_id` | id | Yes | From `list_support_tickets` or `list_my_support_tickets` |

## `get_support_resource_open_count`

<span class="tool-kind tool-kind-read">Read-only</span>

**The duplicate notice.** Only the number of open tickets for a room, desk or equipment from Bookings, with no title or author, to warn before opening one more. *Role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `resource_id` | id | Yes | From `list_booking_resources` |

## `create_support_ticket`

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

**Open a ticket**, with photos. The team is notified through the email queue. Whoever answers the category can also set the `priority` and open it **on behalf of a resident** (`requester_profile_id`): the resident gets an email, so the assistant first shows who will receive it. Above the space's open-ticket limit, `409`; above 10 tickets opened per hour, `429`. Repeating the call with the same `client_request_id` returns the same ticket. *Role: any with access to the space.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | Yes | The Support space |
| `kind` | `MAINTENANCE` or `REQUEST` | Yes | |
| `category` | category | Yes | |
| `title` | text | Yes | Up to 140 characters |
| `description` | text | Yes | Up to 10000 |
| `resource_id` | id | No | Room, desk or equipment (`list_booking_resources`) |
| `location_text` | text | No | Up to 120 characters; works without an item |
| `urgent` | true or false | No | Becomes high priority, if the space allows it |
| `priority` | priority | No | Only whoever answers |
| `requester_profile_id` | id | No | Only whoever answers: opens it on behalf of this resident |
| `photos` | list | No | Up to 5, each with `image_url` or `image_base64` (+ `image_type`) |
| `client_request_id` | text | No | Avoids duplicates on a repeated tap |

**Ask like this:** *"Open a maintenance ticket: the projector in Room 3 won't turn on, here's the photo."*

## `update_support_ticket`

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

**Triage.** Only whoever **answers the ticket's category**; outside it, a translated `403`. Send only what changes. `message` goes with `RESOLVED` or `WAITING_REQUESTER` as a public answer, and the resident gets an email; assigning notifies the assignee. `RESOLVED` and `CANCELED` only go back to `OPEN`. `URGENT` can only be set here. Every change goes into the conversation. *Role: moderator or finance, and answering the category.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `ticket_id` | id | Yes | |
| `status` | status | No | |
| `priority` | priority | No | |
| `kind`, `category` | values | No | The category can only change to one you also answer |
| `assignee_profile_id` | id or `null` | No | Must answer the category; `null` removes the assignee |
| `resource_id` | id or `null` | No | The Bookings item |
| `location_text` | text or `null` | No | |
| `title` | text | No | |
| `message` | text | No | Together with `RESOLVED` or `WAITING_REQUESTER` |

**Ask like this:** *"Assign ticket #42 to Pedro and resolve it saying we replaced the light bulb."*

## `add_support_comment`

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

**Comment, with photos.** The resident comments on their own (in **Waiting for a reply** it goes back to **In progress**; on a **Resolved** one, it **reopens**); whoever answers does too, and the resident gets an email (two replies within 10 minutes produce a single email). With `internal: true` it's an **internal note**: only whoever answers can write it, the resident never sees it, and it **sends no email**. Comments can't be edited. *Role: any (the note, only whoever answers).*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `ticket_id` | id | Yes | |
| `body` | text | Yes | Up to 10000 characters |
| `internal` | true or false | No | Internal note |
| `photos` | list | No | Up to 5, as in `create_support_ticket` |

**Ask like this:** *"On ticket #42, add an internal note that the technician is coming on Thursday."*

## `cancel_support_ticket`

<span class="tool-kind tool-kind-confirm">Asks to confirm</span>

**Cancel an open ticket.** It becomes **Canceled**; nothing is deleted. The resident cancels their own while it isn't resolved; whoever answers the category can too (a duplicate, for example). Resolved or already canceled: `400`. *Role: any, within the limits above.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `ticket_id` | id | Yes | |

**Returns:** on the first call, the summary (number, title, status, resident) and the confirmation code.

## `reopen_support_ticket`

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

**Reopen.** The resident reopens their own **Resolved** ticket, and the team is notified; whoever answers can also reopen a **Canceled** one. Any other status: `400`. The resolution deadline starts over. *Role: any, within the limits above.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `ticket_id` | id | Yes | |

## `add_support_photo`

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

**Attach a photo** (JPEG, PNG or WebP, up to 20 MB), stored privately: only the resident and the team open it. Up to 20 per ticket (`409` above that). The resident on their own; whoever answers on any. *Role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `ticket_id` | id | Yes | |
| `image_url` or `image_base64` | link or text | Yes | The image; `image_base64` goes with `image_type` |

## `replace_support_photo`

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

**Swap a photo.** The new one is attached first; then the old one is removed and its file deleted. The resident swaps the photos from the opening and from their own comments; whoever answers, any of them. *Role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `ticket_id` | id | Yes | |
| `photo_id` | id | Yes | From `get_support_ticket` |
| `image_url` or `image_base64` | link or text | Yes | The new image |

## `remove_support_photo`

<span class="tool-kind tool-kind-confirm">Asks to confirm</span>

**Remove a photo** (the file is deleted for good). Whoever answers removes any of them; the resident, those from the opening and from their own comments. *Role: any, within the limits above.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `ticket_id` | id | Yes | |
| `photo_id` | id | Yes | From `get_support_ticket` |

**Returns:** on the first call, the summary and the confirmation code.

## `delete_support_comment`

<span class="tool-kind tool-kind-confirm">Asks to confirm</span>

**Delete a message from the conversation**, with its photos. History lines aren't deleted. *Role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `ticket_id` | id | Yes | |
| `comment_id` | id | Yes | From `get_support_ticket` |

## `delete_support_ticket`

<span class="tool-kind tool-kind-confirm">Asks to confirm</span>

**Delete a ticket and its photos**; nothing is anonymized or kept. To really close a ticket, use `update_support_ticket` (Resolved) or `cancel_support_ticket`. *Role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `ticket_id` | id | Yes | |

**Returns:** on the first call, the summary (number, title, status, resident, photos) and the confirmation code.

## Related

- [Support](/espacos/suporte)
- [Recipes](/mcp/receitas)
- [Bookings and Scheduling](/mcp/ferramentas-reservas)
- [Money and confirmation](/mcp/dinheiro-e-confirmacao)
