Tools · Community and structure
MCP tools for the community's structure: the connection's context, sections and spaces, opening a link copied from the app, creating, editing, reordering and deleting sections and spaces, who sees each one, moving a space to another section, the community settings (including the language), the e-mail for sale notices and the API keys.
The starting point of every conversation and the shape of the community: which community and role the assistant is in, which sections and spaces exist, and creating, reordering, adjusting or deleting that structure, including who sees each space. This is also where the assistant understands a link you paste into the conversation, and where it views and changes the community settings (name, colors, logo, SEO, language and entry rules) and the e-mail that receives sale notices.
Each tool carries a badge: Read-only changes nothing, Changes creates or changes something right away, and Asks to confirm only acts after your yes to a summary. See Money and confirmation.
In short
| Tool | What it does | Minimum role | Type |
|---|---|---|---|
get_community_context | Community, role, sections and spaces with ids: the starting point | Any | Read-only |
get_connection_diagnostics | Whether the assistant's tool list is up to date | Admin | Read-only |
list_spaces | Sections and spaces, filterable by module | Any | Read-only |
list_space_updates | What is new in your spaces since your last visit | Any | Read-only |
open_link | Says what a link copied from the app (or an id) is | Any | Read-only |
create_section | Creates a menu section | Admin | Changes |
create_space | Creates a space in a section | Admin | Changes |
update_space | Changes a space's name, description, icon or visibility, or moves it to another section | Admin | Changes |
update_section | Changes a section's name, description or icon, what whoever has no access sees, or makes it the home section | Admin | Changes |
reorder_sections | Puts the menu sections in a new order | Admin | Changes |
reorder_spaces | Puts a section's spaces in a new order | Admin | Changes |
get_space_access | Who gets into a space or a section: groups, products, plans and badges | Team | Read-only |
update_space_access | Who sees a space or a section, and who posts in the space | Admin | Changes |
delete_section | Deletes an empty section | Admin | Asks to confirm |
delete_space | Deletes a space | Admin | Asks to confirm |
get_community_settings | The community's settings: name, colors, images, SEO, language, entry | Admin | Read-only |
update_community_settings | Changes name, logo, favicon, SEO, language and entry rules (the colors belong to the theme) | Admin | Changes |
update_community_appearance | Changes the logo for dark backgrounds (the mode and the menu belong to the theme) | Admin | Asks to confirm |
get_notification_settings | The e-mail that receives sale notices and the recovery e-mail | Admin | Read-only |
update_notification_settings | Changes the sale notices e-mail and turns the recovery e-mail on or off | Admin | Changes |
get_email_stats | The delivery numbers of the community's e-mails | Admin | Read-only |
list_integrations | Your API keys (owner and admin: the whole community's, the webhooks and the ready-made integrations), without secrets | Any | Read-only |
get_email_notice_recipient_count | How many people will get the e-mail notice of a publication | Moderator or finance | Read-only |
get_email_provider | Whether e-mails leave through the community's Resend account, the status and the sender | Admin | Read-only |
update_email_provider | Changes the sender of the Resend account | Admin | Changes |
verify_email_provider | Sends the Resend account's verification e-mail | Admin | Changes |
disconnect_email_provider | Disconnects the Resend account; everything leaves through Memberfy again | Admin | Asks to confirm |
list_video_keys | The Bunny and Cloudflare signing keys, without the value | Admin | Read-only |
update_video_key | Saves or replaces a video provider's signing key | Admin | Changes |
verify_video_key | Checks the key with one of the provider's videos | Admin | Changes |
delete_video_key | Deletes a video provider's signing key | Admin | Asks to confirm |
get_community_context
Read-only
Community context. The starting point: says which community the connection is in, with which role, and lists the sections and spaces with their ids. Minimum role: any.
Parameters: none.
Returns: the community (id, name, address), you (role and name), the connection's scopes (read, write), the sections (id, title, whether it's the home section, visibility) with each section's spaces (id, title, module, visibility; the padlock as in list_spaces), the order in which things need to be created, the icons available for spaces (available_icons, with what each one is for) and member_entry: whether Memberfy has suspended joining and sales for the community (for the team, also the reason and the date). See Suspension of joining and sales.
Ask like this: "Which community are you connected to, and with what role?" · "What spaces does the community have?"
Notes: assistants usually call this tool on their own at the start of each conversation. The creation order it returns is the same as in Creation order.
list_spaces
Read-only
List sections and spaces. The sections and spaces, with id, module and visibility, filterable by module. Minimum role: any; each person sees what they can see. Each space carries layout, the display (null is the module's default).
| Parameter | Type | Required | Description |
|---|---|---|---|
module | text | No | feed, content, courses, events, storefront, gallery… Returns only the sections that have spaces of that module |
Returns: the sections with their spaces, as in get_community_context. A Courses space carries its mode (single or multi). A Feed space carries its feed_scope (space or section) and feed_widgets, with the default filled in.
With For those without access, a section or space the person can't open, but sees with a padlock, comes with locked: true and lock_reason (signIn, plan, product, subscription or group, never the group's name). The team also sees locked_display (what whoever has no access sees) and admin_only (true: only the team gets in). The assistant never picks a padlocked space to post or act in; when it opens one, it gives the reason and offers the way in: the Store (list_spaces with module: storefront) for a purchase, or the plans (quote_plan_change) for a subscription. In an area closed by group (or with nothing on sale), the refusal carries can_contact_team; when true, the assistant offers contact_team, which opens the conversation with the team, and then send_chat_message with the request (see recipe 97). When the way in is a plan and the area names no specific plan, the refusal says "Any paid plan opens it: see the community plans."
In an area closed by a badge, the refusal carries the earnBadge action, badges (public ones only, with the description of how to earn them) and has_hidden_badge; the assistant says "Earning the badge Mentor opens it" or, when the badge is private, "Earning a badge opens it: ask the community team how."
In an area closed by a level, the refusal carries the earnPoints action, level and, for a member, progress (the points, points_to_go and what is missing this week); the assistant says the level, the points to go and the week's missing activity, and suggests get_level_progress. A visitor gets only the level.
Ask like this: "Which one is the courses space?" · "List the event spaces."
list_space_updates
Read-only
List what is new in my spaces. For each Feed, Content and Events space you open, how many new items arrived since your last visit to it (other people's posts in Feed and Content, published events in Events), with the sum per section and the total. They are the same numbers as the menu badges. Minimum role: any.
| Parameter | Type | Required | Description |
|---|---|---|---|
include_zero | yes or no | No | true also lists the spaces with nothing new (count 0) |
Returns: the spaces with news, most first, each with space_id, title, section_id, section_title, module, count and last_visit_at (null: never opened); the sums per section and the total. A space you cannot open never appears.
Ask like this: "What is new in my spaces?" → list_space_updates {} · "And the ones that are up to date?" → list_space_updates {"include_zero": true}
Notes: the visit is recorded when you open the space in the app; reading through the assistant does not reset the counter. To read the news, the assistant uses list_posts (Feed and Content) or list_events (Events) with the space_id.
open_link
Read-only
Open an app link. Takes a link from your community (or a bare id or slug) and says what it is, with its id, title, space and a summary. Minimum role: any.
| Parameter | Type | Required | Description |
|---|---|---|---|
link | text | Yes | The app address, a path such as /aprender/cursos/excel, an id or a slug |
It understands the app's addresses: space (/section/space), post, event, course, certificate (from inside the space or from the public verification page), call for papers and proposal (?proposal=), plan (/pricing/…) and subscription (/billing?subscription=…), including the old addresses the app redirects.
Ask like this: "What is this link? https://yourcommunity.com/aprender/cursos/excel-do-zero"
When you open an event link, the result says whether it issues a certificate (with the setting for owners and admins, and the state of their own certificate for whoever confirmed attendance).
Notes: it only works with links from the connected community. A link from another community comes back as "That link belongs to another community", even if you manage both: connect the other one separately.
create_section
Changes
Create section. Creates a menu section, such as Learn or Community. Spaces live inside sections. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | text, up to 255 | Yes | The name in the menu |
description | plain text | No | No formatting: Markdown marks are stripped |
visibility | public, members, plan, private | No | Who sees the section. See Visibility and access |
locked_display | hide, section, section_and_spaces | No | What whoever has no access sees: nothing, only the section line with a padlock, or the section and its spaces with a padlock (the default). See For those without access |
Returns: the new section, with the id create_space needs.
Ask like this: "Create a section called Learn, visible to members only."
create_space
Changes
Create space. Creates a space in a section, with the module that defines what it is. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
section_id | id | Yes | From get_community_context or create_section |
title | text, up to 255 | Yes | |
module | feed, content, courses, events, storefront, gallery, ranking, url, certificates, call4papers, surveys, forms, recognition, feedbacks, developmentPlan, timeTracking, networking | Yes | Feed, Content, Courses, Events, Store, Gallery, Engagement, Link, Certificates, Call for papers, Surveys or Forms (forms; afterwards, create_form). timeTracking is Time Tracking: afterwards, link the establishment with set_time_tracking_space_establishment. See Modules |
external_url | web address | No | Only for the url module: the address the space opens |
icon | one of the icons in the list | No | The space's icon. See Icons. Without it, Memberfy picks one from the title and the module |
description | plain text | No | No formatting: Markdown marks are stripped |
visibility | public, members, plan, private | No | |
locked_display | inherit, hide, show | No | What whoever has no access sees: same as the section (the default), nothing, or the space with a padlock |
feed_scope | space, section | No | feed module only: space shows only this space's posts, section brings together every space in the section. Without it, the section's only Feed starts as section and the next ones as space. See What this feed shows |
feed_widgets | events, trending, new_members, leaderboard (yes or no) | No | feed module only: the side column widgets. Without it, events and trending on, the other two off. |
networking | object: preset (COMMUNITY_MENTORING, COMPANY_MENTORING, BUSINESS, EVENT, CUSTOM) and the program options | No | Only in the networking module: the model fills in every option, and any options sent along apply on top. See Tools · Networking. |
mode | single, multi | No | In the courses, surveys and forms modules: multi (a list, the default) or single (A single course, One survey or One form: the space opens straight into the item and refuses a second one) |
course | object: title, level, description | No | Only in the courses module, in single: creates the course, as a draft, together with the space. On its own, it already implies single |
layout | text or null | No | The space's display, among those the module offers (layouts in list_space_modules); null goes back to the module's default. showcase (Showcase) is Courses only: in another module, the request is refused with the way to list_space_modules |
Returns: the created space, with its id and icon (and the course, if course was sent).
Ask like this: "Create a Feed space called Announcements in the Community section, with the megaphone icon."
"Create a Courses space as a showcase" → create_space {"section_id":"…","title":"Courses","module":"courses","layout":"showcase"}; the assistant then suggests the poster cover on the courses (cover_format: "POSTER").
Notes: for a complete course or event, create_course and create_event create the space along with it. In a Call for papers space, the suggested next step is opening the first call (create_call_for_papers); in a Surveys space, creating the survey (create_survey) with the space_id. Spaces have no cover image.
update_space
Changes
Edit space. Changes the name, description, icon or visibility of an existing space, or moves it to another section. Only what is sent changes. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
space_id | id | Yes | From list_spaces |
title | text, up to 255 | No | |
description | plain text | No | No formatting: Markdown marks are stripped |
icon | one of the icons in the list | No | The space's icon. See Icons. Without it, Memberfy picks one from the title and the module |
visibility | public, members, plan, private | No | For a private space with groups, products or plans, use update_space_access |
locked_display | inherit, hide, show | No | What whoever has no access sees: same as the section, nothing, or the space with a padlock |
section_id | id | No | Moves the space to this section |
mode | single, multi | No | Only in a Courses or Surveys space: switches the mode. For single, the space can have at most one course or one survey (drafts, archived and closed ones count); with more, the switch is refused and nothing is deleted |
feed_scope | space, section | No | Feed spaces only: space shows only this space's posts, section brings together every space in the section. Changes no other setting of the space |
feed_widgets | events, trending, new_members, leaderboard (yes or no), or null | No | Feed spaces only, owner and admin: turns the side column widgets on or off; only the keys sent change, and null goes back to the default (events and trending on). On another module the API refuses. |
layout | text or null | No | The space's display, among those the module offers (layouts in list_space_modules); null goes back to the module's default. showcase (Showcase) is Courses only: in another module, the request is refused with the way to list_space_modules |
Returns: the updated space.
Ask like this: "Swap the icon of the Jobs space for a briefcase." · "Give each space in the Learn section a different icon, matching its theme."
update_section
Changes
Edit section. Renames a menu section, changes its description or icon, or makes it the home section. Only what is sent changes. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
section | id, address or name | Yes | From get_community_context |
title | text, up to 255 | No | |
description | plain text | No | No formatting: Markdown marks are stripped |
icon | text | No | |
is_home | yes or no | No | The section that opens first |
locked_display | hide, section, section_and_spaces | No | What whoever has no access sees: nothing, only the section line with a padlock, or the section and its spaces with a padlock |
badge_ids | list of ids or names | No | Private section: the badges that unlock the section (from list_badges). Absent keeps the ones that already unlock it; [] removes them all |
min_level | number or id | No | The minimum level (1 is the first, or the id from get_ranking_levels): whoever is at it or above gets in. null removes; absent keeps |
Ask like this: "Rename the Learn section to Courses and make it the home section." · "Show the Club section with a padlock to whoever doesn't subscribe." (calls update_section with locked_display: section_and_spaces)
Notes: who sees the section changes with update_space_access. locked_display has no effect on a public section or on a team-only one (Private with nobody on the list), which never shows with a padlock.
reorder_sections
Changes
Reorder sections. Puts the menu sections in a new order, top to bottom. The ones left out keep their order, after these. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
section_ids | list of ids | Yes | From get_community_context, in the new order |
Ask like this: "Put the Events section right after Community."
reorder_spaces
Changes
Reorder spaces. Puts a section's spaces in a new order. The ones left out keep their order, after these. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
section | id, address or name | Yes | The section |
space_ids | list of ids | Yes | From list_spaces, in the new order |
Ask like this: "In the Learn section, put the Excel from Scratch space first."
Notes: to move a space to another section, use update_space with section_id.
get_space_access
Read-only
See who gets in. The Who gets in of a space or a section: the visibility and, when private, the groups, products, plans and badges (any one is enough). For a space, also what its section requires on top (required_by_section) and the products that open it from the products screen (access_from_products); admin_only: true when only the team gets in. Minimum role: team (owner, admin, moderator and finance). Also the minimum level (min_level: id, level, name, min_points), when there is one.
| Parameter | Type | Required | Description |
|---|---|---|---|
space or section | id, link, slug or name | One of the two | The space or the section |
Ask like this: "Who gets into the Veterans' Room?"
Notes: to change it, use update_space_access.
update_space_access
Changes
Change who sees a space. Sets who sees a space or a whole section and, in a space, who can post. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
space or section | id, link, address or name | One of the two | The space or the section |
visibility | public, members, plan, private | No | Public, members, any active subscription, or private |
group_ids | list of ids | No | When private: the groups that get in (from list_groups) |
product_ids | list of ids | No | When private: the products whose purchase unlocks it (from list_products) |
plan_ids | list of ids | No | When private: the plans whose subscription unlocks it (from list_plans) |
badge_ids | list of ids or names | No | When private: the badges that unlock it (from list_badges; private ones count). Absent keeps the ones that already unlock it; [] removes them all |
min_level | number or id | No | The minimum level (1 is the first, or the id from get_ranking_levels): whoever is at it or above gets in. null removes; absent keeps |
can_create | anyone, staff, admins | No | Space only: Anyone, Staff or Admins can post |
Returns: the updated space or section.
Ask like this: "Make the Excel from Scratch space visible only to people who bought the course product or subscribe to the Student plan."
Notes: the groups, products and plans you send replace the ones that were there; any one of them is enough for a person to get in. A space is never more open than its section. It changes who sees what right away: ask the assistant to show you what will change first, if you want to check. See Visibility and access.
Notes: each list sent (group_ids, product_ids, plan_ids, badge_ids) replaces only that list; the ones left out stay as they are. To check first, get_space_access.
delete_section
Asks to confirm
Delete section. Deletes a menu section. The section must be empty: if it still has spaces, the deletion is refused; delete them first with delete_space. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
section | id, address or name | Yes |
Returns: on the first call, the section, the spaces still in it (they must be deleted first) and the confirmation code.
delete_space
Asks to confirm
Delete space. Deletes a space, and what it holds, from the menu. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
space | id, link, address or name | Yes |
Returns: on the first call, the space, the module and the section, and the confirmation code.
get_community_settings
Read-only
View community settings. The community's settings as they are. Minimum role: admin.
Parameters: none.
Returns: the name, the description, the colors (primary and secondary in hex, and the full scale), the logo, the favicon, the sharing image, the SEO, the entry rules (open sign-up, sign-up model, visitors), moderation and engagement. Nothing secret, such as integrations or DNS. From Google Analytics come the ID and, for the API secret, only whether it is set and its last 4 characters.
Ask like this: "What are the community's colors and SEO right now?"
Minimum age: also returns minimum_age (16 when the community has not set another) and serves_minors. See Minimum age.
AI assistant access: get_community_settings also returns assistant_access (members, staff, admins), and the moderator and finance can read it too. Writing the three switches (assistant_members, assistant_staff, assistant_admins) is for the owner only; the reply says who lost access, and the owner never locks themselves out. See General settings.
For a Courses space, the summary says how many courses will be deleted with it, for example: "Warning: this is a Courses space. Deleting it also deletes its 1 course. Enrollments and certificates already issued stay as they are, and no new certificates will be issued from those courses." (plural: "Warning: this is a Courses space. Deleting it also deletes its N courses. Enrollments and certificates already issued stay as they are, and no new certificates will be issued from those courses."). Certificates already issued stay valid.
For the owner, shows the storage and monthly upload usage against the limits, with the warning (read-only; the platform sets the limits).
update_community_settings
Changes
Change community settings. Changes the settings; only what is sent changes. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
name, description | text | No | The community's name and description |
seo_title, seo_description | text | No | See Images and SEO |
google_site_verification, bing_site_verification | text or null | No | The Google Search Console and Bing Webmaster Tools verification code: the code or the whole <meta> tag (only the code is kept); null or empty removes it. See Verify the community on Google and Bing |
signup_mode | open, approval, closed | No | Who can join: Open, With approval (sign-ups become requests, see list_signup_requests) or Closed. Don't send it together with signup_open. When leaving approval, the answer says how many requests stay in the queue (pending_signup_requests) |
signup_open | yes or no | No | Anyone can sign up (with signup_mode available, prefer it) |
signup_model | FREE, PAID | No | |
guest_access | yes or no | No | Visitors see what is public |
content_moderation | yes or no | No | |
global_ranking | yes or no | No | |
language | pt-BR, pt-PT, en-US, es-ES, es-MX, es-AR, it-IT, de-DE, de-AT, de-CH | No | The community's language: the one used for e-mails and for anyone who hasn't picked a language yet. See Languages |
assistant_members | true/false | No | Owner only. Lets members use the AI assistant |
assistant_staff | true/false | No | Owner only. Lets in moderators, finance and admins |
assistant_admins | true/false | No | Owner only. Lets in only the admins (use with assistant_staff off to restrict further) |
member_api_keys | true/false | No | Owner only. Members may create personal API keys (the team always may); off, members' keys stop at once, without being deleted, and come back when it's turned on again |
minimum_age | number from 16 to 99, or null | No | Owner only. The minimum age to have an account; null or 16 go back to the platform's 16 |
serves_minors | true/false | No | Owner only. This community serves minors |
linkedin_id | number | No | The community's LinkedIn page ID, for certificates |
ga_api_secret | text, 8 to 100 (letters, digits, _ and -) | No | The GA4 Measurement Protocol API secret; null clears it. With it, Memberfy sends your GA4 the purchases and refunds. It never comes back: the summary shows only the last 4 characters and the call log hides it. See Google Analytics |
logo_url or logo_base64 | link or file | No | The logo |
favicon_url or favicon_base64 | link or file | No | The favicon |
share_image_url or share_image_base64 | link or file | No | The image shown when someone shares the link |
Returns: the applied settings, with the before → after of each field.
Ask like this: "Change the primary color to #4F46E5 and use this logo: https://…"
Notes: all of this shows to the whole community as soon as the call runs; to undo it, ask again with the old value, which is in the before → after. Domain and integrations can't be changed here. See General settings.
Member pages. public_member_pages (true or false, off by default) turns on member pages that open without signing in, for people who set their Header to Public. member_page_ceilings is the most open level allowed per section: header and about PUBLIC or MEMBERS; location, experience and activity PUBLIC, MEMBERS or PRIVATE; fields MEMBERS or PRIVATE. Only the sections sent change; null goes back to the default. Owner and admin; get_community_settings shows both. See Your profile.
Drops in comments. drops_in_comments (true or false, off by default; owner and admin) turns on Drops in post and short-post comments, like the app's Allow Drops in comments switch. See Drops.
update_community_appearance
Asks to confirm
Change the logo for dark backgrounds. Uploads, replaces or removes the Logo for dark backgrounds, always with confirmation, showing the before → after. The mode and the menu belong to the theme: see Themes. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
dark_logo_url or dark_logo_base64 | link or file | No | The Logo for dark backgrounds; ideally a PNG with a transparent background. It does not replace the regular logo |
remove_dark_logo | yes or no | No | Removes the logo for dark backgrounds |
Ask like this: "Use this logo for dark backgrounds: https://…": the first call returns the summary (before → after) and the confirmation_token; the change only applies after your yes.
Notes: get_community_settings shows the theme in appearance (mode, effective_mode, dark_logo_url, dark_mode_allowed and sidebar_default, read from the active theme). Only Memberfy enables the dark theme, never the assistant. See Dark mode.
get_notification_settings
Read-only
See sale notices. Where the community's notices go: the e-mail that receives a notice for every sale., and whether the abandoned-cart recovery e-mail is on (abandonedCartEmailEnabled). Minimum role: admin.
Parameters: none.
Ask like this: "Who gets the notice when a sale comes in?"
update_notification_settings
Changes
Change sale notices. Sets the e-mail that receives a notice for every sale and turns the abandoned carts' recovery e-mail on or off. It only changes what you ask for: the other field stays as it is. Runs on the first call, without confirmation. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
sales_notification_email | No | Empty ("") turns the notices off | |
abandoned_cart_email_enabled | yes or no | No | Turns the recovery e-mail on or off |
One of the two is required.
Ask like this: "Send the sale notices to [email protected]." · "Turn on the recovery e-mail for abandoned carts."
See Sales notices and Abandoned carts.
Icons
Spaces use the same icons as the dashboard picker. The assistant gets the list with what each one is for (in get_community_context, field available_icons, and in the tool descriptions) and is told to pick by theme, without always repeating the same one. If it doesn't pick, Memberfy picks from the title (Live schedule gets calendar, Jobs gets briefcase) or, with no clue in the title, from the module (Courses gets book-open, Gallery gets image).
Some examples: calendar (events, schedule), book-open (courses, lessons), graduation-cap (training, mentoring), megaphone (announcements), message-square (forum, questions), briefcase (career, jobs), image (gallery, photos), trophy (engagement, challenges), shopping-bag (store), crown (premium, VIP), lock (private).
get_connection_diagnostics
Read-only
Connection diagnostics. Tells whether the tool list the assistant is using is up to date. Minimum role: admin (owner or admin).
| Parameter | Type | Required | Description |
|---|---|---|---|
connection_id | id | No | Without it, this conversation's connection |
Returns: the assistant, who authorized it and when, the server version and the list the connection would get now (the list's code and how many tools), what it received last time, the last call and the last attempt to use a tool it doesn't have, and listUpToDate. When listUpToDate is false, the assistant has the old list: open a new conversation or reconnect the connector.
Ask like this: "One of your calls failed. Is your Memberfy tool list up to date?"
get_email_stats
Read-only
Community e-mails. The delivery numbers of the e-mails the community sent (invites, certificates, notices…). Minimum role: admin.
Parameters: none.
Returns: total, sent, failed, pending, delivered, opened, clicked, bounced and complaints, with the rates.
Ask like this: "Did the invites arrive?"
get_email_notice_recipient_count
Read-only
How many will get it. The "N people" of the Notify by e-mail box: how many people will get the new content notice of a publication, already without those who turned the category off and without you. Nobody sees a person's preference. Minimum role: moderator or finance.
| Parameter | Type | Required | Description |
|---|---|---|---|
type | event, course, call_for_papers, survey, post, download, product | Yes | The item type |
item_id | id | No | The item, when it already exists |
space_id | id | No | The space, to count before the item exists |
visibility | public, members, plan, private | No | Visibility, to count an event or post before it exists |
Returns: recipient_count and, for an item that already sent its notice, already_notified. See New content notices by e-mail.
Ask like this: "If I publish this event now, how many people get the e-mail?"
list_integrations
Read-only
Integrations. What is connected to the community from outside: the personal API keys that a CRM, n8n or a script use to call the API and, for owner and admin, the community's webhooks and ready-made integrations. It only lists: creating, renaming, changing IPs and revoking a key; creating, editing, testing, resending, disabling and deleting a webhook; and turning on, testing, disabling and removing an app, happen on screen only; no secret or credential ever comes back. Minimum role: any (the whole community's keys, the webhooks and the apps: owner or admin).
| Parameter | Type | Required | Description |
|---|---|---|---|
scope | mine, community | No | mine (default): your keys. community: everyone's, only for owner and admin; other roles get a refusal |
member_id | member id | No | With scope: community: only that person's keys |
status | active, revoked, expired, stopped | No | Only the keys in that status (stopped: the owner left the community) |
type | api_keys, webhooks, apps | No | A single type. Without it, everything your role sees. webhooks and apps are for owner and admin only; other roles get a refusal |
Returns: each key with its name, the key start (mfk_7Hq2Lx9a…), the scopes (module and level, with the screen's names in your language: Bookings · read), the status, the owner, the allowed IPs, the last use, the last refused IP, the expiration and, if revoked, when and by whom. For owner and admin, in any scope, the webhooks come too: the URL masked in the middle (never the full one or the secret), the description, the events, the status (ACTIVE, DISABLED, DISABLED_FAILING: disabled after failures), whether it uses fixed IPs, the last successful delivery, the failures in a row, the last delivery and, when it's failing, the latest failed deliveries (without the body), plus the community's webhook limit. And the apps (Discord, Slack, Telegram, RD Station, HubSpot) that were ever turned on, on or off: the name, the status (ACTIVE, DISABLED, DISABLED_FAILING), the events, the last successful delivery, the failures in a row, when it was turned on and changed and, when it's failing, the latest failed deliveries (without the body). The app's settings never come back, not even masked; the Zapier, Make and n8n shortcuts show up as webhooks. If the integrations service doesn't answer, the keys still come, with a notice. On the community list, it suggests list_activity_logs with source: apiKeys to see what the keys did; list_logs with type: apiKeys reads the same in the Logs.
Ask like this: "Which API keys do I have?" · "Is any webhook failing? Why?" · "Is HubSpot on? Did it fail?" · "Which community keys are active, and whose are they?"
E-mail campaigns
Draft, audience, test and send of an e-mail campaign. The tools live on this page, under Community and structure.
| Tool | What it does | Minimum role | Type |
|---|---|---|---|
list_campaigns | Lists the campaigns, with the last send and the numbers; status and the send period sent_from/sent_to | Team (owner, admin, moderator, finance) | Read-only |
get_campaign | One campaign: subject, blocks, audience, status and the 10 latest sends, with totals for delivered, opens, clicks, bounces and complaints | Team | Read-only |
create_campaign | Creates a draft (text, button and image blocks; audience); sends nothing | Team | Changes |
update_campaign | Edits a draft; blocks and audience replace the whole value | Team | Changes |
preview_campaign_audience | Who would receive it: how many in the selection, how many the exclusion removed, how many are left out and why, and a sample with masked e-mails | Team | Read-only |
send_campaign_test | Sends the campaign only to your own e-mail, with [Test] in the subject; does not use the quota (up to 10 per hour) | Team | Changes |
send_campaign | Sends now to the whole audience, with confirmation and consent | Owner or admin | Asks to confirm |
get_campaign_quota | How many sends the community used and still has today, this week and this month, and when it resets; recipients.viaOwnProvider counts what left through the community's Resend account | Team | Read-only |
delete_campaign | Deletes a draft (a sent campaign stays in the history) | Team | Asks to confirm |
list_campaign_opt_outs | Who unsubscribed, with masked e-mail, scope, date and source | Team | Read-only |
list_campaign_variables | The per-recipient campaign variables ({{nome}}, {{lider}}…), with name, description and example | Team | Read-only |
create_campaign_from_content | Creates a campaign draft from a published post (content_id), with the audience of people who can access it; sends nothing | Team | Changes |
From a post. create_campaign_from_content (content_id, from list_posts) does what Create email does in the app: it creates the draft with the title, the subtitle, the cover, the whole text and the buttons, and the post's item_access audience. It asks for no confirmation, because nothing goes out. create_campaign, update_campaign and preview_campaign_audience accept item_access: { type: "content", id } in the audience, exclusive like all (exclude applies), recalculated on every send; the preview and the send_campaign and schedule_campaign confirmations show the post title and how many people receive it ("people with access to {title}: N people") and, if the post went offline (deleted or no longer public) after the draft, warn that nobody will receive the campaign. A post that is a draft, private, pending or rejected in moderation comes back as text, with a step to list_posts. get_campaign carries sourceItem, the source post. Workflows do not accept item_access. See Send a post by e-mail.
Sending. send_campaign is a bulk send that cannot be undone and uses one send of the quota. It requires consent: true (the person confirms the recipients are community members who accept announcements). The first call returns only the summary (subject, audience total, how many are left out, quota left) and a confirmation_token; the assistant shows the summary and only repeats the call with the code after an explicit yes. See Money and confirmation.
Excluding from the audience. create_campaign, update_campaign and preview_campaign_audience accept, in the audience, exclude: { group_ids, tags, member_ids }: anyone matching an exclusion is out, even if they are in an included group or tag. On its own the exclusion picks nobody. The preview and the confirmation of send_campaign and schedule_campaign carry the summary sentence (audience_summary): "1,240 people in the selection, 312 excluded by the rule, 9 unsubscribed, bounced or complained: 919 will receive it." The audience and the exclusion also accept fields, the custom field conditions: each with field (id or key), operator (one_of, contains_any, contains_all, is_true, is_false) and values, up to 10 conditions in total, including and excluding together. A 422 points to list_member_fields, with the fields and options. Warnings about a field that changed show in note on get_campaign and in the preview, and the send_campaign and schedule_campaign confirmation repeats them (field_warnings).
Sent in a period. list_campaigns takes sent_from and sent_to (YYYY-MM-DD, whole days in the community time zone, both included; one side alone leaves the other open): it keeps the campaigns, manual and automatic, with a send that started in the period, the same rule as get_campaign_stats. "Which campaigns went out last week?"
Refusals that come back as text. An empty subject or content, an empty audience or one over 20,000 people (422), and an exhausted quota (429, saying the limit and when it frees up).
Ask like this: "Create a campaign for the March cohort group with the opening-class notice, show who receives it and send me a test."
Another 14 tools complete campaigns through the assistant:
| Tool | What it does | Minimum role | Type |
|---|---|---|---|
schedule_campaign | Schedules the send (once, every day or weekdays), with summary, quota and consent | Owner or admin | Asks to confirm |
pause_campaign | Pauses a scheduled or sending campaign | Owner or admin | Changes |
resume_campaign | Resumes a paused campaign | Owner or admin | Changes |
cancel_campaign | Cancels the campaign (what already went out stays sent) | Owner or admin | Asks to confirm |
list_campaign_runs | A campaign's sends, with the numbers | Team | Read-only |
campaign_report | The sum of all sends: delivered, opens, clicks, bounces and complaints | Team | Read-only |
preview_campaign | The e-mail as it would go out now, without sending or using quota | Team | Read-only |
list_automatic_campaigns | The automatic e-mails and whether they are on | Team | Read-only |
update_automatic_campaign | Turns an automatic on or off and adjusts it; always confirms, and requires consent when turning on | Owner or admin | Asks to confirm |
upload_campaign_image | Uploads an image for a block, by link or file | Team | Changes |
delete_campaign_image | Deletes an uploaded image (confirms) | Team | Asks to confirm |
get_campaign_stats | The numbers of every campaign over a period (default: 30 days), compared with the previous period, with each metric's sentence | Team | Read-only |
list_campaign_block_items | The products, events or courses a block accepts (only what everyone sees), with search and pages | Team | Read-only |
duplicate_campaign | Creates a Copy of… draft with the original's subject, blocks and audience; sends nothing (automatics are not duplicated) | Team | Changes |
create_campaign and update_campaign also accept the blocks latestPosts, upcomingEvents, newCourses, newClassifieds, course, event and product. The last three take 1 to 6 items (course_ids, event_ids, product_ids), which go out in a grid of 2 per row; the ids come from list_campaign_block_items, and an item not everyone sees comes back with the block's sentence and a hint.
Variables. The subject, the preview text and the text and button blocks take per-recipient variables: {{nome}}, {{lider}}, {{pontos}}… (or the English aliases {{first_name}}, {{leader}}, {{points}}) and a fallback after \|, like {{leader\|our team}}. list_campaign_variables gives the list, including the custom fields ({{field_company}}, in the customFields group). A variable that does not exist is refused with a sentence naming the field and the name (subject: "xyz"), and the suggested next step is list_campaign_variables. preview_campaign and send_campaign_test fill them with the data of whoever asks. Avoid {{tags}} if the community uses internal tags: each person reads their own.
E-mail library and default e-mails
| Tool | What it does | Minimum role | Kind |
|---|---|---|---|
list_emails | The library's e-mails, with their languages and where they are used | Team | Read-only |
get_email | An e-mail, with its versions per language | Team | Read-only |
create_email | Creates an e-mail in the library | Team | Changes |
update_email | Renames the e-mail or changes the main language | Team | Changes |
update_email_version | Saves the version of a language | Team | Changes |
delete_email_version | Deletes the version of a language | Team | Asks to confirm |
get_email_usages | Where the e-mail is used | Team | Read-only |
duplicate_email | Copies the e-mail with all its versions | Team | Changes |
delete_email | Deletes the e-mail; shows first where it is used | Team | Asks to confirm |
preview_email | Shows how the e-mail arrives, with your details | Team | Read-only |
send_email_test | Sends a test only to you | Team | Changes |
list_default_emails | The default e-mails, with their state and customized languages | Admin | Read-only |
get_default_email | A default e-mail, with its fixed blocks and allowed variables | Admin | Read-only |
get_default_email_version | The community's version in a language | Admin | Read-only |
update_default_email_version | Saves the community's version in a language | Admin | Changes |
update_default_email | Turns the community's version on or off | Admin | Changes |
restore_default_email | Restores the default in a language, with no way back | Admin | Asks to confirm |
preview_default_email | Shows how the default e-mail arrives | Admin | Read-only |
send_default_email_test | Sends a test of the default e-mail only to you | Admin | Changes |
create_campaign and update_campaign take email_id (so subject is not needed); direct content still works. The fixed blocks come and go as { type: system_slot, slot }, and a version without them is refused with the blocks that are missing. The test never goes to another address.
Ask like this: "Change the Portuguese sign-up welcome to a shorter text", "Where is the November news e-mail used?"
Workflows
| Tool | What it does | Minimum role | Type |
|---|---|---|---|
list_workflow_triggers | The triggers, with the filters and the ones that act on an item | Team | Read-only |
list_workflows | The workflows, with the state and the runs | Team | Read-only |
get_workflow | One workflow, with the design | Team | Read-only |
simulate_workflow | Walks the workflow with one person, without sending anything; with send_emails_to_me, sends the simulation's e-mails only to you ([Test] in the subject, up to 10 per simulation and 10 such simulations an hour) | Team | Read-only |
get_workflow_estimate | How many people fired the trigger in 1, 7 and 30 days (or today, on a date trigger) | Team | Read-only |
list_workflow_runs | A workflow's runs | Team | Read-only |
get_workflow_run | One run, with the steps | Team | Read-only |
get_member_workflow_history | The workflows a person went through | Team | Read-only |
list_workflow_templates | The 9 templates | Team | Read-only |
list_workflow_senders | Who on the team agreed to sign messages | Team | Read-only |
update_my_workflow_sender_consent | Agrees or stops agreeing to sign workflow messages (only your own) | Team | Changes |
list_my_pending_sender_approvals | Your pending approvals of texts in your name | Team | Read-only |
approve_sender_approval | Approves a version's texts in your name | Team | Changes |
revoke_sender_approval | Revokes an approval of yours | Team | Asks to confirm |
create_workflow | Creates a draft workflow (trigger, filter, entry, frequency, design) | Admin | Changes |
create_workflow_from_template | Creates a draft from a template, without sending anything | Admin | Changes |
update_workflow | Edits the workflow; if it is on, saves a new version | Admin | Changes |
delete_workflow | Deletes a workflow that is off; the history stays | Admin | Asks to confirm |
send_workflow_test | Sends a step's e-mail only to you | Admin | Changes |
activate_workflow | Turns it on; first shows the trigger, the e-mails and the estimate (a date trigger asks for consent) | Admin | Asks to confirm |
pause_workflow | Pauses: nobody new enters and each person stops where they are | Admin | Changes |
resume_workflow | Resumes; first shows the summary | Admin | Asks to confirm |
cancel_workflow_run | Ends one person's run | Admin | Asks to confirm |
The design goes to the API as it is: waits, conditions, library e-mails, message, comment, reaction, tag, group, Slack and While, with the app's limits; layout keeps the canvas positions. When the community's sending is suspended, turning on and resuming answer with the end date and the reason.
| Tool | What it does | Minimum role | Kind |
|---|---|---|---|
run_workflow | Starts the workflow for chosen people or an audience (Manual trigger); the first call only counts who enters and asks for your confirmation | Admin | Asks to confirm |
stop_workflow | Stops the workflow: no one new enters and the runs under way are canceled; first shows how many | Admin | Asks to confirm |
get_workflow_summary | The 7- and 30-day success rate, the skipped steps, the error logs, who is waiting for quota and the latest errors | Team | Read-only |
list_workflow_variables | The variables that reach a block, grouped by the block they come from (also for a design not saved yet) | Team | Read-only |
preview_workflow_text | A text with the variables filled with sample data, as it goes out in the DM, the e-mail or Slack | Team | Read-only |
get_workflow_settings | On whose behalf workflows send DMs, comment and react | Admin | Read-only |
update_workflow_settings | Switches to The whole team or Owner only; first shows the change | Admin | Asks to confirm |
get_workflow_webhook | The status of a Webhook received trigger's address, never the token | Team | Read-only |
create_workflow_webhook | Creates the address; the token and the secret are shown once | Admin | Changes |
rotate_workflow_webhook | Rotates the token and the secret | Admin | Asks to confirm |
revoke_workflow_webhook | Revokes the address | Admin | Asks to confirm |
list_workflow_webhook_deliveries | The calls received, with the result of each one | Team | Read-only |
get_workflow_guide | The workflow guide, one section at a time (overview, triggers, blocks, rules, variables, lifecycle, recipes, cautions), in the connection's language | Team | Read-only |
suggest_workflow | Turns a rule in words, or a recipe, into a draft design, with the questions to confirm and the calls; saves nothing | Team | Read-only |
delete_workflow_run | Deletes a finished run from the history; it still counts toward how many times the person enters | Admin | Asks to confirm |
clear_workflow_runs | Deletes a workflow's finished runs from the history, all of them or up to a date; shows how many first | Admin | Asks to confirm |
list_env | The keys in Variables and keys: name, end of the value, allowed hosts and last use, never the value | Admin | Read-only |
set_env | Creates or replaces a key, with the allowed hosts (optional: empty means any address); the value never comes back in a response | Admin | Asks to confirm |
delete_env | Deletes a key: the value is erased and the blocks that use it go down the error path | Admin | Asks to confirm |
get_ai_limits | The AI limits: the token ceilings per call, per run and per day, whether they are the defaults and how much was used today | Admin | Read-only |
update_ai_limits | Changes the ceilings (those left out stay as they are); per call up to per run, and per run up to per day | Admin | Changes |
get_signing_secret | The Call webhook signing secret: whether it exists, its ending and when it was created, never the value | Admin | Read-only |
create_signing_secret | Generates the signing secret, shown only in this answer; with rotate: true it replaces the current one and asks to confirm | Admin | Changes |
delete_signing_secret | Deletes the secret: calls stop being signed | Admin | Asks to confirm |
One trigger per workflow.
create_workflowandupdate_workflowtake a single trigger block, the End: success and End: error blocks (endSuccess,endError), the actions' error exit, the Write to log block (log), each block's name, dotted variables ({{course.name}}) and the condition's Variable rule, with operators by type. A refused design comes back withgraph_errors(the block, the code and the message), such assingleTriggerOnly,pathWithoutEndandvariableUnavailable.The
manual,schedule,webhook.received,member.returnedandmessage.received(DM received) triggers, and each module's lifecycle.list_workflow_triggerssays, for each trigger, how many times it happens (occurs) and its variables.simulate_workflowshows the filled-in texts and the expected end;get_workflow_runshows the steps that failed or are waiting for quota (FAILED,DEFERRED);list_workflowsbrings the period, how many are on and the plan's maximum (turning on beyond it is refused before the confirmation);activate_workflowtakesinclude_existingon the Someone has not signed in for N days trigger;list_workflow_templatesbrings each template's steps;list_logstakes theworkflowssource, with the workflow and the level.On whose behalf: the individual consent and the text approvals (
update_my_workflow_sender_consent,list_my_pending_sender_approvals,approve_sender_approval,revoke_sender_approval) are no longer used; the signer follows the community's setting, and a step on behalf of someone not allowed is skipped (senderNotAllowed).The automation guide. For the team, the assistant knows that a need that repeats, depends on a condition or on an event is solved with a workflow: it reads the guide (
get_workflow_guide, also as thememberfy://guides/workflowsresource), with 61 ready-made recipes (community, badges, courses, events, sales, HR, coworking, CRM by webhook, scheduled and manual), and builds the draft withsuggest_workflow. The Automate a rule with a workflow recipe does the whole path: guide, draft, e-mails, simulation, test, estimate and turning it on with confirmation.Next steps. After sending or scheduling a campaign, issuing a certificate, inviting or importing members and opening a review cycle, the
next_stepssuggestsuggest_workflowwith the matching recipe.New blocks:
http(Call webhook: method, address, headers, body, a maximum time of 2 to 15 seconds,{{env.NAME}}only in the headers and the body and only for the allowed hosts,{{steps.<block>.status|duration|size|body.<field>}}),platformAction(the platform actions, with each one's minimum role, fromlist_workflow_triggers),runWorkflowand theworkflow.calledtrigger (with the values returned by End: success).Which role the steps act with: that of whoever saves, turns on, resumes or runs the workflow; an action above that role comes back in
graph_errors(actionAboveRole).AI blocks and new actions. The
aiblock (Claude and ChatGPT, with the community's own API key inkeyEnv; the models and limits come fromlist_workflow_triggers, inai_providersandai_node) and the actionscontent.post.create,certificate.issue,recognition.give,chat.block,oneOnOne.scheduleanddevelopmentPlan.action.add. The admin acts like the owner; anownerOnlyaction would show asowner, and none is today. New recipes: Feed post for a graduate, Certificate on check-in, Recognition for a passed quiz, Block the chat of a tagged account, Recurring 1:1 for who joins a team, Development plan action after a review and, with a key in the vault, Welcome DM written by AI, Support ticket triage with AI and Form answer summary with AI.SMS and WhatsApp. The
sendSmsandsendWhatsappblocks (textup to 300 characters, with variables; the community's name and, on SMS, the opt-out link are added when sending).list_workflow_triggershassms_nodeandwhatsapp_node: the limit, the 24-hour rule and the out-of-window template, the skip reasons (through "ok"), the wait reasons (quiet hours, daily cap, monthly quota) and the error ones. New recipes: Welcome by SMS, Event registration confirmed by SMS, Event rescheduled by SMS, Payment overdue by SMS, 1:1 tomorrow by SMS, Event registration confirmed by WhatsApp, Payment overdue by WhatsApp and Waitlist seat by WhatsApp (whoever cannot get WhatsApp gets the e-mail).
See Workflows and Incoming webhook.
Ask like this: "I want whoever buys the course to get 7 days of access to the mentoring: build the workflow", "Keep our CRM token in the vault, only for api.hubspot.com", "Delete the test runs up to yesterday from the history", "Create the welcome series from the template", "How many people would enter the win-back workflow today?", "Simulate the welcome workflow with Maria."
Sending reputation
When the community's sending is suspended, the tools that send (sends, automatic e-mails, turning on or resuming workflows) answer with the end date and the reason. get_community_context brings the sending reputation to the team (the alert, only to the owner and the admin), with the tips. For the SuperAdmin, in the Memberfy community:
| Tool | What it does | Minimum role | Type |
|---|---|---|---|
list_sending_reputation | The communities on alert or suspended | SuperAdmin | Read-only |
get_community_sending_reputation | A community's sending reputation, with its suspensions | SuperAdmin | Read-only |
lift_community_sending_suspension | Releases a community's sending, with the reason | SuperAdmin | Changes |
update_community_sending_reputation_settings | Changes a community's limits | SuperAdmin | Changes |
Plan and extensions
11 tools for what the Memberfy plan includes. See Plan and extensions.
| Tool | What it does | Minimum role | Type |
|---|---|---|---|
list_entitlement_catalog | The catalog of plan variables: included members, extra members, the mark and the Planning & HR and Coworking extensions | Any | Read-only |
get_plan_entitlements | What the community's plan includes, where each value comes from (never the reason for an exception), member usage and locked extensions | Admin | Read-only |
list_space_modules | The space modules by Add Space tab, with locked when the extension is not in the plan | Admin | Read-only |
get_entitlement_values | What a Memberfy plan or add-on includes | SuperAdmin | Read-only |
update_entitlement_values | Changes what a plan or add-on includes; applies to every community on it | SuperAdmin | Changes |
get_entitlement_defaults | The default for communities without a plan | SuperAdmin | Read-only |
update_entitlement_defaults | Changes the default for communities without a plan | SuperAdmin | Changes |
list_entitlement_overrides | A community's exceptions, with value, reason and validity | SuperAdmin | Read-only |
create_entitlement_override | Creates an exception (one per variable), with an internal reason and validity | SuperAdmin | Changes |
update_entitlement_override | Changes an exception's value, reason or validity | SuperAdmin | Changes |
delete_entitlement_override | Ends an exception now; the record is kept | SuperAdmin | Asks to confirm |
The SuperAdmin tools only work when connected to the Memberfy community. When the extension is not in the plan, create_space, update_space and update_space_access return MODULE_LOCKED, and the assistant explains that the extension has to be added. Spaces that already existed stay, for the owner, admin and moderator only.
Memberfy directory
4 tools for the Memberfy directory (hub.memberfy.net). None asks for confirmation: they move no money, send no e-mail and delete nothing, and a removal is undone by putting the community back.
| Tool | What it does | Minimum role | Type |
|---|---|---|---|
get_hub_listing | How the community shows in the directory: listed, category, cover, member count, a removal by Memberfy (date and reason) and the categories | Admin | Read-only |
update_hub_listing | Turns the listing on or off and changes the category, cover (an https link) and member count; only what is sent changes | Admin | Changes |
get_community_hub_listing | One community's state in the directory: whether the owner left it listed, the category and whether Memberfy took it out (date and reason) | SuperAdmin | Read-only |
update_community_hub_listing | Takes a community out of the directory, with a required reason of 10 to 2,000 characters that the owner sees in Settings, or puts it back; the owner's option does not change | SuperAdmin | Changes |
Ask like this:
- "List my community under Technology with this cover" (
update_hub_listing); - "Is my community in the directory?" (
get_hub_listing; if Memberfy took it out, the assistant gives the reason and date); - for the SuperAdmin: "Take community X out of the directory with this reason" (
update_community_hub_listing).
The two SuperAdmin tools only work connected to the Memberfy community, and every removal or return goes to the community's history.
Themes
9 tools for the community's theme: mode, colors, fonts, corners, density and the navigation (the menu's starting state, the top bar and the hidden native elements). All of them are for the owner and the admin. Activating, restoring and deleting ask to confirm (the first call returns the summary and the confirmation_token); creating only asks when it also activates the theme.
| Tool | What it does | Minimum role | Type |
|---|---|---|---|
list_theme_presets | The ready-made themes (Light, Dark, Premium dark, Ocean, Forest, Editorial), with the preview and whether they are available (the dark ones depend on the dark theme being enabled) | Admin | Read-only |
list_community_themes | The community's saved themes (up to 10), with the active one marked | Admin | Read-only |
get_community_theme | One theme with all its values; without theme_id, the active one | Admin | Read-only |
create_community_theme | Saves a theme from a ready-made one (preset_key) or a saved one (source_theme_id), with changes in values; origin: "image" keeps the proposal from suggest_community_theme_from_logo; activate: true also activates it (asks to confirm) | Admin | Changes |
update_community_theme | Changes a theme's name or values; without theme_id, the active one, and the community changes right away: it is the way to change colors, mode, fonts, corners, density or the menu | Admin | Changes |
activate_community_theme | Switches the theme for the whole community, showing the before → after | Admin | Asks to confirm |
restore_community_theme | Takes the theme back to its original values; the name stays | Admin | Asks to confirm |
delete_community_theme | Deletes a saved theme (the active one can't be deleted) | Admin | Asks to confirm |
suggest_community_theme_from_logo | Proposes a theme with the colors of the community's logo, with guaranteed contrast, without saving. Uses 1 AI use from the plan | Admin | Changes |
Removed from other tools: primary_color, secondary_color, reset_colors and mobile_bar_color from update_community_settings; mode and sidebar_default from update_community_appearance, which keeps the logo for dark backgrounds.
Ask like this:
- "Which themes does the community have and which one is active?" (
list_community_themes); - "Create a Christmas theme based on Forest, with the red #B91C1C as the primary color" (
create_community_theme); - "Change the heading font to Manrope" (
update_community_theme, on the active theme); - "Activate the Christmas theme" (
activate_community_theme, after your yes); - "Put the navigation on top and hide the language selector" (
update_community_theme, withnavigation.layout: "top"andnavigation.hidden_native: ["language_selector"]).hidden_nativeis the whole list ([]shows everything), only withpeople,leaderboard,organized_events,language_selector,report_problemandpresence; the bell, billing notices, My Account, Settings and Administration can never be hidden; - "Suggest a theme with our logo's colors" (
suggest_community_theme_from_logo; to keep it,create_community_themewithorigin: "image").
Notes: through the assistant, the proposal comes only from the community's logo; any other image is uploaded in the app (Generate from an image). Without a logo, or with a logo that can't be read as an image, 422; AI quota used up, 429. A dark or automatic theme without the dark theme enabled: refused.
Custom domain
8 tools for the community's custom domain. Only removing asks to confirm: adding or changing keeps the old domain up until the new one becomes active, so it runs on the first call.
| Tool | What it does | Minimum role | Type |
|---|---|---|---|
get_custom_domain | The Memberfy address, the primary address, the active domain and the one being set up, with the DNS record to create, the step and the error with what to do | Admin | Read-only |
set_custom_domain | Adds the domain or changes the current one, without downtime, and returns the DNS record to create | Admin | Changes |
check_custom_domain | The Check now: checks DNS, certificate and address right away; a failed request starts over, with another 7 days | Admin | Changes |
remove_custom_domain | Removes the domain (the community stays at the Memberfy address) or only gives up the one being set up | Admin | Asks to confirm |
get_community_custom_domain | The same as get_custom_domain, for one community (community_id) | SuperAdmin | Read-only |
set_community_custom_domain | Adds or changes a community's domain; only this tool moves on a domain another community has already used | SuperAdmin | Changes |
check_community_custom_domain | Checks a community's domain now | SuperAdmin | Changes |
remove_community_custom_domain | Removes a community's domain, or gives up the request | SuperAdmin | Asks to confirm |
After adding, the assistant shows the record to create (type, name and target) and suggests checking again in a few minutes; the automatic checks keep going on their own, and the owner gets the email when the domain becomes active. Each step's error message comes translated, so the assistant shows it as it is. The SuperAdmin tools only work connected to the Memberfy community.
Ask like this:
- "Put the community at community.papodesysadmin.org. What record do I create in DNS?" (
set_custom_domain); - "Is my domain active yet?" (
get_custom_domainorcheck_custom_domain); - "Change the domain to members.papodesysadmin.org without taking the current one down" (
set_custom_domain); - "Give up the domain that's being set up" (
remove_custom_domain, withscope: pending, after your yes).
See recipe 95.
SMS and WhatsApp
8 tools for the SMS and WhatsApp notices channels. Turning a channel on needs the daily cap (daily_cap, from 1 to 50,000). Sending works for every country except those in blocked_countries (today, SMS to the United States). WhatsApp is on the Business and Scale plans (upgrade_required says when it's missing) and only goes out in approved templates, never as free text. The tests send a real message to your verified phone, so they ask for confirmation: the summary shows the masked phone, the consent and today's usage.
| Tool | What it does | Minimum role | Type |
|---|---|---|---|
get_sms_settings | The SMS channel: on or off, the daily cap, the plan's quota and today's and this month's usage, in messages and parts; never a price | Admin | Read-only |
update_sms_settings | Turns SMS on or off and changes the daily cap and the per-person limit (person_daily_cap, 1 to 20, 5 by default: workflow messages per person per day, in each channel) | Admin | Changes |
send_sms_test | A test SMS to your phone, under every rule; says whether it was queued, when it goes out or why it was skipped | Admin | Asks to confirm |
count_sms_segments | The parts and encoding of a text, alone and as sent (with [Community] in front and the opt-out link); sends nothing | Team | Read-only |
get_whatsapp_settings | The WhatsApp channel: on or off, the daily cap, the plan's quota and usage, the platform messages (moments, with each one's default), blocked_countries, person_daily_cap and upgrade_required | Admin | Read-only |
update_whatsapp_settings | Turns WhatsApp on or off, changes the daily cap and turns each platform message on or off for the community (moments: { key: true/false }) | Admin | Changes |
list_whatsapp_templates | Memberfy's WhatsApp templates, with each one's status, type (service or marketing) and fields (Community notice carries a text of your own) | Admin | Read-only |
send_whatsapp_test | A test WhatsApp to your phone, in an approved template, under every rule | Admin | Asks to confirm |
The next_steps lead from the settings to the test, from a skipped test to what is missing (phone, code, consent) and from the code to turning the notices on.
Ask like this:
- "Turn on the community's SMS with a cap of 500 a day and send me a test." (
update_sms_settings, thensend_sms_testafter your yes); - "How much WhatsApp have we used this month?" (
get_whatsapp_settings); - "Does this text fit in one SMS?" (
count_sms_segments); - "Is the WhatsApp notice template approved yet?" (
list_whatsapp_templates); - "Don't send the new-content WhatsApp in this community." (
update_whatsapp_settingswithmoments); - "Allow at most 3 workflow messages per person per day." (
update_sms_settingswithperson_daily_cap).
Sending through your Resend account
4 tools for sending through your Resend account, on the Business plan or above. Connecting, the API key and the webhook secret stay in the app: no tool takes the key, and no answer shows more than its last 4 characters. Only disconnecting asks to confirm.
get_email_provider
Read-only
See sending through the Resend account. Whether the community sends its e-mails through its own Resend account: configured or not, whether the plan allows it (plan_allowed), the status (pending: waiting for the verification; active: e-mails leave through it; error: the key was refused and everything falls back to Memberfy; paused_by_plan: the plan no longer allows it), the sender (from_email, from_name, reply_to), the last 4 characters of the key and of the webhook secret, the last error and when it was verified. Logins, security and team notices always leave through Memberfy. Minimum role: admin.
Parameters: none.
Ask like this: "Are the community's e-mails already going out through our Resend account?"
update_email_provider
Changes
Change the sender. Changes the sender of a connection that already exists. A new from_email starts the check over (status pending): then run verify_email_provider. Without a connection, the assistant points to the app. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
from_email | No | An address of the domain verified in Resend; a free mailbox or a Memberfy address is refused | |
from_name | text, up to 120 characters | No | The sender name |
reply_to | No | Where replies go; null clears it |
Ask like this: "Change the sender name to Papo de Sysadmin and send replies to [email protected]."
verify_email_provider
Changes
Verify the Resend account. Sends the verification e-mail: a test from the sender, through the community's key, to your address. A refusal (key, unverified domain, limit) comes back in the API's words and the connection stays pending; an accepted test turns the connection active once Resend reports it delivered, in seconds to minutes (check with get_email_provider). Minimum role: admin.
Parameters: none.
Ask like this: "Verify our Resend account."
disconnect_email_provider
Asks to confirm
Disconnect the Resend account. Wipes the key and the webhook secret at once, and every e-mail, including what is being sent, leaves through Memberfy again. Connecting again needs the key and the secret typed in the app. Asks to confirm. Minimum role: admin.
Parameters: none.
Ask like this: "Disconnect the community's Resend account."
Video signing keys
4 tools for the Bunny Stream and Cloudflare Stream signing keys: with the key saved, lessons and posts with videos from those providers play signed (see Courses). The key only goes in, never comes back (only the last 4 characters) and is kept out of the assistant's log. Only deleting asks to confirm.
list_video_keys
Read-only
See the video keys. Per provider (bunny, cloudflare): whether there is a key, the mask and the last 4 characters, the status (unverified, valid or invalid, when its players show "video unavailable") and when it was checked, never the value; and signed_ttl_seconds, how long a player's signed link lasts. Minimum role: admin.
Parameters: none.
Ask like this: "Is the Bunny key valid?"
update_video_key
Changes
Save a video key. Saves or replaces a provider's signing key. A wrong combination (a field of the other provider) is refused before any call, and a malformed key comes back in the API's words. The key starts unverified: then run verify_video_key with a link to one of the provider's videos. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
provider | bunny or cloudflare | Yes | |
token_key | text | No | Bunny only: the library's embed token authentication key |
key_id | text | No | Cloudflare only: the signing key id |
private_key | text | No | Cloudflare only: the signing key (PEM, base64, text or JWK) |
Ask like this: "Save the Bunny token key of our library."
Notes: the key never comes back in an answer and is kept out of the assistant's audit log.
verify_video_key
Changes
Check a video key. Signs the link of a video of the same provider and asks the provider once: accepted, the key turns valid; refused, invalid (its players show "video unavailable" until a good key is saved). An unknown video or a link of another provider is refused; with no answer from the provider, the status stays. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
provider | bunny or cloudflare | Yes | |
video_url | link | Yes | A video of that provider |
Ask like this: "Check the Cloudflare key with this video."
delete_video_key
Asks to confirm
Delete a video key. Wipes the key at once, and that provider's videos go out unsigned again (and stop playing if the library requires a token). Asks to confirm, with the key's mask. Minimum role: admin.
| Parameter | Type | Required | Description |
|---|---|---|---|
provider | bunny or cloudflare | Yes |
Ask like this: "Delete the Bunny key."