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 “
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.
get_booking_link
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_tracked_link_events
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 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_playbook_campaign
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.
playbook_table_link
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.
playbook_table_unlink
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.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 ’
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.