# Tools · Attendance

> MCP tools for the Attendance module (coworking): the occupancy, I've arrived and I'm leaving, who's here, guests, history, fixing and removing visits, and the front desk kiosk links.

The [Attendance](/espacos/presenca) module through the assistant: seeing the occupancy, marking arrival and departure (yours, a member's or a guest's), listing who's in the space and the history, fixing or removing visits, and generating and revoking kiosk links. The kiosk itself is a guest screen on the front desk iPad; the assistant **manages** the links, it doesn't run the kiosk.

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_attendance_overview`](#get-attendance-overview) | The occupancy and your open visit | Anyone who sees the space | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`check_in`](#check-in) | Records an arrival, yours or a member's | Any (yours); moderator or finance (someone else's) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`check_out`](#check-out) | Records the departure | Any (yours); moderator or finance (someone else's) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_present`](#list-present) | Who's in the space now | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_visits`](#list-visits) | The visit history, with filters | Moderator or finance (today); admin (any day) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_my_visits`](#list-my-visits) | Your visits and the month's summary | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_visit`](#update-visit) | Fixes a visit's arrival or departure | Moderator or finance (today); admin (any day) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`delete_visit`](#delete-visit) | Removes a visit | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`check_guest_in`](#check-guest-in) | Records a guest's arrival | Moderator or finance | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_attendance_kiosks`](#list-attendance-kiosks) | The space's kiosk devices | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`create_attendance_kiosk`](#create-attendance-kiosk) | Generates a kiosk link (shown once) | Moderator | <span class="tool-kind tool-kind-write">Changes</span> |
| [`revoke_attendance_kiosk`](#revoke-attendance-kiosk) | Revokes a kiosk link | Moderator | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |

The space is created with [`create_space`](/mcp/ferramentas-comunidade#create-space) and `module: "attendance"`, with the `attendance` argument for the settings; [`update_space`](/mcp/ferramentas-comunidade#update-space) changes only what you send and keeps the rest.

The team, here, is the owner, the admin, the moderator and finance; finance reads and marks, but doesn't generate or revoke kiosk links. The roles are the routes' roles: the assistant never does more than the connected person could do on screen.

## The space settings

The `attendance` argument of `create_space` and `update_space` accepts:

| Field | Type | Description |
|---|---|---|
| `self_check_in` | `off`, `button` or `code` | Who marks arrival: `off`, only the team; `button`, the member, with the **I've arrived** button (`code` isn't available yet) |
| `capacity` | number from 1 to 100000, or `null` | The capacity, informational. `null` removes the limit |
| `auto_checkout_time` | `HH:MM` | The [automatic check-out](/espacos/presenca#automatic-check-out), in the community's time zone (default `23:59`) |
| `show_who_is_here` | `staff` | Who sees the names: only the team |
| `kiosk.guest_fields` | `{company, phone}`, each `off`, `optional` or `required` | What the kiosk screen asks for besides the name |
| `kiosk.notify_host` | true or false | Emails the host when the guest arrives (default: yes) |
| `kiosk.reset_seconds` | 5 to 60 | How many seconds until the kiosk screen goes back to the start (default: 10) |

## `get_attendance_overview`

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

**Space occupancy.** Just the number of people and the capacity (never names), the open visit of whoever asks and the check-in mode (`off`, `button` or `code`). *Minimum role: anyone who sees the space.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | Yes | The Attendance space |

**Ask like this:** *"How many people are at the Downtown location right now?"*

## `check_in`

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

**Record an arrival.** Without `profile_id`, it's **your** arrival, and only if the space lets members mark (the team can always mark itself). With `profile_id`, the team records **another member's** arrival; a regular member is refused. Someone without access to the space (plan expired, group not included) is refused, even by the team. It's **idempotent**: with a visit already open, it returns that visit (`already_checked_in: true`). A guest without an account is [`check_guest_in`](#check-guest-in). *Role: any (yours); moderator or finance (someone else's).*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | Yes | |
| `profile_id` | id | No | Team only: the member to mark (`list_members`). Without it, it's you |

**Returns:** `visit` and `already_checked_in`.

**Ask like this:** *"Record my arrival at the Downtown location."* · *"Mark Maria's arrival at the coworking."*

## `check_out`

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

**Record the departure.** With no parameters besides the space, it closes **your** open visit. The team closes a member's (`profile_id`) or any open visit (`visit_id`, from `list_present`). With no open visit, the response is `409`. *Role: any (yours); moderator or finance (someone else's).*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | Yes | |
| `profile_id` | id | No | Team only: the member whose visit to close |
| `visit_id` | id | No | The open visit to close (the team; a member, only their own) |

**Ask like this:** *"I'm leaving."*

## `list_present`

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

**Who's here.** The open visits, of members and guests, newest to oldest, with the name and the arrival time, plus the count and the capacity. Members see only the number, in `get_attendance_overview`. *Minimum role: moderator (or finance).*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | Yes | |
| `page`, `limit` | numbers | No | Pagination (up to 100 per page) |

**Ask like this:** *"Who's in the house right now?"*

## `list_visits`

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

**The history.** The space's visits, newest to oldest: who, arrival, departure, the kind (member or guest), and whether it's open or was closed automatically. The admin and the owner read any period; the moderator and finance see **only today** (the API narrows the range). *Minimum role: moderator (or finance).*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | Yes | |
| `profile_id` | id | No | Only this member |
| `kind` | `member` or `guest` | No | Members or guests |
| `open` | true or false | No | `true`: only who's still here |
| `from`, `to` | date | No | `YYYY-MM-DD` or ISO 8601, read in the community's time zone |
| `page`, `limit` | numbers | No | Pagination |

**Ask like this:** *"How many guests came last week?"*

## `list_my_visits`

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

**Your visits.** Your history, newest to oldest, with the month's summary (visits, days and minutes) in the community's time zone. *Minimum role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | No | Only this Attendance space |
| `page`, `limit` | numbers | No | Pagination |

**Ask like this:** *"How many days did I go to the coworking this month?"*

## `update_visit`

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

**Fix a visit.** Changes the arrival (`check_in_at`) and/or the departure (`check_out_at`). The departure can't be before the arrival or in the future; sending a departure on an open visit **closes** it. The admin and the owner fix any day; the moderator and finance, only today's visit and with times within today (yesterday returns `403`). The fix goes into the [activity log](/membros/registros-de-atividades) with who made it. *Minimum role: moderator (or finance).*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `visit_id` | id | Yes | From `list_visits` or `list_present` |
| `check_in_at` | date and time | No | ISO 8601 |
| `check_out_at` | date and time | No | ISO 8601 |

**Ask like this:** *"Pedro forgot to check out: he left at 6 p.m. Close his visit."*

## `delete_visit`

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

**Remove a visit.** The visit leaves the lists and the counts (an open one stops counting toward the occupancy) and the removal goes into the activity log. It doesn't delete the member. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `visit_id` | id | Yes | From `list_visits` |

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

## `check_guest_in`

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

**Register a guest.** The team records the arrival of someone **without an account**, with the member receiving them (the host, who must have access to the space). Company and phone are asked for or refused according to the kiosk settings. It's idempotent by **name and host**: with the visit open, it returns `already_checked_in: true`. If the space notifies hosts, they get [an email](/espacos/presenca#email-to-the-host). The guest counts toward the occupancy. *Minimum role: moderator (or finance).*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | Yes | |
| `guest_name` | text | Yes | The guest's name (up to 100 characters) |
| `host_profile_id` | id | Yes | The member receiving them (`list_members`) |
| `guest_company` | text | No | The company |
| `guest_phone` | text | No | The phone |

**Ask like this:** *"Register the guest Pedro Alves, from Acme, who's here to see Ana."*

## `list_attendance_kiosks`

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

**The kiosks.** The space's devices, active and revoked: name, who created it, when, the last use and the state. **Never the link**, which only shows when it's created. *Minimum role: moderator (or finance).*

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

## `create_attendance_kiosk`

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

**Generate a kiosk link.** One per iPad or location. Returns `kiosk`, the `url` and a `warning`: the URL shows **only once** and is **secret**, like a password. Whoever has it registers guests. The assistant asks the person to open it on the device and not share it; if it's lost, revoke it and generate another. *Minimum role: moderator (owner, admin or moderator; not finance).*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | Yes | |
| `name` | text | Yes | The device name, up to 80 characters (for example, "Reception tablet") |

**Ask like this:** *"Generate the kiosk link for the front desk iPad at the Downtown location."*

## `revoke_attendance_kiosk`

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

**Revoke a kiosk.** The link stops working **right away** and doesn't come back (generate another). Visits already recorded stay. *Minimum role: moderator (owner, admin or moderator).*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space` | id or link | Yes | |
| `kiosk_id` | id | Yes | From `list_attendance_kiosks` |

**Returns:** on the first call, the summary (the device's name and last use) and the confirmation code.

## Related

- [Attendance](/espacos/presenca)
- [Tools](/mcp/ferramentas)
- [Money and confirmation](/mcp/dinheiro-e-confirmacao)
- [Recipes](/mcp/receitas)
