Skip to main content
Writes to your heyBTW workspace. It creates a List or adds members to one. It never removes a member, never creates a contact and never sends an invite.
Once the user has picked the people they want, save_list keeps them as a List. The List it saves is the one the Lists panel shows and the one activate_list invites. Follows the heyBTW MCP rules.

When to use it

  • “Save these 12 people as ‘LA dinner invites’.”
  • “Add the three I just found to my Q4 List.”
  • “Keep the people I imported from HubSpot as a List.”

Parameters

Pass exactly one of name or list_id. Only people the workspace already holds are saved: an email on one of its event sign-ups, or a person brought in with import_people. To save people from a CRM, call import_people first and pass its member_emails here.

Workflow

1

Save

Call with name or list_id, member_emails and a fresh client_request_id. There is no preview: a save only adds.
2

Report what was saved and rejected

Tell the user added_count, already_present_count and each entry in rejected_refs with its reason.
3

Choose the next door

There are two, and the user chooses:
  • Send Luma invites: pass the list_id to activate_list with a Luma event. This sends real invites after a preview and the user’s explicit confirmation.
  • Record invites the user sent themselves: pass the list_id to activate_list with destination_type: "external" and the collab’s target_channel_id. This sends nothing; it records the invites so the funnel counts them.
On a transport error, retry with the same client_request_id. A committed save is replayed (idempotent_replay: true), so a retried create never makes a second List. Reusing an id with different arguments is refused.

Response

A successful save was not captured for this page, because it would create a List in a production workspace. The shape below is from the tool’s code and contract.

Rules the agent must follow

  • Never retry a rejected reference against save_list. Import the person first with import_people.
  • Never simulate a saved List by holding emails across turns. Save it, then read it back with get_lists.
  • Never choose the external door for the user. Use it only when they say they sent the invites themselves.
  • A List is not attendance or sign-up.

Errors and gaps

This validation error is real, captured today from a call with no parameters. Validation reports one missing parameter at a time.
  • invalid_parameter: neither or both of name and list_id, member_emails empty or over 500, or a missing or malformed client_request_id.
  • insufficient_scope: the OAuth token lacks mcp:tools:write. Nothing is saved.
  • entitlement_required: the plan lacks MCP write.
  • A conflict when a client_request_id is reused with different arguments, or the same save is still in flight.