Communities
Space MCP tools in the Communities scope (communities). Reach these with a wks_live_ key over space-mcp or space-api.
Tools in the communities scope, callable over space-mcp (tools/call) or space-api (REST) with a wks_live_* key that grants communities.
add_community_discussion_reply
Scope: communities:write
Post a reply on a discussion thread (blocked if the thread is locked).
| Parameter | Type | Required | Description |
|---|---|---|---|
discussion_id | string | yes | |
content | string | yes |
add_community_moderator
Scope: communities:write
Promote a user to community moderator. user_id is the auth user id (from a member row's user_id). permissions optionally sets approve_members/approve_products/edit_community.
| Parameter | Type | Required | Description |
|---|---|---|---|
user_id | string | yes | |
permissions | object |
add_community_tab
Scope: communities:write
Add a content tab to the community. module is a tab-module slug from list_community_catalog (about, members, products, feed, events, discussions, resources, rooms, custom_page). config holds module-specific settings, e.g. custom_page → { paper_id }, products → { source_role_slug, require_approval }. Appended to the end unless sort_order is given.
| Parameter | Type | Required | Description |
|---|---|---|---|
module | string | yes | Tab-module slug (see list_community_catalog). |
name | string | Tab label (defaults to the module's name). | |
icon | string | ||
config | object | Module-specific config. | |
sort_order | number | ||
is_visible | boolean | Show the tab (default true). |
approve_community_member
Scope: communities:write
Approve a pending community member application. member_id is the community member row id from list_community_members.
| Parameter | Type | Required | Description |
|---|---|---|---|
member_id | string | yes |
create_community_course
Scope: communities:write
Create a classroom course (auto-creates a Classroom tab if missing). Add lessons with create_community_lesson.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | yes | |
description | string | ||
cover_url | string | ||
sort_order | number |
create_community_discussion
Scope: communities:write
Start a discussion thread (auto-creates a Discussions tab if missing). Optionally pin/lock it or file it under a category_id.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | yes | |
body | string | ||
category_id | string | ||
is_pinned | boolean | ||
is_locked | boolean |
create_community_discussion_category
Scope: communities:write
Create a discussion category (auto-creates a Discussions tab if missing).
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | |
description | string | ||
sort_order | number |
create_community_event
Scope: communities:write
Schedule an event on the community calendar (auto-creates an Events tab if missing). starts_at is an ISO timestamp. location_type online|in_person. Add cover_url/video_url so the event presents well, and people to bill the hosts and guests. Admission: audience 'community' (every approved member) or 'roles' (only allowed_role_ids — empty admits nobody but the organiser); approval_required adds a per-request review on top; ticket_product_id makes it paid (the marketplace listing IS the ticket — price/stock live there); rsvp_form_id attaches registration questions (a Space Form); capacity caps attendance; private_details holds the address/link/instructions revealed only to people who are in.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | yes | |
description | string | ||
location_type | online | in_person | ||
location | string | ||
starts_at | string | yes | ISO timestamp, e.g. 2026-08-01T18:00:00Z |
ends_at | string | ||
cover_url | string | Banner image for the event card. | |
video_url | string | Optional trailer shown on the event. | |
video_poster_url | string | Still frame for video_url. | |
people | object[] | The event's line-up. REPLACES the whole list. A Wakato person needs user_id (attendees can then open their profile); anyone else needs name. | |
audience | community | roles | Who may join: every approved member, or only members holding one of allowed_role_ids. | |
allowed_role_ids | string[] | community_role_ids admitted when audience='roles' (from list_community_roles). Empty admits nobody but the organiser. | |
approval_required | boolean | Review each request instead of auto-admitting whoever qualifies. | |
approval_before_payment | boolean | For ticketed events: approve first, then charge (default true). | |
capacity | number | Max attendees; omit or null for unlimited. | |
ticket_product_id | string | Marketplace listing that IS the ticket. Must be the community owner's own listing. | |
rsvp_form_id | string | Space Form whose questions each request must answer. | |
private_details | object | Joining details revealed only to admitted (and, if ticketed, paid) attendees. |
create_community_lesson
Scope: communities:write
Add a lesson to a classroom course. content is rich text; video_url optional; attachments is an array of {url, name, type}.
| Parameter | Type | Required | Description |
|---|---|---|---|
course_id | string | yes | |
title | string | yes | |
content | string | ||
video_url | string | ||
attachments | object[] | ||
sort_order | number |
create_community_resource
Scope: communities:write
Add a resource to the community library (auto-creates a Resources tab if missing). Provide a url OR a file_url. Optional category groups items.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | yes | |
category | string | ||
description | string | ||
url | string | ||
file_url | string | ||
file_name | string | ||
icon | string | Optional icon: a Lucide icon name (e.g. 'BookOpen') or an image URL. |
create_community_role
Scope: communities:write
Create a membership role for the community (e.g. Member, Seller, VIP). auto_approve grants it without owner review; is_public shows it on the community's join page. Attach abilities with set_community_role_permissions and join gating with set_community_role_requirements.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | |
description | string | ||
icon | string | ||
color | string | ||
auto_approve | boolean | ||
is_public | boolean | ||
sort_order | number |
create_community_room
Scope: communities:write
Create a community video/voice room. mode audio|video. schedule.mode: 'always' (persistent), 'once' (one-time — set scheduled_start/end), or 'daily'/'weekly'/'monthly' (recurring open hours). Access control: allowed_roles (community_role_ids; empty = all members) and allowed_members (user_ids); require_approval enables a waiting room.
| Parameter | Type | Required | Description |
|---|---|---|---|
title | string | yes | |
description | string | ||
mode | audio | video | ||
schedule | object | { mode: always|once|daily|weekly|monthly, timezone, openTime, closeTime, weekdays[]… } | |
scheduled_start | string | ISO timestamp (schedule.mode='once'). | |
scheduled_end | string | ||
require_approval | boolean | ||
track_attendance | boolean | ||
record_sessions | boolean | ||
allowed_roles | string[] | ||
allowed_members | string[] |
delete_community_course
Scope: communities:write
Delete a classroom course and all its lessons. course_id from list_community_courses.
| Parameter | Type | Required | Description |
|---|---|---|---|
course_id | string | yes |
delete_community_discussion
Scope: communities:write
Delete a discussion thread and its replies. discussion_id from list_community_discussions.
| Parameter | Type | Required | Description |
|---|---|---|---|
discussion_id | string | yes |
delete_community_discussion_category
Scope: communities:write
Delete a discussion category (threads in it are kept, uncategorized). category_id from list_community_discussion_categories.
| Parameter | Type | Required | Description |
|---|---|---|---|
category_id | string | yes |
delete_community_discussion_reply
Scope: communities:write
Delete a reply from a discussion thread (moderation). reply_id from list_community_discussion_replies.
| Parameter | Type | Required | Description |
|---|---|---|---|
reply_id | string | yes |
delete_community_event
Scope: communities:write
Delete a community event.
| Parameter | Type | Required | Description |
|---|---|---|---|
event_id | string | yes |
delete_community_lesson
Scope: communities:write
Delete a classroom lesson. lesson_id from list_community_lessons.
| Parameter | Type | Required | Description |
|---|---|---|---|
lesson_id | string | yes |
delete_community_resource
Scope: communities:write
Remove a resource from the community library.
| Parameter | Type | Required | Description |
|---|---|---|---|
resource_id | string | yes |
delete_community_role
Scope: communities:write
Delete a community role. Fails if members still hold it — reassign them first with set_community_member_role.
| Parameter | Type | Required | Description |
|---|---|---|---|
role_id | string | yes |
delete_community_room
Scope: communities:write
Delete a community video/voice room. room_id from list_community_rooms.
| Parameter | Type | Required | Description |
|---|---|---|---|
room_id | string | yes |
get_community
Scope: communities:read
Get the community connected to this space: profile, status, member counts (approved/pending/suspended), moderator count, public URL, and member_intro (the members-only welcome note). Errors if no community is linked.
get_community_attendance
Scope: communities:read
Room attendance overview for the connected community (mirrors the owner Attendance dashboard): totals, per-member and per-room minutes/sessions. Only tracked rooms count.
get_community_classroom_progress
Scope: communities:read
Classroom completion stats: per-course lesson_count, learners, completed, in_progress. Optional course_id narrows to one course.
| Parameter | Type | Required | Description |
|---|---|---|---|
course_id | string |
get_community_membership_plan
Scope: communities:read
Get the connected community's active paid membership plan, or free:true when the community is free to join.
get_community_referral_program
Scope: communities:read
Get the community's Partner commission (referral program) — the cut of member sales the community earns: commission_pct, terms, is_active, version, and how many sellers have agreed. Returns program:null when none is set.
get_community_role
Scope: communities:read
Get one community role in full: its fields, assigned permission tags, and join requirements. role_id from list_community_roles.
| Parameter | Type | Required | Description |
|---|---|---|---|
role_id | string | yes |
get_community_stats
Scope: communities:read
One-call overview of the connected community: member counts (approved/pending/suspended), moderators, tabs, roles, and content counts (discussions, events, resources, classroom courses/lessons, rooms) plus paid-membership snapshot.
invite_to_community
Scope: communities:write
Invite people into the connected community by email. Each address gets its own link; someone without a Wakato account signs up and lands in the community. Optionally names the role they are admitted into. The invitation comes from the community owner.
| Parameter | Type | Required | Description |
|---|---|---|---|
emails | string[] | yes | Up to 20 addresses. |
message | string | A note that rides along, max 500 chars. | |
role_id | string | From list_community_roles. Defaults to the first public role. |
list_community_catalog
Scope: communities:read
Discover the building blocks for community structure: tab_modules (about, members, products, feed, events, discussions, resources, rooms, custom_page…), permission_tags (for role permissions), and role_requirement_types (join rules). Call this first so add_community_tab / set_community_role_permissions / set_community_role_requirements use valid slugs.
list_community_courses
Scope: communities:read
List the connected community's classroom courses with lesson_count each.
list_community_discussion_categories
Scope: communities:read
List the connected community's discussion categories (optional groupings for threads).
list_community_discussion_replies
Scope: communities:read
List replies on a discussion thread (oldest first). discussion_id from list_community_discussions.
| Parameter | Type | Required | Description |
|---|---|---|---|
discussion_id | string | yes | |
limit | number |
list_community_discussions
Scope: communities:read
List the connected community's discussion threads (pinned first). Optionally filter by category_id.
| Parameter | Type | Required | Description |
|---|---|---|---|
category_id | string | ||
limit | number |
list_community_event_rsvps
Scope: communities:read
List RSVPs for a community event (going/maybe/not_going) plus its going_count. event_id from list_community_events.
| Parameter | Type | Required | Description |
|---|---|---|---|
event_id | string | yes | |
status | going | maybe | not_going | ||
limit | number |
list_community_events
Scope: communities:read
List the connected community's events with their line-up, admission settings (audience, allowed_role_ids, approval_required, capacity, ticket_product_id, rsvp_form_id) and private_details (organiser view). upcoming:true returns only future events.
| Parameter | Type | Required | Description |
|---|---|---|---|
upcoming | boolean | ||
limit | number |
list_community_lessons
Scope: communities:read
List lessons in a classroom course (title, content, video_url, attachments, sort_order).
| Parameter | Type | Required | Description |
|---|---|---|---|
course_id | string | yes |
list_community_members
Scope: communities:read
List the connected community's members with profile info. Filter by status (pending|approved|rejected|suspended|left). Use member ids with approve/reject/suspend/remove_community_member.
| Parameter | Type | Required | Description |
|---|---|---|---|
status | pending | approved | rejected | suspended | left | ||
limit | number | ||
offset | number |
list_community_moderators
Scope: communities:read
List the connected community's moderators with their permissions (approve_members, approve_products, edit_community).
list_community_pending_posts
Scope: communities:read
Discussions and replies waiting for review, because their author's role was granted the permission WITH approval. Empty unless a role has that switch on.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | number |
list_community_recordings
Scope: communities:read
Recorded sessions across the community's rooms, newest first, with the room they came from and a playable url when the recording is ready.
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | number |
list_community_resources
Scope: communities:read
List the connected community's resource-library items (links/files grouped by category).
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | number |
list_community_roles
Scope: communities:read
List the connected community's roles (id, slug, name, auto_approve, is_public).
list_community_rooms
Scope: communities:read
List the connected community's video/voice rooms (persistent + scheduled) with their status and settings.
list_community_tabs
Scope: communities:read
List the connected community's content tabs in display order (id, slug, name, module, config, sort_order, is_visible).
open_community
Scope: communities:write
Open a community FOR this space when it has none. It belongs to the space owner and is connected to the space in the same step, so every other community tool works on it immediately. Refuses when the space already runs one. The space owner must have allowed the agent to open one (space → Community page).
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Defaults to the space's own name. | |
description | string | ||
category | string | From list_community_catalog; defaults to 'community'. | |
visibility | public | private |
reject_community_member
Scope: communities:write
Reject a community member application (optional reason shown to the applicant).
| Parameter | Type | Required | Description |
|---|---|---|---|
member_id | string | yes | |
reason | string |
remove_community_member
Scope: communities:write
Permanently remove a member from the community.
| Parameter | Type | Required | Description |
|---|---|---|---|
member_id | string | yes |
remove_community_membership_plan
Scope: communities:write
Make the community free to join by archiving its active paid plan.
remove_community_moderator
Scope: communities:write
Demote a moderator (removes the community_moderators row).
| Parameter | Type | Required | Description |
|---|---|---|---|
moderator_id | string | yes |
remove_community_tab
Scope: communities:write
Remove a community tab. Deleting a tab also removes the content that lives on it (e.g. an Events tab's events, a Resources tab's resources).
| Parameter | Type | Required | Description |
|---|---|---|---|
tab_id | string | yes |
reorder_community_tabs
Scope: communities:write
Set the display order of the community's tabs. Pass tab_ids as the full ordered array of tab ids from list_community_tabs.
| Parameter | Type | Required | Description |
|---|---|---|---|
tab_ids | string[] | yes |
review_community_post
Scope: communities:write
Approve a pending discussion or reply so everyone can see it, or reject it. Use list_community_pending_posts to find them.
| Parameter | Type | Required | Description |
|---|---|---|---|
kind | thread | reply | ||
post_id | string | yes | |
approve | boolean | Default true. | |
reason | string | Why it was turned down. |
set_community_discovery
Scope: communities:write
Submit the community to the Wakato directory for review ('submit'), or take it back out ('withdraw'). A live community is always reachable by its own link either way.
| Parameter | Type | Required | Description |
|---|---|---|---|
action | submit | withdraw | yes |
set_community_member_role
Scope: communities:write
Assign a member to a role (or omit role_id to clear it). member_id from list_community_members, role_id from list_community_roles.
| Parameter | Type | Required | Description |
|---|---|---|---|
member_id | string | yes | |
role_id | string | Role id from list_community_roles; omit or null to clear the member's role. |
set_community_membership_plan
Scope: communities:write
Set (or replace) the community's paid membership plan. price_cents is in CENTS (min 100 = $1.00). billing one_time or subscription (subscription needs billing_interval month|year). lapse_behavior remove|downgrade.
| Parameter | Type | Required | Description |
|---|---|---|---|
billing | one_time | subscription | yes | |
price_cents | number | yes | |
currency | string | ||
billing_interval | month | year | ||
lapse_behavior | remove | downgrade |
set_community_referral_program
Scope: communities:write
Set (or replace) the community's Partner commission — the % of member sales the community keeps. commission_pct 0–50. terms optionally describes what sellers get for it (omit/null keeps existing terms). is_active defaults true; false pauses new agreements. Rate changes bump the program version: sellers who accepted an older rate keep it until they accept the new one.
| Parameter | Type | Required | Description |
|---|---|---|---|
commission_pct | number | yes | Percent of each member sale, 0–50. |
terms | string | What sellers get for the commission (shown at agreement time). | |
is_active | boolean |
set_community_role_permissions
Scope: communities:write
Replace a role's abilities. permissions is the full array of permission-tag slugs (from list_community_catalog), e.g. ["can_view_directory","can_post_feed","can_create_events"]. Empty array clears them all.
| Parameter | Type | Required | Description |
|---|---|---|---|
role_id | string | yes | |
permissions | string[] | yes |
set_community_role_requirements
Scope: communities:write
Replace a role's join requirements (gating applicants must meet). requirements is the full ordered array of { rule_type, config }, rule_type a slug from list_community_catalog (kyc_verified, email_verified, profile_complete, has_tag {tag_slug}, answers_custom_question {question,…}, min_account_age_days {days}). Empty array clears them.
| Parameter | Type | Required | Description |
|---|---|---|---|
role_id | string | yes | |
requirements | object[] | yes |
suspend_community_member
Scope: communities:write
Suspend an approved community member (revokes access; reversible by re-approving).
| Parameter | Type | Required | Description |
|---|---|---|---|
member_id | string | yes |
update_community
Scope: communities:write
Edit the connected community's profile & settings: name, description, short_description, logo_url, banner_url, visibility (public|private), category, media (ordered gallery [{ id, type, url, thumbnail_url, caption }]), and member_intro (the members-only welcome note shown at the top of the community interior — markdown, readable only by members; the description stays the public visitor pitch). (The community's cut of member sales is the Partner commission — see get/set_community_referral_program.)
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | ||
description | string | ||
short_description | string | ||
logo_url | string | ||
banner_url | string | ||
visibility | public | private | ||
category | commerce | services | jobs | dating | community | other | ||
media | object[] | ||
member_intro | string | Members-only welcome (markdown). What this place is FOR, what happens where, what to do first. Empty string clears it. |
update_community_course
Scope: communities:write
Edit a classroom course (title, description, cover_url, sort_order). course_id from list_community_courses.
| Parameter | Type | Required | Description |
|---|---|---|---|
course_id | string | yes | |
title | string | ||
description | string | ||
cover_url | string | ||
sort_order | number |
update_community_discussion
Scope: communities:write
Edit a discussion thread — title/body, pin/lock (moderation), or move to a category. discussion_id from list_community_discussions.
| Parameter | Type | Required | Description |
|---|---|---|---|
discussion_id | string | yes | |
title | string | ||
body | string | ||
is_pinned | boolean | ||
is_locked | boolean | ||
category_id | string |
update_community_event
Scope: communities:write
Edit a community event, including its admission controls (audience/allowed_role_ids, approval_required, ticket_product_id, rsvp_form_id, capacity, private_details — same semantics as create_community_event; private_details: null wipes the joining details). event_id from list_community_events. Passing people REPLACES the whole line-up — read it from list_community_events first and send the full list you want.
| Parameter | Type | Required | Description |
|---|---|---|---|
event_id | string | yes | |
title | string | ||
description | string | ||
location_type | online | in_person | ||
location | string | ||
starts_at | string | ||
ends_at | string | ||
cover_url | string | ||
video_url | string | ||
video_poster_url | string | ||
people | object[] | The event's line-up. REPLACES the whole list. A Wakato person needs user_id (attendees can then open their profile); anyone else needs name. | |
audience | community | roles | ||
allowed_role_ids | string[] | ||
approval_required | boolean | ||
approval_before_payment | boolean | ||
capacity | number,null | ||
ticket_product_id | string,null | null makes the event free again. | |
rsvp_form_id | string,null | null detaches the registration form. | |
private_details | object,null |
update_community_lesson
Scope: communities:write
Edit a classroom lesson (title, content, video_url, attachments, sort_order). lesson_id from list_community_lessons.
| Parameter | Type | Required | Description |
|---|---|---|---|
lesson_id | string | yes | |
title | string | ||
content | string | ||
video_url | string | ||
attachments | object[] | ||
sort_order | number |
update_community_membership_plan
Scope: communities:write
Patch the community's ACTIVE paid membership plan in place (price, interval, granted role, lapse behavior). Use set_community_membership_plan to create one, remove_community_membership_plan to make the community free.
| Parameter | Type | Required | Description |
|---|---|---|---|
billing | one_time | subscription | ||
price_cents | number | ||
currency | string | ||
billing_interval | month | year | ||
lapse_behavior | remove | downgrade | ||
grants_community_role_id | string | Role granted while the membership is active. | |
lapse_role_id | string | Role to downgrade to when it lapses (if lapse_behavior=downgrade). |
update_community_moderator
Scope: communities:write
Update a moderator's permissions. moderator_id is the community_moderators row id from list_community_moderators.
| Parameter | Type | Required | Description |
|---|---|---|---|
moderator_id | string | yes | |
permissions | object |
update_community_resource
Scope: communities:write
Edit a resource in the community library (title, description, url/file, category, order). resource_id from list_community_resources.
| Parameter | Type | Required | Description |
|---|---|---|---|
resource_id | string | yes | |
title | string | ||
description | string | ||
category | string | ||
url | string | ||
file_url | string | ||
file_name | string | ||
icon | string | A Lucide icon name (e.g. 'BookOpen') or an image URL. | |
sort_order | number |
update_community_role
Scope: communities:write
Edit a community role's fields (name, description, icon, color, auto_approve, is_public, sort_order). role_id from list_community_roles.
| Parameter | Type | Required | Description |
|---|---|---|---|
role_id | string | yes | |
name | string | ||
description | string | ||
icon | string | ||
color | string | ||
auto_approve | boolean | ||
is_public | boolean | ||
sort_order | number |
update_community_room
Scope: communities:write
Edit a community room (title, description, recording, schedule, access control). room_id from list_community_rooms.
| Parameter | Type | Required | Description |
|---|---|---|---|
room_id | string | yes | |
title | string | ||
description | string | ||
mode | audio | video | ||
record_sessions | boolean | ||
scheduled_start | string | ||
scheduled_end | string | ||
require_approval | boolean | ||
track_attendance | boolean | ||
schedule | object | ||
allowed_roles | string[] | ||
allowed_members | string[] |
update_community_tab
Scope: communities:write
Edit a community tab (name, icon, visibility, sort_order, or merge into its config). tab_id from list_community_tabs.
| Parameter | Type | Required | Description |
|---|---|---|---|
tab_id | string | yes | |
name | string | ||
icon | string | ||
config | object | Merged into the existing config. | |
sort_order | number | ||
is_visible | boolean |