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_*).
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | Template name |
description | string | ||
components | string[] | yes | Component 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. |
selections | object | Optional 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
team_id | string | yes |
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.
| Parameter | Type | Required | Description |
|---|---|---|---|
service_keys | string[] | yes | service_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.
| Parameter | Type | Required | Description |
|---|---|---|---|
service_keys | string[] | yes | service_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.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Words from its title, note, site or author ("youtube pricing", "cold email"). Leave out to list by date. | |
on | string | One day, YYYY-MM-DD — "the link I saved on December 5" is on: "2026-12-05" (their timezone). | |
from | string | From this day (YYYY-MM-DD), inclusive. | |
to | string | Up to this day (YYYY-MM-DD), inclusive. | |
kind | video | link | place | note | post | video | link | place | note | post (a Network post they kept). | |
list | string | A list's name ("Growth ideas"). | |
limit | integer | At 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).
| Parameter | Type | Required | Description |
|---|---|---|---|
hours | number | Window size, default 168 (7 days), max 2160 (90 days). | |
since | string | ISO timestamp; overrides hours when set. | |
sample | number | How many recent entries to include verbatim (default 10, max 50). | |
include_presence | boolean | Include machine liveness pings. Default false — only set this when specifically investigating agent uptime. |
get_link
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.
| Parameter | Type | Required | Description |
|---|---|---|---|
kind | string | yes | One of the item or surface kinds listed in the tool description. |
id | string | Item id (uuid) — required for item kinds. Kind 'community' also accepts the community slug. | |
username | string | For kind 'profile': the profile username. | |
tab | string | For 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
actor_type | user | api_key | space_agent | reach | wakato_ai | automation | system | ||
source | db | space_mcp | space_api | automation | reach | wakato_ai | ||
resource_type | string | e.g. 'contact', 'table_row', 'automation'. | |
action | string | Exact key ('create_contact') or a bare verb ('create') to prefix-match. | |
since | string | ISO timestamp — only entries at or after this. | |
limit | number | Default 50, max 200. | |
include_presence | boolean | Include 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
deep | boolean | Also 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
slugs | string[] | yes | Note 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | yes | What you are trying to remember, in plain words — a topic, a decision, a name, a thing someone said. |
since | string | Optional ISO date/time: only what happened after this. | |
until | string | Optional ISO date/time: only what happened before this. | |
limit | number | How 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
team_id | string | Leave out to make a new team. | |
name | string | ||
description | string,null | ||
member_ids | string[] | ||
add_member_ids | string[] | ||
remove_member_ids | string[] |
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.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | yes | What to look for — words from titles, hooks, tags, slugs, or body text. |
note_type | person | decision | preference | project | reference | gotcha | Optional filter to one note type. | |
tag | string | Optional filter to notes carrying this tag. | |
include_inactive | boolean | Also 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
timezone | string | IANA timezone, or null to inherit the account default. | |
language | string | BCP-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).
| Parameter | Type | Required | Description |
|---|---|---|---|
mode | append | edit | rewrite | yes | DEPRECATED — use write_memory_note. Only append still works (creates a note). |
content | string | append: the text to save. | |
find | string | Unsupported — use write_memory_note. | |
replace | string | Unsupported — 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
primary_color | string | Dominant brand color — headers, logos, main surfaces. | |
accent_color | string | Call-to-action color — buttons, links, highlights. | |
text_color | string | Default body text color. | |
background_color | string | Default page/email background. | |
border_color | string | Rules, card edges, table borders. | |
heading_font | string | CSS font stack for headings. | |
body_font | string | CSS font stack for body copy. | |
logo_url | string | Primary logo, for light backgrounds. | |
logo_dark_url | string | Logo variant for dark backgrounds. | |
social_links | object[] | [{ platform, url }] — platform: facebook|x|twitter|instagram|youtube|linkedin|tiktok|website|email. Max 8. | |
legal_name | string | Name for footers, invoices and imprints — e.g. "Acme Inc." where the space is called "Acme". | |
tagline | string | One line describing what the business does. | |
address | string | Postal address, freeform. Also used as the CAN-SPAM address on bulk email. | |
phone | string | Public contact number for display — not a phone number the space routes calls through. | |
contact_email | string | Public contact address, e.g. hello@acme.com. | |
website_url | string | Canonical 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.
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Note to create or update (kebab-case). Omit to derive from title. ALWAYS reuse the existing slug when updating. | |
title | string | Short note title (required when creating). | |
note_type | person | decision | preference | project | reference | gotcha | person | decision | preference | project | reference | gotcha. Default reference. | |
tags | string[] | Up to 8 lowercase tags. | |
hook | string | The note's index line (≤150 chars) — one dense sentence a future session can act on. Required when creating. | |
body | string | Markdown body (≤8000 chars). Link related notes with [[slug]] and live entities with e.g. [[contact:UUID]]. | |
pinned | boolean | Pinned notes ride into EVERY session (max 5 / 12k chars per vault) — reserve for standing context like who the owner is. | |
status | active | superseded | archived | Retire a note by setting superseded (fact changed) or archived (no longer relevant) — never delete knowledge. | |
superseded_by_slug | string | When superseding: the slug of the replacement note (write it first). |