Contacts
Space MCP tools in the Contacts scope (contacts). Reach these with a wks_live_ key over space-mcp or space-api.
Tools in the contacts scope, callable over space-mcp (tools/call) or space-api (REST) with a wks_live_* key that grants contacts.
add_contact_note
Scope: contacts:write
Add a short note to a contact's Memory — the running log a human reads to remember a person. One plain sentence per note. Preferred way to 'remember X about' or 'log a call/message on' a contact.
| Parameter | Type | Required | Description |
|---|---|---|---|
contact_id | string | yes | |
body | string | yes | One short plain sentence. |
add_social_identity
Scope: contacts:write
Attach a social identity (Instagram/X/LinkedIn/Facebook/TikTok/etc.) to a contact. Provide handle (no leading @) and/or external_id. This is what powers inbound DM matching — prefer it over the legacy social_media JSONB.
| Parameter | Type | Required | Description |
|---|---|---|---|
contact_id | string | yes | |
platform | string | yes | |
handle | string | ||
external_id | string | ||
profile_url | string | ||
display_name | string |
bulk_tag_contacts
Scope: contacts:write
Add and/or remove tags across many contacts in ONE call. Pass contact_ids plus add_tag_ids and/or remove_tag_ids. Prefer this over looping tag_contact.
| Parameter | Type | Required | Description |
|---|---|---|---|
contact_ids | string[] | yes | |
add_tag_ids | string[] | ||
remove_tag_ids | string[] |
count_contacts
Scope: contacts:read
Count contacts matching structured filters (search/company/location/relationship_type/tag_ids/has_email/has_phone/auto_created/created_after/created_before). Cheaper than listing when you only need a number.
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | ||
company | string | ||
location | string | ||
line_of_work | string | ||
relationship_type | string | ||
tag_ids | string[] | ||
has_email | boolean | ||
has_phone | boolean | ||
auto_created | boolean | ||
created_after | string | ||
created_before | string |
create_audience
Scope: contacts:write
Create a static (list) audience, optionally seeded with contact ids. Audiences target both email and SMS campaigns.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | |
description | string | ||
contact_ids | string[] |
create_contact
Scope: contacts:write
Create a new contact in the space. Only name is required (email is optional — social-DM/walk-in contacts have none). Name is split into first/last automatically; pass first_name/last_name explicitly for precise splitting. tags are matched/created by name.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | Full display name, e.g. 'Sarah Lee'. |
first_name | string | Optional — overrides the auto-split first name. | |
middle_name | string | ||
last_name | string | Optional — overrides the auto-split last name. | |
username | string | ||
email | string | Optional. | |
additional_emails | string[] | ||
phone | string | ||
company | string | ||
line_of_work | string | Job title / role. | |
location | string | ||
website | string | ||
birthday | string | ISO date YYYY-MM-DD. | |
avatar | string | Avatar image URL. | |
bio | string | ||
relationship_type | string | e.g. 'lead', 'client', 'contact', 'partner'. | |
how_we_met | string | ||
interests | string[] | ||
personal_notes | string | ||
social_media | object | JSONB map of platform → handle. | |
tags | string[] | Tag names — matched case-insensitively, created if missing. | |
custom_fields | object |
create_contact_section
Scope: contacts:write
Add a content section to a contact (documents/links/custom boxes). For simple 'remember X' notes prefer add_contact_note. section_type: notes | documents | links | insights | custom.
| Parameter | Type | Required | Description |
|---|---|---|---|
contact_id | string | yes | |
title | string | yes | |
section_type | string | ||
content | string | ||
metadata | object | ||
sort_order | number |
create_tag
Scope: contacts:write
Create a new contact tag. Colors: gray, red, orange, amber, yellow, green, teal, blue, indigo, purple, pink.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | yes | |
color | string | ||
description | string | ||
icon | string |
delete_contact
Scope: contacts:write
Permanently delete ONE contact by its id (cascades to its tags, notes, sections, and social identities). Destructive and irreversible — only call with an explicit contact_id the user unambiguously asked to delete. There is no bulk/filter delete; delete one id at a time.
| Parameter | Type | Required | Description |
|---|---|---|---|
contact_id | string | yes |
delete_contact_section
Scope: contacts:write
Permanently delete a contact section. Destructive.
| Parameter | Type | Required | Description |
|---|---|---|---|
section_id | string | yes |
delete_tag
Scope: contacts:write
Permanently delete a tag from this space (removes it from every contact). Destructive.
| Parameter | Type | Required | Description |
|---|---|---|---|
tag_id | string | yes |
get_contact
Scope: contacts:read
Fetch ONE contact by id with everything attached: all columns, tags, social identities, and recent sections. Use this to read a contact's full profile before editing.
| Parameter | Type | Required | Description |
|---|---|---|---|
contact_id | string | yes |
list_audiences
Scope: contacts:read
List audiences (saved contact groups used to target email and SMS campaigns).
list_contact_notes
Scope: contacts:read
List a contact's Memory notes, newest first.
| Parameter | Type | Required | Description |
|---|---|---|---|
contact_id | string | yes | |
limit | number | Max notes (default 20). |
list_contact_sections
Scope: contacts:read
List the content sections (notes/documents/links/insights/custom) attached to a contact.
| Parameter | Type | Required | Description |
|---|---|---|---|
contact_id | string | yes | |
section_type | string |
list_contacts
Scope: contacts:read
List contacts in the space. Supports search and pagination.
| Parameter | Type | Required | Description |
|---|---|---|---|
search | string | Match against name/email/company. | |
limit | number | ||
offset | number |
list_tags
Scope: contacts:read
List the contact tags in this space (id, name, color, description). Call before tagging to resolve tag names → ids.
merge_contacts
Scope: contacts:write
Merge two duplicate contacts: fold source_contact_id into target_contact_id. All threads, tags, sections, and social identities move to the target, then the source row is deleted. Prefer this over delete for de-duplication. Destructive — confirm before merging curated contacts.
| Parameter | Type | Required | Description |
|---|---|---|---|
source_contact_id | string | yes | The duplicate that will be deleted. |
target_contact_id | string | yes | The contact that survives and inherits everything. |
remove_social_identity
Scope: contacts:write
Delete a social identity row from a contact.
| Parameter | Type | Required | Description |
|---|---|---|---|
identity_id | string | yes |
tag_contact
Scope: contacts:write
Attach one tag to one contact.
| Parameter | Type | Required | Description |
|---|---|---|---|
contact_id | string | yes | |
tag_id | string | yes |
untag_contact
Scope: contacts:write
Detach one tag from one contact.
| Parameter | Type | Required | Description |
|---|---|---|---|
contact_id | string | yes | |
tag_id | string | yes |
update_audience
Scope: contacts:write
Rename an audience or add/remove member contacts.
| Parameter | Type | Required | Description |
|---|---|---|---|
audience_id | string | yes | |
name | string | ||
description | string | ||
add_contact_ids | string[] | ||
remove_contact_ids | string[] |
update_contact
Scope: contacts:write
Update fields on an existing contact. Only supplied fields change (pass null to clear one). Pass tag_ids to REPLACE the entire tag set (omit to leave tags unchanged). Get the contact first to resolve its id.
| Parameter | Type | Required | Description |
|---|---|---|---|
contact_id | string | yes | |
name | string | ||
first_name | string | ||
middle_name | string | ||
last_name | string | ||
username | string | ||
email | string | ||
additional_emails | string[] | ||
phone | string | ||
company | string | ||
line_of_work | string | ||
location | string | ||
website | string | ||
birthday | string | ||
avatar | string | ||
bio | string | ||
relationship_type | string | ||
how_we_met | string | ||
interests | string[] | ||
personal_notes | string | ||
social_media | object | ||
custom_fields | object | ||
tag_ids | string[] | REPLACES the full tag set. Resolve ids via list_tags. |
update_contact_section
Scope: contacts:write
Update an existing contact section's title, content, type, metadata, or sort_order.
| Parameter | Type | Required | Description |
|---|---|---|---|
section_id | string | yes | |
title | string | ||
section_type | string | ||
content | string | ||
metadata | object | ||
sort_order | number |
update_social_identity
Scope: contacts:write
Update an existing social identity row (handle, external_id, profile_url, display_name).
| Parameter | Type | Required | Description |
|---|---|---|---|
identity_id | string | yes | |
handle | string | ||
external_id | string | ||
profile_url | string | ||
display_name | string |
update_tag
Scope: contacts:write
Rename or restyle an existing tag.
| Parameter | Type | Required | Description |
|---|---|---|---|
tag_id | string | yes | |
name | string | ||
color | string | ||
description | string | ||
icon | string |