Documentation / Reference

MCP Tool Reference

All 320 tools an agent can call through a workspace's MCP endpoint — generated straight from the code.

Diese Referenz entsteht direkt aus der Tool-Registry des Produkts. Jede Zeile entspricht dem Code, nicht einer Beschreibung, die jemand nachgetragen hat.

Sie müssen sie nicht abtippen: ein MCP-Client fragt Namen, Beschreibung und Parameter beim Verbinden selbst ab. Diese Seite ist zum Nachlesen und für Suchmaschinen und Agenten, die vorab wissen wollen, was möglich ist.

Agents

Create/manage AI agents, agent memory and learnings, agent chains (beta)

add_workflow_step

Add a step to an existing chain. By default appends to the end; set insert_after to insert at a specific position (1-based). Agent step: pass agent_id + message_template. Deterministic steps: type=http_request (url, method, headers, body_template), type=add_table_rows (table_id + rows_field/row_template), type=enroll_sequence (sequence_id, channel) or type=feed_notify (message_template + optional title/action_type/lead_id_field — posts a card into the Feed).

create_agent

Create a new subagent for this workspace. The agent gets its own system prompt, model, and tool access controls.

Example: Create a ‘Lead Qualifier’ agent that only has access to research + qualification tools, with a specialized prompt for evaluating company fit.

Trigger types:

  • keyword: { type: ‘keyword’, pattern: ‘qualify *’ } — invoked when message matches pattern
  • event: { type: ‘event’, event: ‘lead_replied’ } — invoked on system event
  • schedule: { type: ‘schedule’, cron: ‘0 9 * * 1’ } — runs on schedule
  • channel: { type: ‘channel’, channel_id: ‘uuid’ } — default agent for a channel

create_workflow

Create a Workflow — the event-driven automation (per event: webhook, schedule, or manual run). Steps run in order, passing outputs forward: agent steps (bounded judgment, any connected MCP), deterministic steps (API call, add table rows, enroll into a Sequenz, post a feed card), and conditions. Use it for the automation AROUND Tabellen and Sequenzen — per-row work belongs in a table column, per-lead touch plans in a Sequenz. Dry-runnable via run_workflow(dry_run=true). IMPORTANT: for agent steps call list_agents first to get real agent IDs; if an agent doesn’t exist, create it with create_agent before creating the workflow.

delete_agent

Delete a subagent from this workspace.

delete_workflow_step

Remove a step from a workflow by 1-based position. Remaining steps shift down.

diagnose_workflow_run

Self-debug a failed or low-quality Workflow run. Returns a structured diagnosis: which step failed, the error, the resolved prompt + actual output, and a list of suggested fixes (add retry, edit prompt, gate with a condition, swap agent). The first stop when a run “succeeded” but changed nothing, or a user asks why a Workflow failed — then apply the fix via set_workflow_step_retry / update_workflow_step / set_workflow_step_condition.

get_agent

Get full details of a subagent including system prompt and configuration.

get_agent_memories

Get agent learnings and memories. These are data-driven insights the system has learned from campaign outcomes, reply patterns, and user feedback. Use this to understand what works for this workspace.

get_workflow_history

Get execution history for agent chains — shows each run with steps, quality scores, tool calls, and any issues. Use this to debug and optimize chains. Reads the new workflow_runs tables first; falls back to audit_log for runs predating the migration.

install_workflow_template

Install a battle-tested workflow template into this workspace. Missing agents the template references are auto-created. Idempotent: re-installing returns the existing workflow id unless force=true — a force install writes a FRESH copy of the template steps and retags the previous row as “-superseded” + disables it (returned as superseded_workflow_ids), so the slug never resolves to two rows. IMPORTANT: an agent that ALREADY exists is reused with its CURRENT system_prompt — a template prompt change does NOT reach it. Those agents come back in agents_with_stale_prompt; pass refresh_agent_prompts:true to overwrite them with the template text.

invoke_agent

Invoke a subagent with a message. The agent runs with its own system prompt and tool access, then returns the result.

list_agents

List all agents in this workspace with their status, assigned tools, and skill count. Use get_agent for full details of a specific agent.

list_workflow_templates

List battle-tested chain templates available for one-click install. Each template has a stable slug; pass it to install_workflow_template to deploy.

list_workflows

List the workspace’s Workflows (event-driven automations) — id, name, enabled state, trigger, and step count. The discovery entry point for the Workflow primitive: run_workflow, get_workflow_history and the step-editing tools all need an id from here.

reinforce_memory

Reinforce an existing memory with new evidence. Increases confidence score.

run_workflow

Run a Workflow now. Pass optional context data that the first step receives. Set dry_run=true for a safe rehearsal — side-effect tools (message sends, campaign enrollment) no-op and return their would-be payload, so you can verify the steps before anything goes out.

set_workflow_enabled

Activate or deactivate a chain. When disabled, scheduled fires are skipped, event triggers do not match, and manual runs are still allowed (so users can test before re-enabling). Equivalent to the on/off switch on the chain detail page.

set_workflow_max_concurrency

Set how many runs of this chain can be in flight at once. Default 1 — schedule fires that arrive while a previous run is still going are silently dropped. Set higher for chains that are genuinely safe to run in parallel (e.g. per-lead reply triage). Set 0 to disable the lock entirely (advanced).

set_workflow_step_condition

Attach (or clear) a condition on a chain step. The step only runs when the condition evaluates true against the accumulated chain context. Optionally jump to else_jump_to (1-based) when false. Pass condition: null to clear an existing condition.

set_workflow_step_parallel_group

Tag a step with a parallel_group. Adjacent steps sharing the same group run concurrently via Promise.all. Pass parallel_group: null to make the step sequential again.

set_workflow_step_retry

Configure retry policy on a chain step. Transient failures (rate limits, 5xx, agent timeouts) are retried with exponential backoff before the step is recorded as failed. Set max_attempts: 1 (or pass null) to disable retries. Capped at 5 attempts and 30s backoff per attempt.

store_agent_memory

Store a new learning/insight for the agent. Use this when you discover something about the workspace, their ICP, messaging patterns, objections, or preferences.

submit_workflow_feedback

Submit human feedback on a chain step — used to improve agent performance. The feedback is stored in agent memory and influences future runs.

update_agent

Update a subagent configuration. Can change prompt, tools, triggers, or model.

update_workflow_step

Edit message_template, output_key and/or requires_tool_call on an existing chain step. requires_tool_call=true means the step only counts as done when the agent actually CALLED a tool — use it on steps that must actuate (reply, book, escalate), so a text-only turn is recorded as failed instead of a green run that changed nothing. To change the agent on a step, delete it and add a new one (this preserves the audit trail).

weaken_memory

Weaken a memory when contradicting evidence is found. Decreases confidence.

Analytics

Funnel, campaign stats, ICP performance, timelines, qualification feedback insights

get_campaign_stats

Get aggregate campaign stats (email: sent/opened/replied/bounced; LinkedIn: sent/connected/replied).

get_feedback_insights

Get AI-generated insights from pipeline feedback: what works, what doesn’t, and recommendations.

get_funnel

Get lead funnel overview (counts by status: pending, approved, contacted, replied, meetings, etc.).

get_icp_performance

Reply performance by ICP attribute (industry, company size, title, seniority). Rates are positive replies per CONTACTED lead. Only segments with ≥20 contacted leads are ranked (smaller ones are counted in lowSampleExcluded, never presented as top ICPs); read the returned note and never report a tiny-sample or excluded segment as a winner. No meeting metrics.

get_playbook_stats

Get per-playbook statistics (companies, leads, approval rates, sequence performance).

get_reply_chains

Get detailed reply chain analytics with lead, company, playbook, and sourcing metadata. Shows industry, company size, buying signals, and channel breakdowns.

get_sequence_comparison

Get A/B test sequence comparison data: which sequences and variants perform better.

get_timeline

Get daily activity timeline (leads contacted, opens, replies, meetings) for the last N days.

Autonomous Missions

Launch, monitor, and approve long-running autonomous missions

create_mission

Launch an autonomous mission: a long-running agent that plans and works toward a goal on the background worker, using read-only workspace tools (research, lead/company/pipeline analytics). It CANNOT send, enrol, or book — it pauses and asks for approval, and the platform executes any approved action. Use for open-ended work like “analyse why playbook X underperforms and draft a fix” or “research 20 lookalikes of our converts and propose a segment”. Returns a mission_id; poll with get_mission.

decide_mission

Resolve a mission that is waiting_approval: approve, reject, or request edits to what it proposed. Approving an action lets the PLATFORM execute it (e.g. the proposed outbound step) and resumes the mission; reject/edit resumes it with your guidance. Only valid when the mission status is waiting_approval.

get_mission

Get a mission’s full state: goal, status, living plan, recent event trace, registered deliverables (artifacts), and — if it is waiting_approval — exactly what it is asking to do so you can decide_mission.

list_missions

List this workspace’s autonomous missions (newest first) with their status. Filter by status to find ones awaiting approval.

Background Jobs

Queue and track long-running jobs in the background worker

bulk_agent_run

Run a workspace agent on multiple companies in the background. The prompt template supports placeholders: {{company_name}}, {{domain}}, {{industry}}, {{company_id}}, {{location}}, {{employee_count}}. Returns a batch_id for tracking progress. Use get_batch_status to monitor.

cancel_job

Cancel a pending background job. Cannot cancel running jobs.

enqueue_job

Queue a long-running job to the background worker. Use for tasks that take >5 minutes: pipeline runs with many companies, deep research on 50+ leads, long agent chains, bulk operations. Returns a job_id for tracking.

get_batch_status

Check the status and progress of a pipeline batch (enrichment, agent run, etc.).

get_job_status

Check the status of a background job by ID.

list_active_batches

List active pipeline batches (running enrichments, agent runs, etc.) for a playbook.

list_jobs

List recent background jobs (imports, bulk actions, pipeline runs) with their status and progress.

Blacklist

Manage domain/email blacklist entries

add_blacklist

Add entries to the blacklist. Supports single or batch add. Valid types: domain, email, company, person, phone, linkedin_url.

list_blacklist

List blacklist entries (blocked domains, emails, companies, persons, phones, LinkedIn profile URLs). Supports filtering by type and search. Valid types: domain, email, company, person, phone, linkedin_url.

remove_blacklist

Remove entries from the blacklist by their IDs.

Calendar

Calendar integration status and meeting outcomes

list_calendar_integrations

List connected calendar integrations with sync status, last sync time, and error state. Calendars are connected via Settings → Integrations.

update_meeting_outcome

Record meeting outcome after it has occurred.

Calendar Booking

Provider-agnostic check_calendar_availability + book_meeting that any agent can call. Dispatches to cal.com / Calendly via the adapter SDK.

book_meeting

Books a meeting on a sender’s connected calendar. Cal.com confirms directly. Calendly returns either a confirmed booking (paid Scheduling API plan) or a one-time scheduling link (free plan) — caller should embed the link in the next outbound reply when kind=‘link_only’. Use ONLY a slot returned by check_calendar_availability.

check_calendar_availability

Returns ISO 8601 start times of bookable slots on a sender’s connected calendar (Cal.com or Calendly) for the next N days. Use this BEFORE proposing or booking any specific time.

Returns the public scheduling link to send to a lead so they can self-book. Use this when the lead prefers picking their own time over confirming a specific slot. Prefers the per-sender link (senders.metadata.calendar_link); falls back to the workspace’s connected Cal.com / Calendly booking URL — preferring whichever provider the sender is configured for.

Channels

Connect Slack, Teams, Discord, Telegram, WhatsApp, webhooks

create_channel

Connect a new messaging channel to this workspace. Generates a webhook URL for receiving messages.

Channel types and required credentials:

  • slack: { bot_token, signing_secret } — optionally { channel_id, app_id }
  • teams: { bot_id, tenant_id, app_password } — optionally { webhook_url }
  • discord: { bot_token, guild_id, channel_id }
  • telegram: { bot_token } — optionally { chat_id }
  • whatsapp_business: { phone_number_id, access_token, verify_token }
  • webhook: { secret } — generic HTTP webhook (inbound/outbound)
  • email: { address, imap_host, smtp_host, username, password }

After creation, use the returned inbound_webhook_url to configure your messaging platform.

delete_channel

Disconnect and remove a channel from this workspace.

list_channels

List all messaging channels connected to this workspace (Slack, Teams, Discord, etc.).

send_channel_message

Send a message to THIS workspace’s connected channel (Slack, Telegram, Discord). Strictly workspace-scoped — only sends to channels belonging to the current workspace. For Slack, sends via chat.postMessage. Supports plain text and markdown. Use this to notify the workspace, send daily summaries, or communicate with the team.

setup_slack_channel

Guided setup for connecting a new Slack workspace. Creates the channel and provides step-by-step instructions for creating the Slack app and configuring it.

test_channel

Test a channel connection by verifying credentials and sending a test message.

update_channel

Update a channel connection. Can change credentials, routing, agent, or config.

Conversations

View email/LinkedIn/WhatsApp conversation threads per lead

get_conversation_stats

Get conversation statistics: total replies, unhandled count, by channel breakdown.

list_conversations

List conversations for a specific lead (email, LinkedIn, WhatsApp messages).

list_recent_replies

List recent inbound replies across all leads (for monitoring inbox).

Copy Generation

Generate personalized emails, LinkedIn messages, reply drafts, meeting prep

draft_reply

Generate an AI reply draft to an inbound message from a lead. Use this for email, LinkedIn, AND WhatsApp replies.

generate_meeting_prep

Generate meeting preparation notes for a lead (pain points, solutions, talking points).

Cost Monitoring

Monitor workspace spend (LLM + external services) and get ranked cost-optimization suggestions

get_cost_optimizations

Analyze workspace spend and return ranked, actionable cost-saving suggestions (model downgrades for routine work, oversized prompts, prompt-caching candidates, dominant services/steps) with estimated monthly savings. Returns the underlying summary too.

get_cost_summary

Get the workspace spend summary over the last N days: total USD split into LLM (ai_usage_log) and external services (service_usage_log), plus breakdowns by model, source, service, pipeline step, and day. Use this to monitor where money goes.

Custom Tools

Create/manage workspace-specific custom tools

create_custom_tool

Create a new custom tool for this workspace. The tool becomes available to all agents in this workspace.

Handler types:

  • http_webhook: Calls an external HTTP endpoint. Config: { url, method, headers, body_template, auth_header }
  • supabase_query: Runs a parameterized query. Config: { table, select, filters, single }
  • javascript: Sandboxed JS logic. Config: { code } — receives ‘input’ variable, must return result
  • chain: Chains multiple tools. Config: { steps: [{ tool_name, input_map }] }
  • static: Returns templated response. Config: { response_template }

delete_custom_tool

Delete a custom tool from this workspace.

list_custom_tools

List all custom tools defined for this workspace. Shows name, description, handler type, and enabled status.

test_custom_tool

Test a custom tool by running it with sample input.

update_custom_tool

Update an existing custom tool. Can change description, schema, handler config, or enabled status.

Deals

CRM pipeline: list/get/create/update deals and move deal stages (first-class Deal entity)

create_deal

Create a deal for a lead/company. Stage defaults to the first pipeline stage; status is derived from the stage.

get_deal

Get one deal by id, or by lead_id (the lead’s open deal).

list_deals

List deals (CRM pipeline) with optional stage/status/playbook filters + pagination.

set_deal_stage

Move a deal to a stage (e.g. meeting_booked, closed_won). Status (open/won/lost) is derived; a reason can be attached.

update_deal

Update a deal’s fields (name, amount, currency, close_date, company/playbook link).

Deliverability

Email deliverability: inbox placement, recipient-ESP segments, inbox health, sender recovery. Toggle off to stop the module looking and proposing entirely.

get_deliverability_health

Email deliverability health from the latest monitoring run: per-inbox status/ESP/daily limit/warmup, plus campaign bounce/reply rates. Sourced from hourly/daily Instantly checks.

get_esp_segment_report

Recipient-ESP segment report (Gmail / Microsoft / T-Online·GMX / other): bounce and reply rate per recipient mailbox provider. Exposes a Microsoft-specific collapse that aggregate numbers hide.

get_placement_report

Inbox placement test results (Instantly Inbox Placement add-on): inbox / spam / missing rate per provider (Google / Microsoft / Yahoo) from the latest seed test. The direct “are we in spam” signal. Empty if the add-on is not active or no test has run.

resume_email_sender

Resume a paused/errored email sender (Instantly). Human-gated recovery step after investigating why it was auto-actioned. Restores to 50% of the pre-pause daily limit (min 15).

Document Tracking

Track document/link engagement via PostHog

get_document_views

Get document/link engagement events from PostHog. Shows which leads opened tracked documents, how long they read, and which pages they viewed. Use this to identify engaged leads for follow-up.

Get all engagement events for a specific tracked document URL. Shows total views, unique leads, and per-lead engagement details.

Enrichment

Contact enrichment (email, phone), company enrichment (tech stack, signals), and email validation

bulk_enrich_contacts

Enrich multiple contacts in batch (email + optional phone). Max 100 per batch.

enrich_contact

Find verified email and phone for ONE contact via the connected contact-enrichment integration. Paid per lookup — for a whole leadlist prefer an enrichment COLUMN on the Tabelle (workspace_table_add_column kind “enrichment”, category “contact_enrichment”) so the spend is capped by max_credits and the result lands on the row.

get_company_enrichment

Get enrichment details for a company: tech stack, recent news, buying signals, qualification data, and enrichment metadata.

get_enrichment_credits

Check remaining ZeroBounce email validation credits.

list_company_buying_signals

List companies with detected buying signals. Useful for finding hot leads and high-intent companies.

search_people_at_company

Search for people at a company by job title using Fullenrich People Search.

update_company_signals

Manually add or update buying signals for a company.

validate_email

Validate an email address via ZeroBounce.

validate_emails_bulk

Validate multiple emails in batch via ZeroBounce.

Experiments

Messaging angles — create, list, promote the default narrative hook

create_messaging_angle

Create a new messaging angle — a distinct narrative hook for outreach (e.g. pain-point, social-proof, ROI-focused) that can be A/B tested against others.

list_messaging_angles

List all messaging angles — distinct narrative hooks used in outreach (e.g. pain-point, social-proof, ROI-focused). Each angle can be A/B tested.

promote_angle

Promote a messaging angle to be the default for its persona. Archives the old default.

Feed

AI-prioritized recommendations, lead context, custom feed cards

create_feed_action

Create a one-off custom action in the feed for a specific lead (e.g. ‘review contract’, ‘schedule demo’).

get_lead_context

Get full context for a lead: profile, company, conversations, and pending actions.

get_lead_intelligence

Everything known about a lead + company: profile, firmographics, signals+provenance, score/heat, enrichment, engagement, conversations, CRM/deal, relevant Wissen. The single holistic lead context — prefer this over get_lead_context when you need the full picture.

get_recommendations

Get pending agent recommendations (prioritized actions for the SDR).

pause_lead_sequences

Pause a lead’s active outreach sequences. Optionally generates a farewell draft (stored in replies queue for approval, never auto-sent).

Import

Import companies from CSV, CRM (HubSpot, Salesforce, Pipedrive), or other sources

crm_discover_tools

Discover what tools the connected CRM MCP server exposes. Shows available read tools organized by type (contacts, companies, search). Use this first to understand what data you can pull from the CRM.

crm_import_history

View past CRM import runs for this workspace.

crm_import_to_playbook

Import contacts and/or companies from the connected CRM MCP server into a playbook. Reads data via MCP (never writes to CRM), deduplicates against existing records, and creates new companies/leads. Triggers the pipeline automatically. Use crm_discover_tools first to find the right tool, then crm_preview_import to dry run.

crm_preview_import

Preview what CRM data would be imported into a playbook (dry run). Calls the CRM MCP server to pull contacts/companies, then checks for duplicates against existing records. Does NOT write anything.

crm_pull_data

Pull raw data from a CRM (contacts, companies, deals) for inspection or custom processing. Use crm_import_to_playbook to directly import into a playbook with dedup.

import_companies

Bulk import companies into a playbook. Provide an array of company objects with name and domain. Handles deduplication and triggers the pipeline automatically.

revert_company

Undo AI-generated changes on a company (ICP scoring, enrichment, custom fields).

Leads

List, filter, approve, reject, bulk-manage, import leads

approve_leads

Approve one or more leads for outreach.

bulk_lead_action

Perform bulk actions on leads: delete, move (to playbook), approve (with auto-enrollment), reject, or archive.

create_lead

Create one lead on the entity spine (name, company, contact details). Writes the canonical lead record — NOT a table row; to also track it in a Tabelle, add a row there and link it. For bulk imports use workspace_table_import_from_file or import_leads instead of looping this.

crm_push_leads

Push selected leads to the workspace CRM (HubSpot) with company data + conversation history. External side-effect is irreversible.

enroll_preflight

Check prerequisites before enrolling a lead in a playbook. Returns blockers (missing credentials, missing sequence, blacklist) without mutating state.

get_lead

Get one lead’s full record: profile, company, status, and conversation history. For the complete picture (signals, heat, enrichment, CRM stage, pinned Wissen) prefer get_lead_intelligence — this is the lighter read.

get_lead_counts

Get lead counts by status (funnel overview).

list_leads

List leads on the ENTITY SPINE (the workspace-wide lead records that sequences, replies and the CRM board share) with optional filters (status, playbook, pagination). Rows in a Tabelle mirror these via lead-linking — read table data with workspace_table_get; read the canonical lead state here.

revert_lead

Undo AI-generated changes on a lead (enrichment, copy, variables). Reverts only AI-written fields, not manual edits.

update_lead

Update lead fields.

update_lead_priority

Batch update priority scores for leads based on closed-loop optimization signals

update_lead_status

Update lead status (e.g. mark as meeting_booked, not_interested).

LinkedIn

LinkedIn search, profiles, company data, sequence management

cancel_linkedin_enrollment

Cancel a specific LinkedIn sequence enrollment.

enroll_linkedin_sequence

Enroll leads into a LinkedIn Sequenz — the gated transition from data to outreach: each lead gets its own enrollment that the stepper walks (connect → wait → message …, reply stops it). Provide manual steps or auto-generate from personalization variables. A LIVE EXTERNAL-WRITE action: sends will go out from the connected LinkedIn account — confirm with the human before enrolling, never speculatively. For bulk per-row enrollment from a Tabelle, prefer an outreach terminal column (send-gated) over looping this tool.

get_linkedin_sequence_stats

Get LinkedIn sequence stats, sender pool health, and active enrollments. IMPORTANT: without sequence_id/playbook_id the stats are org-wide across ALL sequences — including imported history from previous tools. Scope to one sequence for campaign-level truth.

linkedin_company_profile

Get a detailed LinkedIn company profile — name, description, industry, headcount, website, headquarters, specialties. Use when the user pastes a company LinkedIn URL or asks “tell me about company X on LinkedIn”. Accepts a full URL (linkedin.com/company/{slug}), a vanity slug, or a numeric company ID.

linkedin_search_companies_by_url

Search companies using a LinkedIn Sales Navigator search URL. Use when the user has a pre-built Sales Navigator search link. NOT for company page URLs (use linkedin_company_profile for those).

linkedin_search_people

Search people at a company on LinkedIn Sales Navigator by role and seniority. Use when the user says “find decision-makers at company X” or “who works at Y?”. Accepts a company name OR a LinkedIn company URL (linkedin.com/company/{slug}).

pause_linkedin_lead

Pause a LinkedIn sequence enrollment for a specific lead.

pause_linkedin_sequence

Pause all active enrollments in a LinkedIn sequence.

resume_linkedin_lead

Resume a paused LinkedIn sequence enrollment for a lead.

resume_linkedin_sequence

Resume all paused enrollments in a LinkedIn sequence.

retry_linkedin_enrollment

Retry a FAILED Unipile LinkedIn enrollment for a lead. Resets retry_count, clears last_error, and makes the enrollment due now — the cron will pick it up in the next tick and resume from the step that failed. Only applies to Unipile-driven enrollments (HeyReach campaigns have no per-lead retry).

LinkedIn Engagers

Extract engagers (reactors + commenters) from any LinkedIn post and resolve their current employer — composable primitives for agent chains

extract_and_resolve_engagers

One-shot: extract engagers from a LinkedIn post AND resolve their companies. Use when the user asks “who engaged with this post and where do they work?” Returns post metadata, resolved engagers with company data, and resolution stats. For more control (filtering, concurrency), use extract_post_engagers + resolve_engagers_companies separately.

extract_post_engagers

Extract people who engaged with a LinkedIn post — reactors and commenters. Use when the user says “who liked/commented on this post?” or “get engagers from this LinkedIn post”. Accepts any LinkedIn post URL, URN, or numeric id. Returns each engager with name, headline, public_identifier, and engagement types. Does NOT resolve companies — chain with resolve_engagers_companies for that, or use extract_and_resolve_engagers for a one-shot flow.

parse_linkedin_post_id

Parse a LinkedIn post URL or URN into its components — kind (activity / ugcPost / share), numeric ID, and the Unipile path param. Use to validate a user-provided link before calling extract_post_engagers. No credentials required.

resolve_engager_company

Resolve a single engager’s current employer via LinkedIn profile lookup. Tries the rich LinkedIn profile endpoint, then /users fallback, then headline parsing. Use inside agent chains when you need to resolve one person at a time. For batch resolution, use resolve_engagers_companies instead.

resolve_engagers_companies

Batch-resolve companies for a list of engagers — typically the output of extract_post_engagers. Runs with configurable concurrency (default 5, max 20), respects Unipile rate limits. Returns resolved engagers with company data and stats (ok / no_positions / lookup_error / headline_fallback / unresolved). Use right after extract_post_engagers.

MCP Health

Check and refresh connected vendor MCP integrations

check_mcp_integrations

List all workspace MCP integrations and report their health. When refresh=true, re-discover and cache tool schemas. Returns credential_scope per adapter so external users understand which tools they cannot reach.

Outreach

Email campaigns, outreach sync, and campaign analytics

add_leads_to_heyreach_campaign

Add leads to a HeyReach LinkedIn campaign. Each lead needs a LinkedIn URL (leads without one are counted as failed). linkedin_account_id optionally pins which HeyReach sender the campaign uses for these leads. personalization_variables is a map of lead_id → { key: value } merged into each lead’s customVariables.

bulk_enroll_whatsapp

Enroll multiple leads into a WhatsApp 3-step sequence. Each lead needs a phone number. If whatsapp_account_id is omitted, the playbook-scoped sender is auto-selected (playbook_id required in that case). Idempotent — leads already enrolled (by lead_id OR phone) are silently skipped.

get_email_campaign_analytics

Get analytics for an Instantly email campaign (sent, opened, replied, bounced).

get_linkedin_campaign_stats

Get stats for a HeyReach LinkedIn campaign (connections sent/accepted, messages, replies).

get_whatsapp_stats

Aggregate WhatsApp sequence stats for the workspace: active / completed / replied / failed / no_whatsapp counts plus total_sent messages.

list_outreach_campaigns

List campaigns/sequences in the CONNECTED outreach tool for a channel — each with its mappable copy variables (the {{placeholder}} names found in the campaign copy). Use these names as field_mapping keys when configuring an outreach column or enrollment. Adapter-agnostic: resolves the workspace’s connected tool by category. For the native WhatsApp/LinkedIn sequencer use get_sequence instead.

list_whatsapp_enrollments

List WhatsApp sequence enrollments for the workspace. Each row represents a lead enrolled in a 3-step WhatsApp sequence. Filter by status or playbook_id.

pause_whatsapp_by_playbook

Pause ALL active WhatsApp enrollments that belong to leads in the given playbook. Returns the count paused.

pause_whatsapp_enrollment

Pause a single WhatsApp enrollment for a lead (stops further steps). Also pauses any other enrollments matching the same phone number. Use resume_whatsapp_enrollment to continue.

resume_whatsapp_by_playbook

Resume ALL paused WhatsApp enrollments for leads under the given playbook. Completed-past-last-step enrollments are marked completed instead.

resume_whatsapp_enrollment

Resume a paused WhatsApp enrollment. Recomputes next_step_at from the current step delay.

send_linkedin_message

Send a LinkedIn message to a lead via HeyReach.

send_whatsapp_message

Send an APPROVED WhatsApp message. Only use after user confirms the draft from draft_reply tool.

Outreach Prep

Batch-prepare pending leads for sending: validate emails, hold invalid/role-based/off-ICP leads, regenerate link-free copy, mark ready

prepare_for_outreach

Batch-prepare a playbook’s pending leads for sending: validate emails (ZeroBounce), hold invalid/role-based/off-ICP leads (qualification_status=‘disqualified’), regenerate link-free copy for survivors, and mark them ready. Async with progress; idempotent — re-run to pick up new pending leads.

Pipeline

Run pipelines, qualify companies, sync leads to outreach

discover_and_enrich_leads

Discover leads at a company and enrich with email/phone. Returns leads found.

enrich_lead

Enrich a single lead with email and phone via the lead_enrichment step.

qualify_companies

Qualify pending companies against playbook ICP. Returns qualification results.

run_column

Run a pipeline step on ALL companies that are ready for it — like running an entire column in the pipeline UI. Automatically picks companies in the right status for each step. E.g. run_column step=copy_generation runs copy gen on all “enriched” companies.

sync_leads_to_outreach

Sync approved leads to their outreach sequence (Instantly for email, HeyReach for LinkedIn).

Pipeline Config

Configure pipeline steps, modules, and tool module settings per playbook

configure_tool_module

Set module-specific configuration for this workspace (e.g. default settings, provider preferences).

disable_tool_module

Disable a tool module for this workspace. Its tools will no longer be available. Core modules cannot be disabled.

enable_tool_module

Enable a tool module for this workspace. Makes its tools available to the Command Center and agents.

list_tool_modules

List all available tool modules with their enabled/disabled status for this workspace. Shows which capabilities are active.

Playbooks

Create, edit, clone, delete playbooks and personas; link/unlink/list a playbook’s Tabelle references (the v2 “Bausteine” reference bundle — by reference, never a copy)

approve_playbook

Approve a draft playbook for use in pipeline.

clone_playbook

Clone a playbook with its personas and sequences.

create_persona

Create a persona for a playbook — define target job titles, seniority, messaging tone, challenges, goals, objections, value props, and CTA.

create_playbook

Create a new playbook with full configuration — ICP, messaging, offer, qualification, research instructions, and all settings.

create_playbook_campaign

Manually create an outreach campaign for this playbook.

create_playbook_from_template

Create a new playbook from a pre-built template. Includes all config and personas from the template.

delete_persona

Delete a persona from a playbook.

delete_playbook

Delete a playbook.

get_playbook

Get full playbook details including all fields, personas, and sequences.

Link an EXISTING outreach campaign (by external campaign id) to a playbook. Use when a campaign was already created in Instantly/HeyReach and the playbook should adopt it instead of creating a new one. channel=“email” links Instantly, channel=“linkedin” links HeyReach. Creates the sequence row if missing.

list_personas

List all personas for a playbook.

list_playbook_templates

List available pre-built playbook templates. Returns slug, name, description, channels, and persona count.

list_playbooks

List all playbooks in the workspace with status, ICP summary, and lead counts. Use get_playbook for full configuration details.

Verknüpft eine Tabelle (workspace_table) mit einem Playbook — als Referenz, nie als Kopie. Das Playbook-Bundle („Bausteine”) referenziert damit das Tabellen-Segment; die Tabelle selbst bleibt unverändert und kann von mehreren Playbooks referenziert werden. Optionales label benennt die Rolle der Referenz (z. B. „Sourcing”). Pro (Playbook, Tabelle) gibt es genau eine Verknüpfung — erneutes Verknüpfen aktualisiert das Label. Ist Playbook oder Tabelle unbekannt (oder die Tabelle gelöscht), wird nichts geschrieben und eine klare Fehlermeldung zurückgegeben.

Löst die Referenz eines Playbooks auf eine Tabelle. Die Tabelle selbst und ihre Zeilen bleiben unverändert; nur die Verknüpfung dieses Playbooks wird entfernt. Idempotent — eine nicht vorhandene Verknüpfung ist ein No-op.

playbook_tables_list

Listet die Tabellen-Referenzen eines Playbooks — je Referenz die Tabelle (id, name, entity_binding), ob sie archiviert ist, die Anzahl aktiver Zeilen, das optionale Label und wann die Referenz erstellt wurde. Zusammen mit playbook_assets_list ergibt das das vollständige Referenz-Bundle („Bausteine”) eines Playbooks.

set_playbook_status

Change a playbook’s lifecycle status — pause, resume (active), archive, or move through draft/approval. Use this to archive or pause/resume a playbook; update_playbook does NOT change status. To remove a playbook entirely, use delete_playbook instead.

update_persona

Update a persona — modify job titles, seniority, department, challenges, goals, objections, value props, tone, or CTA.

update_playbook

Update any playbook fields — ICP, messaging, offer, qualification, research instructions, senders, channels, steps, and all settings.

Replies

Review, approve, edit, bulk-manage pending reply drafts

approve_reply

Approve and send a reply draft from the queue.

backfill_replies

Import historical replies from connected outreach platforms (Instantly, HeyReach) into the workspace. Idempotent — re-running with the same since window does not duplicate.

bulk_approve_replies

Approve and send multiple reply drafts at once.

bulk_reject_replies

Reject multiple reply drafts at once (remove from queue without sending).

edit_and_send_reply

Edit a reply draft and send the edited version.

get_reply_feedback_history

Get reply feedback history: how drafts were handled (approved, edited, rejected) with edit distances and classification data. Useful for analyzing reply quality.

list_replies

List pending reply drafts in the reply queue with lead and conversation context.

reject_reply

Reject a reply draft (remove from queue without sending).

Reply-to-Meeting (lead-centric)

Lead-centric booking actions the reply-to-meeting Workflow uses: book_meeting_for_lead (book + mark lead booked), send_lead_reply (send the queued draft), escalate_reply (hand back to a human). Availability/pause/self-book links reuse the generic calendar + lead tools.

book_meeting_for_lead

Books a meeting on the sender’s calendar FOR a specific lead and marks the lead meeting_booked (persisting the booking id). Use ONLY a slot from check_calendar_availability. Calendly free plan returns a scheduling link instead — embed it in the next reply. Prefer this over the generic book_meeting when acting on a lead.

escalate_reply

Hand the conversation back to a human: marks the lead needs_review and files a pending escalation for the operator. Use when the lead declines, asks something sensitive, or the agent is stuck.

schedule_reply_followup

Schedule a chase reply N hours from now if the lead has gone silent (typically 24/48/72h). Use only while waiting for the lead to commit to a time. Fires a one-shot follow-up run for this lead.

send_lead_reply

Sends the lead’s queued draft reply on their active channel (email/LinkedIn/WhatsApp). Write only the message body — no salutation. Never paste a booking URL; set include_scheduling_link=true and the correctly lead-attributed link is appended. Requires a reply-queue draft (draft_id) for this lead.

Research

Research companies, qualify against ICP, find leads

find_companies

Find companies matching ICP criteria (industries, size, regions, tech stack, buying signals).

find_leads_at_company

Find decision-makers at a company by role/title. Returns name, title, LinkedIn URL.

qualify_company

Qualify a company against a playbook ICP. Requires research data. Returns qualified (bool), score (0-100), reasoning.

research_company

Research a company to get industry, size, location, products, LinkedIn URL, competitors, and recent news.

research_web

Research any topic on the web. Uses AI-powered deep web research to answer questions, gather information, or investigate topics. Returns a detailed text response.

scrape_page

Scrape a web page and return its text content. Useful for reading articles, documentation, product pages, or any public URL.

search_web

Search the web for a query and return a list of results with titles, URLs, and snippets. Good for finding specific pages, articles, or resources.

Research Agent Setup

Connect Research Agent via MCP URL to discover and use all research tools in chat

connect_research_mcp

Connect your Research Agent via MCP URL. Discovers available tools and makes them usable in the Command Center.

Runs

One monitoring read over every execution — table Abläufe, Workflow runs, sourcing runs (the Run primitive)

list_runs

ONE monitoring read for every execution in the workspace — table Abläufe (column runs, imports, source fills), Workflow runs, and sourcing runs — merged onto one row shape: source, title (never a raw id), kind, status, item counts, credits_used, error, timestamps, dry_run flag. The entry point for “what is running / what just happened / what failed?” across all three engines; drill into a specific run with the engine’s own tools (workspace_table_run_health, diagnose_workflow_run, check_sourcing_progress). Filter by status (running | succeeded | failed | cancelled), source (table | workflow | sourcing), and limit (default 50, max 200).

Sales Blueprint Brain

Manage the workspace Sales Blueprint Brain — knowledge base and feedback

analyze_icp

Runs a multi-pass ICP analysis on the workspace CRM data via MCP. Clusters companies into ICP segments, identifies buyer personas, and updates the Sales Blueprint Brain icp_definition and personas sections. Requires an MCP-connected CRM adapter (HubSpot MCP). Does NOT touch other blueprint sections.

extract_from_document

Extracts sales knowledge from an uploaded workspace document and merges it into the Sales Blueprint Brain. Supports PDFs, Word docs, text files. The extraction classifies content by blueprint section (ICP, personas, objections, copy patterns, etc.).

get_blueprint

Returns the workspace Sales Blueprint Brain — full or specific sections. Use this to read the current ICP, copy patterns, personas, objection playbook, and other strategic knowledge.

rate_meeting

Stores a meeting outcome rating for a lead. Used to refine ICP and personas — qualified meetings reinforce targeting patterns, disqualified meetings flag segments to avoid.

rate_reply

Stores a reply quality rating for a lead. Used to train copy patterns — great/good replies reinforce what worked, bad replies flag what to avoid.

seed_blueprint_from_crm

Seeds the workspace Sales Blueprint Brain from connected CRM data (HubSpot MCP). Fetches won/lost deals, contacts, and company info via HubSpot MCP tools, then generates ICP, personas, objection playbook, and copy patterns. Requires HubSpot MCP integration to be connected.

update_blueprint_section

Updates a specific section of the workspace Sales Blueprint Brain. Creates the blueprint if it does not exist yet. Logs the change to the changelog.

Senders

Manage email and LinkedIn sender accounts, LinkedIn pool health and warmup

create_sender

Create or update a sender (one person with their contact data, signature, and linked channel accounts). Idempotent by email — calling this twice with the same email updates the existing row instead of creating a duplicate. Pass only the fields you have; account IDs are optional and can be linked later via update_sender. Use list_available_accounts first to get valid Unipile account_id values.

delete_sender

Delete a sender. Use force=true to remove even if used by playbooks.

get_sender_pool_health

Get LinkedIn sender pool health: warmup progress, daily limits, sends today, and account status for all connected LinkedIn accounts.

list_available_accounts

List all connected channel accounts (email, LinkedIn, WhatsApp via Unipile) that can be linked to a sender. Shows current assignment so the chat can pick accounts that are not yet linked. Use this BEFORE create_sender or update_sender to get valid account_id values.

list_senders

List all senders (persons with linked email/LinkedIn/WhatsApp accounts) for the workspace.

list_unipile_connections

List ALL Unipile accounts for this workspace with their connection status (connected / pending / disconnected / error). Use this to troubleshoot connection issues or to verify that a newly-started OAuth flow finished. For picking accounts to link to a sender, prefer list_available_accounts (which filters to connected + shows assignment).

set_linkedin_plan

Set the LinkedIn plan type (standard or sales_navigator) for a sender account. Affects search and messaging capabilities.

start_unipile_auth

Generate a Unipile hosted-auth URL for the user to connect an email, LinkedIn, or WhatsApp account. The URL expires in 30 minutes. After the user opens the URL and authenticates, a webhook saves the account to this workspace — then call list_unipile_connections to verify it appeared. Use this as step 1 of any sender setup flow when list_available_accounts shows no accounts for the desired provider.

update_sender

Update sender contact data, signature, and linked channel accounts. Pass only fields you want to change. Account IDs must come from list_available_accounts (validated to belong to this workspace).

Sequences

Create, edit, clone multi-channel outreach sequences

clone_sequence

Clone a locked sequence to create an editable copy (without campaign links).

create_sequence

Create a Sequenz — the per-lead touch plan on ONE channel (email, linkedin, or whatsapp): ordered steps with delays and copy, walked per enrolled lead over time. Starts as status draft with linear steps; author branching later via update_sequence({graph}). Optionally bind trigger signal types so a detected buying signal routes leads in deterministically. Nothing sends on create — sends start when leads are ENROLLED (enroll_linkedin_sequence, or an outreach terminal column on a Tabelle).

delete_sequence

Delete a sequence template. Empties its queue first (cancels in-flight enrollments referencing it); enrollment history survives. A sequence linked to an external campaign needs force=true — the external tool campaign is NOT stopped automatically.

empty_sequence_queue

Empty the native sequencing queue: cancel every in-flight enrollment (active/pending/paused) for a sequence template or a whole playbook, optionally one channel. Cancelled leads never send and can be re-enrolled later. Terminal states (completed/replied/failed) are untouched.

get_sequence

Get sequence details and locked status. Pass simulate to also get a DRY-RUN timeline — the projected touches (node, channel, day-offset) a lead in that hypothetical state would experience. Pure projection: nothing is enrolled or sent.

list_sequences

List the workspace’s Sequenzen (the per-lead touch plans) — id, name, channel, status, step count, whether it runs the branching graph natively (graph_mode), whether it is locked to an external campaign, and its trigger-signal bindings. The discovery entry point for the Sequenz primitive: every other sequence tool needs an id, and ids are not guessable. Filter by playbook or channel to narrow.

update_sequence

Update sequence steps, a branching graph, status, or trigger-signal bindings. Linear steps and the branching graph are two representations of the same touch plan: set graph to author a BRANCHING sequence (nodes start|send|wait|condition|stop + then/else edges); omit it to keep linear steps. Cannot edit steps/graph if the sequence is locked (linked to a campaign); bindings stay editable. Set graph_mode=true to make NEW enrollments execute the branching graph natively (multichannel: LinkedIn/WhatsApp nodes hand off between steppers; email nodes are not native). In-flight enrollments keep their snapshot. Without graph_mode, a stored graph is authoring/preview only and the linear stepper keeps running.

Social Listening

Monitor LinkedIn for posts by topic/keyword, scrape engagers, resolve companies, and run pipeline

create_social_topic

Create a new social listening topic for a playbook. Topics run on their own schedule defined by frequency_per_day (1–6 scans/day).

delete_social_topic

Delete a social listening topic. Past scans are kept; the topic_id on those rows becomes NULL.

get_scan_history

View past social listening scan results. Optionally filter by playbook or topic.

list_social_topics

List configured social listening topics for the workspace. Optionally filter by playbook.

run_social_scan

Run a social listening scan immediately. Pass either topic_id (preferred) or playbook_id (uses the playbook’s first enabled topic).

Each scan: searches LinkedIn for posts matching the topic keywords, scrapes engagers (post author + reactors + commenters), resolves their companies (with domain via search→profile lookup), creates leads, and runs the playbook pipeline.

scan_linkedin_post

Scan a specific LinkedIn post URL — scrapes engagers, resolves companies, creates leads, runs the pipeline. Uses the playbook for pipeline settings.

update_social_topic

Update an existing social listening topic — change name, keywords, threshold, frequency, target playbook, or enable/disable it.

Sourcing

Source companies from Google Maps, LinkedIn, post engagement, custom data sources

check_sourcing_progress

Check progress of asynchronous sourcing runs started by source_companies / source_from_linkedin. Returns the latest sourcing_runs rows (status, source, companies_created, error, timestamps) so the agent can decide whether to wait, re-run, or report results.

create_data_source

Create a new data source adapter for this workspace. The adapter config describes how to call an external API and map its response to normalized company data. Use this after researching the target API’s documentation.

The adapter_config shape:

  • base_url: API base URL
  • auth: { type: “header”|“query”|“bearer”, key?: string, value_template?: “Bearer {{api_key}}” }
  • request: { method: “GET”|“POST”, path: “/endpoint”, body_template?: { … }, headers?: { … } }
  • polling (optional, for async APIs): { status_path, status_field, done_value, failed_values, result_id_field, interval_ms, timeout_ms }
  • results (optional): { path?: “/results/{{id}}/items”, results_field?: “data.items” }
  • field_mapping: { name: “response_field”, domain: “website_field”, phone: “phone_field”, … }

Use {{variable}} placeholders in templates — they get replaced with credentials + input params at runtime.

For an MCP-backed source (e.g. an Apify actor via mcp.apify.com), set connection_type=“mcp” and shape adapter_config as:

  • mcp: { url: “https://mcp.apify.com”, auth: { type: “bearer”, credential_key: “api_key” } }
  • call: { tool: “call-actor”, args: { actor: "", input: { … } } }
  • result.async (Apify actors are async — call-actor returns RUNNING, so poll then fetch): { async: { dataset_id_path: “storages.datasets.default.id”, // NOT “defaultDatasetId” run_id_path: “runId”, status_path: “status”, poll_tool: “get-actor-run”, poll_args: { runId: “{{run_id}}” }, fetch_tool: “get-dataset-items”, fetch_args: { datasetId: “{{dataset_id}}”, limit: 500 }, items_path: “items” } }
  • field_mapping: { level: “company”|“contact”, name: ”…”, domain: ”…”, … } (job-listing actors: map the hiring company name; a job title is a buying signal, not a company)
  • credential_adapter: “apify-mcp” (resolves the platform Apify token) Set target_playbook_id so the feed lands in ONE playbook. Set credential_keys to [“api_key”] (the platform token satisfies it) or [] for none. NOTE: many actors (Indeed/StepStone) return job listings without a real company domain — that’s fine, companies import by name and the research step resolves the domain later.

create_webhook_source

Create an INBOUND webhook data source: a per-workspace ingest URL that external tools (RB2B, Snitcher via Zapier/Make, Clay, custom scripts) POST to. Returns the ingest URL + secret to paste into the external tool.

Exactly ONE target:

  • target_playbook_id: each POST is mapped to a company (field_mapping) and inserted as ‘pending’ in that playbook — the normal pipeline runs on it.
  • target_chain_id: each POST fires that Agent Chain; the body is available to steps/conditions as {{webhook.}} (n8n-style event trigger).

field_mapping (playbook target only) maps each company field to a dot-path in the webhook body, e.g. { “name”: “company.name”, “domain”: “company.website”, “industry”: “company.industry”, “employee_count”: “company.size” }. Supported company fields: name, domain, industry, country, city, linkedin_url, phone, employee_count. At least name or domain must be mappable.

delete_data_source

Delete a custom data source adapter. Built-in adapters cannot be deleted (disable them instead).

find_similar_to_converted

Use Research Agent to find companies similar to leads on this playbook that already replied / booked a meeting / converted. Inserts them as new companies with source=lookalike. Best for squeezing the long tail after Google Maps sourcing saturates.

get_pool_benchmarks

Aggregated performance benchmarks over the global pool, optionally scoped to a playbook.

get_pool_contacts_by_domain

Retrieve known contacts from the global company pool for a given domain.

introspect_mcp_source

EXPERIMENTAL. Point at any MCP server and figure out how to import its data into the pipeline. Three modes: (1) neither actor nor tool → lists the server’s tools so you can pick one; (2) actor set (Apify) → reads the actor’s input+output schema (free, no run) and returns a ready async config; (3) tool set → samples the tool once (small), detects sync vs Apify-async + where rows live, and proposes a field_mapping. Returns a ready-to-save config for source_from_mcp (test) / create_data_source (save daily). Never auto-saves.

list_data_sources

List all data source adapters configured for this workspace. Shows built-in (Google Maps, WLW, etc.) and custom adapters with their enabled/disabled status.

list_pending_companies

List companies pending qualification for a playbook.

search_pool

Browse/filter the global company pool like a human would in the pool UI — read-only, nothing is imported. Filter by industry, location, country, employee/revenue range, sources, has-email/phone/linkedin and last-seen dates, or pass query for semantic free-text search (“Logistikunternehmen mit eigener Flotte”). Returns compact company rows with a contactCount. To then pull results into a playbook, call source_from_pool with the same filters or with the exact domains you picked.

source_companies

Source companies matching a playbook ICP. By default runs all enabled data sources, then falls back to Maps scraping for any shortfall. Pass source_slug to restrict sourcing to a SINGLE data source (e.g. “leads-finder” for B2B decision-maker discovery, “google-maps-scraper” for local business scraping) — this suppresses the Maps fallback. Scraper runs are async — when status=“running” the actor is still working; results arrive via cron in 3–15 min. Use check_sourcing_progress to follow up. To fill a specific Tabelle instead of the playbook pipeline, use workspace_table_add_source.

source_from_linkedin

Source companies from any LinkedIn URL. Accepts both Sales Navigator search URLs and LinkedIn post URLs. Auto-detects the type: post URLs extract engagers (likes/comments), search URLs import companies from SN results. Apify runs are async — status=“running” means results land later via cron.

source_from_mcp

EXPERIMENTAL. Source B2B companies/leads from a remote MCP server (e.g. Apify MCP at https://mcp.apify.com) into a playbook as pending records. Generic: point it at any MCP url + tool + field mapping. Handles Apify-style async (call-actor → get-dataset-items) via the result.async config. level=“company” inserts companies; level=“contact” inserts companies then leads attached by domain. Runs synchronously and may take up to ~150s while the remote tool works (long Apify actors can exceed this — prefer fast actors for the experiment). Additive: does not touch the normal sourcing pipeline.

source_from_pool

Source companies + leads directly from the global pool into a playbook. Three modes: (1) pass domains to import an exact selection (e.g. picked via search_pool); (2) pass filters (industry, location, country, employee/revenue range, …) to import the most recently seen matching companies; (3) pass neither and the most-recent N pool companies are taken. All modes only create leads with a usable email (valid/catch_all), dedup by domain, and run the pipeline so imports get qualified against this playbook’s ICP.

test_data_source

Test a data source adapter connection by making a lightweight auth check request.

toggle_data_source

Enable or disable a data source adapter. Disabled adapters are skipped in the sourcing waterfall.

update_data_source

Update a data source adapter config, priority, or metadata.

System Overview

Explain the platform model — primitives, object model, governance — to an agent orienting itself (explain_system), plus the setup+debug contract for Workflows/Sequenzen/Tabellen: which tool writes which config field, what the runtime actually executes, and what dry_run really simulates (automation_capabilities)

automation_capabilities

Read the SETUP + DEBUG contract for Workflows, Sequenzen and Tabellen before you build or debug one — so you never have to discover a limit by trial. Returns: workflow (step-level + workflow-level config fields, each with the exact MCP tool that writes it and what the engine does with it), sequence (same for touch plans, incl. the branching graph), debug (which read tool answers “what did this run actually do” per primitive), dry_run.simulated_tools (the ONLY tools that no-op under dry_run — anything else your agent step calls executes for real during a rehearsal), and stored_but_not_executed (config you CAN write that the live runtime ignores today, with the reason — e.g. a branching sequence graph is authoring/preview only, and sequence status is not an execution gate). Read-only, no side effects.

explain_system

Explain the GTM Automation platform model to an agent orienting itself: the 9 primitives (Workspace, Wissen, Tabelle/Spalte/Zelle, Workflow, Run, Integration, Playbook, Agent, Command), the object model, the governance rules every agent MUST follow, how to operate, the holistic Lead Intelligence read (get_lead_intelligence), the v2/classic product profile, and recommended first tool calls. Call this first when connecting fresh, or any time you need the orientation again as structured JSON — it is the same content as the server’s initialize instructions.

Triggers

Event-driven automation triggers (events, schedules, keywords, thresholds)

create_trigger

Create a new automation trigger. Types:

  • event: fires on system events (lead_replied, meeting_booked, etc.)
  • schedule: fires on cron schedule
  • keyword: fires when keyword detected in message
  • threshold: fires when metric crosses threshold
  • pipeline: fires at pipeline step completion

delete_trigger

Delete an automation trigger.

get_trigger_log

View recent trigger execution history. Shows when triggers fired, results, and errors.

list_triggers

List all automation triggers for this workspace. Triggers fire agents automatically based on events, schedules, keywords, or thresholds.

update_trigger

Update an existing trigger configuration.

Website Scraper

Scrape company websites to find leads (cheap, Firecrawl + LLM-based)

scrape_leads_from_domain

Scrape a company website for leads matching specified roles. Uses self-hosted Firecrawl + LLM extraction + pattern-based email derivation. Cached 30 days per org+domain. Pass the real company name so the LLM can disambiguate employees from partners/testimonials.

Website Visitors

Identify companies visiting your website via Snitcher

get_visitor_details

Get detailed website visit data for a specific company domain. Shows all sessions, pages visited with time spent, referrers, and devices over the last 7 days.

get_website_visitors

Get recent website visitors identified by company. Returns company name, domain, industry, pages visited, time on site, and visit count. Use this to find companies showing buying intent by visiting the customer website.

Wissen

Operate Wissen assets (the workspace’s reusable, immutably-versioned knowledge: ICP, Persona, Offer, Positioning, Messaging Angle, Proof): list (optionally filtered by kind/status, e.g. status=proposed for pending proposals), read an asset with its current revision + history, create, revise (append revision), roll back the current-revision pointer, approve/reject a proposed asset, archive

asset_usage_list

Zeigt, wo ein Wissen-Asset verwendet wird — die Playbooks und Slots, die es referenzieren, mit dem Hinweis, ob die Bindung fixiert ist (pinned). Nützlich, um vor einer Änderung oder Archivierung die „Verwendet von”-Abhängigkeiten zu prüfen.

playbook_asset_pin

Bindet ein Wissen-Asset an einen Playbook-Slot (per Referenz; optional auf eine Revision fixiert). slot ist die Rolle und muss zur Asset-Art passen (icp, persona, offer, positioning, messaging_angle, proof, signal) — ein ICP-Slot nimmt nur ein icp-Asset. Ohne pinned_revision_number folgt die Bindung der jeweils aktuellen Revision des Assets (Verbesserungen wirken automatisch); mit pinned_revision_number wird sie auf genau diese Revision fixiert (reproduzierbar). Pro (Playbook, Slot) gibt es genau eine Bindung — erneutes Binden ersetzt die vorige. Passt die Art nicht zum Slot oder ist Asset/Revision/Playbook unbekannt, wird nichts geschrieben und eine klare Fehlermeldung zurückgegeben.

playbook_asset_unpin

Löst die Bindung eines Playbook-Slots (entfernt das an diesen Slot gebundene Wissen-Asset). Das Asset selbst und seine Revisionen bleiben unverändert; nur die Referenz dieses Playbooks für diesen Slot wird entfernt.

playbook_assets_list

Listet die Wissen-Asset-Bindungen eines Playbooks — je Slot das gebundene Asset (id, kind, name), die wirksame Revisionsnummer (die fixierte, sonst die aktuelle) und ob die Bindung fixiert ist (pinned) oder der aktuellen Revision folgt.

wissen_asset_approve

Entscheidet über ein vorgeschlagenes Wissen-Asset (z. B. ein vom System destilliertes Learning): approve schaltet es aktiv (fließt ab sofort in Prompts ein), reject verwirft es. Vorschläge findest du über wissen_asset_list mit status=proposed.

wissen_asset_archive

Archiviert ein Wissen-Asset (Soft-Delete: status = archived). Der Inhalt und die Revisions-Historie bleiben erhalten; das Asset erscheint nur nicht mehr als aktives Asset.

wissen_asset_create

Legt ein neues Wissen-Asset an (Revision 1). kind ist eine der Asset-Arten (icp, persona, offer, positioning, messaging_angle, proof, signal), name ist pro (Workspace, kind) eindeutig, content ist der typisierte Body dieser Art. Der Inhalt wird fail-closed validiert — unbekannte Felder oder ein fehlendes Pflichtfeld werden mit einer klaren Fehlermeldung abgelehnt, ohne dass etwas geschrieben wird. Ein signal-Asset beschreibt ein Kaufsignal (name, description, detection_hints, optional signal_type_key/strength) und referenziert über icp_refs/offer_refs die Asset-Ids bestehender icp-/offer-Assets dieses Workspace — die Referenzen werden ebenfalls fail-closed geprüft (Existenz, richtige Art, gleicher Workspace).

wissen_asset_get

Liest ein Wissen-Asset: seinen aktuellen Revisionsinhalt (typisierter Body je nach kind) plus die Revisions-Historie (Metadaten je Revision — Nummer, note, actor, Datum). Über die Historie erkennst du, welche Version aktuell aktiv ist und worauf du mit wissen_asset_set_revision zurücksetzen kannst.

wissen_asset_list

Listet die Wissen-Assets dieses Workspace — die wiederverwendbare, versionierte Wissensbasis (ICP, Persona, Offer, Positioning, Messaging Angle, Proof, Signal). Nur Metadaten pro Asset (id, kind, name, status, aktuelle Revisionsnummer, updated_at) — die Inhalte einer Revision holst du über wissen_asset_get. Optionaler kind-Filter grenzt auf eine Asset-Art ein; optionaler status-Filter grenzt auf active/archived/proposed ein — status=proposed findet die vom System vorgeschlagenen Assets (z. B. destillierte Learnings), die noch auf eine Entscheidung per wissen_asset_approve warten.

wissen_asset_revise

Erstellt eine neue Revision eines Wissen-Assets (revision_number = max+1) und macht sie zur aktuellen Version. Revisionen sind unveränderlich — dies überschreibt nie eine bestehende Version, sondern hängt eine neue an. content wird wie beim Anlegen validiert (fail-closed). Optionale note dokumentiert die Änderung.

wissen_asset_set_revision

Setzt ein Wissen-Asset auf eine ältere Revision zurück (Rollback), indem der Zeiger auf die aktuelle Revision umgesetzt wird — der Inhalt wird nie verändert. Über wissen_asset_get siehst du die verfügbaren Revisionsnummern.

Workspace

Workspace settings, credentials, memory (facts, preferences, instructions)

create_notification_trigger

Create a custom notification trigger. Events: new_leads, reply_received, campaign_metric, pipeline_stage, meeting_booked. Conditions vary by event:

  • new_leads: { vertical?, source?, min_count? }
  • reply_received: { category? (positive_interest/negative/not_now/objection/neutral), min_count? }
  • campaign_metric: { metric (bounce_rate/open_rate/reply_rate), threshold (percent), operator? (gt/lt, default gt) }
  • pipeline_stage: { stage (e.g. “qualified”, “enriched”) }
  • meeting_booked: {} (no condition needed)

delete_memory

Delete a workspace memory entry.

delete_notification_trigger

Delete a notification trigger.

generate_mcp_key

Generate or rotate the workspace MCP API key (used by external clients to call /api/mcp/[key]). Rotating invalidates the previous key immediately. Returns the new key once — store it; it is not retrievable in plain text from a UI later if lost.

get_mcp_key

Read the workspace MCP API key (used for /api/mcp/[key] external access). Returns null if no key has been generated yet.

get_settings

Get workspace settings and integration status (which integrations are configured).

get_setup_status

Snapshot of this workspace’s campaign-setup readiness: channel connections (email/LinkedIn/WhatsApp), senders, playbooks, and required integrations. Returns a list of concrete next_steps the agent can act on. Call this FIRST when a user asks to set up or launch a campaign — it prevents guessing and avoids skipping prerequisites. Refresh it between major actions (e.g. after connecting an account).

list_memories

List stored workspace memories (learned facts, preferences, instructions, contacts, context). Useful for understanding what the system knows about this workspace.

list_notification_triggers

List all notification triggers for this workspace.

list_prompts

List all pipeline-stage prompts with their defaults, current values, and override status.

memory_doc_append

Hängt einen gelernten Eintrag als neue Zeile an ein Speicher-Dokument an — legt es bei Bedarf neu an (z. B. beim ersten Learning zu einem Topic). Damit hält der Agent dauerhaft fest, wie er vorgeht, was der Nutzer bevorzugt, welche Fehler gemacht/korrigiert wurden oder was beim Debugging einer Chain herauskam. title wird nur bei Neuanlage verwendet (sonst automatisch aus dem Topic abgeleitet); ein sehr langes Dokument wird automatisch an den ältesten Zeilen gekürzt.

memory_doc_get

Liest ein Speicher-Dokument vollständig (kompletter Markdown-Inhalt) anhand seines Topic-Slugs. Übliche Slugs: campaign-playbook, user-preferences, mistakes-and-corrections, agent-debugging — es sind aber beliebige eigene Slugs erlaubt.

memory_doc_list

Listet die Speicher-Dokumente dieses Workspace — das selbstpflegende Markdown-Gedächtnis des Agenten (z. B. wie Kampagnen gebaut werden, Nutzer-Präferenzen, Fehler & Korrekturen, Agent-/Chain-Debugging). Nur Metadaten je Dokument (topic, title, updated_at, Zeichenzahl) — den vollen Inhalt liefert memory_doc_get.

memory_doc_revise

Ersetzt den Inhalt eines bestehenden Speicher-Dokuments vollständig (z. B. manuelle Bereinigung/Kuratierung durch einen Nutzer). Für einzelne Ergänzungen ist memory_doc_append besser geeignet — memory_doc_revise überschreibt den gesamten Inhalt.

reset_prompts

Remove all workspace prompt overrides, restoring defaults.

save_memory

Save a new workspace memory (fact, preference, instruction, contact info, or context about the organization).

set_prompt_overrides

Save pipeline-stage prompt overrides. Overwrites existing override for each key provided.

set_reminder

Set a reminder that will send a Slack notification at a specific time. Use when the user says “remind me”, “erinnere mich”, or asks to follow up later.

update_credentials

Update integration API keys (instantly_api_key, heyreach_api_key, hubspot_api_key).

update_memory

Update an existing workspace memory entry.

update_notification_trigger

Update a notification trigger (name, event, condition, enabled).

update_settings

Update workspace settings (offer_summary, sender_name, tone, language, notifications, etc.). Use notifications key to toggle Slack alerts per type: { notifications: { positive_replies: true/false, morning_briefing: true/false, meeting_prep: true/false } }. All default to true (opt-out).

Workspace Tables

Operate Tabellen (workspace database tables): discover every creatable capability (workspace_capabilities), read the relational schema (tables + columns + relation edges), list, create a table, soft-delete a whole table, add a column (incl. relation), update a column (name/run_condition/config), soft-delete a column, read rows, add a row, edit a manual/relation cell, soft-delete a row, trigger a column run, import a playbook’s companies/leads as entity-bound rows, build/refresh the “Positive Leads” list (sync_positive_leads — every positively-replied lead as a pure entity-bound view), fill/schedule company-row SOURCES (add_source / schedule_source / list_sources / delete_source), and save a table as a reusable workflow template + recreate a table from one (structure-only, validated)

workspace_capabilities

Discover EVERYTHING this workspace can do — the live, data-driven catalog of creatable capabilities, so you never have to guess what modules exist. Returns two blocks: columns (the add-column catalog as three tabs — enrichments, tools, agents — each item with its id, label, column_kind, category, cost_per_row, connected flag, selectable flag, and the create_tool MCP tool that creates it, e.g. workspace_table_add_column with create_kind) and sources (the company-row import sources — pool, scraping, lead database, Indeed jobs, generic scraper actor, LinkedIn post-engagers, job-change, lookalike, social listening, webhook — each with connected/suggested/paid flags and the create_tool that creates it, e.g. workspace_table_add_source or workspace_table_schedule_source). Org-scoped; reflects THIS workspace’s connected integrations. Use it to find a module’s id + the exact tool to call before creating a column or source.

workspace_schema_get

Read the workspace’s relational data model AND its Wissen assets: tables, columns, relation edges, and the reusable knowledge (ICP/Persona/Offer/Positioning/Messaging Angle/Proof) — call this to understand the workspace before operating on it. Returns every Tabelle (id, name, entity_binding, description) with its columns (key, name, kind, data_type); a ‘relation’ column additionally carries its RESOLVED edge (target_table_id, target_table_name, display_column), so the tables response is a graph — tables are nodes, relation columns are directed edges to their target table. Also returns assets — a list-level view of every Wissen asset (id, kind, name, status, current_revision_number; empty [] when none) — fetch an asset’s typed content body via wissen_asset_get. Org-scoped to this one workspace. Optional table (name or id) narrows the tables to a single table; relation edges still resolve names across the whole workspace, and the assets block always covers the whole workspace.

workspace_table_add_column

Add one column to an existing Tabelle (workspace database table). table accepts either the table name or its id. Kinds ‘manual’ (data entered directly, no config), ‘ai’ (config: { prompt, model?, output_schema?, role? }), ‘enrichment’ (config: { category, args_template, waterfall?, accept_when? }), ‘relation’, and ‘tool’ (config: { category, tool?, args_template? } — a terminal action-sink that acts on the row’s linked lead/company by capability CATEGORY; permits ‘crm’ and read-only/neutral categories, other send categories are refused at run time. OUTREACH TERMINAL variant: config { channel: ‘email’|‘linkedin’|‘whatsapp’, copy_mode?: ‘cells’|‘template’, copy_source_columns: string[] (‘cells’ mode), sequence_id: string (‘template’ mode — stored sequence template rendered per row), campaign_id?, list_id?, field_mapping? } — running it ENROLLS the row’s lead into the connected outreach tool’s campaign/sequence, contactability-gated + idempotent) are supported. relation: verweist eine Zeile auf eine Zeile einer anderen Tabelle; config { target_table_id, display_column }; data_type wird automatisch auf ‘reference’ gesetzt; Wert via update_cell = Ziel-Zeilen-ID. Every other kind (source/formula/system) needs a config payload only settable via the UI. Running an ‘ai’/‘enrichment’ column via workspace_table_run_column spends Credits einmalig pro erfolgreicher Zelle (success-only) — preview the spend with workspace_table_run_column mode ‘dry_run’ first; live runs require max_credits. The new column is appended after every existing one (position = max + 1).

workspace_table_add_row

Add one row to a Tabelle (workspace database table). values maps column key -> value; every key must already exist as a column on the table (create columns via the UI first) — an unknown key is rejected with the list of valid keys.

workspace_table_add_source

Fill a Tabelle NOW from a data source (one-shot company-row import) — the agent parity for ‘Firmen hinzufügen → Quelle’. table accepts a name or id. Pick a source module id (discover them via workspace_capabilities): ‘pool’ (free), ‘lookalike’ (free own-data), ‘scraping’ (Maps, paid), ‘lead_sourcing’ (lead database, paid), ‘indeed_jobs’ (hiring signal, paid), ‘generic_actor’ (any catalog scraper actor — needs actor_id + field_mapping{name:…}, paid), ‘post_engagers’ (LinkedIn post → engager companies, uses your LinkedIn). query/location/max_results feed the search. A PAID source REQUIRES a positive max_credits (money-audit). Returns the enqueued job id — the fill runs in the background (watch rows with workspace_table_get). For a RECURRING source, use workspace_table_schedule_source instead; ‘job_change’ is schedule-only.

workspace_table_cascade_preview

Simuliert den Ablauf einer Tabelle ab einer Spalte (oder ab allen Einstiegsspalten): welche Spalten liefen und was wäre der Worst-Case-Credit-Preis. Nur Vorschau — kein Verbrauch, keine Ausführung. Der Governance-Schritt VOR workspace_table_run_column bei bezahlten Spalten: erst Preis kennen, dann mit max_credits laufen lassen. row_count ist standardmäßig die aktuelle Zeilenzahl der Tabelle (live abgefragt); ein übergebener row_count überschreibt das. Die Kostenbasis pro Zelle entspricht der Worst-Case-Basis der max_credits-Obergrenze.

workspace_table_create

Create a new Tabelle (workspace database table) with its initial columns. Column positions are assigned by array order (first column = position 0). Kinds ‘manual’ (data entered directly, no config), ‘ai’ (config: { prompt, model?, output_schema?, role? }), ‘enrichment’ (config: { category, args_template, waterfall?, accept_when? }), ‘relation’, and ‘tool’ (config: { category, tool?, args_template? } — a terminal action-sink that acts on the row’s linked lead/company by capability CATEGORY; Phase 1 permits ‘crm’ and read-only/neutral categories, send categories (email/linkedin/whatsapp/voice) are refused at run time) are supported. relation: verweist eine Zeile auf eine Zeile einer anderen Tabelle; config { target_table_id, display_column }; data_type wird automatisch auf ‘reference’ gesetzt; Wert via update_cell = Ziel-Zeilen-ID. Every other kind (source/formula/system) needs a config payload only settable via the UI. Running an ‘ai’/‘enrichment’ column via workspace_table_run_column spends Credits einmalig pro erfolgreicher Zelle (success-only) — preview the spend with workspace_table_run_column mode ‘dry_run’ first; live runs require max_credits. Table names must be unique per workspace.

workspace_table_delete

SOFT-delete a whole Tabelle. The table stops existing in the list, schema, and grid, its in-progress runs are stopped, and its columns + rows are archived along with it — but the delete is REVERSIBLE by an operator (nothing is hard-dropped; cells are left untouched). REFUSED if another Tabelle still references this one via a relation column — remove those relation columns first. table accepts a name or id. Since a deleted table no longer resolves by name/id, calling this again on an already-deleted table returns a clean ‘not found’ rather than an error about the delete itself.

workspace_table_delete_column

SOFT-delete one column from a Tabelle. The column stops existing in the grid, filters and schema, stops running, and stops cascading — but the delete is reversible by an operator (the underlying row is archived, not destroyed; cells already computed are left untouched). REFUSED if another active column still references this one (via a {{cell.}} template ref in prompt/formula, or a run_condition leaf) — remove those references first. table accepts a name or id; column accepts a key or id.

workspace_table_delete_row

SOFT-delete one row from a Tabelle. The row stops existing in the grid, counts, and filters — but the delete is REVERSIBLE by an operator (the underlying row is archived, not destroyed; its cells are left untouched). table accepts a name or id; row_id is the row’s id. Idempotent: deleting an already-deleted row is a clean no-op.

workspace_table_delete_source

Remove a SCHEDULED source from a Tabelle by its id (from workspace_table_list_sources). Stops any future runs of that source. Org-scoped — a cross-workspace id is invisible (clean not-found).

workspace_table_dependencies

Zeigt den Abhängigkeitsgraph der Spalten einer Tabelle — welche Spalte welche referenziert, Einstiegsspalten, Zyklen.

workspace_table_from_pipeline

Generate a NEW Tabelle that mirrors a playbook’s LIVE pipeline as a column-per-step workflow (the pipeline → tables migration path). ADDITIVE + REVERSIBLE: it reads the playbook’s pipeline config and creates an INERT table (columns don’t run until an operator runs them) — the pipeline itself is NEVER touched, retired, or gated. Each ENABLED pipeline step becomes a column resolved by the SAME capability the step used (RULE #1, adapter-agnostic): pre_qualify/persona/copy → ai; qualification → enrichment/company_research; lead_discovery → enrichment/find_leads; lead_enrichment → enrichment/contact_enrichment; solar_analysis → enrichment/solar_analysis; outreach_sync → send-gated outreach terminal; crm_sync → CRM terminal. Columns are Domino-gated (is_not_empty on the prior column) reproducing the step cascade, and every column’s config is validated through the SAME validators a fresh column goes through. Steps with no column equivalent (disabled steps, social_listening — a SOURCE, or an outreach step with no copy column) are reported in unmapped_steps; non-recreatable columns in skipped_columns. Use workspace_table_from_pipeline to seed the table, then run columns explicitly. playbook accepts a name or id; new_table_name defaults to ’ (Pipeline-Tabelle)’.

workspace_table_from_template

Recreate a Tabelle from a saved template (see workspace_table_save_as_template): a NEW table + every column, validated through the SAME creation validators a fresh column goes through — an invalid definition can never create a broken column. Any column that can’t be recreated — a relation column whose old target table id has no entry in relation_table_map (old target_table_id -> an existing table id in THIS workspace), or a column of a kind that can’t be recreated at all (e.g. ‘source’/‘system’, typically from a previously-imported table) — is SKIPPED (never a broken/dangling column) and reported in skipped_columns. Org-scoped: only this workspace’s own templates are visible. template accepts a name or id.

workspace_table_get

Read a Tabelle (workspace database table): its columns and a page of rows. table accepts either the table name or its id. Paginated — limit defaults to 50 and is capped at 200; use offset for further pages.

workspace_table_import_from_file

Import a STORED spreadsheet (chat upload or import wizard) into a flexible Tabelle — by reference, so ALL rows are imported, not the truncated chat preview. Get the file_ref from the “[import_ref: …]” line of an uploaded xlsx/csv in the conversation. Same contract as workspace_table_import_records: mode “propose” (default) returns the AI structure proposal with zero writes; mode “apply” creates/reuses the table and inserts entity-bound onto the spine (idempotent by dedupe key). To CONSOLIDATE several files into ONE table, apply them one after another with the same proposal/table_name — duplicates are skipped, fields follow the data.

workspace_table_import_from_playbook

Materialize the playbook’s existing companies/leads into this entity-bound Tabelle as ENTITY-BOUND rows (the import path — binds each row’s entity_id to the real company/lead; idempotent by natural key; triggers the auto-cascade if the table is auto_advance). Use this instead of workspace_table_add_row when you want entity-bound rows sourced from a playbook. The table must be bound to leads or companies (entity_binding); an unbound table is rejected. table and playbook accept a name or id; max_rows defaults to 200.

workspace_table_import_records

Migrate EXTERNAL records (CRM export, Airtable, Lemlist, any API pull) into a flexible Tabelle on the ontology — flexible structured data, not a rigid schema. mode “propose” (default): the AI maps the record fields to a table structure (column keys, entity binding lead/company where detectable, dedupe key) and returns the proposal WITHOUT writing anything — review/edit it. mode “apply”: creates (or reuses, by name) the table and inserts the records ENTITY-BOUND onto the spine (leads matched by email, companies via the shared company resolver; idempotent by dedupe key — duplicates are skipped). Pass the proposal from the propose step (optionally edited); omit it to propose+apply in one shot. Max 500 records per call — repeat apply calls with the SAME proposal to append further batches.

workspace_table_list_sources

List a Tabelle’s SCHEDULED sources (workspace_table_sources) — id, launch, category, config, cadence, max_credits, max_results, label, last_run_at. Use the ids (and the stored config as the edit base) with workspace_table_schedule_source (update) or workspace_table_delete_source. table accepts a name or id.

workspace_table_run_column

Run a column on a Tabelle (workspace database table) — (re)computes a formula/ai/tool/enrichment column across all rows, or a subset via row_ids. RECOMMENDED FLOW for paid columns (ai/enrichment): call with mode ‘dry_run’ first — free and side-effect-free, returns {rows, estimated_credits, sample_inputs} so the spend is known before it happens; then run live with max_credits set. A LIVE run of a paid column REQUIRES max_credits (> 0, hard cap): once the run’s credit tally would exceed it, remaining cells are skipped with reason ‘max_credits_reached’ and the run completes partially. Live runs are asynchronous (background job, returns the job id — poll with workspace_table_get); dry_run answers immediately. No automatic retries.

workspace_table_run_health

Report a Tabelle’s per-column RUN HEALTH — for each column: total cells, succeeded / failed / skipped / pending / running counts, and the distinct provider error (or skip) messages ranked by frequency. This is the debugging read: it surfaces WHICH column is failing and WHY (e.g. a solar column skipping ‘no_coordinates’, an enrichment column erroring ‘rate limited’), so you can fix the column config. Optionally narrow to one column (key). Columns are returned most-broken first. truncated is true if the issue-cell sample cap was hit.

workspace_table_save_as_template

Save this workspace’s OWN Tabelle as a reusable workflow template — a STRUCTURE-ONLY snapshot of its entity binding and every active column’s key/name/kind/data_type/config/run_condition. NEVER includes rows, cell values, or credentials (any credential-ish config key is stripped before saving). Use workspace_table_from_template to recreate a table from it later, in this or another workspace. table accepts a name or id.

workspace_table_schedule_source

Create OR update a SCHEDULED source on a Tabelle — the agent parity for ‘Geplante Quellen’. To CREATE: give table + source module id (‘pool’/‘scraping’/‘lead_sourcing’/‘indeed_jobs’/‘generic_actor’/‘lookalike’/‘job_change’) + cadence (off/daily/thrice_daily). To UPDATE an existing one: give table + source_id + the fields to change (cadence/max_credits/max_results/label/config — a config edit is re-validated exactly like create). A newly created source defaults to cadence ‘off’ (INERT) — nothing runs until you set a cadence. A scheduled PAID source (scraping/lead_sourcing) REQUIRES a positive max_credits. ‘job_change’ takes a config { target_titles, recency_days, icp_scope, max_companies } and produces LEADS (recently-joined decision-makers). The cron dispatcher re-fills the table from due sources.

workspace_table_stop_run

Stop every in-progress run on a Tabelle (workspace database table) — the mirror of workspace_table_run_column. Flips the table’s ‘running’ runs to ‘cancelled’ and skips their still-queued cells; the worker checks the cancelled status before each remaining cell and halts, so NO new cell starts and no further Credits are spent (an already-executing cell may finish). Idempotent — returns { aborted_run_ids: [] } when nothing is running. table accepts a name or id. OrgScope-bound: only this workspace’s runs can be stopped.

workspace_table_sync_positive_leads

Build/refresh the “Positive Leads” list — a Tabelle holding every lead that replied positively (interested, meeting_intent, meeting_booked, meeting_held) as ENTITY-BOUND rows, so name/e-mail/title/status mirror the live lead. A pure VIEW: creates no deals, starts no sequences, spends no credits, never auto-runs columns. Idempotent — re-run to append newly-positive leads. Use active_within_days to keep stale bulk-imported “positive” leads out (e.g. 90 → only leads with activity in the last 90 days); omit it to include all. max_leads defaults to 500.

workspace_table_templates_list

List this workspace’s OWN saved table/workflow templates (id, name, description, column_count, created_at) — structure-only snapshots, no rows/cells. Use workspace_table_from_template to recreate a table from one.

workspace_table_update

Update a Tabelle’s table-level settings — its name, description, and the CO4 auto_advance toggle. table accepts a name or id. auto_advance is the chain-orchestrator opt-in: when true, inserting a NEW row auto-runs the table’s auto_run ENTRY columns (columns with no upstream deps), so the whole chain self-advances on every new row — auto-cascade spends credits without a human in the loop, so leave it off unless that is intended. Column-level auto_run is set separately via workspace_table_update_column. At least one field must be given.

workspace_table_update_cell

Update one manual or relation cell in a Tabelle (workspace database table) row. Columns of kind “manual” take any value matching the column’s data_type. Columns of kind “relation” take the id of a row in the relation’s configured target table as value — it is validated to be a real, in-scope row before the write (an unknown/foreign id is rejected with a clean error, no write); pass an empty value to clear the relation. Every other computed column kind (formula/ai/tool/enrichment/system) is rejected so agents never overwrite a run’s output.

workspace_table_update_column

THE agent path for editing an existing column — in particular its run_condition (the Domino gate: this column only runs for rows where the condition passes), and — for ‘ai’/‘enrichment’ columns — prompt/model/other config fields. table and column accept a name/key or an id. run_condition is a Condition tree ({all: […]} / {any: […]}, nestable up to 3 levels) or a leaf { column, op, value? } — op is one of is_empty/is_not_empty/equals/not_equals/contains/gt/lt/gte/lte, column must be another key on THIS table; pass run_condition: null to clear it (the column then always runs). A changed condition only affects the NEXT run, never retroactively. config is a partial patch merged onto the column’s stored config (ai/enrichment only) and re-validated — the contract field role is FIXED once a column exists (spec §5.75) and rejects any change with a clean error naming the fix (create a new column instead); output_schema is editable and hard-validated on every patch. kind can never be changed — it is not even accepted by this tool’s schema; create a new column for a different kind.

workspace_tables_list

List every Tabelle (workspace database/table) in this workspace with its id, name, entity binding, description, and row count. Use this to find a table’s id/name before calling the other workspace_table_* tools.