# Tools · Members

> MCP tools for members: listing and searching members, inviting one person or a class, importing a spreadsheet, custom fields, changing roles, removing someone, organizing groups and tags, and building the org chart; surveys, forms, recognition, feedback, development plans, time tracking and messages.

Who is in the community and how it is organized: listing and searching members, inviting one person or a whole class, importing a spreadsheet, creating custom fields and filling in the values, changing roles, removing someone, creating groups, tagging people and saying who reports to whom in the org chart; plus the Surveys, Forms, Recognition, Feedback, Development Plan, Time Tracking and Messages tools.

Inviting and changing a role happen on the first call, as in the dashboard; since the invite sends a real e-mail, the assistant shows beforehand who will receive it. These **ask for your confirmation** in two steps: removing a member, deleting a group, a tag or a field, starting an import (which sends e-mails in bulk) and an imported person's decline. See [Money and confirmation](/mcp/dinheiro-e-confirmacao).

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 |
|---|---|---|---|
| [`list_members`](#list-members) | Members with role and join date; search across all fields, extra columns and a filter for who was active or joined in a period | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`invite_member`](#invite-member) | Invites one person, with role, groups and tags | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`invite_members`](#invite-members) | Invites up to 100 people at once, with the result line by line | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_member_role`](#update-member-role) | Changes a member's role | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`remove_member`](#remove-member) | Removes a person from the community | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`list_signup_requests`](#list-signup-requests) | The join requests in the queue | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`approve_signup_request`](#approve-signup-request) | Approves up to 100 join requests at once | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`reject_signup_request`](#reject-signup-request) | Rejects join requests, with a reason | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`list_groups`](#list-groups) | Groups, with color, leader, parent group and how many people | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`create_group`](#create-group) | Creates a member group | Moderator or finance | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_group`](#update-group) | Renames or changes a group | Moderator or finance | <span class="tool-kind tool-kind-write">Changes</span> |
| [`delete_group`](#delete-group) | Deletes a group; the people stay in the community | Moderator or finance | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`update_group_members`](#update-group-members) | Adds or removes people from a group | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_tags`](#list-tags) | Tags in use, with color and how many people | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_member_tags`](#update-member-tags) | Tags or untags one or more people | Moderator or finance | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_tag`](#update-tag) | Renames a tag or changes its color | Moderator or finance | <span class="tool-kind tool-kind-write">Changes</span> |
| [`delete_tag`](#delete-tag) | Removes a tag from everyone | Moderator or finance | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`get_org_chart`](#get-org-chart) | Who reports to whom, with the groups | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`set_manager`](#set-manager) | Sets who a person reports to | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`get_my_team`](#get-my-team) | Whether you lead anyone, who reports to you and whether there are indirect reports | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_activity_logs`](#list-activity-logs) | Who did what: team, assistant, members and API keys | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_logs`](#list-logs) | The community's Logs: team, platform, assistant, members, e-mails, imports, financial, moderation and API keys | Admin or finance (finance: financial only) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_member`](#get-member) | A member's profile | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_member`](#update-member) | Edits another member | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_me`](#update-me) | Edits yourself, in this community | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_my_profile`](#update-my-profile) | Edits your member page: cover, company, country, languages, links, experience and privacy | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_member_page_activity`](#list-member-page-activity) | The Activity tab of a member's page | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_avatar`](#update-avatar) | Sets or removes a profile picture, by link or file | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_member_fields`](#list-member-fields) | The community's custom fields | Moderator or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`create_member_field`](#create-member-field) | Creates a custom field | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_member_field`](#update-member-field) | Changes a field's name, type, options or required flag | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`reorder_member_fields`](#reorder-member-fields) | Puts the fields in a new order | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`delete_member_field`](#delete-member-field) | Deletes a field (the values are kept) | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`update_member_field_values`](#update-member-field-values) | Fills in a person's field values | Any (your own); moderator for other people's | <span class="tool-kind tool-kind-write">Changes</span> |
| [`analyze_member_import`](#analyze-member-import) | Reads a spreadsheet and suggests where each column goes | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`preview_member_import`](#preview-member-import) | The import summary with the mapping, saving nothing | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`start_member_import`](#start-member-import) | Imports and sends the invitations | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`get_member_import`](#get-member-import) | An import's progress and report | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_member_imports`](#list-member-imports) | The import history | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_member_import_file`](#get-member-import-file) | The original file or the CSV of skipped rows | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`withdraw_from_community`](#withdraw-from-community) | An imported person declines the invite and leaves | Any (only the person themself) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`list_survey_templates`](#surveys) | The survey templates (NPS, satisfaction, event, course, eNPS, blank), with sections and questions | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_surveys`](#surveys) | The surveys (or only those of a `space_id`), with the space, status, mode, recipients, responses and the public link | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_survey`](#surveys) | One survey, with the space, sections, questions and public link | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`create_survey`](#surveys) | Creates a draft survey in a Surveys space (`space_id`), from a template and/or with your own sections and questions | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_survey`](#surveys) | Edits the whole draft or scheduled survey (and moves it to another Surveys space), with the period (`starts_at`, `closes_at`) and the response type (`response_mode`); once open, only title, introduction, end and public link | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`preview_survey_audience`](#surveys) | How many people have access to the space today (by `space_id` or by the survey), with up to 10 names | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`open_survey`](#surveys) | Opens the survey (or schedules it, with a future `starts_at`): freezes who has access to the space, sends each of them an e-mail invitation and returns the recipients and the public address | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`close_survey`](#surveys) | Closes the survey now, for good | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`delete_survey`](#surveys) | Deletes the survey; the link stops working | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`get_survey_results`](#surveys) | The aggregated results, with one filter (group, tag, company or origin; anonymous: origin only) and, on identified required or immediate surveys, who still has to answer | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_survey_responses`](#surveys) | Who answered what and when (identified surveys only) | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`export_survey_csv`](#surveys) | The responses as CSV, the same file as the app | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_my_email_preferences`](#e-mails-from-this-community) | Your e-mail preference in this community: each category, on or off, and the shortcut | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_my_email_preferences`](#e-mails-from-this-community) | Changes your preference: a shortcut (receive everything, block announcements, block all) or categories | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`get_my_notice_preferences`](#sms-and-whatsapp-notices) | Your notices in this community, per channel (e-mail, SMS and WhatsApp): the masked phone and whether it is verified, the consents, the channel and the categories | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_my_notice_preferences`](#sms-and-whatsapp-notices) | Turns SMS and WhatsApp on or off, and the categories of each | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_my_contact_consents`](#sms-and-whatsapp-notices) | Your SMS and WhatsApp consents: channel, purpose, origin and date | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`request_phone_verification`](#sms-and-whatsapp-notices) | Sends the 6-digit code by SMS to your phone | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`confirm_phone_verification`](#sms-and-whatsapp-notices) | Verifies your phone with the code | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_member_contact_consents`](#sms-and-whatsapp-notices) | A member's SMS and WhatsApp consents, never the IP | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`attest_contact_consent`](#sms-and-whatsapp-notices) | Records the SMS or WhatsApp consent the community declares it collected, for up to 200 members | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`list_my_pending_surveys`](#surveys) | The open surveys waiting for your answer, with the response type and the link to answer in the app | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_forms`](#forms) | The forms (or only those of a `space_id`): whoever manages them sees all of them, in any status, with `public_url` and the submissions by status | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_form`](#forms) | A form as whoever manages it sees it: settings, status, `public_url`, responsibles, steps and fields | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_forms_space_settings`](#forms) | The space's mode (`single`, one form; `multi`, a list) and whether you can create in it | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_forms_space_settings`](#forms) | Switches the space's mode | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`create_form`](#forms) | Creates a draft form in a Forms space, with steps and fields of the 13 types | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_form`](#forms) | Edits the form in any status | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`publish_form`](#forms) | Publishes the draft | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`close_form`](#forms) | Closes it now: the link shows "form closed" | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`reopen_form`](#forms) | Reopens a closed form (deadline passed or cap reached: change them first with `update_form`) | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`delete_form`](#forms) | Deletes the form | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`list_form_submissions`](#forms) | The submissions, newest first: status, origin, name, e-mail, phone, member and the save-as-member result | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_form_submission`](#forms) | One submission, with all the answers (a copy of what was submitted) and the proof of consent | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_form_submission_status`](#forms) | Changes the status: `new`, `in_contact` or `done`, in any order | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`delete_form_submission`](#forms) | Deletes a submission: it leaves the list and the CSV (the submission cap doesn't reopen) | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`export_form_submissions_csv`](#forms) | The submissions as CSV, the same file as the app, with the same filters | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_form_to_fill`](#forms) | A published form as whoever fills it in sees it, with the values that come from the profile (`prefill`) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`submit_form`](#forms) | Submits the form on your behalf, linked to your profile | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_recognitions`](#recognition) | The Recognition wall, with a filter by person ("me", name, e-mail or id) and by value (`value`) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_recognition`](#recognition) | One recognition, with reactions and comments | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`search_recognition_recipients`](#recognition) | Who can be recognized (has access to the space), by name | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`create_recognition`](#recognition) | Recognizes 1 to 20 people, with a message and an optional value; `dry_run` shows first who gets the e-mail | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`react_to_recognition`](#recognition) | Reacts with an emoji, or removes the reaction | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`create_recognition_comment`](#recognition) | Comments on or replies in a recognition | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_company_values`](#recognition) | The community values, active and deactivated | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`delete_recognition`](#recognition) | Deletes a recognition; the points it gave are taken back | Author or team | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`delete_recognition_comment`](#recognition) | Deletes a comment on a recognition | Author or team | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`create_company_value`](#recognition) | Adds a community value | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_company_value`](#recognition) | Changes a value's name or description, or deactivates it (`active: false`) | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`reorder_company_values`](#recognition) | Puts the values in an order | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`get_recognition_dashboard`](#recognition) | Recognitions made, people who recognized and people recognized, in a period, with the by-value block | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_recognition_card`](#recognition) | The recognition's card as a PNG image, to share | Any (author, people recognized and team) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_recognition_types`](#recognition) | The recognition types, with label, phrase, art and whether each is on | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_recognition_type`](#recognition) | Turns a recognition type on or off; turning off asks for confirmation | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`upload_recognition_type_art`](#recognition) | Uploads a type's own art (URL or image); replacing own art that already exists asks for confirmation | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`remove_recognition_type_art`](#recognition) | Puts the type back on the default art, the same in every community | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`list_feedbacks`](#feedback) | Your feedback received or sent (`box`) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_feedback`](#feedback) | One of your feedbacks, with the text | Any (only your own) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`search_feedback_people`](#feedback) | Who can give or receive feedback (has access to the space), by name | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`create_feedback`](#feedback) | Gives feedback to a colleague (text in Markdown); `dry_run` shows first who gets the notice | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`thank_feedback`](#feedback) | Thanks the author for a feedback received | Any (the recipient) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_feedback_requests`](#feedback) | The requests asked of you or by you, with a status filter | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_feedback_request`](#feedback) | One of your requests | Any (only your own) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`create_feedback_request`](#feedback) | Asks a colleague for feedback, with an optional message; `dry_run` shows first who gets the notice | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`answer_feedback_request`](#feedback) | Answers a request with a feedback | Any (the person asked) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`decline_feedback_request`](#feedback) | Declines a request, with no e-mail | Any (the person asked) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`delete_feedback`](#feedback) | Deletes your feedback; it is gone for both | Any (the author) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`cancel_feedback_request`](#feedback) | Cancels your pending request | Any (the requester) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`get_feedback_dashboard`](#feedback) | The space's numbers, by period and group, with the by-theme block, with no text at all; as CSV with `format: csv` | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_feedback_themes`](#feedback) | The community's themes and behaviors (`include_inactive` lets the team see the deactivated ones) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`create_feedback_theme`](#feedback) | Creates a theme, with an optional description | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_feedback_theme`](#feedback) | Renames, describes, deactivates or reactivates a theme | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`reorder_feedback_themes`](#feedback) | Changes the order of the themes | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`create_feedback_behavior`](#feedback) | Adds a behavior to a theme | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_feedback_behavior`](#feedback) | Renames, deactivates or reactivates a behavior | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`reorder_feedback_behaviors`](#feedback) | Changes the order of a theme's behaviors | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_development_plans`](#development-plans) | The development plans you can see (`scope`: `mine`, `team`, `to_approve`, `all`), filtered by person and status | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_development_plan`](#development-plans) | One plan, with its actions, delays and what you can do with it | Any (whoever sees the plan) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_development_plan_team`](#development-plans) | Your team: direct and indirect reports, with each one's status, progress and delays | Any (whoever leads) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_development_plan_dashboard`](#development-plans) | The dashboard per direct leader | Any (the management team: the space; a leader: their team) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`create_development_plan`](#development-plans) | Creates your plan, or a direct report's by name; `dry_run` shows who gets the e-mail | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_development_plan`](#development-plans) | Changes title, period or actions; the person's change to an approved plan sends it back to approval | Any (the person and whoever approves) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`delete_development_plan`](#development-plans) | Deletes a draft plan | Any (the person and whoever approves) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`submit_development_plan`](#development-plans) | Sends your plan for approval | Any (the person) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`approve_development_plan`](#development-plans) | Approves a waiting plan | Any (the direct leader, the owner or the admin) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`return_development_plan`](#development-plans) | Returns a plan with a required note | Any (the direct leader, the owner or the admin) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`complete_development_plan`](#development-plans) | Completes an approved plan | Any (the person and whoever approves) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`create_development_plan_action`](#development-plans) | Adds an action, with a due date (`due_on`); `course_id` links a course | Any (the person and whoever approves) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_development_plan_action`](#development-plans) | Changes an action or only its progress (`status`: `TODO`, `IN_PROGRESS`, `DONE`); `course_id` links a course | Any (the person and whoever approves) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`delete_development_plan_action`](#development-plans) | Removes an action from the plan | Any (the person and whoever approves) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`get_current_development_cycle`](#development-plans) | The PDI cycle open for you, with the deadlines and where you stand | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_development_cycles`](#development-plans) | The space's PDI cycles, open and closed | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_development_cycle`](#development-plans) | One PDI cycle | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`create_development_cycle`](#development-plans) | Opens the PDI cycle: name, deadlines, audience and reminders; `dry_run` shows it first | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`update_development_cycle`](#development-plans) | Changes the cycle's name, deadlines, audience or reminders | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`close_development_cycle`](#development-plans) | Closes the cycle and stops the reminders; it doesn't reopen | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`get_development_cycle_adhesion`](#development-plans) | Who sent, got approved or is late in the cycle, per leader | Any (the team: the audience; a leader: their team) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_my_chat_preferences`](#messages) | Your chat preferences: your status (Available, Busy or Unavailable), show when I've read, whether you can start conversations and your unread messages | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_my_chat_preferences`](#messages) | Changes your chat status (Available, Busy or Unavailable) and turns Read receipts on or off | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_chat_online_members`](#messages) | Who is available and online now, with each person's status (Available, Away or Busy; only for someone who is available too) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_chat_conversations`](#messages) | Your conversations, with the last message and the unread count | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_chat_conversation`](#messages) | One of your conversations, with its messages, newest first | Any (only the two people) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`send_chat_message`](#messages) | Sends a message in a conversation or to a person, opening the conversation if there is none | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`mark_chat_conversation_read`](#messages) | Marks one of your conversations as read | Any (only the two people) | <span class="tool-kind tool-kind-write">Changes</span> |
| [`delete_chat_message`](#messages) | Deletes one of your messages: it becomes "message deleted" for both | Any (only the author) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`clear_chat_history`](#messages) | Clears a conversation's history for you only: the messages so far disappear for you, the other person still sees everything; nothing is deleted | Any (only the two people) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`list_chat_blocks`](#messages) | The people you blocked | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`block_chat_member`](#messages) | Blocks a person in the chat; nobody is told | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`unblock_chat_member`](#messages) | Undoes your block; the conversation stays saved | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`get_chat_settings`](#messages) | Whether the chat is on in the community and who can start conversations | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_chat_settings`](#messages) | Turns the chat on or off, chooses who can start and whether people must add each other first | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_chat_members`](#messages) | The People panel: who is available to chat, online first, with search by name (only for someone who is available too) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_chat_connections`](#messages) | Your accepted connections in this community | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`list_chat_connection_requests`](#messages) | Pending connection requests, received (`incoming`) or sent (`outgoing`) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`request_chat_connection`](#messages) | Asks a person to connect; if they had already asked, the connection is accepted at once | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`accept_chat_connection`](#messages) | Accepts a connection request you received | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`decline_chat_connection`](#messages) | Declines a request you received, without telling the person who asked | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`remove_chat_connection`](#messages) | Cancels your request or ends a connection | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`send_member_notice`](#messages) | Sends a bell notice to up to 100 people, with title and text (no e-mail) | Moderator | <span class="tool-kind tool-kind-write">Changes</span> |
| [`list_notifications`](#messages) | Your notifications in this community (the bell), with unread and type filters | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_notification`](#messages) | One of your notifications | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`mark_notifications_read`](#messages) | Marks one notification, or all, as read | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| [`delete_notification`](#messages) | Removes a notification from your list; what it announced stays | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`get_welcome_settings`](#get-welcome-settings) | The welcome, the missions and each one's numbers | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_welcome_settings`](#update-welcome-settings) | Changes the screens, the mode and the missions, with confirmation | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`get_my_referral`](#get-my-referral) | Your referral link and how many joined through it | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_referral_report`](#get-referral-report) | Who brought whom, with the totals | Moderator (not finance) | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`get_referral_settings`](#get-referral-settings) | Whether referrals are on | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`update_referral_settings`](#update-referral-settings) | Turns referrals on or off | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| [`get_my_data_export`](#get-my-data-export) | Your data export: the status, how long it lasts and when you can ask for another | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`export_my_data`](#export-my-data) | Asks for a ZIP with your data; the link arrives by e-mail only | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`export_member_data`](#export-member-data) | Asks for a member's data export, at their request; the link goes to their e-mail | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`get_my_account_deletion`](#get-my-account-deletion) | Your account deletion request and the effective date | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| [`delete_my_account`](#delete-my-account) | Requests the deletion of your account in this community, with the password; disconnects the assistant | Any (not the owner) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`cancel_my_account_deletion`](#cancel-my-account-deletion) | Cancels the deletion of your account | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| [`erase_member_data`](#erase-member-data) | Erases a member's data, at their request, with no period to change your mind | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |

## `list_members`

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

**List members.** The members, with role, job title, tagline, tags, join date and last access. *Minimum role: moderator or finance.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `search` | text | No | Searches the name, email, job title, tagline, tags, group names, text and list custom fields (the value or the option name) and, with 4 digits or more, the phone. Case and accents don't matter |
| `role` | `owner`, `admin`, `moderator`, `member`, `finance` | No | Only one role |
| `sort_by` | `joinedAt`, `lastSeenAt`, `displayName`, `role`, `fullName`, `jobTitle` | No | `joinedAt` for "who joined", `lastSeenAt` for "who showed up", `jobTitle` to sort by job title |
| `sort_by_custom_field` | field key | No | Sorts by a [custom field](/membros/campos-customizados) (the key comes from `list_member_fields`) instead of `sort_by`. People who left the field empty come last |
| `order` | `asc`, `desc` | No | Ascending or descending |
| `include` | list: `phone`, `groups`, `plan`, `custom_fields` | No | Extra columns: the phone, the groups (with color and which one is the main one), the plan (the current subscription that isn't an add-on; only for owner, admin and finance, never for the moderator) and all custom fields |
| `custom_field_keys` | list of keys, up to 50 | No | Only these custom fields |
| `field_filter` | `{ key: [options] }` | No | Filters by choice and multiple-choice fields: on a multiple choice, who ticked **any** of the options; on a choice, who picked **one** of them. Different fields add up. Option by value or name |
| `active_from`, `active_to` | date YYYY-MM-DD | No | Only who was active in the period (posted, commented, reacted and the other actions the Dashboard's **Active members** card counts). From today − 6 days to today, the total is the card's number |
| `joined_from`, `joined_to` | date YYYY-MM-DD | No | Only who joined in the period. Whoever joined and already left is not listed |
| `page`, `limit` | number | No | Pagination |

The periods are whole days in the community time zone, both ends included; one side alone leaves the other open, and they add up with the other filters. An invalid date or a start after the end comes back as a message to show the person.

**Returns:** the profiles (display name, name, role, job title, join date, avatar), the columns requested in `include` and the pagination. Custom fields come in `custom_fields`, each with the field name, the type, the value and, for a list, the name of the chosen option. On a multiple choice, the list of ticked options (`value_labels`), with `min_selections` and `max_selections`.

**Ask like this:** *"Who was active in the last 7 days?"* · *"Who joined this month?"* · *"Who are the moderators?"* · *"List the members with phone, groups and plan, sorted by job title."* · *"Who works at Acme?"*

`welcome` (`pending`, `completed`, `skipped`) filters by the [welcome](/membros/boas-vindas); with groups, `groups[].expiresAt` shows each one's validity.

## `invite_member`

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

**Invite one person.** Invites a person to the community, with a name, role, groups and tags. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `email` | e-mail | Yes | The person's e-mail |
| `name` | text, 2 to 100 | No | The person's name: the new account is created with it and the invitation email goes out with it. Without it, the account starts with the part of the e-mail before the @ |
| `role` | `member`, `moderator`, `admin`, `finance` | No | Default: `member`. Nobody joins as owner through an invite |
| `groups` | list of names or ids, up to 20 | No | The groups the person joins (from `list_groups`) |
| `tags` | list of texts, up to 20 | No | The person's tags |

**Returns:** the e-mail's result: `invited`, `updated` (already a member and got the groups and tags) or `skipped`, with the reason (`invalid_email`, `duplicate`, `already_member`, `opted_out`) and the message in your language.

**Ask like this:** *"Invite maria@memberfy.net as a moderator, in the March class group."*

**Notes:** the invite sends a real e-mail on the first call; the assistant shows beforehand who will receive it. Every invitee gets the link to set a password, including someone who already belongs to another community (accounts are per community). Someone who asked not to take part in this community comes back `opted_out`, with no e-mail. A group that doesn't exist refuses the call before anything is sent. See [Invite members](/membros/convidar-membros).

## `invite_members`

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

**Invite a class.** Invites up to 100 people at once, each with their own name, role, groups and tags, or with a default for everyone. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `people` | list of 1 to 100 | Yes | Each person with `email` (required), `name` (sent with the invite, as in `invite_member`), `role`, `groups` and `tags` |
| `role` | `member`, `moderator`, `admin`, `finance` | No | The role for anyone without their own. Default: `member` |
| `groups` | list, up to 20 | No | The groups for anyone without their own |
| `tags` | list, up to 20 | No | The tags for anyone without their own |

**Returns:** the result **per e-mail** (`invited`, `updated` or `skipped` with the reason: `invalid_email`, `duplicate`, `already_member`, `opted_out`, `failed`) and the summary `{ total, invited, updated, skipped }`.

**Ask like this:** *"Invite these 30 people as members, all in the March class group: [list of names and e-mails]."*

**Notes:** the e-mails go out on the first call, which is why the assistant shows the list before inviting. Each line succeeds or fails on its own: someone who is already a member gets the groups and tags, with no e-mail, and doesn't stop the rest. For more than 100 people, the assistant splits the list, or use the spreadsheet import (below). See the recipe [Invite a class](/mcp/receitas#10-invite-a-class).

## `update_member_role`

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

**Change someone's role.** Changes a member's role. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `member` | text | Yes | The profile id (from `list_members`) or the person's e-mail |
| `role` | `member`, `moderator`, `admin`, `finance` | Yes | The new role |

**Returns:** the profile with the new role.

**Ask like this:** *"Promote ana@memberfy.net to moderator."*

**Notes:** it changes what the person can do right away; to undo it, ask for the old role. Only another owner can change the owner's role. See [Roles and permissions](/conceitos/papeis-e-permissoes).

## `remove_member`

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

**Remove member.** Removes a person from the community. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `member` | text | Yes | The profile id (from `list_members`) or the person's e-mail |

**Returns:** on the first call, the person's name, e-mail and role, and the confirmation code.

**Ask like this:** *"Remove bruno\@memberfy.net from the community."*

**Notes:** the person's certificates remain valid. Only an owner can remove another owner, and nobody can remove themselves this way. See [Manage members](/membros/gerenciar-membros). The person's identified responses in [surveys](#surveys) are deleted; anonymous ones stay.

`reason` (up to 500 characters) records why: it shows in the confirmation summary and stays only in the [Logs](/membros/registros-de-atividades); the person does not get it.

## `list_signup_requests`

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

**See join requests.** The requests of a community in **With approval**, newest first. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `status` | `pending`, `approved`, `rejected`, `expired` | No | Default: `pending` (the **Members › Pending** queue) |
| `page`, `limit` | number | No | `limit` from 1 to 100; default 20 |

**Returns:** each request with `id`, name, e-mail, language, phone, status, request date, `expires_at` (a pending request expires after 30 days), decision date, rejection reason, `member_id` (once approved) and the sign-up answers (`answers`).

**Ask like this:** *"Who asked to join the community this week?"*

**Notes:** a request is not a member and never shows up in `list_members`. Decided requests are deleted 30 days after the decision. The name and the answers were written by the candidate: the assistant treats them as data, never as instructions.

## `approve_signup_request`

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

**Approve join requests.** Approves 1 to 100 requests in one call. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `ids` | list of 1 to 100 | Yes | The ids from `list_signup_requests` |

**Returns:** the result per request (`approved`, with the `member_id`; `already_member`, when the e-mail already had an account here; `already_decided`; `not_found`; `failed`) and the summary.

**Ask like this:** *"Approve Maria's and Bruno's requests."*

**Notes:** each approved person becomes a member as with an invite and gets the e-mail to create their password. Approval fires **New community member** with the **Came from approval** source (`trigger_filter` with `sources: ["approval"]`). The plan's member limit is checked right then, and a suspended community can't approve. Approving again changes nothing. The assistant shows who will be approved first.

## `reject_signup_request`

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

**Reject join requests.** Rejects 1 to 100 requests, with an optional reason. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `ids` | list of 1 to 100 | Yes | The ids from `list_signup_requests` |
| `reason` | text, up to 1000 | No | Goes in the e-mail to the candidates |

**Returns:** on the first call, who will be rejected, the reason and the confirmation code; then the result per request (`rejected`, `already_decided`, `not_found`).

**Ask like this:** *"Reject carlos\@memberfy.net's request with the reason: the community is only for people working in the field."*

**Notes:** asks to confirm because it sends an e-mail and can't be undone. The same e-mail can ask again after 30 days.

## `list_groups`

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

**List groups.** The member groups (departments, classes, squads), with color, leader, parent group and how many people each has. *Minimum role: moderator or finance.*

Parameters: none.

**Returns:** the groups, with id, name, color, leader, parent group and number of people.

**Ask like this:** *"Which groups does the community have, and how many people are in each?"*

## `create_group`

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

**Create group.** Creates a member group. *Minimum role: moderator or finance.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `name` | text | Yes | Unique in the community |
| `description` | plain text | No | No formatting: Markdown marks are stripped |
| `color` | hex color | No | E.g. `#2563EB` |
| `parent_group` | name or id | No | The group above it (board → area → squad) |

**Returns:** the group created, with its id.

**Ask like this:** *"Create the March class group, in blue, inside Students."*

See [Groups and org chart](/membros/grupos-e-organograma).

## `update_group`

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

**Rename or change group.** Changes a group's name, description, color or parent group. *Minimum role: moderator or finance.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `group` | name or id | Yes | The group |
| `name` | text | No | The new name |
| `description` | plain text | No | No formatting: Markdown marks are stripped |
| `color` | hex color | No | |
| `parent_group` | name or id | No | The new group above it |

**Returns:** the updated group.

**Ask like this:** *"Rename the March class group to Class 2026.1."*

## `delete_group`

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

**Delete group.** Deletes a group. *Minimum role: moderator or finance.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `group` | name or id | Yes | The group |

**Returns:** on the first call, the summary (the group and how many people it has) and the code; on the second, the deletion.

**Ask like this:** *"Delete the Class of 2024 group."*

**Notes:** the people leave the group but stay in the community; the groups below it move up one level.

## `update_group_members`

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

**Add or remove people from a group.** Adds people to a group or removes them, without touching their other groups. Since a group can open spaces, only the owner and the admin change someone's groups. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `group` | name or id | Yes | The group |
| `add` | list of profile ids or e-mails | No | Who joins |
| `remove` | list of profile ids or e-mails | No | Who leaves |

**Returns:** the result person by person.

**Ask like this:** *"Put everyone who bought the mentoring this month in the Mentoring group."*

Only the owner and the admin change someone's groups. `expires_at` (`YYYY-MM-DD` or an ISO date; `null` = no end) gives a **Valid until** to whoever joins in `add`; someone already in the group only gets the new date (`status: dated`). See [Groups and org chart](/membros/grupos-e-organograma).

## `list_tags`

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

**List member tags.** The tags used in the community, with their color and how many people have each one. *Minimum role: moderator or finance.*

Parameters: none.

**Returns:** the tags, with name, color and number of people.

**Ask like this:** *"Which tags exist, and how many people have each one?"*

## `update_member_tags`

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

**Tag or untag.** Adds and removes tags on one or more people, keeping their other tags. *Minimum role: moderator or finance.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `members` | list of profile ids or e-mails | Yes | The people |
| `add` | list of tags | No | The tags to add |
| `remove` | list of tags | No | The tags to remove |

**Returns:** the result person by person.

**Ask like this:** *"Tag ana@memberfy.net and bruno@memberfy.net with Mentor."*

**Notes:** system tags, such as **Speaker**, can't be set by hand. See [Tags](/membros/tags).

## `update_tag`

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

**Rename or recolor tag.** Renames a tag on everyone who has it and changes its color. *Minimum role: moderator or finance.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `tag` | text | Yes | The tag |
| `new_name` | text | No | The new name |
| `color` | hex color | No | |

**Returns:** the updated tag.

**Ask like this:** *"Rename the Mentor tag to Coach and make it purple."*

## `delete_tag`

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

**Delete tag.** Removes a tag from everyone who has it. *Minimum role: moderator or finance.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `tag` | text | Yes | The tag |

**Returns:** on the first call, the summary and the code; on the second, the deletion.

**Ask like this:** *"Delete the Event 2024 tag."*

**Notes:** the people stay in the community; only the tag goes.

## `get_org_chart`

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

**View org chart.** Who reports to whom, with each person's groups. *Minimum role: moderator or finance.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `root_member` | profile id or e-mail | No | Who sits at the top |
| `group` | name or id | No | Draws only that group |
| `depth` | number | No | How many levels to go down |

**Returns:** the tree, person by person, with their manager and groups.

**Ask like this:** *"Show the org chart of the Product area."*

See [Groups and org chart](/membros/grupos-e-organograma).

## `set_manager`

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

**Set who someone reports to.** Sets a person's manager in the org chart, or removes it. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `member` | profile id or e-mail | Yes | The person |
| `manager` | profile id or e-mail | No | Who they report to |
| `no_manager` | yes or no | No | `true` removes the manager |

**Returns:** the person with the new manager.

**Ask like this:** *"Bruno now reports to Ana."*

**Notes:** a cycle (A reports to B, who reports to A) is refused. Only the owner and admins change the leader, because the direct leader approves the person's [development plan](#development-plans) and reads feedback about them; moderators and finance keep organizing groups. Nobody sets their own leader, not even the owner: the API refuses, and the assistant explains that another owner or admin has to do it. Beyond that, the org chart grants no permission: what someone can do is still their role.

## `get_my_team`

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

**See my team.** Says whether you lead anyone in the community (`isLeader`), who reports directly to you (`directReports`, with name and photo) and whether the tree goes one level further down (`hasIndirectReports`). Only your own team, never someone else's. *Minimum role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `space_id` | space id | No | Keeps in `directReports` only those who open that space today |

**Returns:** `isLeader`, `directReports` and `hasIndirectReports`.

**Ask like this:** *"Who reports to me?"*

## `list_activity_logs`

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

**Activity logs.** Who did what in the community, newest first: the team's actions on subscriptions, the AI assistant, the members and the API keys, the timeline of the **Members › Logs** tab. For all of the community's records, use [`list_logs`](#list-logs). *Minimum role: admin (owner or admin).*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `source` | `team`, `assistant`, `members`, `apiKeys` | No | **Team** (actions on subscriptions: cancel, reactivate, discount, complimentary, extension, add-on, payment link), **assistant** (what an AI assistant did through MCP, including connections authorized and disconnected) **members** (the actions that earn engagement points) or **API keys** (key created, renamed, with IPs changed or revoked, and every write made with a key, *"via key n8n"*; see [Integrations & APIs](/configuracoes/integracoes-e-apis)). Without it, all of them |
| `profile` | profile id, e-mail or app link | No | Only what this person did |
| `from`, `to` | ISO 8601 date | No | The period. A date without a time in `to` covers the whole day |
| `page`, `limit` | numbers | No | Up to 100 per page |

**Returns:** each entry with when, who, the action (in your language), on what, and the details: the before and after of a team action, the result of an assistant call (completed, error, refused or awaiting confirmation) or the points of a member action. The arguments of assistant calls come summarized, with no confirmation codes or images.

**Ask like this:** *"Who canceled Ana's subscription?"* · *"What did the assistant do yesterday?"* · *"What did ana@memberfy.net do this week?"* · *"What did the n8n key do this week?"*

**Notes:** if an assistant call failed, the response suggests [`get_connection_diagnostics`](/mcp/ferramentas-comunidade#get-connection-diagnostics); with a person in the filter, it suggests [`member_activity`](/mcp/relatorios-e-graficos#member-activity). A profile or link from another community is refused.

## `list_logs`

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

**Community Logs.** Everything the community records, newest first: the same timeline as **Administration › Logs**. See [Logs](/membros/registros-de-atividades). *Minimum role: owner, admin or finance; finance reads only the financial type.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `type` | `team`, `platform`, `assistant`, `members`, `emails`, `imports`, `financial`, `moderation`, `apiKeys` | No | A single type: **Team** (roles, removals and departures, community data and settings, subscriptions, Attendance fixes), **Platform** (business registration and payout account, sales turned on or paused, member entry, streaming), **AI assistant**, **Members** (actions that earn points), **E-mails** (campaign sends), **Imports**, **Financial** (sales, refunds and payouts, with the gross amount), **Moderation** and **API keys** (keys created, renamed, with IPs changed or revoked, and each write made with a key). Without it, all the ones your role reads |
| `actor` | profile id, e-mail, name or app link | No | Only what this person did. A name works when only one person has it; with two or more, the response says who they are |
| `from`, `to` | date YYYY-MM-DD or date and time | No | The period, in the community time zone. A date without a time covers the whole day |
| `search` | text, up to 100 | No | Name of who acted or of what was affected, title, file, campaign or tool |
| `page`, `limit` | numbers | No | Up to 100 per page (default 20) |

**Returns:** each entry with `type`, the action, who acted (with `via`: through the app, through the assistant, through an API key (`api_key`), by the Memberfy team or by the system), what was affected, a ready summary in your language (*"Changed Ana Souza's role from Member to Admin"*), the date and the safe details. It never returns assistant arguments, codes, bank details, e-mails, fees or net amount.

**Ask like this:** *"Who made Ana an admin?"* · *"Who changed the community settings this week?"* · *"What happened yesterday?"* · *"How much did we sell and refund in September?"* (finance) · *"What did the n8n key do this week?"* (`type: apiKeys`)

**Notes:** finance asking for another type gets a refusal. With more pages, the response suggests the next one; with a person in the filter, it suggests [`member_activity`](/mcp/relatorios-e-graficos#member-activity); if an assistant call failed, it suggests [`get_connection_diagnostics`](/mcp/ferramentas-comunidade#get-connection-diagnostics).

## `get_member`

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

**A member's profile.** A member's profile in this community. *Minimum role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `member` | id, e-mail or link | Yes |  |

**Returns:** name, display name, tagline, role, when they joined and when they were last seen. For the team and for the person themself, also the **custom fields** (`fields`) and the origin (`source`, `importedAt` when they came from an import). And the **engagement** (`engagement`), already filtered for whoever asks: points and level (with gamification on), the badges you can see and the certificates (the person's, for them and the team; for others, only if they chose to show them to the whole community).

**Ask like this:** *"Show me Ana's profile."*

**Notes:** e-mail and phone come only on your own profile or for moderator, finance and up; finding someone else by e-mail also needs moderator. A person from another community isn't found.

**Member page**: also `cover_url`, `company`, `country`, `languages`, `links`, `experiences`, the signup fields the page shows and the **In the community** numbers, each only if the section is visible to whoever asks. On your own page (and for the team), also each section's level (`privacy`). Also `leader` (`id`, `name`, `avatarUrl`), `directReportsCount` and `groups` (`id`, `name`), absent when there is nothing to show; the person and the team see every group, other members only the ones they share. Suggests `update_my_profile` (yours) and `list_member_page_activity` (with Activity visible). See [Your profile](/membros/seu-perfil).

Returns `welcome` (with the missions) and, for the owner, the admin and the moderator, `referredBy`: who referred the person.

## `update_member`

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

**Edit a member.** Changes someone's name and tagline in this community. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `member` | id, e-mail or link | Yes |  |
| `name` | text, up to 100 | No | The person's name |
| `tagline` | text, up to 200 | No | The line under the name; `""` clears it |

**Returns:** the updated member, with `name`.

**Ask like this:** *"Change João's name to João Silva."*

**Notes:** the name changes only for someone with a role below yours, and only in this community; if the person still had the name taken from the e-mail and is only in this community, it becomes the account name. See [Name](/conceitos/conta-e-perfil#name). Only another owner edits an owner. The photo, e-mail and phone don't change here. For yourself, use `update_me`.

## `update_me`

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

**Edit myself.** Edits you as a member of this community: name, tagline, language and phone. Also who sees your certificates (`certificates_visibility`). *Minimum role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `name` | text, up to 100 | No | Your name in this community |
| `tagline` | text, up to 200 | No | In this community; `""` clears it |
| `language` | one of the 10 languages, or `null` | No | In this community; `null` follows the community's language |
| `phone` | text, up to 32 | No | In this community; `""` or `null` clears it. E.g. `+55 41 99999-8888` |
| `phone_country` | 2-letter code | No | E.g. `BR`, when the phone has no `+` |
| `certificates_visibility` | `team`, `community` | No | Who sees your certificates on your profile: `team` (you and the team, the default) or `community` (the whole community) |

**Returns:** what changed: `account` (language and phone) and `member` (name and tagline).

**Ask like this:** *"Change my language to English and my phone to +55 41 99999-8888."*

**Notes:** the name changes only in this community; in the others you belong to, it stays the same. The picture is `update_avatar`.

## `update_my_profile`

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

**Edit my page.** Edits your [member page](/membros/seu-perfil) in this community; only what is sent changes. Never someone else's, whatever your role. *Minimum role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `company` | text, up to 100 | No | Where you work; `null` or `""` clears |
| `country` | 2-letter code | No | E.g. `BR`; `null` clears |
| `languages` | list of codes, up to 10 | No | E.g. `["pt", "en"]`; `[]` clears |
| `links` | `linkedin`, `website`, `instagram`, `github`, `x`, `youtube` | No | Full addresses (`https://…`); only the ones sent change (`null` or `""` removes one); `links: null` removes all |
| `experiences` | list, up to 30 | No | The **whole** list (replaces the stored one): `title`, `company`, `start_date` and `end_date` (`YYYY-MM`; no end = current role) |
| `privacy` | object | No | Each section's level: `header` and `about` `PUBLIC` or `MEMBERS`; `location`, `experience` and `activity` `PUBLIC`, `MEMBERS` or `PRIVATE`; `fields` (field by id, key or name) `MEMBERS` or `PRIVATE` |
| `image_url` / `image_base64` | link or file | No | The cover (3:1, 1800 × 600 recommended) |
| `remove_cover` | yes or no | No | `true` removes the cover (the page shows the community gradient) |

**Returns:** your page as you see it, with the level in force for each section.

**Ask like this:** *"Make my page public, except my experience."* · *"Add that I've worked at Acme as Product Manager since March 2024."* · *"Use this image as my page cover: https://…"*

**Notes:** it doesn't ask for confirmation. The **bio** is the tagline in `update_me`, and the picture is `update_avatar`. `PUBLIC` only applies with public pages on in the community; a choice above the community's limit is kept and counts as the limit. A field the community set to **Never** or **Always** doesn't change. The cover is checked before anything changes: if the image doesn't work, nothing changes.

## `list_member_page_activity`

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

**A member's activity.** The posts and comments in the **Activity** tab of someone's page, only from spaces you can open, newest first. *Minimum role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `member` | id, e-mail or link | Yes | By e-mail, moderator or finance and above only |
| `cursor` | text | No | The `nextCursor` of the previous page |
| `limit` | 1 to 50 | No | Items per page (default 20) |

**Returns:** the items and the pagination. With `pagination.hidden: true`, the person doesn't show their Activity to you: the assistant says so, not that they didn't post.

**Ask like this:** *"What has Ana posted lately?"*

## `update_avatar`

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

**Set or remove a picture.** Sets or removes a member's picture, by link or file. *Minimum role: any.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `member` | id, e-mail or link | No | Whose picture. Leave out for your own. Someone else's needs a role above theirs, and only for people in the connected community |
| `remove` | yes or no | No | `true` removes the picture |
| `image_url` / `image_base64` | link or file | No | The new picture (square; 800 × 800 is recommended) |

**Returns:** `member_id` and `avatar_url`, the address of the new picture; when removing, `removed: true`.

**Ask like this:** *"Change my picture to this one: https://example.memberfy.net/me.png."* · *"Remove ana@memberfy.net's picture."*

**Notes:** it doesn't ask for confirmation. Any role changes their own picture, which changes only in this community ([Profile photo](/conceitos/conta-e-perfil#profile-photo)). Someone else's changes only in the connected community and needs a role above theirs: the owner changes everyone's except another owner's; the admin, moderators', finance's and members'; the moderator and finance, members' only. JPEG, PNG, WebP or GIF (SVG becomes PNG), up to 5 MB as a file; if the image can't be used, nothing changes. See [Images](/mcp/ferramentas#images).

## Custom fields

The extra registration details (company, job title, city). See the article [Custom fields](/membros/campos-customizados). A field is given by its id, its key (`company`) or its name. Types: `text`, `number`, `date`, `select`, `multi_select`, `boolean`, `email`, `phone`, `url`.

## `list_member_fields`

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

**Custom fields.** The community's fields, in order, with key, type, options, whether it's required and whether it already has values. *Minimum role: moderator or finance.*

**Ask like this:** *"Which fields does the community ask for at registration?"*

## `create_member_field`

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

**Create a field.** *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `label` | text, up to 120 | Yes | The field's name; the key comes from it and doesn't change |
| `type` | `text`, `number`, `date`, `select`, `multi_select`, `boolean`, `email`, `phone`, `url` | Yes | The type. `email` is stored in lowercase; `phone` in international format (without a country code, the community's applies); `url` accepts only http/https |
| `options` | list | For `select` and `multi_select` | The options: at least two; on a multiple choice, up to 50, up to 80 characters each |
| `min_selections`, `max_selections` | number, 1 to 50 | No | Only on `multi_select`: how many the person can tick, at least and at most; `null` removes the limit. With `required`, the minimum is 1 |
| `required` | yes or no | No | Everyone must fill it in (default: no). Whoever lacks a value is asked to complete their registration on their next visit |
| `order` | number | No | The position, from 0 |
| `pattern` | text, up to 200 | No | Only for `text`: the regular expression the whole value must match. An invalid expression, or one that could hang validation, is refused |
| `pattern_message` | text, up to 120 | No | The hint shown under the field and when the value doesn't match |
| `ask_on_signup` | yes or no | No | Asks for the field on sign-up. A required field is always asked |
| `profile_visibility` | `NEVER`, `MEMBER_CHOOSES`, `ALWAYS` or `null` | No | On the [member page](/membros/campos-customizados#on-the-member-page): never, the person chooses or always (at most for members). `null` or left out is automatic: a sensitive field (phone, e-mail, date, documents, health, address…) becomes `NEVER`. |

**Ask like this:** *"Create the field Ticket type, a choice, with VIP, In person and Online."* · *"Create the field Member ID, required, in the format ABC-1234."* · *"Ask for the business phone on sign-up."*

## `update_member_field`

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

**Edit a field.** Changes the name, type, options, required flag, position, `pattern`, `pattern_message` and `ask_on_signup`, `profile_visibility`. Switching a `text` field to another type clears its `pattern`. The type can't change once there are values filled in. Exception: from `select` to `multi_select` (each answer becomes a one-item list; it doesn't go back). Renaming an option keeps the answers; removing takes the option out of the profile, filters and variables, and the answer comes back with the option. *Minimum role: admin.*

## `reorder_member_fields`

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

**Reorder fields.** `fields` is the list in the new order. *Minimum role: admin.*

## `delete_member_field`

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

**Delete a field.** The field disappears from the record, the profile and the campaign variables; the values are kept. Shows the summary and only deletes after your yes. *Minimum role: admin.*

## `update_member_field_values`

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

**Fill in fields.** Fills in or changes a person's values. *Minimum role: any, for your own; moderator, for someone else's.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `member` | id, e-mail or link | No | Without it, your own profile |
| `values` | `{ key: value }` | Yes | Only the keys sent change; empty clears (a required one can't be left empty). Dates as `YYYY-MM-DD`; a choice by its option; a multiple choice as a list of options, by value or name (`[]` clears) |

**Ask like this:** *"Fill in ana@memberfy.net's company: Studio X."*

**Notes:** errors come back together, one per field, and nothing is saved. Finance only fills in their own.

## Spreadsheet import

The same flow as the **Import spreadsheet** tab ([Import members from a spreadsheet](/membros/importar-membros)), in three steps: analyze, preview and start. Owner and admin. The spreadsheet goes by **public link** (`file_url`) or, for a CSV, as **text** (`csv_text`); there's no base64 upload. In Claude and ChatGPT, just attach the spreadsheet: the assistant reads it and sends the content as CSV. See the recipe [Import a spreadsheet through the assistant](/mcp/receitas#61-import-a-spreadsheet-through-the-assistant) and the ready-made prompt **Import members from a spreadsheet** (`import_members`).

## `analyze_member_import`

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

**Analyze the spreadsheet.** Uploads the file (.xlsx or .csv, up to 5 MB, 5,000 rows and 100 columns) and returns the analysis. Nobody is imported or e-mailed; the original is kept in private storage, and an unconfirmed analysis expires in 24 hours. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `file_url` | link | One of the two | Public link to the .xlsx or .csv |
| `csv_text` | text | One of the two | The CSV content |
| `file_name` | text | No | The name kept in the history |

**Returns:** the sheets, the header row found, the total rows and each column with 3 samples, the suggested destination (with high or low confidence), the suggested type for a new field and the distinct values.

## `preview_member_import`

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

**Preview.** Rereads the file with another sheet, header row, delimiter or encoding and, with the mapping, returns the summary, saving nothing. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `import_id` | id | Yes | From the analysis |
| `sheet`, `header_row`, `delimiter`, `encoding` | | No | How to read the file |
| `mapping` | list | No | Where each column goes: `column` (0 = column A) and `target`: `email`, `first_name`, `last_name`, `phone`, `job_title`, `tagline`, `tags`, `groups`, `consent`, `sms_consent`, `whatsapp_consent`, `field` (with `field_key`), `new_field` (with `new_field.label` and `type`) or `ignore`. `job_title` is the profile job title (up to 100 characters) and `tagline` the bio (up to 200): anything longer is cut with a `TOO_LONG` warning, and for people already in the community both only fill an empty one |
| `role` | `member`, `moderator` | No | Default: `member` |
| `groups`, `tags` | lists, up to 20 | No | For everyone. The groups must exist |
| `origin` | text, up to 150, no links | No | Where the list came from; it goes in the e-mail |
| `consent_values` | list | With a consent column | The values that count as yes |
| `consent_declaration` | yes | Without a consent column | The declaration that everyone agreed |
| `sms_consent_values`, `whatsapp_consent_values` | lists | No | With an `sms_consent` or `whatsapp_consent` column: the values that count as yes (default: *yes*, *y*, *sim*, *x*, *1*…) |
| `sms_consent_attestation`, `whatsapp_consent_attestation` | yes | To record the column's consent | The declaration that the community collected the consent of the people marked yes; without it, no yes is recorded. Applies to new people and to existing members |

**Returns:** new people, already members, skipped by reason, declines, e-mails that will be sent and the groups, tags and fields that will be created. In `unknownOptions`, per choice or multiple-choice field, the sheet values that aren't options yet: the assistant offers to add them with `update_member_field`. A `Linux; Cloud` cell (split by `;` or `,`) fills a multiple choice, and `new_field.type` takes `multi_select`.

The `badges` and `points` targets (one column each) bring the history of people coming from another platform; on a `badges` entry, `ignore_names` ignores names. The summary carries `summary.badges` (unknown, ignored, grants) and `summary.points` (rows, invalid, already imported, levels); an unknown badge points to `create_badge`. `groups_expire_at` dates the row's groups.

## `start_member_import`

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

**Import.** The same parameters as the preview, with `origin` required and the consent (column or declaration). It's a bulk e-mail send that can't be undone: the first call returns the summary (file, origin, role, groups, tags, how many e-mails go out and to whom) and a `confirmation_token`; the assistant shows it and only imports after your yes. *Minimum role: admin.*

**Notes:** it runs in the background; follow it with `get_member_import`. Each new person gets the invitation with the origin and the decline link; existing members get nothing. With the community suspended, it's refused before the summary. If another spreadsheet is being read in the community, the answer asks you to try again in a moment. With `sms_consent` or `whatsapp_consent` and the attestation, the summary shows the channels and the declaration, and warns that those rows' phones can receive right away, without being verified. The consent also applies to existing members, whose phone the sheet replaces (not verified); rows may come back with `CONSENT_WITHDRAWN` (the person left the channel or withdrew consent: nothing recorded) or `PHONE_KEPT_VERIFIED` (another verified number was kept). The summary also shows `unknown_options`.

**Ask like this:** *"Import this spreadsheet as members, in the Members 2026 group. The origin is Active members of 2026."*

## `get_member_import`

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

**Follow the import.** Status (`QUEUED`, `PROCESSING`, `DONE`, `FAILED`, `INTERRUPTED` by the community's suspension…), rows processed, imported, updated, skipped and invitations sent, and the skipped rows or rows with a warning, with the reason. *Minimum role: admin.*

## `list_member_imports`

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

**Import history.** Who imported, when, file, status, counts, origin and the consent recorded. *Minimum role: admin.*

## `get_member_import_file`

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

**Import files.** `file: original` returns a 5-minute link to the spreadsheet as it was uploaded; `file: skipped_rows_csv`, the CSV of skipped rows with the reason. *Minimum role: admin.*

## `withdraw_from_community`

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

**Decline the invite.** For someone who joined the community through an import: declines the invite and leaves, like the e-mail's **Thanks for the invitation, but I do not want to join** link. The account stays; the community can no longer import or invite that e-mail. Refused for someone who didn't come from an import, for team members and for anyone with a subscription in the community. *Minimum role: any, only for themself.*

**Ask like this:** *"I don't want to take part in this community."*

## Surveys

Questionnaires in sections, identified or anonymous, in a Surveys space, for whoever has access to the space and/or through the public link, with no sign-in. See [Surveys](/espacos/pesquisas). All 12 are for the owner and the admin; **opening** (it sends the e-mail invitation), **closing** and **deleting** ask to confirm, the others act on the first call.

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `list_survey_templates` | The survey templates (NPS, satisfaction, event, course, eNPS, blank), with sections and questions | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_surveys` | The surveys (or only those of a `space_id`), with the space, status, mode, recipients, responses and the public link | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_survey` | One survey, with the space, sections, questions and public link | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_survey` | Creates a draft survey in a Surveys space (`space_id`), from a template and/or with your own sections and questions | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_survey` | Edits the whole draft or scheduled survey (and moves it to another Surveys space), with the period (`starts_at`, `closes_at`) and the response type (`response_mode`); once open, only title, introduction, end and public link | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `preview_survey_audience` | How many people have access to the space today (by `space_id` or by the survey), with up to 10 names | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `open_survey` | Opens the survey (or schedules it, with a future `starts_at`): freezes who has access to the space, sends each of them an e-mail invitation and returns the recipients and the public address | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `close_survey` | Closes the survey now, for good | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `delete_survey` | Deletes the survey; the link stops working | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `get_survey_results` | The aggregated results, with one filter (group, tag, company or origin; anonymous: origin only) and, on identified required or immediate surveys, who still has to answer | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_survey_responses` | Who answered what and when (identified surveys only) | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `export_survey_csv` | The responses as CSV, the same file as the app | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |

**Create.** First the space: [`create_space`](/mcp/ferramentas-comunidade#create-space) with `module: "surveys"` and `mode` `multi` (several surveys, the default) or `single` (one survey). `create_survey` takes `space_id` (required), `title`, `template` (the key from `list_survey_templates`: `nps`, `csat`, `event`, `course`, `enps` or `blank`) and/or `sections` with the questions: `single_choice` and `multiple_choice` (2 to 30 options), `scale` (`min` 0 or 1, `max` 2 to 10, `min_label`, `max_label` and `display` as numbers or stars), `nps` (0 to 10) and `text` (`display` short or long). Also `anonymity` (identified or anonymous, fixed once open), `public_link_enabled`, the period (`starts_at` and `closes_at`, the end after the start) and `response_mode` (`optional`, the default, no window in the app; `required`, marked as required, with the window the person can put off with "Not now"; `immediate`, the window that only goes away with the answer), fixed once open. There is no `audience`: whoever has access to the space answers (change it with [`update_space_access`](/mcp/ferramentas-comunidade#update-space-access)). In a `single` space that already has its survey, a second one is refused. With both a template and sections, the sections win. The survey starts as a draft: nobody sees it, not even through the link.

**Edit.** In a draft or a scheduled survey, `update_survey` replaces the whole tree: send every section and question (`get_survey` shows the current ones). In a draft, `space_id` moves the survey to another Surveys space. On a scheduled survey, `starts_at: null` cancels the schedule (back to draft). Once open, only `title`, `description`, `closes_at` and `public_link_enabled`.

**Open.** `open_survey` first returns a summary, with how many people get the e-mail invitation and up to 10 names; show it to the person and repeat with the `confirmation_token` after the yes. Whoever gets access to the space later is not included; editing doesn't resend the invitation. With a future `starts_at`, `open_survey` schedules instead of opening (`status: "scheduled"`): the survey opens by itself at `starts_at`, with the audience frozen at that time and the invitation 10 minutes later; the answer carries `schedule_note`. Before the start and after the end, nobody answers.

**The public link.** `public_url` (on the community's domain, such as `clube.memberfy.net/s/…`) comes in `list_surveys`, `get_survey`, `create_survey`, `update_survey` and `open_survey` when the link is on, and is `null` when it is off. `open_survey` also returns `recipient_count`.

**Results.** `get_survey_results` takes one filter at a time: `group_id`, `tag`, `company_id` or `origin` (`member` or `visitor`). In an anonymous survey, only `origin`: `group_id`, `tag` and `company_id` are refused. The results move in blocks of 3 new responses from the same origin (the total grows by 3), under 3 published they come locked (no number, no text), and `origin` only applies when the slice and the rest both have 3 or more. `list_survey_responses` only exists for identified surveys; a visitor from the link comes with `member` null. `export_survey_csv` returns the same file as the app (anonymous: only the published responses, from 3). On identified surveys with `response_mode` `required` or `immediate`, the results carry `pending` (`count`, `members`, `truncated`): who still has to answer. On anonymous ones, `pending` never comes, in any response type.

**Responses per day**. `get_survey_results` returns `activity` (null when locked), counts only and following the filter: `days` (`[{date, count}]`, in the community's time zone, from the first day with a response to today or the close day, zeros included, at most the last 180 days), `last_at`, `last_week` (how many in the last 7 days) and `basis`. On an identified survey, `basis` is `response`: each response counts on its day. On an anonymous one, it is `publication`: an anonymous response keeps no time at all, so the count is of the blocks that entered the results each day (*"N responses became visible that day"*), and the assistant never says when someone answered; `untracked` counts the ones published before this tracking existed.

**Answering has no tool.** The assistant does not answer surveys on anyone's behalf: the record of what it does would identify who answered.

**For the member.** `list_my_pending_surveys` (any role) lists the open surveys waiting for the person's own answer, with the deadline, whether it is anonymous, the `response_mode` and the `url` to answer in the app. Closing the app's notice has no tool.

**Ask like this:** *"Create an Event survey space, with a single survey, and build the satisfaction survey in it, anonymous, with the public link on. Show it to me before opening."* · *"How is the NPS of the community survey? Split members and visitors."*

## Recurring survey and heat map

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `pause_survey_recurrence` | Pauses the repeat: no new round opens, and the open one runs until it closes | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `resume_survey_recurrence` | Resumes a paused repeat | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `end_survey_recurrence` | Ends the repeat, for good; no round is deleted | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `list_survey_rounds` | The rounds, newest to oldest, with the response rate and the value of each NPS and scale question | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_survey_evolution` | The round-by-round evolution of each NPS and scale question, ready for a line chart | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_survey_heatmap` | The identified survey's heat map, by primary group, tag or company (`dimension`), for one round (`round_id`), with the change against the previous one | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `export_survey_heatmap_csv` | The heat map as CSV, the same file as the app | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |

**Repeat.** `create_survey` and `update_survey` take, in the draft, `recurrence` with `frequency` (`weekly`, `biweekly`, `monthly` or `quarterly`), `day` (the day of the week from 0, Sunday, to 6, for weekly and biweekly; the day of the month from 1 to 28 for monthly and quarterly), `time` (`HH:mm`, in the community's time zone), `duration_days` (up to 7, 14, 28 or 90, depending on the frequency) and `notify_by_email`. `recurrence: null` turns it off. A recurring survey doesn't open with `open_survey` (the tool refuses): each round opens and closes by itself.

**Heat map.** Identified surveys only; on an anonymous one, both map tools refuse the request.

**Ask like this:** *"Create the monthly eNPS in the HR Surveys space, every day 1 at 9am, open for 7 days"*, *"How has the eNPS evolved over the last rounds?"*, *"Show the heat map of the last round by group."*

## Forms

Forms in a Forms space, for members with access to the space and/or for anyone with the link, with the submissions list. See [Forms](/espacos/formularios). All 17 are open to every role, and the API decides case by case: creating follows the space's **Who can post** (the owner and the admin can always create); managing a form and seeing the submissions belongs to whoever created it, the team (owner, admin, moderator and finance) and the responsibles; the others get 403. **Deleting** a form or a submission asks to confirm; the others act on the first call.

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `list_forms` | The forms (or only those of a `space_id`): whoever manages them sees all of them, in any status, with `public_url` and the submissions by status; the others, only the ones open to members in the spaces they can open | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_form` | A form as whoever manages it sees it: settings, status, `public_url`, responsibles, steps and fields | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_forms_space_settings` | The space's mode (`single`, one form; `multi`, a list), whether you can create in it (`can_create`) and turn on the team's options (`can_configure_access`) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `update_forms_space_settings` | Switches the space's mode; `single` is refused with 2 or more forms, and nothing is deleted | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `create_form` | Creates a draft form in a Forms space, with steps and fields of the 13 types | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_form` | Edits the form in any status; `sections` replaces the whole tree | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `publish_form` | Publishes the draft; with `dry_run: true`, it first shows how many people get the notice e-mail (`email_recipient_count`) and what each submission does | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `close_form` | Closes it now: the link shows "form closed" | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `reopen_form` | Reopens a closed form (deadline passed or cap reached: change them first with `update_form`) | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_form` | Deletes the form; the link goes offline (404) and the submissions stay stored for the owner | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `list_form_submissions` | The submissions, newest first: status, origin, name, e-mail, phone, member and the save-as-member result; filters `status`, `origin`, `from`, `to` and `q` | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_form_submission` | One submission, with all the answers (a copy of what was submitted) and the proof of consent | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `update_form_submission_status` | Changes the status: `new`, `in_contact` or `done`, in any order | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_form_submission` | Deletes a submission: it leaves the list and the CSV (the submission cap doesn't reopen); the summary carries no personal data | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `export_form_submissions_csv` | The submissions as CSV, the same file as the app, with the same filters | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_form_to_fill` | A published form as whoever fills it in sees it, with the values that come from the profile (`prefill`; locked ones don't change) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `submit_form` | Submits the form on your behalf, linked to your profile | Any | <span class="tool-kind tool-kind-write">Changes</span> |

**Create.** First the space: [`create_space`](/mcp/ferramentas-comunidade#create-space) with `module: "forms"` and the mode `multi` (several, the default) or `single` (one form). `create_form` takes `space_id`, `title`, `description` and `sections`, each with `fields` of the types `name`, `email`, `phone`, `company`, `job_title`, `short_text`, `long_text`, `single_choice`, `multiple_choice` (2 to 50 options), `number` (`min`, `max`), `date`, `url` and `consent`; each field has `label`, `help`, `placeholder`, `required` and, on name, e-mail and phone, `lock_to_profile`. The settings: `accept_members`, `accept_visitors`, `save_as_member`, `send_confirmation` (on by default), `thank_you_message` or `redirect_url` (`https`), `privacy_policy_url`, `access_password` (6 to 100 characters, never returned or logged), `closes_at`, `max_submissions` and `responder_ids` (up to 20; without them, the creator is the responsible). In a `single` space that already has its form, a second one is refused (409). The form starts as a draft: the link doesn't open.

**Team only.** Only the team turns on `accept_visitors` and `save_as_member`. A member who asks gets 403 `teamOnlyOption`: the assistant says only the team turns those options on. A form open to visitors always keeps the consent field.

**Edit.** `update_form` changes only what goes in the call. `sections` replaces the whole tree: send every step and field, with the fields' `id` to keep the CSV columns (`get_form` shows them).

**Publish.** `publish_form` needs at least one field besides the consent. Call it first with `dry_run: true` and show the person how many get the notice e-mail and what happens on each submission (with `save_as_member`, the e-mail invitation); only then call it without `dry_run`. With the form open to members and `notify_by_email` other than `false`, a publication by the team notifies whoever has access to the space (once, 10 minutes later, in the **Forms** category); a member's publication sends no e-mail. The answer carries `public_url` (`clube.memberfy.net/f/…`) and `email_notice`.

**Submissions.** `list_form_submissions` carries `member_outcome` when the form saves as a member: `invited`, `tagged`, `plan_limit`, `invite_limit` (the daily invitation limits were hit: nobody was created), `opted_out` or `failed`. The answers come in `get_form_submission`. On a deleted form, only the owner reads and deletes the submissions (`list_forms` with `include_deleted`).

**Fill in.** `get_form_to_fill` and `submit_form` submit on behalf of the person themselves, signed in, as in the app. `answers` has one answer per field (`field_id`): text; number; date `YYYY-MM-DD`; the option's value; a list of values; the phone as text or `{ number, country }`. **Consent is `true` only after the person has read the text and said yes**: the assistant never accepts on their behalf. A missing or invalid field returns 422 with `errors[].param` = `answers.<field_id>`.

**Privacy.** The answers, the search and the access password never go into the assistant's audit log.

**Ask like this:** *"Create a Request a demo form open to anyone with the link, with name, e-mail, company and job title, and show it to me before publishing."* · *"Which submissions of the sign-up form are still new? Mark Maria's as in contact."*

## E-mails from this community

Your own e-mail preference in this community, as in **My Account › Notices**. Each person only reads and changes their own; the team reads no one's. See [E-mails from this community](/notificacoes/emails-desta-comunidade).

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `get_my_email_preferences` | Your e-mail preference in this community: each category, on or off, and the shortcut | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `update_my_email_preferences` | Changes your preference: a shortcut (receive everything, block announcements, block all) or categories | Any | <span class="tool-kind tool-kind-write">Changes</span> |

**Change.** `update_my_email_preferences` takes `shortcut` (`all` turns everything on, `campaigns_off` turns off only the team's announcements, `none` turns everything off) and/or `categories`, such as `{ "events": false, "surveys": true }`. The keys: `events`, `courses`, `callsForPapers`, `surveys`, `posts`, `downloads`, `store`, `recognition`, `feedbacks`, `developmentPlan`, `timeTracking`, `chat`, `announcements` and `participation`. Security, receipts and legal notices always arrive.

**Notify on publish.** `create_event`, `create_post`, `create_poll` (in Content), `update_course`, `update_download_item`, `publish_product`, `update_call_status` and `open_survey` take `notify_by_email` (on by default, like the app's **Notify by e-mail** box) and return `email_notice` (`scheduled`, `recipient_count` and, when it does not go out, `reason`), which the assistant reports. [`get_email_notice_recipient_count`](/mcp/ferramentas-comunidade#get-email-notice-recipient-count) counts beforehand. See [New content notices by e-mail](/notificacoes/avisos-de-novidade).

**Ask like this:** *"I don't want event e-mails from this community anymore."* · *"Which e-mails do I get from here?"*

## SMS and WhatsApp notices

Your [SMS and WhatsApp notices](/notificacoes/avisos-por-sms-e-whatsapp) in this community, as in **My Account › Notices**, and verifying your phone. Each person only reads and changes their own; the owner and the admin also see a member's consents.

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `get_my_notice_preferences` | Your notices per channel (e-mail, SMS and WhatsApp): the masked phone and whether it is verified, the consents, the channel and the categories, and the stop by a STOP reply, which applies to every community (`global_opt_out`) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `update_my_notice_preferences` | Turns SMS and WhatsApp on or off (`sms`, `whatsapp`: `enabled` and `categories`), each platform message on WhatsApp (`whatsapp.moments`) and news on WhatsApp (`whatsapp.marketing`); with the channel stopped by a STOP reply, `enabled: true` turns it back on in every community and **asks for confirmation** saying so | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `list_my_contact_consents` | Your consents: channel, purpose (service or marketing), origin and date | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `request_phone_verification` | Sends the 6-digit code by SMS to your phone, valid for 10 minutes | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `confirm_phone_verification` | Verifies the phone with the code; the number then counts on the account | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `list_member_contact_consents` | A member's SMS and WhatsApp consents, with origin (including `team`, declared by the team) and date, never the IP | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `attest_contact_consent` | Records the SMS and/or WhatsApp consent the community **declares it collected**: `attestation: true`, `channels`, `purpose` (`service`, `marketing` or `all`), optional `collected_at` and `collection_method`, and `members` (up to 200: id, e-mail, name or link, with optional `phone`). Returns, per member, the `status`, `phone_verified` and `sendable` | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |

`request_phone_verification` does not ask for confirmation: the code only goes to your own number, and Memberfy limits requests (one a minute, 3 an hour for the same number). Turning a channel on requires a verified phone and records the service consent for that channel, with the origin **My account**.

`attest_contact_consent` is only used when you say the community collected the consent; the assistant never assumes it. The summary before your yes carries the declaration (the responsibility is the community's) and warns that the phone provided **can receive** SMS and WhatsApp right away, without the code verification, while it is the profile's current phone, but is not verified: verification codes still require the person. Each result has `phone_verified` and `sendable` (whether the current phone can receive). Someone who left the channel or withdrew consent is not re-enrolled (`withdrawn`), a different verified number is kept (`kept_verified`) and the admin doesn't touch the owner (`owner_protected`). See [Consent declared by the team](/notificacoes/avisos-por-sms-e-whatsapp#consent-declared-by-the-team).

**Ask like this:** *"I want this community's notices on WhatsApp."* · *"Verify my phone: the code is 482913."* · *"Did Maria agree to get SMS?"* · *"Let me know on WhatsApp about unread direct messages." · *"Record that Maria and João agreed to SMS on the October meetup sign-up form."*

## Recognition

The wall of praise between colleagues in the [Recognition](/espacos/reconhecimento) space. Whoever has access to the space lists, recognizes, reacts and comments; deleting asks to confirm (the author or the team; the summary says the points are taken back); community values and the dashboard belong to the owner and the admin.

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `list_recognitions` | The Recognition wall, with a filter by person ("me", name, e-mail or id) and by value (`value`) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_recognition` | One recognition, with reactions and comments | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `search_recognition_recipients` | Who can be recognized (has access to the space), by name | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_recognition` | Recognizes 1 to 20 people, with a message and an optional value; `dry_run` shows first who gets the e-mail | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `react_to_recognition` | Reacts with an emoji, or removes the reaction | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `create_recognition_comment` | Comments on or replies in a recognition | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `list_company_values` | The community values, active and deactivated | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `delete_recognition` | Deletes a recognition; the points it gave are taken back | Author or team | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `delete_recognition_comment` | Deletes a comment on a recognition | Author or team | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `create_company_value` | Adds a community value | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_company_value` | Changes a value's name or description, or deactivates it (`active: false`) | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `reorder_company_values` | Puts the values in an order | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `get_recognition_dashboard` | Recognitions made, people who recognized and people recognized, in a period, with the by-value block | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_recognition_card` | The recognition's card as a PNG image, to share | Any (author, people recognized and team) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_recognition_types` | The recognition types, with label, phrase, art and whether each is on | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `update_recognition_type` | Turns a recognition type on or off; turning off asks for confirmation | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `upload_recognition_type_art` | Uploads a type's own art (URL or image); replacing own art that already exists asks for confirmation | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `remove_recognition_type_art` | Puts the type back on the default art, the same in every community | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |

**Recognize.** `create_recognition` takes `people` (1 to 20, by name, e-mail or id; nobody themself), `message` (up to 500 characters) and `value` (by name or id, optional). With `dry_run: true`, it shows who gets the e-mail without publishing; show it to the person first. The answer carries `email_notice`. Points follow engagement rules: `get_ranking_rules` and `update_ranking_rules` know `GIVE_RECOGNITION` and `RECEIVE_RECOGNITION`. In the feed, `list_posts` with `type: recognition`. The space: [`create_space`](/mcp/ferramentas-comunidade#create-space) with `module: "recognition"`.

**Several spaces**. The community can have more than one Recognition space. `list_recognitions`, `search_recognition_recipients`, `create_recognition` and `get_recognition_dashboard` accept `space_id` (from `list_spaces`, module `recognition`): optional with a single space, required with several to recognize and search people. The list without `space_id` gathers the spaces the person opens, and each card carries its `spaceId`; the dashboard without `space_id` adds them all up. The community values are the same in every space. A member names people by name or id: the e-mail search is for the team, and the assistant points to `search_recognition_recipients`.

**Ask like this:** *"Recognize Ana and Bruno for Saturday's support, with the value Customer first. Show me first who gets the e-mail."* · *"How many recognitions did we have in October?"*

**By value and card.** `list_recognitions` takes `value` (the value's name or id, or `none` for those without one). `get_recognition_dashboard` brings `byValue`: how many recognitions each value got in the period and the 5 most recognized people in each. `get_recognition_card` returns the recognition's card as a PNG image, which the person saves or shares; only for the author, the people recognized and the team (others get the API's refusal). `get_recognition` offers the card to whoever may download it. See [Recognition › The card to share](/espacos/reconhecimento#the-card-to-share). Every recognition brings `canShare` (the connected person may get the card), `canPostToLinkedIn` (`canShare` and they are the author or one of the recipients: only then does the assistant suggest posting on LinkedIn) and `hasCustomArt` (the art is the community's own; otherwise it is the type's default art, the same in every community). The card is 1200 px wide and as tall as its content.

**Ask like this:** *"How many Customer first recognitions did we have in October, and who got the most?"* · *"Give me the card of Ana's recognition."*

**Types and art**. `list_recognition_types`, for whoever opens the space, lists the seven types with label, phrase, art and whether each is on. `create_recognition` takes `type` (`appreciation`, `welcome`, `milestone`, `award`, `event`, `graduation` or `work_anniversary`; without it, Appreciation), and the `dry_run` shows the type, the phrase and the art; `list_recognitions` filters by `type`; `get_recognition` brings the type and the art. The owner and the admin turn types on and off with `update_recognition_type` (turning off asks for confirmation), upload own art with `upload_recognition_type_art` (from a URL or an image; a type's first own art goes straight up, and replacing own art that already exists asks for confirmation) and go back to the default with `remove_recognition_type_art` (asks for confirmation). Own art is a 3:1 banner: up to 5 MB, at least 1200 px wide, 1800×600 recommended, stored at 1800×600.

## Feedback

Feedback between colleagues in the [Feedback](/espacos/feedbacks) space. **Only the giver and the recipient read the text** (in feedback about another person, the internal part belongs to the leader and the requester, and the person reads only the message): the tools read only the connected person's own feedback and requests, and someone else's (for the owner and the admin too) comes back as not found. The text never goes into the log of what the assistant does. Deleting your own feedback and canceling your own request ask to confirm, with a summary without the text.

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `list_feedbacks` | Your feedback received or sent (`box`) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_feedback` | One of your feedbacks, with the text | Any (only your own) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `search_feedback_people` | Who can give or receive feedback (has access to the space), by name | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_feedback` | Gives feedback to a colleague (text in Markdown); `dry_run` shows first who gets the notice | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `thank_feedback` | Thanks the author for a feedback received | Any (the recipient) | <span class="tool-kind tool-kind-write">Changes</span> |
| `list_feedback_requests` | The requests asked of you or by you, with a status filter | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_feedback_request` | One of your requests | Any (only your own) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_feedback_request` | Asks a colleague for feedback, with an optional message; `dry_run` shows first who gets the notice | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `create_feedback_about_request` | Asks colleagues for feedback about a direct report (up to the space's limit); `dry_run` shows who gets the notice and the limit | Any (the person's direct leader; the team, about anyone) | <span class="tool-kind tool-kind-write">Changes</span> |
| `answer_feedback_request` | Answers a request with a feedback | Any (the person asked) | <span class="tool-kind tool-kind-write">Changes</span> |
| `decline_feedback_request` | Declines a request, with no e-mail | Any (the person asked) | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_feedback` | Deletes your feedback; it is gone for both | Any (the author) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `cancel_feedback_request` | Cancels your pending request | Any (the requester) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `get_feedback_dashboard` | The space's numbers, by period and group, with the by-theme block, with no text at all; as CSV with `format: csv` | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_feedback_settings` | The space's nominee limit per request (`max_nominees`) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `update_feedback_settings` | Changes the nominee limit per request (1 to 20; empty goes back to 5) | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `list_feedback_themes` | The community's themes and behaviors (`include_inactive` lets the team see the deactivated ones) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_feedback_theme` | Creates a theme, with an optional description | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_feedback_theme` | Renames, describes, deactivates or reactivates a theme | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `reorder_feedback_themes` | Changes the order of the themes | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `create_feedback_behavior` | Adds a behavior to a theme | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_feedback_behavior` | Renames, deactivates or reactivates a behavior | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `reorder_feedback_behaviors` | Changes the order of a theme's behaviors | Admin | <span class="tool-kind tool-kind-write">Changes</span> |

**Give and ask.** `create_feedback` takes the person (name, e-mail or id) and `body` in Markdown; `create_feedback_request`, the person and an optional `message`. Both take `dry_run` to show first who gets the e-mail notice (which never carries the text) and return `email_notice`. `list_feedback_requests` filters by `box` (`received`, `sent`) and `status` (`PENDING`, `ANSWERED`, `DECLINED`, `CANCELED`). `get_feedback_dashboard`, for the owner and the admin, returns numbers only. The space: [`create_space`](/mcp/ferramentas-comunidade#create-space) with `module: "feedbacks"`.

**Themes and behaviors.** The catalog belongs to the community and applies to every Feedback space; the first read creates the default set (5 themes, 6 behaviors each, in the community language). Anyone who opens the space reads the active ones with `list_feedback_themes`; the owner and the admin create, edit, reorder and deactivate themes and behaviors, which are never deleted. `create_feedback_request` takes `themes` (up to 10, by name or id) and `behaviors` of those themes. `create_feedback` and `answer_feedback_request` take, instead of `body`, `sections`: one per theme, with `observed`, `impact` and `suggestion` in Markdown (a blank prompt is left out; at least one with text) and the `behaviors` observed; with `dry_run`, they return the assembled text in `body_preview` without sending. `get_feedback` and `get_feedback_request` carry the themes only for the two people involved. In `get_feedback_dashboard`, the by-theme block hides counts of 1 and 2 and is left out with `group_id`. The sections, like the text, never go into the log of what the assistant does.

**Several spaces**. The community can have more than one Feedback space, and each feedback and request stays in the space where it was made. `list_feedbacks`, `search_feedback_people`, `create_feedback`, `list_feedback_requests`, `create_feedback_request` and `get_feedback_dashboard` accept `space_id`: optional with a single space, required with several to give, request and search people. Lists without `space_id` gather the spaces the person opens; the numbers without `space_id` add them all up. One pending request per pair in each space. A member names the person by name or id: the e-mail search is for the team, and the assistant points to `search_feedback_people`.

**About another person**. `create_feedback_about_request` takes the person and the nominees (name, e-mail or id), with optional `message` and themes: each nominee gets their own request, and the answer brings `round_id`, `max_nominees` and `email_notice`. The person's direct leader can ask, and so can the owner or the admin, about anyone; others get the API's refusal. `create_feedback` takes `about` (the person it's about, instead of who receives; the feedback goes to their direct leader, and the `dry_run` says so) and `message_to_person`, the **Message to the person**, which `answer_feedback_request` also takes; the answer brings `message_notice`. `list_feedbacks` and `list_feedback_requests` filter with `about` (`true` only those about another person, `false` only direct ones). The message, like the internal feedback, never goes into the log of what the assistant does. Who reads each part: [Feedback › Feedback about another person](/espacos/feedbacks#feedback-about-another-person).

**Ask like this:** *"Ask Carla for feedback on yesterday's presentation."* · *"Do I have pending feedback requests?"* · *"Ask Ana and Diego for feedback about Bruno."*

**Export.** `get_feedback_dashboard` with `format: "csv"` returns the dashboard as a CSV file (`csv`, `file_name`), with the same filters and the same protection (counts of 1 and 2 as "< 3"); Excel stays in the app. See the recipe [Download the feedback numbers as CSV](/mcp/receitas#84-download-the-feedback-numbers-as-csv). Above 2,000 rows, the file does not come back in the conversation: the answer carries `status: "queued"`, `rows` and `email`, and the assistant tells you which address the email with the link (valid for 72 hours) goes to.

## Development plans

The individual development plan in the [Development Plan](/espacos/pdi) space. There are 21 tools. The 14 plan tools, `get_current_development_cycle` and `get_development_cycle_adhesion` show up for every role, and Memberfy decides for each plan, at that moment, who reads and who acts: the person, the direct leader, the owner and the admin act; the indirect leader and finance only read; for everyone else, the plan comes back as not found. Deleting a draft and removing an action ask to confirm.

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `list_development_plans` | The development plans you can see (`scope`: `mine`, `team`, `to_approve`, `all`), filtered by person and status | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_development_plan` | One plan, with its actions, delays and what you can do with it | Any (whoever sees the plan) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_development_plan_team` | Your team: direct and indirect reports, with each one's status, progress and delays | Any (whoever leads) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_development_plan_dashboard` | The dashboard per direct leader | Any (the management team: the space; a leader: their team) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_development_plan` | Creates your plan, or a direct report's by name; `dry_run` shows who gets the e-mail | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_development_plan` | Changes title, period or actions; the person's change to an approved plan sends it back to approval | Any (the person and whoever approves) | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_development_plan` | Deletes a draft plan | Any (the person and whoever approves) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `submit_development_plan` | Sends your plan for approval | Any (the person) | <span class="tool-kind tool-kind-write">Changes</span> |
| `approve_development_plan` | Approves a waiting plan | Any (the direct leader, the owner or the admin) | <span class="tool-kind tool-kind-write">Changes</span> |
| `return_development_plan` | Returns a plan with a required note | Any (the direct leader, the owner or the admin) | <span class="tool-kind tool-kind-write">Changes</span> |
| `complete_development_plan` | Completes an approved plan | Any (the person and whoever approves) | <span class="tool-kind tool-kind-write">Changes</span> |
| `create_development_plan_action` | Adds an action, with a due date (`due_on`); `course_id` links a course | Any (the person and whoever approves) | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_development_plan_action` | Changes an action or only its progress (`status`: `TODO`, `IN_PROGRESS`, `DONE`); `course_id` links a course | Any (the person and whoever approves) | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_development_plan_action` | Removes an action from the plan | Any (the person and whoever approves) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `get_current_development_cycle` | The PDI cycle open for you, with the deadlines and where you stand | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_development_cycles` | The space's PDI cycles, open and closed | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_development_cycle` | One PDI cycle | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_development_cycle` | Opens the PDI cycle: name, deadlines, audience and reminders; `dry_run` shows it first | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_development_cycle` | Changes the cycle's name, deadlines, audience or reminders | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `close_development_cycle` | Closes the cycle and stops the reminders; it doesn't reopen | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `get_development_cycle_adhesion` | Who sent, got approved or is late in the cycle, per leader | Any (the team: the audience; a leader: their team) | <span class="tool-kind tool-kind-read">Read-only</span> |

**Create and send.** `create_development_plan` takes `title`, the period (`starts_on`, `ends_on`) and `actions` (each with `title`, optional `description` and `due_on`, as YYYY-MM-DD, in the community's time zone). Without `person`, the plan is yours, and nobody gets an e-mail until you call `submit_development_plan`. With `person` (a direct report's name, an id or an e-mail), the plan is for that person, who gets the notice by e-mail, without the content: use `dry_run` to show first who gets it. One active plan per person in each space.

**Decide.** `list_development_plans` with `scope: "to_approve"` lists the ones waiting for your decision; `approve_development_plan` approves and `return_development_plan` returns with `note` (required, up to 2,000 characters), which the person reads. The assistant never decides without your yes.

**Change an approved plan.** If the person changes the title, period or actions of an approved plan (`update_development_plan`, `create_development_plan_action`, `delete_development_plan_action`), it goes back to the leader for approval; the same change by whoever approves keeps it approved. Changing only an action's `status` never asks for a new approval.

**Several spaces.** The tools take `space_id`: optional with a single space, required with several. The space: [`create_space`](/mcp/ferramentas-comunidade#create-space) with `module: "developmentPlan"`.

**Recipe.** *Review my team's development plans* (`review_development_plans`) goes through the team, shows the waiting ones for you to approve or return and points out who has no plan and the overdue actions. See [Recipes](/mcp/receitas#80-review-my-team-s-development-plans).

**Ask like this:** *"Create my 2026 plan with three actions: communication course by 04/30, present at the all-hands by 06/30 and mentor an intern by 10/31. Then send it for approval."* · *"Which of my team's plans are waiting for my approval?"* · *"Mark the communication course action in my plan as done."*

**The company cycle.** `get_current_development_cycle` shows the cycle open for the connected person (leaders and the team see it too, even outside the audience; for everyone else, nothing, with a note). `list_development_cycles` and `get_development_cycle` belong to the owner, the admin and finance. `create_development_cycle` (owner and admin) takes `name`, `submit_by`, `approve_by` (YYYY-MM-DD, in the community's time zone), the audience (`audience` `ALL`, `GROUP` with `group_id` or `TAG` with `tag`) and `reminder_days` (up to 5 numbers from 0 to 60; the default is 7 and 1). Opening sends no e-mail right away, so it doesn't ask to confirm: use `dry_run: true` to show the cycle and the reminder rule first. `update_development_cycle` changes the cycle; `close_development_cycle` asks to confirm, because there's no reopening. `get_development_cycle_adhesion` gives the adhesion per leader (the team sees the audience; a leader, their team; others get the API's refusal). One open cycle per space.

**Action linked to a course.** `create_development_plan` (on each action), `create_development_plan_action` and `update_development_plan_action` take `course_id` (`null` unlinks); the action comes back with `course`, with the person's progress. A completed course marks the action as done. See [Development Plan › The company cycle](/espacos/pdi#the-company-cycle) and the recipe [Open the PDI cycle and follow the adhesion](/mcp/receitas#83-open-the-pdi-cycle-and-follow-the-adhesion).

**Ask like this:** *"Open the 2027 PDI cycle for everyone, sending by 11/30 and approval by 12/15. Show me first."* · *"Who on my team hasn't sent the cycle's plan yet?"*

## Performance review

The team (owner and admin) builds and runs the cycle; the reading and answering tools show up for every role, and Memberfy decides for each item who sees what: the leader, their own team; each person, their own reviews and their own result.

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `create_review_cycle` | Creates a draft cycle: 90°, 180° or 360° model, period reviewed, answering window, audience and questions | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_review_cycle` | Edits the cycle; once open, only title, instructions, closing date, reminders, rating rule and weights | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_review_cycle_questions` | Replaces the draft's questions | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_review_cycle` | Deletes a draft cycle | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `preview_review_cycle` | What opening creates: participants, reviews per relationship and who has no manager | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `open_review_cycle` | Opens the cycle and e-mails whoever has a review; refuses, with the names, while anyone has no manager | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `close_review_cycle` | Closes the cycle and calculates the ratings, for good | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `release_review_cycle_results` | Releases the results; first shows who gets the e-mail | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `send_review_reminders` | Sends the reminder to whoever has a review pending; the first call shows who gets it | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `add_review_assignment` | Adds a review to an open cycle | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `cancel_review_assignments` | Cancels a person's reviews (takes them out of the cycle) | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `list_review_cycles` | The cycles you can see, with the status | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_review_cycle` | One cycle, with the dates, the model and the questions | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_review_cycle_progress` | Progress per relationship and per person (the leader: their own team) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_review_cycle_assignments` | Who reviews whom in the cycle, per person, with status and dates, never the answers | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_review_cycle_results` | The results of the closed cycle (the leader: their own team) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_review_result` | One person's result in the cycle | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_my_review_result` | Your result, after the release | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_my_review_assignments` | The reviews you have to answer | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_review_assignment` | One of your reviews, with the questions and the saved answers | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `save_review_answers` | Saves answers to one of your reviews, without sending | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `submit_review_assignment` | Sends one of your reviews; it can't be edited afterwards | Any | <span class="tool-kind tool-kind-write">Changes</span> |

[`create_space`](/mcp/ferramentas-comunidade#create-space) takes `module: "performanceReview"`, with `mode` `multi` (several cycles) or `single` (one cycle). A review's answers don't go into the audit log, and who wrote a peer's or a direct report's review shows up in no tool.

**Ask like this:** *"Build the 2026 Review cycle, 180°, for the Technology group, with answers until December 15"*, *"Who still hasn't sent their reviews?"*, *"Which reviews do I have to answer?"*

**Scale of 2 to 10 levels**. `create_review_cycle` and `update_review_cycle` accept `scale_labels` with 2 to 10 distinct names, worst first, draft only (`null`: the five defaults); each level is worth its position (1 to N). In `save_review_answers`, `rating` goes from 1 to N, and so does `level` in calibration; the 9-box splits the scale into thirds.

**Numbers per cycle**. `list_review_cycles` returns, for the owner and the admin (`viewer_role` `team`), `stats` on each cycle: `participants` (people reviewed), `assignments_total`, `assignments_submitted` and `assignments_pending`, without the canceled reviews (completion is submitted ÷ total). `stats` is null on a draft and absent for leaders and participants.

**Who reviews whom**. `list_review_cycle_assignments`, owner and admin only, shows per person the reviews they receive and the ones they write: who reviews, the relationship, the status (not started, in progress, submitted) and the dates, never the answers. For every other role, the leader and the person included, peer and report anonymity holds. With the cycle open, it suggests `send_review_reminders`.

**Ask like this:** *"In the 2026 Review cycle, who still hasn't reviewed Ana?"*

### Peer nomination, calibration, 9-box and matrix

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `nominate_review_peers` | Nominates the peers who will review you, within the cycle's minimum and maximum | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `get_my_review_nominations` | Your nominations, with status and deadline | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_review_nominations` | The nominations to validate (a leader: their direct team's; owner and admin: all) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `approve_review_nomination` | Approves a nomination; the nominee gets the peer review | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `replace_review_nomination` | Swaps a nominee for another, already approved | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `remove_review_nomination` | Removes a nomination and cancels the peer review | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `finalize_review_nominations` | Ends nominations now: approves the pending ones and fills in from the hierarchy | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `get_review_calibration` | The closed cycle's calibration: how many at each level and the adjustment history | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `calibrate_review_result` | Adjusts a person's final level (and potential, with the 9-box), with a comment | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `get_review_nine_box` | The cycle's 9-box: performance × potential, with the people in each box | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_review_matrix` | The cycle's person × topic matrix, without comments | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `export_review_results_csv` | The results as CSV, one row per person | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_review_development_action` | Brings a point of the released result into the Development Plan as an action | Any | <span class="tool-kind tool-kind-write">Changes</span> |

**Ask like this:** *"Nominate Ana, Bruno and Carla as my peers in the 2026 cycle"*, *"Show the Technology team's 9-box"*, *"Take the communication point from my result into my Development Plan, due in March"*.

## Goals & OKRs

Cycles belong to the owner and the admin. The other tools show up for every role, and Memberfy decides for each objective, with the app's rules: a company objective belongs to the team; a group one, to the group's leader or a group above; a personal one, to the person themselves, their direct leader or the team; a restricted one only shows up for whoever can read it.

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `create_goal_cycle` | Creates a goals cycle (title, period and check-in reminder) | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_goal_cycle` | Edits the cycle | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `close_goal_cycle` | Closes the cycle, for good: check-ins and reminders stop | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `list_goal_cycles` | The goals cycles | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_goal_cycle` | One cycle, with what you can create in it | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_objectives` | The company → group → person tree, with a filter by group or owner | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_objective` | One objective, with the KRs, the progress and the status light | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_objective` | Creates an objective with 1 to 20 KRs (`parent_id` aligns it) | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_objective` | Edits title, description, visibility and alignment | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_objective` | Deletes the objective and its KRs | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `create_key_result` | Adds a KR: type (`direction`), unit, values, owner and weight | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_key_result` | Edits a KR | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_key_result` | Removes a KR and its check-ins | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `list_key_result_check_ins` | A KR's check-in history | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_key_result_check_in` | Records a check-in: current value (or delivered), status light and note | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `list_my_key_results` | Your KRs in open cycles; `pending_check_in` shows only the ones without a check-in in the period | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_review_assignment_objectives` | The goals of the period of whoever you review, in the self-review and in the manager's review | Any | <span class="tool-kind tool-kind-read">Read-only</span> |

`direction` is `increase`, `decrease`, `maintain` or `deliverable`. [`create_space`](/mcp/ferramentas-comunidade#create-space) takes `module: "goalsOkrs"`, with `mode` `multi` (several cycles) or `single` (one cycle).

**Ask like this:** *"Create the company objective Grow the community with quality, with the KR activation from 40% to 60%"*, *"Which of my KRs have no check-in?"*, *"Record 52% on activation, at risk."*

**OKR score**. `list_goal_cycles`, `list_objectives` and `get_objective` bring `score` (0 to 1; for an objective, the weighted average of its KRs; for the cycle, the average of its objectives) and `score_band`: `MET` (0.7 or more), `PARTIAL` (0.4 to 0.69) and `MISSED` (below 0.4). The cycle's `summary` counts KRs by those bands, plus those without a check-in.

**The current cycle**. `list_goal_cycles` returns `next_reminder_on` (the next day of the check-in reminder, in the community's time zone; today while the reminder's hour has not passed; null on a closed cycle, with the reminder off or no reminder day left in the period). On an open cycle, the `summary` also has `needs_check_in` (the KRs the person can read without a check-in in the reminder period), `my_key_results` and `my_needs_check_in` (their own KRs and their own still without a check-in; null on a closed cycle) and `top_objectives` (up to four objectives they can read, the non-aligned first, then company, group and personal: `id`, `title`, `level`, `key_results`, `progress`, `score`, `score_band` and `health`). With KRs of yours pending, it suggests `list_my_key_results` with `pending_check_in`.

## 1:1

They all show up for every role, and Memberfy decides: only the two participants read and change a series; the adherence belongs to the owner, the admin and the indirect leader; the owner and the admin also read every pair's 1:1s, read only. A private note that isn't the asker's never shows up in any answer, and the text of notes doesn't go into the audit log.

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `list_one_on_ones` | Your series, with the next meeting | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_one_on_one` | One series: next meetings, history and open agreements | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_one_on_one` | Starts a series with your direct leader or a direct report (the owner and the admin, between any direct pair) | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `pause_one_on_one` | Pauses the series | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `resume_one_on_one` | Resumes the series | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `end_one_on_one` | Ends the series, for good; the history stays | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `get_one_on_one_meeting` | One meeting: agenda, notes and agreements | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `reschedule_one_on_one_meeting` | Reschedules only this meeting | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `cancel_one_on_one_meeting` | Cancels only this meeting | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `complete_one_on_one_meeting` | Marks the meeting as done; topics not discussed move to the next one | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `add_one_on_one_topic` | Adds a topic to the agenda | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `reorder_one_on_one_topics` | Reorders the agenda | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_one_on_one_topic` | Edits a topic or marks it as discussed | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_one_on_one_topic` | Removes a topic from the agenda | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `add_one_on_one_note` | Writes a shared or private note | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_one_on_one_note` | Edits a note of yours | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_one_on_one_note` | Deletes a note of yours | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `create_one_on_one_action` | Creates an agreement, with an owner and a due date | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_one_on_one_action` | Edits an agreement or marks it as done | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_one_on_one_action` | Deletes an agreement | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `send_one_on_one_action_to_pdi` | Takes an agreement of the report to their Development Plan | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `get_one_on_one_adherence` | The adherence per leader: active and paused series, meetings done and canceled in 30 and 90 days | Any (owner, admin and indirect leader) | <span class="tool-kind tool-kind-read">Read-only</span> |

[`create_space`](/mcp/ferramentas-comunidade#create-space) takes `module: "oneOnOnes"`.

You can also log the 1:1 that happened and read the history by person; and the owner and the admin read every pair's 1:1s, read only (a write of theirs in someone else's pair comes back as `observer_read_only`). No answer carries someone else's private note, and logged topics, notes and agreements stay out of the audit log.

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `log_one_on_one` | Logs a 1:1 with your direct leader or a direct report: date (today or before, done; later, scheduled, with no invite), length, topics, shared note, private note and agreements. No e-mail: the other person gets the notice in the bell | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `update_one_on_one_log` | Changes the date, time or length of a 1:1 you logged | Any (whoever logged it) | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_one_on_one_log` | Deletes a 1:1 you logged; open agreements stay | Any (whoever logged it) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `list_one_on_one_pairs` | Your 1:1s by person: last, next and open agreements. With `all`, every pair in the community, read only | Any (`all`: owner and admin) | <span class="tool-kind tool-kind-read">Read-only</span> |

`get_one_on_one` also takes `person` (your whole pair history with that person, logged and from the series) and `person` with `with_person` (the pair between two people, for the owner and the admin, read only).

`get_one_on_one_dashboard` (read-only, any role; the API decides) returns the 1:1 space's **Manage** dashboard, numbers and dates only: adherence, 1:1s held, overdue pairs and pairs that never met, open and past-due agreements and the average time between 1:1s, each with the previous period (none for `all`); 1:1s per week (per month past 6 months), adherence by leader and by team, and every pair with its status (`onTrack`, `late`, `never`, `history`). `period`: `all` (default), `30`, `90` or `quarter`; `leader_id` and `team_id` narrow everything. The owner and the admin see the community; whoever leads someone, their own tree; whoever leads nobody is refused. `get_one_on_one_adherence` also returns `allTime`. See [1:1 · Manage](/espacos/1-1#manage-the-1-1-dashboard).

**Ask like this:** *"Log the 1:1 I just had with Ana"*, *"When was my last 1:1 with Bruno and what did we agree?"* See [recipe 92](/mcp/receitas#92-log-the-1-1-you-just-had).

**Ask like this:** *"When is my next 1:1 and what's on the agenda?"*, *"Add 'vacation plan' to the agenda of the 1:1 with Maria"*, *"Take the English course agreement to her Development Plan."*

## Time tracking

The working-hours record in the [Time Tracking](/espacos/controle-de-ponto) space. There are 38 tools: 20 for the **time tracking management** (owner, admin and finance), three only for the owner and the admin (reopening a month and setting or removing the allowed radius) and 15 for every role, where Memberfy decides at that moment who reads and who acts: the person sees what is theirs, the direct and indirect leaders see the team, the management team sees everyone; for everyone else, the punch or the timesheet comes back as not found.

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `get_time_clock` | The server time that counts for the punch, with the community's time zone | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_time_tracking_space` | The space as you see it: establishment, your employee record, whether you can clock in and whom to ask | Any (whoever opens the space) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_time_establishment_prefill` | Suggests the establishment from the community's company details | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_time_establishments` | The community's establishments and each one's spaces | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_time_establishment` | One establishment, with its spaces | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_time_establishment` | Registers the employer (CNPJ or CPF, CEI/CAEPF/CNO, legal name, workplace) | Admin or finance | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_time_establishment` | Changes the employer's details; every change stays in the record | Admin or finance | <span class="tool-kind tool-kind-write">Changes</span> |
| `export_time_afd` | Generates an establishment's AFD for a period, with the `.sha256`; 5-minute links | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| `set_time_tracking_space_establishment` | Links the time tracking space to the establishment | Admin or finance | <span class="tool-kind tool-kind-write">Changes</span> |
| `list_time_tracking_space_people` | Who opens the space and who doesn't have an employee record yet | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_time_employees` | An establishment's employee records | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_time_employee` | Registers a person as an employee (CPF, hire date, job title) | Admin or finance | <span class="tool-kind tool-kind-write">Changes</span> |
| `update_time_employee` | Changes an employee record | Admin or finance | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_time_employee` | Ends a record; the punches already made are kept | Admin or finance | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `list_time_punches` | The punches (`scope`: `mine`, `team`, `all`), with NSR, hash, IP and location and the outside-the-radius badge (`outsideRadius`) | Any (the API decides) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_time_punch` | One punch, with the receipt's details | Any (whoever sees the punch) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_time_punch_receipt` | The punch receipt as a PDF, in a 5-minute link | Any (whoever sees the punch) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_time_rules` | The space's rules: the defaults, the ones in effect and the versions | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_time_rules` | Saves a new version of the rules, for the space or a person's exception, with the start date | Admin or finance | <span class="tool-kind tool-kind-write">Changes</span> |
| `list_time_holidays` | The year's holidays: the national ones and the community's | Any (whoever opens the space) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_time_holiday` | Adds a community holiday | Admin or finance | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_time_holiday` | Removes a holiday; a removed national holiday doesn't come back | Admin or finance | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `list_time_adjustments` | The adjustments (`scope`: `mine`, `to_decide`, `team`, `all`), filtered by status and month | Any (the API decides) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_time_adjustment` | One adjustment, with the reason and the decision | Any (whoever sees the adjustment) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `create_time_adjustment` | Requests an adjustment to your time record: include (`add`, with the time) or disregard (`disregard`, with the punch), with the reason | Any (the employee) | <span class="tool-kind tool-kind-write">Changes</span> |
| `decide_time_adjustment` | Approves or rejects an adjustment (rejecting with a note); notifies the person by e-mail | Any (the direct leader; without a leader, the management team) | <span class="tool-kind tool-kind-write">Changes</span> |
| `cancel_time_adjustment` | Cancels your adjustment request that is still waiting | Any (whoever requested it) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `get_timesheet` | A person's monthly timesheet | Any (the person, the leaders and the management team) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_timesheets` | The month's totals per person (`scope`: `team`, `all`) | Any (the API decides) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_timesheet_months` | The closed and reopened months, with the history | Any (whoever opens the space) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `close_timesheet_month` | Closes the month and freezes the totals; each employee gets an e-mail | Admin or finance | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `reopen_timesheet_month` | Reopens a closed month, with the reason | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `acknowledge_timesheet_month` | Acknowledges your timesheet for a closed month | Any (the employee) | <span class="tool-kind tool-kind-write">Changes</span> |
| `export_timesheet_csv` | Exports the month as CSV, in a 5-minute link | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| `export_time_aej` | Generates an establishment's AEJ for a period, with the `.sha256`; 5-minute links | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |
| `set_time_tracking_geofence` | Sets the time tracking space's allowed radius: place, radius and mode (block or flag) | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `remove_time_tracking_geofence` | Removes the allowed radius; no punch is refused or flagged | Admin | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `list_time_geofence_refusals` | The punch attempts refused by the radius, with the distance | Admin or finance | <span class="tool-kind tool-kind-read">Read-only</span> |

**The assistant doesn't clock in.** There is no tool to clock in/out or to accept the IP and location notice: punching is the person's own act, in the app, on the **Clock in/out** tab. If you ask, the assistant explains this and points to the app. It looks up the punches, the receipts (with the PDF link), the timesheet and the adjustments, requests adjustments and acknowledges.

**Set up.** `create_space` with `module: "timeTracking"` creates the space; `get_time_establishment_prefill` suggests the employer from the company details; `create_time_establishment` saves it (with `responsible_cpf`, the CPF of whoever registers, when you have no employee record; the assistant asks, never makes one up); `set_time_tracking_space_establishment` links the two; `list_time_tracking_space_people` shows who still needs a record, and `create_time_employee` takes the person (name, id or e-mail), `cpf`, `admission_date` and `job_title`.

**Rules.** `create_time_rules` saves a new version from `effective_from`, for the space or, with `person`, a person's exception. By default it merges what you give into the rule in effect; with `replace: true`, whatever is missing goes back to the default. Weekdays go by name; `overtime.destination` is `paid` or `bank`, `hour_bank.validity_months` goes up to 12, `night` has `enabled` (on by default) and `reduced_hour`, and `weekly_rest_day` goes from 0 (Sunday) to 6, or `null` for none.

**Adjustments.** `create_time_adjustment` is always for your own time record: `type: "add"` with `time` (YYYY-MM-DDThh:mm, never in the future) or `type: "disregard"` with `target_punch_id`, and `reason`. `decide_time_adjustment` approves (`approve`) or rejects (`reject`, with `note`): only the person's direct leader or, for people without a leader, the management team; the sole owner decides their own and the adjustment comes back with `selfDecided: true`. The decision notifies the person by e-mail and runs on the first call. Reasons and notes stay out of the log of what the assistant does.

**Timesheet and files.** `get_timesheet` brings a person's month (`month`, `person`), with the totals, the flags, night work (`night`, `nightMinutes`) and the hour bank (`hourBank`, with the batches and their expiry); a closed month comes back with `frozen: true`. `export_timesheet_csv`, `export_time_afd` and `export_time_aej` return private links that work for 5 minutes (for the AFD and the AEJ, also the `.sha256` one): the assistant passes them on right away. CPF, IP, location and links never go into the log of what the assistant does.

**Confirmations.** These ask for your yes to a summary: `delete_time_employee`, `delete_time_holiday`, `cancel_time_adjustment`, `reopen_timesheet_month` (with the reason) and `close_timesheet_month`, which works like a bulk send: the summary says how many people get the e-mail (up to 10 names) and how many adjustments are still waiting for a decision.

**Several spaces.** The tools take `space_id`: optional with a single time tracking space, required with several. The AFD and AEJ files are per establishment (`establishment_id`; without it, the only one).

**Recipes.** *Set up time tracking* (`set_up_time_tracking`) creates the space, registers and links the establishment and registers the employees, asking you for each one's CPF, hire date and job title. *Close the time tracking month* (`close_time_tracking_month`) decides the pending adjustments with you, shows the totals and the flags, closes the month after your yes and exports the CSV. See [Recipes](/mcp/receitas#81-set-up-time-tracking).

**Ask like this:** *"Who still has no employee record in Time tracking?"* · *"Show me my September timesheet."* · *"Request to include my punch-out yesterday at 6 p.m.: I forgot to punch."* · *"Close September in time tracking and export the CSV."*

**Allowed radius.** `set_time_tracking_geofence` (owner and admin) saves on the space the place (`latitude`, `longitude`), `radius_meters` (10 to 50,000), `mode` (`BLOCK` refuses outside the radius or without a location; `FLAG` records with the badge) and an optional `address`, which is only a label; the assistant asks for the coordinates and never makes them up. `remove_time_tracking_geofence` asks to confirm. `list_time_geofence_refusals` (time tracking management) lists the refused attempts, which aren't punches. `get_time_tracking_space` brings `fence_note`, which explains the mode and the radius to whoever is about to punch, and `list_time_punches` brings `outsideRadius` and the distance. The assistant still doesn't clock in. The rule is the company's: see [Time Tracking › Allowed radius](/espacos/controle-de-ponto#allowed-radius-virtual-fence) and the recipe [Set the radius for clocking in](/mcp/receitas#85-set-the-radius-for-clocking-in).

## Messages

The 1:1 chat of the [Messages](/membros/mensagens) panel. The assistant reads and writes **only the connected person's own conversations**: other people's conversations come back as not found for every role, owner and admin included. With the chat turned off in the community, the tools return the API's refusal.

| Tool | What it does | Minimum role | Type |
|---|---|---|---|
| `get_my_chat_preferences` | Your chat preferences: your status (Available, Busy or Unavailable), show when I've read, whether you can start conversations and your unread messages | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `update_my_chat_preferences` | Changes your chat status (Available, Busy or Unavailable) and turns Read receipts on or off | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `list_chat_online_members` | Who is available and online now, with each person's status (Available, Away or Busy; only for someone who is available too) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_chat_conversations` | Your conversations, with the last message and the unread count | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_chat_conversation` | One of your conversations, with its messages, newest first | Any (only the two people) | <span class="tool-kind tool-kind-read">Read-only</span> |
| `send_chat_message` | Sends a message in a conversation or to a person, opening the conversation if there is none | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `contact_team` | Opens (or reuses) the conversation with someone on the team about a padlocked section or space only the team can open; sends nothing | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `mark_chat_conversation_read` | Marks one of your conversations as read | Any (only the two people) | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_chat_message` | Deletes one of your messages: it becomes "message deleted" for both | Any (only the author) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `clear_chat_history` | Clears a conversation's history for you only: the messages so far disappear for you, the other person still sees everything; nothing is deleted | Any (only the two people) | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `list_chat_blocks` | The people you blocked | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `block_chat_member` | Blocks a person in the chat; nobody is told | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `unblock_chat_member` | Undoes your block; the conversation stays saved | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `get_chat_settings` | Whether the chat is on in the community and who can start conversations | Admin | <span class="tool-kind tool-kind-read">Read-only</span> |
| `update_chat_settings` | Turns the chat on or off, chooses who can start and whether people must add each other first | Admin | <span class="tool-kind tool-kind-write">Changes</span> |
| `list_chat_members` | The People panel: who is available to chat, online first, with search by name (only for someone who is available too) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_chat_connections` | Your accepted connections in this community | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `list_chat_connection_requests` | Pending connection requests, received (`incoming`) or sent (`outgoing`) | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `request_chat_connection` | Asks a person to connect; if they had already asked, the connection is accepted at once | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `accept_chat_connection` | Accepts a connection request you received | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `decline_chat_connection` | Declines a request you received, without telling the person who asked | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `remove_chat_connection` | Cancels your request or ends a connection | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |
| `send_member_notice` | Sends a bell notice to up to 100 people (ids, e-mails or profile links), with a title of up to 120 characters and a text of up to 500; sends no e-mail and runs on the first call | Moderator | <span class="tool-kind tool-kind-write">Changes</span> |
| `list_notifications` | Your notifications in this community (the bell), with unread and type filters | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `get_notification` | One of your notifications | Any | <span class="tool-kind tool-kind-read">Read-only</span> |
| `mark_notifications_read` | Marks one notification, or all, as read | Any | <span class="tool-kind tool-kind-write">Changes</span> |
| `delete_notification` | Removes a notification from your list; what it announced stays | Any | <span class="tool-kind tool-kind-confirm">Asks to confirm</span> |

**Preferences.** `update_my_chat_preferences` takes `available_to_chat` and `read_receipts`, each optional. Available: the person shows in **Online now** while the app is open and others can start a conversation with them; unavailable: no new conversations and no notices, but existing conversations stay and can be answered. `get_my_chat_preferences` also says whether the person can start conversations (`canStart`) and, if not, why (`teamOnly`, `paidOnly`).

**The chat status.** `update_my_chat_preferences` takes `status`: `available`, `busy` (Busy: gets everything, new conversations and e-mail included, but without sound and without the window popping open) or `unavailable` (the same as `available_to_chat: false`). Prefer `status`: an `available_to_chat` that contradicts it in the same call is refused and nothing changes. **Away** cannot be chosen; it is automatic. `get_my_chat_preferences` returns `chatStatus`, the chosen status (never `AWAY`), and, when Busy, suggests going back to Available. `list_chat_online_members` returns each person's `status`: `AVAILABLE`, `BUSY` or `AWAY` (yellow, automatic after about 10 minutes with every tab of theirs idle); someone busy or away still gets the message and the e-mail, they may just answer later. Any role, your own status only, no confirmation. See [Your chat status](/membros/mensagens#your-chat-status) and recipes [109](/mcp/receitas#109-set-me-to-busy) and [110](/mcp/receitas#110-who-is-online-and-who-is-busy).

`update_my_chat_preferences` takes `show_last_seen` (**Show when I was last online**, on by default) and `get_my_chat_preferences` shows it. It is reciprocal: off, nobody sees when you were last online, and you don't see other people's either. Any role, no confirmation.

**Who is online.** `list_chat_online_members` only works for someone who is available (otherwise, the API's refusal) and never lists anyone unavailable or anyone blocked either way. Someone available but out of the app still gets messages: `send_chat_message` with `to`.

**Reading.** `get_chat_conversation` returns the messages newest first (`limit` up to 100; for older ones, `before` with the `next_cursor`). A deleted message comes with `deleted: true` and no text. Reading does not mark it read: `mark_chat_conversation_read` does (the "Seen" only shows when both people turned on **Read receipts**).

**Sending.** `send_chat_message` takes `conversation_id` or `to` (the person's id, name, e-mail or app link) and the text, 1 to 4,000 characters. **It asks to confirm**: the first call returns a summary with the recipient and the length, **never the text**; the assistant shows it and repeats with the `confirmation_token` only after your yes. A new conversation needs the other person available, no block and the rule on who can start; replying to an existing conversation is always allowed unless there is a block. The text never goes into the log of what the assistant does.

**Talking to the team.** `contact_team` takes `space_id` or `section_id` (one of the two) of a padlocked area whose refusal carries `can_contact_team: true` (closed by group, or with nothing on sale). It opens or reuses the direct conversation with whoever answers (the first admin online, then the first moderator online; with nobody online, the owner; never finance) and returns the conversation, with who answers in `other`. **No confirmation**: it sends nothing and notifies nobody. The request then goes with `send_chat_message` and the `conversation_id`, which asks for confirmation. It ignores the who-can-start rule; a new conversation counts toward the new-conversations limit. Refusals: `contactTeamNotAllowed` (the area isn't padlocked for that person), `teamUnavailable` (nobody on the team available) and `disabled` (chat off). See [recipe 97](/mcp/receitas#97-ask-for-access-to-a-padlocked-area).

**Deleting and blocking.** `delete_chat_message` asks to confirm and only works for the author. `block_chat_member` is personal: nobody is told and nobody reads anything; `unblock_chat_member` undoes it.

**For the team.** `get_chat_settings` and `update_chat_settings` (owner and admin): `enabled` turns the chat on or off, `who_can_start` picks `EVERYONE`, `PAID_MEMBERS` or `TEAM`, and `start_mode` picks `FREE` (**Open**) or `CONNECTION` (**Add first**). No tool reads another person's conversation.

**Clearing the history.** `clear_chat_history` (with `conversation_id`) **asks to confirm** and works only for the two people in the conversation, in any mode and even with a block: the messages up to then stop showing for whoever cleared, nothing is deleted and the other person is not told. Conversations carry `clearedAt`.

**People and connections.** `list_chat_members` is the **People** panel: only people who are available, online first, with `q` (name) and `cursor`; it works only for someone who is available too. With **Add first** (`start_mode: CONNECTION` in `update_chat_settings`), a new conversation and a new message need an accepted connection: `request_chat_connection` (with `person`: id, name, e-mail or app link) asks, and accepts at once if the person had already asked; `list_chat_connection_requests` with `direction` (`incoming` or `outgoing`) shows the pending ones; `accept_chat_connection` and `decline_chat_connection` answer (declining tells nobody, and the person who asked keeps seeing the request as sent); `remove_chat_connection` cancels your request or ends the connection and **asks to confirm**. `get_member` returns `connection` and `limited: true` when you see only the profile card. `update_my_chat_preferences` also takes `availability_notice_seen`, which closes the first-time hint.

**Notifications.** `list_notifications` lists your notifications in this community (the bell), with `unread`, `type` (for example `chat.connectionRequested`) and `cursor`; `get_notification` returns one; `mark_notifications_read` marks one (`notification_id`) or, without it, all; `delete_notification` removes one from the list and **asks to confirm** (a connection request stays pending: decline it with `decline_chat_connection`). Each person sees only their own.

**Recipes.** [See my unread messages](/mcp/receitas#86-see-my-unread-messages), [Write to someone](/mcp/receitas#87-write-to-someone) and [See who asked to connect and accept](/mcp/receitas#88-see-who-asked-to-connect-and-accept).

**Ask like this:** *"Do I have unread messages? Show me the conversations."* · *"Write to Ana: I'll be at the meeting at 3 pm."* · *"Make me available to chat."* · *"Who asked to connect with me? Accept Bruno."*

**Messages.** Browser and phone notifications: `get_my_push_preferences`, `update_my_push_preferences`, `list_my_push_devices`, `remove_my_push_device` (asks to confirm) and `send_test_push`. The categories are `chat`, `channels`, `team_notices` (Team notices, on by default), `one_on_ones`, `upvotes`, `achievements`, `workflows` and `signup_requests` (owner and admin). See [Browser and phone notifications](/conceitos/notificacoes-no-navegador#through-the-assistant-mcp).

## Welcome and First steps

The first-access [welcome](/membros/boas-vindas) and the **First steps** missions, for the owner and the admin.

## `get_welcome_settings`

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

**The welcome and the First steps.** How the welcome is set: on or off, the mode (`required`: every new person goes through it before entering; `skippable`: they may skip), whether it applies to existing members, the screens (1 to 5: title, text, video, rules, fields) and the numbers (completed, skipped, pending). For the First steps: on or off, the missions (1 to 6: complete the profile, first post in a space, answer a form, register for an event, complete a course, each with points and a badge), the final badge and each mission's numbers. The team never goes through the welcome. *Minimum role: admin.*

Parameters: none.

**Ask like this:** *"How many people have not finished the welcome yet?"*

**Notes:** who is pending: [`list_members`](#list-members) with `welcome: pending`.

## `update_welcome_settings`

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

**Change the welcome.** Partial: what is left out stays. `screens` and `missions` **replace** the saved lists, so the assistant reads `get_welcome_settings` first and sends each kept screen and mission with its id (a mission sent back with its id, kind and item keeps who already did it; without the id it starts from zero). Turning it on needs at least one screen; `mode: required` locks the community until the person finishes. Always asks to confirm: the summary shows what is on, what changes, a warning when the welcome is about to be turned on and the missions that lose their progress. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `enabled` | true/false | No | Turns the welcome on or off |
| `mode` | `required` or `skippable` | No | Required or Can skip |
| `apply_to_existing` | true/false | No | When turning it on: existing members also go through it (default: no) |
| `screens` | list, 1 to 5 | No | The screens, in order: `title`, `body`, `video_url` (YouTube, Vimeo or Loom) or `video_media_id` (an uploaded video, the only one with `require_video_finish`), `rules_text`, `field_ids` |
| `missions_enabled` | true/false | No | Turns the First steps on or off |
| `missions_show_existing` | true/false | No | Existing members also see the card |
| `missions` | list, 1 to 6 | No | The missions, in order: `kind`, `title`, the item (`space_id`, `form_id`, `event_id`, `course_id`), `points`, `badge_id` |
| `final_badge_id` | id | No | The badge for whoever completes them all; `null` removes it |

**Ask like this:** *"Turn on a required welcome with a rules screen and the mission of introducing yourself in the Introductions space, worth 20 points."*

**Notes:** errors come back field by field (`screens[0].title`, `missions[1].form_id`…).

## Member referrals

[Member referrals](/membros/indicacao-de-membros): each member's link, the report of who brought whom and turning it on or off. None asks to confirm.

## `get_my_referral`

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

**Your referral link.** Your referral link (the community address with `?ref=` and your code), to share, and how many people joined through it. The code is made on the first read. With referrals off, `enabled` is false and there is no link. Whoever opens the link and joins (or has their signup request approved) within 30 days counts once. *Minimum role: any.*

Parameters: none.

**Ask like this:** *"What is my referral link, and how many people have I brought?"*

## `get_referral_report`

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

**Referral report.** Who brought new people through the links, one line per person, most referrals first: name, photo, whether they are still in the community, how many they referred and the latest; the totals and pagination. *Minimum role: moderator (not finance).*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `from` | date `YYYY-MM-DD` | No | First day the referred person joined |
| `to` | date `YYYY-MM-DD` | No | Last day (inclusive) |
| `page` | number | No |  |
| `limit` | number, up to 100 | No |  |

**Ask like this:** *"Who brought the most new members in October?"*

**Notes:** who referred a given member is in [`get_member`](#get-member) (`referredBy`).

## `get_referral_settings`

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

**Are referrals on?.** Whether the community has referrals on (`enabled`). *Minimum role: admin.*

Parameters: none.

**Ask like this:** *"Are member referrals on?"*

## `update_referral_settings`

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

**Turn referrals on.** Turns referrals on or off, without confirmation. On: every member gets a link ([`get_my_referral`](#get-my-referral)), and whoever joins through it counts for the referrer (points for the **Refer a member** action, badge rules, the workflows' **Referred someone** trigger). Off: links stop counting; what was already counted stays. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `enabled` | true/false | Yes |  |

**Ask like this:** *"Turn on member referrals."*

## Privacy

Each person's requests about their own data: [download your data](/membros/baixar-seus-dados), [delete your account](/membros/excluir-sua-conta) and, for the team, [handle an erasure request](/membros/atender-um-pedido-de-exclusao). Every tool that exports or deletes asks for confirmation.

## `get_my_data_export`

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

**Your data export.** The latest export of your data in this community: the status (`queued` being built, `ready` until `expires_at`, 72 hours, `failed`, `refused`, `expired`), who asked for it (you, or the team at your request), `can_request` and `next_available_at` (one request at a time; a new one only 24 hours after the last one that did not fail). When it is ready, `delivery_note` says the link is in your e-mail: the assistant never hands over the file. *Minimum role: any.*

Parameters: none.

**Ask like this:** *"Is my data file ready yet?"*

## `export_my_data`

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

**Export my data.** Asks for a ZIP with everything the community keeps about you (profile, consents, purchases, subscriptions, registrations, posts, messages, forms, attendance, certificates, points, courses, activity and the files you uploaded). Through the assistant, no password is asked; that is why **the link goes to your e-mail only**, never through the conversation, and you download it by signing in with your account. The file lasts 72 hours. *Minimum role: any.*

Parameters: none (only the confirmation code, on the second call).

**Returns:** on the first call, the summary and the confirmation code; on the second, the request as `queued`. With an export being built, `export_in_progress`; before the 24 hours, `export_too_soon` with `next_available_at`.

**Ask like this:** *"Export my data from this community."*

**Notes:** only for the connected person. For someone else, the team uses [`export_member_data`](#export-member-data). See [Download your data](/membros/baixar-seus-dados).

## `export_member_data`

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

**Export a member's data.** Asks, at the person's own request, for the same ZIP as `export_my_data`. **The link goes to the member's e-mail**, and only they can download it: the team never gets the file. Only on a role below yours (the admin on moderator, finance and member; the owner also on the admin). *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `member` | text | Yes | The id (from `list_members`), e-mail, name or link of the member |
| `reason` | text, 3 to 1,000 | Yes | Where the request came from; goes to the [Logs](/membros/registros-de-atividades) |

**Ask like this:** *"Maria (maria\@memberfy.net) asked for her data by e-mail today. Generate the export."*

**Notes:** the same one-at-a-time and 24-hour rules. For your own data, use [`export_my_data`](#export-my-data).

## `get_my_account_deletion`

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

**Your deletion request.** Your request to delete your account in this community, or nothing: the source (you, or the team at your request), `scheduled_at` (the effective date) and `paid_until`. *Minimum role: any.*

Parameters: none.

**Ask like this:** *"When will my account be deleted?"*

## `delete_my_account`

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

**Delete my account.** Requests the deletion of your account in this community. The first call, without a password, returns the summary (the effective date, which is the later of 30 days and the end of the period already paid; subscriptions stop renewing, with no refund) and the confirmation code; the second carries the code and **your password**, which is never stored nor shown in the assistant's log. *Minimum role: any, except the owner.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `password` | text | On confirmation | Your password, asked after the summary |
| `reason` | text, up to 1,000 | No | Why you are leaving |

**Ask like this:** *"I want to delete my account in this community."*

**Notes:** **the request disconnects the assistant**: the person's AI assistant connections and API keys are turned off, this one included. To cancel before the date, use the e-mail link, the app or [`cancel_my_account_deletion`](#cancel-my-account-deletion) from a new connection. The owner cannot delete their account while the community exists. Without a password, the team handles it with [`erase_member_data`](#erase-member-data). See [Delete your account](/membros/excluir-sua-conta).

## `cancel_my_account_deletion`

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

**Cancel the deletion.** Cancels your deletion request before the effective date: everything goes back as it was, subscriptions included. The assistant connections and API keys turned off by the request do not come back on their own. A deletion done by the team cannot be canceled. *Minimum role: any.*

Parameters: none (only the confirmation code, on the second call).

**Ask like this:** *"I changed my mind: cancel the deletion of my account."*

## `erase_member_data`

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

**Erase a member's data.** Handles a member's erasure request, including someone without a password. **There is no period to change your mind** and it cannot be undone: subscriptions stop renewing, and the member's sessions, assistant connections and API keys end right away; afterwards, the profile is anonymized. Only on a role below yours, never the owner. *Minimum role: admin.*

| Parameter | Type | Required | Description |
|---|---|---|---|
| `member` | text | Yes | The id (from `list_members`), e-mail, name or link of the member |
| `reason` | text, 3 to 1,000 | Yes | Where the request came from; goes to the [Logs](/membros/registros-de-atividades) |

**Ask like this:** *"Bruno (bruno\@memberfy.net) asked us by e-mail to erase his data. Handle the request."*

**Notes:** confirm the identity of whoever asks first. See [Handle an erasure request](/membros/atender-um-pedido-de-exclusao).

## Related

- [Import members from a spreadsheet](/membros/importar-membros)
- [Custom fields](/membros/campos-customizados)
- [Messages](/membros/mensagens)
- [Tools](/mcp/ferramentas)
- [Recipes](/mcp/receitas)
- [Money and confirmation](/mcp/dinheiro-e-confirmacao)
