Integrations
Space MCP tools in the Integrations scope (integrations). Reach these with a wks_live_ key over space-mcp or space-api.
Tools in the integrations scope, callable over space-mcp (tools/call) or space-api (REST) with a wks_live_* key that grants integrations.
list_integrations
Scope: integrations:read
What this space can reach, and how to get more: on_in_this_space (connected accounts — mail, calendar, social, ads, bank — and your APIs with the calls each allows), owner_has_but_not_on_here (accounts that one tap turns on here), wakato_signs_in_to (every connector Wakato signs in to itself → request_connection), and the rule for anything else (→ request_integration with a key). Call it before saying something isn't connected or can't be.
request_connection
Scope: integrations:write
Connect something Wakato signs in to itself — Gmail, Microsoft Outlook, Google Calendar, a social account (Instagram, Facebook, X, LinkedIn, TikTok, YouTube, Pinterest, Threads, Bluesky, Reddit, Telegram, WhatsApp, Google Business…), an ads account (Meta, Google, LinkedIn, TikTok, Pinterest, X Ads) or a bank account. A card appears in this chat: if the person already has that account it is turned on here with one tap, otherwise the sign-in opens right in the chat and the new account is turned on in this space. You get a message when it's done. Use this instead of describing any page or menu. For any other service, use request_integration.
| Parameter | Type | Required | Description |
|---|---|---|---|
connector | string | yes | Which one — a key from list_integrations → wakato_signs_in_to, e.g. gmail, google_calendar, instagram, metaads, bank. |
purpose | string | yes | One sentence on the card: what you'll do with it. Required. |
request_integration
Scope: integrations:write
Connect an API that Wakato does not sign in to itself — GitHub, Stripe, Shopify, Notion, HubSpot, Airtable, an internal service — with a KEY OR TOKEN the person pastes into a card in this chat. Nearly every service issues one even when it also has a 'sign in with' button (GitHub: a personal access token; Shopify: an Admin API access token), so look up what the service uses before saying it can't be done. You write the card: which API (base_url), how it authenticates, the exact calls you will make (actions, REQUIRED — nobody should hand over a key without seeing what it's for), the boxes to fill (credential_fields, one per value, each with a label, a help line saying what it is and where to find it, secret: false for a value that isn't secret such as a store address, an example, and a format the card checks softly as they paste), and a guide — the steps to get the key, with the page's https link. The person pastes into the card, never into the chat, and you never see the value. For something Wakato signs in to itself (list_integrations → wakato_signs_in_to: Gmail, Outlook, Google Calendar, social, ads, bank) use request_connection instead. Never tell anyone to go to a settings page.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | The service, as a person would name it — e.g. GitHub. |
base_url | string | yes | API root, https only — e.g. https://api.github.com. When the address depends on the person's account, name a field in braces: https://{store_domain}/admin/api/2025-07 — that field must be in credential_fields with secret: false; the typed value is filled in and checked at approval. |
auth_type | api_key | bearer_token | custom_header | basic_auth | How the key is sent. bearer_token = 'Authorization: Bearer <token>' (GitHub, Notion, HubSpot, Airtable…). api_key / custom_header = in a named header (set auth_header). basic_auth = username + password (Stripe: the secret key as username, empty password → prefer bearer_token for Stripe). Default api_key. | |
auth_header | string | For api_key / custom_header: the header that carries the key, e.g. X-Shopify-Access-Token. Default X-API-Key. | |
actions | object[] | yes | REQUIRED. The calls you intend to make: [{ name, method, path, description }]. Ask for the narrowest set that does the job — a reviewer seeing 'everything' will decline. |
credential_fields | object[] | One box per value the person must paste — LABELS AND HINTS ONLY, never a value: [{ key, label, help, secret?, example?, format?: { starts_with?: string[], min_length?, max_length?, kind?: 'text'|'domain'|'email'|'url'|'digits', mistakes?: [{ starts_with, say }] }, optional? }]. help = what it is and where it appears ('Starts with shpat_. Shown once, right after you install the app.'). mistakes names a look-alike they might paste by accident and the sentence that says so ({ starts_with: 'shpss_', say: "That's the app's secret key, not the access token." }). The key/token field may use any key — it is filed under the name the auth type needs. Omit for a single default box. | |
guide | object | How to get the key(s), shown on the card above the boxes: { steps: string[] (≤8 short steps, in the order they click, naming the permissions to tick — the narrowest that works), url: 'https://…' (the exact page where the key is made), minutes?: number }. Write it from the service's current docs; check them if unsure. | |
description | string | What this integration is for. | |
category | string | Grouping, e.g. development, crm, payments. | |
instructions | string | Notes stored with the integration (rate limits, quirks). | |
purpose | string | Why you need it — shown on the card. Be specific; it's how they decide. |