Skip to content

Workspace Setup & Memory

Create and onboard workspaces, send product feedback, and manage the durable facts agents remember.

Full name: campaignstack_get_workspace_memories

workspace:read Read-only

List workspace memories: active notes already used in prompts first, then candidate notes awaiting confirmation, each newest first. Each item carries status, observations (a candidate goes live at 3, from three different leads), direction (include: asks drafts to contain something; avoid: asks them to leave it out) and source (agent, user, or user_edit for notes learned from edits). Page with pagination.nextCursor while pagination.hasMore is true.

NameTypeRequiredDefaultDescription
categoryrule | voice | audience | lesson | otherNo—
limitintegerNo—Page size, default 50, at most 100. (min: 1, max: 100)
cursorstringNo—pagination.nextCursor from the previous page.
workspaceIdstringNo—Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too.

Full name: campaignstack_create_workspace

workspace:write Acts outside CampaignStack Needs confirmation

Create a workspace and build it. Give a company website (acme.com), a LinkedIn profile URL, or both, and CampaignStack sets up what a new sign-up gets: the company context, the playbook, a first campaign with its ideal customer profile, a workflow, and a lead pool. Pass goal when the user told you what the workspace is for, in their words and in the first person: it becomes the campaign goal word for word, and without it one is written from the website and profile. Leave name out unless the user chose one; the company’s name is used. A website alone is enough and needs no LinkedIn account: the workspace is whole and outreach waits until an account is linked with campaignstack_edit_workspace_accounts or connected under Accounts in the app. A profile URL is read through the user’s own connected LinkedIn account, so it needs one. With neither URL you get a blank workspace and must name it. Returns the workspaceId at once and, when a build started, a generationId to follow with campaignstack_get_workspaces. Needs a user key or a signed-in connection: a workspace key is one workspace and cannot create another. One build runs at a time, and a free account owns at most two workspaces.

NameTypeRequiredDefaultDescription
namestringNo—Only when the user chose a name. Otherwise the company name from the website is used. (min length: 3, max length: 50)
websiteUrlstringNo—The company website this workspace sells for, e.g. acme.com. Enough on its own. (min length: 4, max length: 500)
profileUrlstringNo—linkedin.com/in/… of the person the workspace writes as, when it is not the user’s own profile (an agency setting up a client). Read through the user’s own connected LinkedIn account. (min length: 10, max length: 500)
goalstringNo—What this workspace should get done, first person, as the user said it. Becomes the campaign goal verbatim. (max length: 1000)

Full name: campaignstack_edit_workspace_memory

workspace:write

Apply a pending workspace memory candidate so it becomes active in future prompts. A no-op when the memory is already active.

NameTypeRequiredDefaultDescription
memoryIdstringYes—Memory id from campaignstack_get_workspace_memories (min length: 1)
workspaceIdstringNo—Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too.

Full name: campaignstack_onboard_workspace

onboarding:write

Set up a CampaignStack workspace: who the user works for, what that company sells, why it exists, how they write, and who they sell to.

Call this with no arguments FIRST. It returns what CampaignStack already knows, including the employer company resolved from the user’s LinkedIn profile and any facts already gathered on it, plus every field you can write and its current value. Read that before you propose anything: your job is to correct and complete what is there, not to describe the company from scratch.

Then call it again with the fields you are confident about. Confidence means you can point to something specific: their profile, their company page, their site, something they told you. When you are not confident about a field, leave it out. An empty field is fixed in ten seconds by the user. A plausible sentence that is wrong gets read into every message the system writes for them, and nobody catches it until a prospect does.

Report back in plain language what you set and what you left empty, so the user can correct you before any of it reaches a message.

NameTypeRequiredDefaultDescription
workspaceIdstringNo—Defaults to the workspace the extension set up for this key, or the key’s workspace.
companyNamestringNo—The company the user works for. (max length: 120)
whatWeSellstringNo—What the company sells, in one or two plain sentences. Facts only. (max length: 600)
whyWeBuiltItstringNo—Why the company exists: the specific thing the founder saw that made it worth building. Omit unless it is concrete and checkable. (max length: 500)
voicestringNo—How this person writes: sentence length, formality, punctuation habits, phrases they reuse. Describe, never instruct. (max length: 1200)
firstIcpobjectNo—A first ideal customer profile. At least one list is required for it to be written.
firstIcp.descriptionstringNo—Who they sell to, in one sentence. Becomes the first campaign’s goal. (max length: 500)
firstIcp.titlesstring[]No—Job titles of the buyer.
firstIcp.industriesstring[]No—Industries of the buyer’s company.
firstIcp.senioritiesstring[]No—Seniority levels, e.g. VP, Director, Founder.
firstIcp.companySizesstring[]No—Company size ranges, e.g. 11-50, 51-200.
firstIcp.keywordsstring[]No—Other profile keywords that identify the buyer.

Full name: campaignstack_submit_feedback

workspace:write

Submit a feedback report or bug report to the CampaignStack team. Call this when the user asks to report a bug, request a feature, or send feedback from this conversation. Mirrors the in-app feedback widget: same store, same email notification. Categories: ‘bug’, ‘feature’, ‘question’, ‘other’. It does not open a support ticket or get a reply back through this connection.

NameTypeRequiredDefaultDescription
workspaceIdstringNo—Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too.
categorybug | feature | question | otherYes—Feedback category: bug (something broken), feature (new capability request), question (how-to), other
messagestringYes—The feedback body text (min length: 1)
routestringYes—The app route or context where the feedback originates (e.g. ‘/dashboard/campaigns’ or ‘mcp-agent’) (min length: 1)

Full name: campaignstack_delete_workspace_memory

workspace:write Destructive Needs confirmation

Permanently delete one workspace memory candidate or active fact. Requires confirmed:true. This permanently deletes a root record. Before calling it, name exactly what will be deleted, explain that it cannot be undone, and wait for an explicit yes.

NameTypeRequiredDefaultDescription
memoryIdstringYes—Memory id from campaignstack_get_workspace_memories (min length: 1)
workspaceIdstringNo—Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too.
confirmedbooleanYes—This permanently deletes a root record. Before calling it, name exactly what will be deleted, explain that it cannot be undone, and wait for an explicit yes.