Space Settings

Space MCP tools in the Space Settings scope (space_settings). Reach these with a wks_live_ key over space-mcp or space-api.

Tools in the space_settings scope, callable over space-mcp (tools/call) or space-api (REST) with a wks_live_* key that grants space_settings.

create_space_snapshot

Scope: space_settings:write

Make a TEMPLATE of THIS SPACE (people see it under Backstage → Templates) that the owner can start a new space from, or add into a space they have (matched, never duplicated). components picks what goes in (see preview_space_snapshot); data-bearing components (table_rows, contacts) are included deliberately. Agents go in as agent templates (recipes: instructions, permissions — never their chat, memory or machine) and only when the key's owner runs the space. Read-only — the space is not modified. Returns the template with its typed public_id (snap_space_*).

ParameterTypeRequiredDescription
namestringyesTemplate name
descriptionstring
componentsstring[]yesComponent keys to include: pages (incl. their websites/landing-page sites — grouping, nav, kind), forms, documents, tables, table_rows, automations, booking_pages, message_templates, agents (as recipes), agentic_apps, contact_views, tasks (projects + their tasks), finance (chart of accounts), blog, assets (with their folders), mail_templates, email_campaigns, sms_campaigns, call_campaigns, audiences, calendar, business_research, tags, contacts.
selectionsobjectOptional per-component item id allowlists, e.g. { "pages": ["<id>"] }. Missing key = include everything for that component.

delete_team

Scope: space_settings:write

Delete a team. Its table lines go with it; nobody leaves the space — its people fall back to their own line, another team, or Everyone else. Always asks the owner first.

ParameterTypeRequiredDescription
team_idstringyes

disable_services

Scope: space_settings:write

Remove Gateway services from this space's allowlist. Removing the LAST assignment returns the space to the platform default where ALL active services are available (stated in the response). Accepts multiple service_keys per call.

ParameterTypeRequiredDescription
service_keysstring[]yesservice_key values (from list_services) to remove from the space's allowlist

enable_services

Scope: space_settings:write

For an agent: the same as request_service — a card the owner approves. For a person's own key: assign Gateway services to this space's allowlist. SEMANTICS: a space with no assignments can already use EVERY active service; assigning the first service switches the space to a curated allowlist restricted to exactly what's assigned. Accepts multiple service_keys per call.

ParameterTypeRequiredDescription
service_keysstring[]yesservice_key values from list_services to assign to the space

find_kept

Scope: space_settings:read

What the person you are answering KEPT in Wakato (More → Kept): videos, links, places, notes and Network posts they saved, newest first — "the YouTube link I saved on December 5", "that article about cold email". Search by words (query), by the day they kept it (on / from / to, YYYY-MM-DD, their timezone), by kind or by list. Each item has its title, url, note, and when it was kept. Only the person who wrote the message you are answering — never anyone else's. Open a link yourself if the task needs what is in it.

ParameterTypeRequiredDescription
querystringWords from its title, note, site or author ("youtube pricing", "cold email"). Leave out to list by date.
onstringOne day, YYYY-MM-DD — "the link I saved on December 5" is on: "2026-12-05" (their timezone).
fromstringFrom this day (YYYY-MM-DD), inclusive.
tostringUp to this day (YYYY-MM-DD), inclusive.
kindvideo | link | place | note | postvideo | link | place | note | post (a Network post they kept).
liststringA list's name ("Growth ideas").
limitintegerAt most this many (default 20).

get_activity_digest

Scope: space_settings:read

Catch up on what CHANGED in this space over a window — grouped counts by actor, action, and resource type, plus the most recent entries. Covers people and agents alike (human edits via DB triggers, agent actions via space-mcp/space-api/automations/agents' Reach). Use this before the raw feed: it answers 'what happened while I was gone?' in a paragraph instead of hundreds of rows. Reads only mutations — list/get calls are never logged. Machine presence heartbeats are excluded by default (they are ~97% of the raw log and are not activity).

ParameterTypeRequiredDescription
hoursnumberWindow size, default 168 (7 days), max 2160 (90 days).
sincestringISO timestamp; overrides hours when set.
samplenumberHow many recent entries to include verbatim (default 10, max 50).
include_presencebooleanInclude machine liveness pings. Default false — only set this when specifically investigating agent uptime.

Scope: space_settings:read

Get the canonical CLICKABLE URL for anything you've built or want to point the user at — an item (page, whiteboard, form, booking_page, document, table, blog_post, blog_collection, automation, agent (its page; reach with a reach_id lands there too), app, mail_campaign, sms_campaign, call_campaign, payment_link, listing, community, meeting, task_project) or a whole surface (space, pages, forms, documents, tables, contacts, automations, blog, mail, phone, calendar, meet, tasks, social, ads, finance, settings, assets, snapshots, space_computer, app_builder, agent_reach, templates, commerce, business_research, integrations, activity, backstage, dashboard, pm). Returns { url, title, is_public, note }: is_public=true URLs work for anyone; is_public=false URLs open in-app for signed-in members (fine for the owner). When the item isn't live yet (draft page/form), the url opens its editor and note says how to make it public. ALWAYS give the user links as clickable markdown title; prefer url fields already present in tool results, use this tool when a result has none, and NEVER hand-construct wakato.io URLs.

ParameterTypeRequiredDescription
kindstringyesOne of the item or surface kinds listed in the tool description.
idstringItem id (uuid) — required for item kinds. Kind 'community' also accepts the community slug.
usernamestringFor kind 'profile': the profile username.
tabstringFor kind 'backstage': optional tab key.

get_memory

Scope: space_settings:read

Read your memory as every session starts with it: About itself, your index, your pinned notes — the same doc your machine keeps as CLAUDE.md/AGENTS.md. Memory is a vault of small typed notes — the ONLY context that survives across threads (each PM thread is a fresh session). The profile blocks (About you / About itself), the index (every note's hook line) and the pinned notes load every session; fetch the rest with search_memory (words AND meaning) → read_memory_notes. WRITE RULES: search before writing; update the existing note (same slug) instead of creating a near-duplicate; save durable knowledge — decisions, preferences, people, project state, gotchas — never chit-chat and never data you can read live from platform tools (reference the entity instead, e.g. [[contact:UUID]]). When a fact changes, update the note or mark it superseded; link related notes with [[slug]]. Keep hooks tight — they ARE the index. Keep your profile block current: write slug profile-self (who you are here, how you work, the standing rules) with just a body — a few sentences, only what is always true. What you learn about a person is a person note named after them.

get_space_brand

Scope: space_settings:read

Read this space's BRAND RECORD: colors by role (primary / accent / text / background / border), heading + body font stacks, logo URLs (light and dark), official social links, AND the contact details that belong in a footer — legal_name (the name for footers, invoices and imprints, often not the space name), tagline, address, phone, contact_email, website_url. Colors are stored by role so you know which is which — accent_color is the call-to-action/button color, primary_color is the dominant brand surface. Call this before designing anything visual (email, page, app, ad, social post) when the work should look like the brand, and before writing any footer or contact section so you print the real address instead of a placeholder. Advisory, not enforced: if is_set is false there is no brand on file and you should design as you see fit — never invent contact details, ask the owner. address is the same one the CAN-SPAM email footer uses.

get_space_settings

Scope: space_settings:read

Read this space's identity + localization: name, description, timezone, language, and the RESOLVED effective_timezone the space actually uses. Call this to learn the space timezone before scheduling or quoting times.

list_activity

Scope: space_settings:read

The raw space activity log, newest first — every change by people and agents. Filterable by actor_type, source, resource_type, action, and time. Prefer get_activity_digest for a broad 'what happened' question; use this to drill into a specific actor, resource, or incident. Reads only mutations — list/get calls are never logged.

ParameterTypeRequiredDescription
actor_typeuser | api_key | space_agent | reach | wakato_ai | automation | system
sourcedb | space_mcp | space_api | automation | reach | wakato_ai
resource_typestringe.g. 'contact', 'table_row', 'automation'.
actionstringExact key ('create_contact') or a bare verb ('create') to prefix-match.
sincestringISO timestamp — only entries at or after this.
limitnumberDefault 50, max 200.
include_presencebooleanInclude machine liveness pings. Default false — they are ~97% of the raw log and would bury everything else.

list_space_members

Scope: space_settings:read

Who works in this space: the owner, admins and members with their names and roles — the same list as the space's Members page. A fact, looked up when a task needs it; never copy it into memory. What you LEARN about a person (how they like things, what they asked for) is a person note named after them.

list_teams

Scope: space_settings:read

The space's teams — each a name and some of its people — with who is in each and the tables each has a line on (level, own rows, hidden columns). Teams are for table access; a group is a chat in Messages, not a team.

memory_maintenance

Scope: space_settings:read

Check the memory vault's health: how full the index and pins are against the budgets that block writes, which notes have gone stale, and which pairs look like near-duplicates. MERGING IS YOUR CALL, not the platform's: read both notes of a pair, and if they say the same thing, write the better-worded one (same slug) with the merged content and mark the other superseded (status='superseded', superseded_by_slug=the survivor) — never delete knowledge, and never merge two notes that only look alike. Do this when the nudge appears in memory, or when the owner asks you to tidy memory.

ParameterTypeRequiredDescription
deepbooleanAlso scan for near-duplicate notes (pairwise; runs on vaults up to 200 notes). Default true.

preview_space_snapshot

Scope: space_settings:read

Preview what a SPACE TEMPLATE of this space would hold (people call it a template; Backstage → Templates): per-component counts and individual items (pages, forms, documents, tables, table_rows, automations, booking_pages, message_templates, agents, agentic_apps, contact_views, tasks, finance, blog, assets, mail_templates, email_campaigns, sms_campaigns, call_campaigns, audiences, calendar, business_research, tags, contacts).

read_memory_notes

Scope: space_settings:read

Load full memory notes by slug (max 8), with backlinks — which other notes reference each one. Follow [[slug]] links you find in bodies with another call.

ParameterTypeRequiredDescription
slugsstring[]yesNote slugs to load in full (max 8). Comes with backlinks — which notes reference each one.

recall_conversations

Scope: space_settings:read

Remember what HAPPENED, and when — your own past chats, searched by meaning and by time: "what did we decide about pricing last week", "when did Sam ask for the cut". Returns episodes (the reflection pass's summaries of your past threads, with their period) and the messages that match the words. The chat is the record: cite the date, and offer to open the thread. Notes are what you KNOW; this is what happened.

ParameterTypeRequiredDescription
querystringyesWhat you are trying to remember, in plain words — a topic, a decision, a name, a thing someone said.
sincestringOptional ISO date/time: only what happened after this.
untilstringOptional ISO date/time: only what happened before this.
limitnumberHow many episodes to return (default 6, max 20).

save_team

Scope: space_settings:write

Make a team (no team_id) or change one: its name, what it's for (description), and who is in it — member_ids replaces the list, or add_member_ids / remove_member_ids change it. Only people in the space (list_space_members). Someone added gets what the team's table lines allow at once. Always asks the owner first.

ParameterTypeRequiredDescription
team_idstringLeave out to make a new team.
namestring
descriptionstring,null
member_idsstring[]
add_member_idsstring[]
remove_member_idsstring[]

search_memory

Scope: space_settings:read

Search your memory by WORDS and by MEANING ("the guy from the coffee shop" finds Marc). Returns matching notes' index lines (slug, title, type, hook, via = words | meaning) — load full bodies with read_memory_notes. Memory is a vault of small typed notes — the ONLY context that survives across threads (each PM thread is a fresh session). The profile blocks (About you / About itself), the index (every note's hook line) and the pinned notes load every session; fetch the rest with search_memory (words AND meaning) → read_memory_notes. WRITE RULES: search before writing; update the existing note (same slug) instead of creating a near-duplicate; save durable knowledge — decisions, preferences, people, project state, gotchas — never chit-chat and never data you can read live from platform tools (reference the entity instead, e.g. [[contact:UUID]]). When a fact changes, update the note or mark it superseded; link related notes with [[slug]]. Keep hooks tight — they ARE the index. Keep your profile block current: write slug profile-self (who you are here, how you work, the standing rules) with just a body — a few sentences, only what is always true. What you learn about a person is a person note named after them.

ParameterTypeRequiredDescription
querystringyesWhat to look for — words from titles, hooks, tags, slugs, or body text.
note_typeperson | decision | preference | project | reference | gotchaOptional filter to one note type.
tagstringOptional filter to notes carrying this tag.
include_inactivebooleanAlso search superseded/archived notes (history questions). Default false.

set_space_settings

Scope: space_settings:write

Update this space's LOCALIZATION only — timezone and/or language (what calendars, schedules, and agents in the space use). Pass an IANA timezone e.g. "America/Chicago", or null to inherit the account default. Cannot change ownership, API keys, or webhooks.

ParameterTypeRequiredDescription
timezonestringIANA timezone, or null to inherit the account default.
languagestringBCP-47 language tag, or null to inherit the account default.

update_memory

Scope: space_settings:read

DEPRECATED single-doc memory writer — use write_memory_note. Only mode=append still works (it creates a note in your own vault).

ParameterTypeRequiredDescription
modeappend | edit | rewriteyesDEPRECATED — use write_memory_note. Only append still works (creates a note).
contentstringappend: the text to save.
findstringUnsupported — use write_memory_note.
replacestringUnsupported — use write_memory_note.

update_space_brand

Scope: space_settings:write

Write the space's brand record — use it to set the brand up on the owner's behalf ("here are our colors and fonts", "our address is…") or to correct one field. Only the fields you pass are changed; pass null to clear one. Colors must be hex (#RRGGBB or #RGB). Fonts are full CSS stacks, e.g. "Inter Tight, Helvetica, Arial, sans-serif". Contact details must come from the owner — never guess an address, phone or legal name from context. Writing address also changes the postal address appended to bulk email for CAN-SPAM.

ParameterTypeRequiredDescription
primary_colorstringDominant brand color — headers, logos, main surfaces.
accent_colorstringCall-to-action color — buttons, links, highlights.
text_colorstringDefault body text color.
background_colorstringDefault page/email background.
border_colorstringRules, card edges, table borders.
heading_fontstringCSS font stack for headings.
body_fontstringCSS font stack for body copy.
logo_urlstringPrimary logo, for light backgrounds.
logo_dark_urlstringLogo variant for dark backgrounds.
social_linksobject[][{ platform, url }] — platform: facebook|x|twitter|instagram|youtube|linkedin|tiktok|website|email. Max 8.
legal_namestringName for footers, invoices and imprints — e.g. "Acme Inc." where the space is called "Acme".
taglinestringOne line describing what the business does.
addressstringPostal address, freeform. Also used as the CAN-SPAM address on bulk email.
phonestringPublic contact number for display — not a phone number the space routes calls through.
contact_emailstringPublic contact address, e.g. hello@acme.com.
website_urlstringCanonical website URL.

write_memory_note

Scope: space_settings:read

Create or update ONE memory note (upsert by slug — reuse the slug to update, never create near-duplicates; search_memory first). Memory is a vault of small typed notes — the ONLY context that survives across threads (each PM thread is a fresh session). The profile blocks (About you / About itself), the index (every note's hook line) and the pinned notes load every session; fetch the rest with search_memory (words AND meaning) → read_memory_notes. WRITE RULES: search before writing; update the existing note (same slug) instead of creating a near-duplicate; save durable knowledge — decisions, preferences, people, project state, gotchas — never chit-chat and never data you can read live from platform tools (reference the entity instead, e.g. [[contact:UUID]]). When a fact changes, update the note or mark it superseded; link related notes with [[slug]]. Keep hooks tight — they ARE the index. Keep your profile block current: write slug profile-self (who you are here, how you work, the standing rules) with just a body — a few sentences, only what is always true. What you learn about a person is a person note named after them. Every change is versioned — the owner sees a 'Noted · …' line in the chat with Undo, and can review or roll back on your page. A note the owner refused is never written again. Memory is YOURS alone: what the whole team must know goes in a document, not a note.

ParameterTypeRequiredDescription
slugstringNote to create or update (kebab-case). Omit to derive from title. ALWAYS reuse the existing slug when updating.
titlestringShort note title (required when creating).
note_typeperson | decision | preference | project | reference | gotchaperson | decision | preference | project | reference | gotcha. Default reference.
tagsstring[]Up to 8 lowercase tags.
hookstringThe note's index line (≤150 chars) — one dense sentence a future session can act on. Required when creating.
bodystringMarkdown body (≤8000 chars). Link related notes with [[slug]] and live entities with e.g. [[contact:UUID]].
pinnedbooleanPinned notes ride into EVERY session (max 5 / 12k chars per vault) — reserve for standing context like who the owner is.
statusactive | superseded | archivedRetire a note by setting superseded (fact changed) or archived (no longer relevant) — never delete knowledge.
superseded_by_slugstringWhen superseding: the slug of the replacement note (write it first).

On this page