{"serverId":"mcp-registry/com.vendo-ai/vendo-ai","tools":[{"name":"add_agent_document","fixed":{"name":"add_agent_document","description":"Upload a material the agent learns from (PDF, DOC, DOCX, TXT, XLS, XLSX, CSV, PPT, PPTX, KEY; ≤10 MB) from a public URL or base64. Used the next time the script is generated (generate_agent_script). Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","filename"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"file_url":{"type":"string","description":"Public https URL of the file"},"filename":{"type":"string","description":"File name with extension, e.g. \"price-list.pdf\""},"file_base64":{"type":"string","description":"Base64 content (use instead of file_url)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Attach a knowledge file to the agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":206,"tokensAfter":206},{"name":"add_campaign_linkedin_account","fixed":{"name":"add_campaign_linkedin_account","description":"Add a connected account to a running campaign; pending contacts are rebalanced across accounts and backfilled. It starts sending invites in the next cycles. No credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","account_id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"account_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Add a LinkedIn account to a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"add_custom_audience_contacts","fixed":{"name":"add_custom_audience_contacts","description":"Append up to 5000 contacts to a custom audience. Deduplicated inside the audience by email, LinkedIn URL or phone (duplicates and contacts with no email/LinkedIn/phone are skipped). Returns added / skipped / total_contacts. No credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","contacts"],"properties":{"id":{"type":"string","description":"Custom audience id (UUID)"},"contacts":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"phone":{"type":"string"},"position":{"type":"string"},"last_name":{"type":"string"},"first_name":{"type":"string"},"company_name":{"type":"string"},"linkedin_url":{"type":"string"}},"additionalProperties":false},"maxItems":5000,"minItems":1}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Add contacts to a custom audience"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":236,"tokensAfter":236},{"name":"archive_campaign","fixed":{"name":"archive_campaign","description":"Archive the campaign: status becomes completed, all its outreach stops and it is hidden from the default lists (history stays readable with include_archived). Not reversible. Only call after preview_archive_campaign and the user's explicit approval.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Archive a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"buy_audience_set","fixed":{"name":"buy_audience_set","description":"SPENDS CREDITS (2 per contact). Purchases the set and snapshots its contacts into the workspace. Only call after the user reviewed `preview_buy_audience_set` output and explicitly approved the cost.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Buy an audience set"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":115,"tokensAfter":115},{"name":"cancel_meeting","fixed":{"name":"cancel_meeting","description":"The agent will NOT join this scheduled meeting (the calendar event itself stays). Only scheduled, not yet started meetings. No undo. Only after preview_cancel_meeting and user approval.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["meeting_id"],"properties":{"meeting_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Cancel a meeting for the agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":115,"tokensAfter":115},{"name":"cancel_workspace_invitation","fixed":{"name":"cancel_workspace_invitation","description":"Cancel a pending invitation (its link stops working). Admins only. Invitation ids come from get_workspace.pendingInvitations.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Invitation id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Cancel a pending invitation"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":108,"tokensAfter":108},{"name":"close_campaign_thread","fixed":{"name":"close_campaign_thread","description":"Mark the conversation closed (no more AI replies). Nothing is sent.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["thread_id"],"properties":{"thread_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Close an AI email conversation"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":84,"tokensAfter":84},{"name":"connect_content_account","fixed":{"name":"connect_content_account","description":"Returns a hosted URL a HUMAN must open in a browser to authorise a LinkedIn or Instagram publishing account. Give the link to the user; nothing is connected until they finish.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["provider"],"properties":{"provider":{"enum":["LINKEDIN","INSTAGRAM"],"type":"string"},"redirect_path":{"type":"string","description":"App path to return to, default /settings?tab=social"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Get a link to connect a social publishing account"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":151,"tokensAfter":151},{"name":"connect_crm_integration","fixed":{"name":"connect_crm_integration","description":"Returns an authorization URL a HUMAN must open in a browser (logged in to Kommo/HubSpot) and approve within 20 minutes; the connection completes server-side. Give the URL to the user, then poll get_crm_integration. Kommo needs save_kommo_credentials first.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["provider"],"properties":{"provider":{"enum":["kommo","hubspot"],"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Start connecting Kommo / HubSpot (OAuth)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"connect_google_meet","fixed":{"name":"connect_google_meet","description":"Turn on the Google Meet channel the way the app does: returns the agent's own invite address (agent-xxxxxxxx@meet.vendo-ai.com). Invite that address to any Google Calendar event with a Meet link and the agent joins automatically. No Google login needed. Also saves the meeting settings. Free to connect; meeting minutes are billed.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"language":{"type":"string","description":"Meeting language code, e.g. \"en\""},"auto_join":{"type":"boolean"},"meeting_mode":{"enum":["voice_only","presentation"],"type":"string","description":"presentation = shares the agent's slides (needs slides)"},"greeting_message":{"type":"string","maxLength":1000},"join_before_minutes":{"type":"number","maximum":30,"minimum":0,"description":"Join N minutes before start (default 1)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Connect Google Meet (invite address)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":285,"tokensAfter":285},{"name":"connect_linkedin_account","fixed":{"name":"connect_linkedin_account","description":"Returns a hosted URL that a HUMAN must open in a browser to authorise a LinkedIn account. This tool cannot complete the connection itself — give the link to the user. No account exists until they finish the flow.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"campaign_id":{"type":"string","description":"Optionally bind the new account to a campaign"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get a link to connect a LinkedIn account"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":135,"tokensAfter":135},{"name":"connect_whatsapp_account","fixed":{"name":"connect_whatsapp_account","description":"Returns a hosted link; the user opens it and scans the QR code with WhatsApp (Linked devices) — that links a REAL phone number to the workspace. Poll list_whatsapp_accounts until status is \"ok\". Free. Only after preview_connect_whatsapp_account and the user's approval.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get a WhatsApp connect link"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":118,"tokensAfter":118},{"name":"create_agent","fixed":{"name":"create_agent","description":"Create an AI agent like step 1 of the app's builder. Choose its direction: purpose \"sales\" (default), \"support\" or \"info\". The agent starts in DRAFT and contacts nobody. Needs at least 1 credit on the balance (checked, not charged). Fails with a plan-limit error when all agent slots are used (see get_agent_plan_limits). Next: set_agent_company → generate_agent_script → channels.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name"],"properties":{"name":{"type":"string","description":"Agent's display name, e.g. 'Anna from Acme'"},"gender":{"enum":["male","female"],"type":"string","description":"Voice/face gender (default female)"},"purpose":{"enum":["sales","support","info"],"type":"string","description":"sales = sales agent, support = customer support, info = information assistant"},"description":{"type":"string","description":"1-2 sentences about what the agent does"},"avatar_preset":{"type":"string","pattern":"^avatar-([1-9]|1[0-9]|20)$","description":"Preset face avatar-1 … avatar-20 (male: 1,4,6,8,10-15; female: 2,3,5,7,9,16-20). For your own photo use set_agent_avatar_from_url afterwards"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create a new agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":344,"tokensAfter":344},{"name":"create_agent_connection","fixed":{"name":"create_agent_connection","description":"Add a channel. WEBSITE_WIDGET needs website_url; new widgets get the app defaults (Modern design) plus your widget_config — then get_widget_embed_code. WEBSITE_BUTTON: just creates the channel (style it in get_widget_embed_code). PRESENTATION_WIDGET = publish the Slide Presenter (optional website_url). GOOGLE_MEET: prefer connect_google_meet. PHONE_CALL: prefer setup_phone_agent. Telegram → connect_telegram_bot; WhatsApp → connect_whatsapp_account. A second widget for the same URL updates the ex","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","type"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"name":{"type":"string"},"type":{"enum":["WEBSITE_WIDGET","WEBSITE_BUTTON","PRESENTATION_WIDGET","GOOGLE_MEET","PHONE_CALL"],"type":"string"},"website_url":{"type":"string","description":"Site where the widget/presentation is installed"},"widget_config":{"type":"object","properties":{"texts":{"type":"object","description":"Wording overrides; keys: welcomeMessage, welcomeFollowUp (greeting bubbles) and the contact form: contactTitle, contactSubtitle, nameLabel, namePlaceholder, nameRequired, emailLabel, emailPlaceholder, emailRequired, emailInvalid, phoneLabelRequired, phoneLabel, phonePlaceholder, phoneRequired, phoneInvalid, contactSubmit. \"\" or null = back to the default (auto-translated). Merged with saved texts.","additionalProperties":{"type":["string","null"]}},"theme":{"type":"object","properties":{"blur":{"type":"number","maximum":60,"minimum":0},"glass":{"type":"boolean"},"gradient":{"type":"array","items":{"type":"string","pattern":"^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"},"maxItems":3,"minItems":2},"headerStyle":{"enum":["gradient","solid"],"type":"string"},"voiceVisual":{"enum":["portrait","liquid","waves"],"type":"string","description":"Look of the voice view: portrait, liquid or waves"},"glassOpacity":{"type":"number","maximum":1,"minimum":0},"gradientAngle":{"type":"number","maximum":360,"minimum":0},"openAnimation":{"enum":["genie","spring","scale","slide","fade"],"type":"string"},"accentGradient":{"type":"boolean"}},"description":"Modern design look (merged with the saved theme)","additionalProperties":false},"design":{"enum":["classic","modern"],"type":"string","description":"modern = new skin with interactive cards in chat; classic = old look"},"teaser":{"type":"boolean","description":"Invitation: show autoOpenMessage as a bubble next to the closed button"},"autoOpen":{"type":"boolean","description":"Open the widget automatically after autoOpenDelay seconds"},"position":{"enum":["bottom-right","bottom-left","top-right","top-left"],"type":"string"},"textColor":{"$ref":"#/properties/widget_config/properties/theme/properties/gradient/items"},"replySound":{"type":"boolean"},"buttonColor":{"$ref":"#/properties/widget_config/properties/theme/properties/gradient/items"},"collectName":{"type":"boolean"},"headerColor":{"$ref":"#/properties/widget_config/properties/theme/properties/gradient/items"},"logoVariant":{"enum":["white","blue","black"],"type":"string"},"teaserDelay":{"type":"number","maximum":30,"minimum":3},"unreadBadge":{"type":"boolean"},"borderRadius":{"type":"number","maximum":40,"minimum":0},"collectEmail":{"type":"boolean"},"collectPhone":{"type":"boolean"},"primaryColor":{"$ref":"#/properties/widget_config/properties/theme/properties/gradient/items"},"autoOpenDelay":{"type":"number","maximum":600,"minimum":0},"autoOpenSound":{"type":"boolean"},"launcherImage":{"type":"string","const":"","description":"\"\" = remove the custom button picture (Vendo logo again)"},"launcherShape":{"enum":["round","square"],"type":"string"},"navigationMode":{"enum":["auto","ask"],"type":"string"},"autoOpenMessage":{"type":"string","maxLength":500},"backgroundColor":{"$ref":"#/properties/widget_config/properties/theme/properties/gradient/items"},"buttonTextColor":{"$ref":"#/properties/widget_config/properties/theme/properties/gradient/items"},"headerTextColor":{"$ref":"#/properties/widget_config/properties/theme/properties/gradient/items"},"userBubbleColor":{"$ref":"#/properties/widget_config/properties/theme/properties/gradient/items"},"agentBubbleColor":{"$ref":"#/properties/widget_config/properties/theme/properties/gradient/items"},"navigationEnabled":{"type":"boolean","description":"Let the agent open pages of the site"},"launcher_image_url":{"type":"string","description":"Public URL of a small square picture for the widget button (PNG/JPG/WebP/GIF/SVG, ≤ ~110 KB)"},"userBubbleTextColor":{"$ref":"#/properties/widget_config/properties/theme/properties/gradient/items"},"agentBubbleTextColor":{"$ref":"#/properties/widget_config/properties/theme/properties/gradient/items"},"continueAfterNavigate":{"type":"boolean"}},"description":"Website widget settings (only what you pass changes; texts/theme are merged)","additionalProperties":false},"phone_call_config":{"type":"object","properties":{"call_script":{"type":"string"},"call_objective":{"enum":["sell","inform","book_meeting","collect_info","qualify_lead"],"type":"string"},"greeting_message":{"type":"string"},"post_call_actions":{"type":"object","properties":{"log_outcome":{"type":"boolean"},"send_followup_email":{"type":"boolean"},"collect_contact_info":{"type":"boolean"},"book_meeting_if_interested":{"type":"boolean"}},"additionalProperties":false},"max_call_duration_seconds":{"type":"number","maximum":1800,"minimum":30}},"description":"Voice Call texts only; number, voice and inbound are set with setup_phone_agent","additionalProperties":false},"google_meet_config":{"type":"object","properties":{"language":{"type":"string","description":"Meeting language code, e.g. \"en\""},"auto_join":{"type":"boolean"},"meeting_mode":{"enum":["voice_only","presentation"],"type":"string","description":"presentation = shares the agent's slides (needs slides)"},"greeting_message":{"type":"string","maxLength":1000},"join_before_minutes":{"type":"number","maximum":30,"minimum":0,"description":"Join N minutes before start (default 1)"}},"additionalProperties":false}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Add a channel to an agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":1721,"tokensAfter":1721},{"name":"create_campaign","fixed":{"name":"create_campaign","description":"Create a classic campaign in DRAFT — nobody is contacted until launch_campaign. Needs an audience (audienceId from save_audience/list_audiences, OR customAudienceId of a READY uploaded/CRM list) and should get an agentId (a campaign cannot be launched without an agent: AGENT_REQUIRED). branchId = CRM branch for replies (crm_list_branches; null = General). Settings (all optional): channels, dailyLimit, dailyEmailLimit, dailyLinkedinLimit, timezone, workingHours, excludeWeekends, campaignDurationD","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name"],"properties":{"name":{"type":"string"},"agentId":{"type":"string","description":"Sales agent id (list_agents). Required before launch."},"branchId":{"type":["string","null"],"description":"CRM branch id for replies; null = General"},"settings":{"type":"object","properties":{"ccEmail":{"type":"string","description":"Address put in CC of outgoing emails."},"channels":{"type":"array","items":{"enum":["email","linkedin","phone_call"],"type":"string"},"description":"Channels the campaign uses (default ['email'])."},"timezone":{"type":"string","description":"IANA timezone of the sending window, e.g. Europe/London (default)."},"speedTier":{"enum":["conservative","balanced","aggressive"],"type":"string"},"dailyLimit":{"type":"integer","minimum":0,"description":"New contacts emailed per day. Must not exceed sender capacity (list_sender_emails / list_client_mailboxes). Default 200."},"trackLinks":{"type":"boolean","description":"Saved like the app (currently not read by the sender)."},"trackOpens":{"type":"boolean","description":"Insert the open-tracking pixel."},"emailContent":{"type":"object","required":["mode"],"properties":{"mode":{"enum":["ai","fixed","html"],"type":"string","description":"ai = AI writes each email from the prompt; fixed = your text with {{first_name}}-style placeholders; html = your own HTML steps."},"tone":{"enum":["formal","casual","friendly"],"type":"string"},"prompt":{"type":"string","description":"AI writing rules for the first email."},"variants":{"type":"array","items":{"type":"object","required":["subject","body"],"properties":{"body":{"type":"string"},"subject":{"type":"string"}},"additionalProperties":false},"maxItems":5,"description":"Fixed mode: up to 5 A/B variants of the first email."},"followUps":{"type":"array","items":{"type":"object","required":["delayDays"],"properties":{"body":{"type":"string","maxLength":20000,"description":"Fixed mode: body."},"prompt":{"type":"string","maxLength":4000,"description":"AI mode: writing rules for this follow-up."},"subject":{"type":"string","maxLength":500,"description":"Fixed mode: subject."},"delayDays":{"type":"integer","maximum":90,"minimum":1,"description":"Days after the previous email."}},"additionalProperties":false},"maxItems":7,"description":"Follow-ups after the first email (max 7)."},"htmlSteps":{"type":"array","items":{"type":"object","required":["subject","html"],"properties":{"html":{"type":"string"},"subject":{"type":"string","maxLength":500},"delayDays":{"type":"integer","maximum":90,"minimum":1}},"additionalProperties":false},"maxItems":20,"description":"HTML mode: one entry per email; delayDays = days after the previous email (not on the first)."}},"description":"Email content (wizard step 4). On a running campaign a change to steps/delays is NOT applied once anything was sent; see settings.smartleadSequencePending in get_campaign.","additionalProperties":true},"maxFollowUps":{"type":"integer","maximum":7,"minimum":0,"description":"Legacy: number of follow-ups when emailContent.followUps is empty (default 3)."},"notifyEmails":{"type":"array","items":{"type":"string"},"description":"Addresses notified when a lead replies."},"workingHours":{"type":"array","items":[{"type":"integer","maximum":23,"minimum":0},{"type":"integer","maximum":24,"minimum":1}],"maxItems":2,"minItems":2,"description":"[startHour, endHour] in the campaign timezone (default [9,18])."},"emailSignature":{"type":"string","description":"HTML signature appended to emails ('' = no signature)."},"senderEmailIds":{"type":"array","items":{"type":"string"},"description":"Restrict sending to these sender ids from list_sender_emails (empty = auto-assign at launch)."},"stopOnNegative":{"type":"boolean","description":"Saved like the app (currently not read by the sender)."},"dailyEmailLimit":{"type":"integer","minimum":0,"description":"Emails per day; the app keeps it equal to dailyLimit."},"emailSenderMode":{"enum":["managed","client_owned"],"type":"string","description":"managed = Vendo warmed pool (PAID PLAN REQUIRED to launch); client_owned = the workspace's own mailboxes (connect_client_mailbox). Default managed."},"excludeWeekends":{"type":"boolean","description":"Do not send on Saturday/Sunday (default true)."},"linkedinContent":{"type":"object","required":["mode"],"properties":{"mode":{"enum":["ai","fixed"],"type":"string"},"invite_tone":{"$ref":"#/properties/settings/properties/emailContent/properties/tone"},"invite_prompt":{"type":"string","description":"AI rules for the connection note (also used for the form of address)."},"invite_exact_text":{"type":"string","maxLength":300,"description":"Fixed connection note (LinkedIn sends max 200 chars)."},"followup_exact_text":{"type":"string","maxLength":1500,"description":"Fixed first message after connect."},"followup_delay_minutes":{"type":"integer","maximum":43200,"minimum":0,"description":"Delay of the first message after the invite is accepted."}},"description":"LinkedIn content (wizard step 5).","additionalProperties":true},"followUpInterval":{"type":"integer","minimum":0,"description":"Legacy: days between follow-ups, used only when emailContent.followUps is empty (default 3)."},"customInstructions":{"type":"string","maxLength":6000,"description":"Communication Rules: CTA, links, promises, what never to say. Overrides prompt defaults in emails, follow-ups, AI auto-replies and LinkedIn. Also sets the informal/formal form of address (e.g. ти/Ви, du/Sie) when the rules say so."},"dailyLinkedinLimit":{"type":"integer","minimum":0,"description":"Campaign-wide LinkedIn invites per day across ALL its accounts (hard limit). Each account also has its own warm-up cap."},"autoResponseEnabled":{"type":"boolean","description":"AI answers email replies automatically (default true)."},"clientEmailProvider":{"anyOf":[{"enum":["google","microsoft"],"type":"string"},{"type":"null"}],"description":"Informational provider of own mailboxes."},"campaignDurationDays":{"type":"integer","minimum":1,"description":"Planned duration in days (default 30)."},"autoResponseDelayMinutes":{"type":"integer","minimum":0,"description":"Delay before the AI email auto-reply (default 10)."},"linkedinAutoReplyDisabled":{"type":"boolean","description":"Switch LinkedIn AI auto-replies OFF for this campaign only (per-account settings: update_linkedin_account_settings)."},"selectedLinkedinAccountIds":{"type":"array","items":{"type":"string"},"description":"LinkedIn accounts used by this campaign (ids from list_linkedin_accounts). Empty = all connected accounts at launch."}},"additionalProperties":true},"audienceId":{"type":"string","description":"Campaign audience id"},"description":{"type":"string"},"customAudienceId":{"type":"string","description":"Instead of audienceId: id of a READY custom audience (uploaded CSV/CRM list); an audience is created from it"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create a campaign (DRAFT, not launched)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":2090,"tokensAfter":2090},{"name":"create_custom_audience","fixed":{"name":"create_custom_audience","description":"Create an empty, named custom audience (status ready) — then fill it with `add_custom_audience_contacts`. To create one from a file use `upload_custom_audience`. No credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name"],"properties":{"name":{"type":"string","maxLength":255,"minLength":1}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create an empty custom audience"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":119,"tokensAfter":119},{"name":"create_referral_link","fixed":{"name":"create_referral_link","description":"Create a new tracked referral link (max 20 active). Returns code and url.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"label":{"type":"string","maxLength":80,"description":"Where you will share it, e.g. \"LinkedIn post\""}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create a referral link"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":99,"tokensAfter":99},{"name":"create_widget_test_page","fixed":{"name":"create_widget_test_page","description":"Create (or return the existing) private, unlisted test page with this website widget installed, to try it before adding it to a real site. Only the agent's creator can do this. Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","connection_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"connection_id":{"type":"string","description":"Channel (connection) id (UUID) — from list_agent_connections"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create a test page for a widget"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":162,"tokensAfter":162},{"name":"crm_add_comment","fixed":{"name":"crm_add_comment","description":"Internal team note on the lead card (not visible to the lead). Mentioned users (ids from crm_list_workspace_members) get a CRM notification.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","body"],"properties":{"id":{"type":"string"},"body":{"type":"string","maxLength":8000,"minLength":1},"mentions":{"type":"array","items":{"type":"string"},"description":"User ids to @mention"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Add an internal comment on a lead"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":141,"tokensAfter":141},{"name":"crm_add_lead_to_branch","fixed":{"name":"crm_add_lead_to_branch","description":"Place the lead in another pipeline too (entry stage); it stays in its current ones. Reversible via crm_move_lead_to_branch.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","branch_id"],"properties":{"id":{"type":"string","description":"Lead id (UUID)"},"branch_id":{"type":"string","description":"\"general\" or a branch id from crm_list_all_branches"},"assignee_user_id":{"type":"string","description":"Owner in that pipeline (default: current owner)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Add a lead to another pipeline"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":163,"tokensAfter":163},{"name":"crm_communication_cards","fixed":{"name":"crm_communication_cards","description":"One card per campaign and per SDR search, with outbound counters. This is the FULL outbound stream — everyone contacted, whether or not they replied (CRM leads only contains people who answered). Contact emails/phones are masked for members without the \"crm-contact-details\" permission. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":500,"minimum":1}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List communication cards"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":150,"tokensAfter":150},{"name":"crm_create_branch","fixed":{"name":"crm_create_branch","description":"Create an isolated pipeline (team / direction / client) with its own default stages. member_user_ids = who can see it (General stays open to all). Workspace admins/owner only. No credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name"],"properties":{"name":{"type":"string","maxLength":120,"minLength":1},"member_user_ids":{"type":"array","items":{"type":"string"},"description":"User ids from crm_list_workspace_members"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create a CRM pipeline (branch)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":154,"tokensAfter":154},{"name":"crm_create_calendar_event","fixed":{"name":"crm_create_calendar_event","description":"Add a custom event to the CRM planner. Write operation, no credit cost. Does NOT send invites to anyone — it only records the event on the internal calendar.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["title","start_at"],"properties":{"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"#RRGGBB"},"title":{"type":"string"},"end_at":{"type":"string","description":"ISO datetime, after start_at (default start + 1 h)"},"all_day":{"type":"boolean"},"lead_id":{"type":"string","description":"Link the event to a CRM lead"},"start_at":{"type":"string","description":"ISO datetime"},"description":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create a CRM calendar event"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":212,"tokensAfter":212},{"name":"crm_create_lead","fixed":{"name":"crm_create_lead","description":"Add a lead card to the entry stage of the chosen pipeline(s). ALL fields optional — provide whatever is known (at least one of name/company/title/email/linkedin/phone). Not deduplicated (use crm_import_leads or crm_promote_contact_to_lead for dedup). Side-effect: a card appears on the customer board.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"email":{"type":"string"},"notes":{"type":"string","maxLength":8000},"phone":{"type":"string"},"title":{"type":"string"},"last_name":{"type":"string"},"avatar_url":{"type":"string","description":"Full http(s) URL"},"branch_ids":{"type":"array","items":{"type":"string"},"description":"Pipelines to place the lead in: \"general\" and/or branch ids (default General)"},"first_name":{"type":"string"},"company_name":{"type":"string"},"facebook_url":{"type":"string","description":"Full http(s) URL"},"linkedin_url":{"type":"string","description":"Full http(s) URL"},"instagram_url":{"type":"string","description":"Full http(s) URL"},"assigned_user_id":{"type":"string","description":"Owner — user id from crm_list_workspace_members (default: you)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create a lead manually"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":339,"tokensAfter":339},{"name":"crm_create_stage","fixed":{"name":"crm_create_stage","description":"Add a custom kanban column to a pipeline (name, optional hex color, is_terminal for Won/Lost-like end stages). Inserted before the terminal stages. branch = \"general\" (default) or a branch id.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["name"],"properties":{"name":{"type":"string","minLength":1},"color":{"type":"string","description":"#RRGGBB"},"branch":{"type":"string","description":"\"general\" (default) or a branch id"},"is_terminal":{"type":"boolean"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create a pipeline stage"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":164,"tokensAfter":164},{"name":"crm_delete_calendar_event","fixed":{"name":"crm_delete_calendar_event","description":"Remove a custom calendar event. Unlike deleting a lead or a stage this destroys no history and needs no preview step, but it cannot be undone.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete a CRM calendar event"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":102,"tokensAfter":102},{"name":"crm_get_branch","fixed":{"name":"crm_get_branch","description":"One pipeline by id (id, name, is_default). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Branch id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get one CRM pipeline"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":83,"tokensAfter":83},{"name":"crm_get_conversation","fixed":{"name":"crm_get_conversation","description":"The full message thread with this lead on their source channel (LinkedIn / email / widget / telegram / phone transcript). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get lead conversation thread"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":97,"tokensAfter":97},{"name":"crm_get_lead","fixed":{"name":"crm_get_lead","description":"Full lead card: identity, source (\"why is this person here\"), company enrichment, activities, comments, assignments. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get one CRM lead (full detail)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"crm_get_lead_branches","fixed":{"name":"crm_get_lead_branches","description":"Every pipeline a lead currently sits in, with its stage and owner per pipeline. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Lead id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Pipelines a lead is in"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"crm_get_lead_document","fixed":{"name":"crm_get_lead_document","description":"Returns the file as base64 with its name and mime type (files up to 5 MB; larger ones only via REST). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","document_id"],"properties":{"id":{"type":"string","description":"Lead id (UUID)"},"document_id":{"type":"string","description":"Document id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Download a lead document"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":123,"tokensAfter":123},{"name":"crm_get_settings","fixed":{"name":"crm_get_settings","description":"Read CRM settings, including the notify_* toggles that control which events send an email/notification. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Get CRM settings"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":74,"tokensAfter":74},{"name":"crm_import_leads","fixed":{"name":"crm_import_leads","description":"Import up to 1000 parsed rows as leads into the chosen pipelines (entry stage). Dedup by email/phone: an existing lead only gets its blank fields filled (never overwritten) and is added to the pipelines. Returns created / updated / skipped (+ reasons). No credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["rows"],"properties":{"rows":{"type":"array","items":{"type":"object","properties":{"email":{"type":"string"},"phone":{"type":"string"},"title":{"type":"string"},"company":{"type":"string"},"facebook":{"type":"string"},"linkedin":{"type":"string","description":"LinkedIn URL"},"instagram":{"type":"string"},"last_name":{"type":"string"},"first_name":{"type":"string"}},"additionalProperties":false},"maxItems":1000,"minItems":1},"branch_ids":{"type":"array","items":{"type":"string"},"description":"\"general\" and/or branch ids (default General)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Import leads into the CRM"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":274,"tokensAfter":274},{"name":"crm_list_all_branches","fixed":{"name":"crm_list_all_branches","description":"Every pipeline of the workspace (id, name, is_default) — wider than crm_list_branches for members; use it to pick a destination for crm_add_lead_to_branch / crm_move_lead_to_branch. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"List every CRM pipeline (for moves)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"crm_list_branches","fixed":{"name":"crm_list_branches","description":"Branches are isolated pipelines inside one workspace (teams / directions / clients). Returns id, name, is_default (\"General\"), member_user_ids. Read-only. Call before crm_stats / crm_list_leads when the user has more than one branch, then pass branch=<id> (or \"general\").","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List CRM branches (pipelines)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":117,"tokensAfter":117},{"name":"crm_list_calendar_events","fixed":{"name":"crm_list_calendar_events","description":"List custom calendar events (meetings, reminders) in the CRM planner for a date range. Note: SDR sending windows also appear in the UI calendar but are derived from the search schedule — read those via `sdr_get_search`. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"to":{"type":"string","description":"ISO date, end of range"},"from":{"type":"string","description":"ISO date, start of range"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List CRM calendar events"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":152,"tokensAfter":152},{"name":"crm_list_lead_documents","fixed":{"name":"crm_list_lead_documents","description":"Files attached to a lead card (id, name, type, size, uploader, date). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Lead id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List documents on a lead"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"crm_list_leads","fixed":{"name":"crm_list_leads","description":"List leads in the CRM pipeline. Filters: branch (\"general\" or a branch id from crm_list_branches; omitted = all branches visible to the user), stage (stage id), owner (user id from crm_list_workspace_members), source, q (name/company/email search), range or from/to, limit/offset. Read-only. Great first call for \"who replied to me?\".","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"q":{"type":"string"},"to":{"type":"string","description":"ISO date — created to"},"from":{"type":"string","description":"ISO date — created from"},"limit":{"type":"integer","maximum":200,"minimum":1},"owner":{"type":"string","description":"Assigned user id"},"range":{"enum":["24h","7d","30d","90d","180d","1y"],"type":"string","description":"Omit for all time"},"stage":{"type":"string"},"branch":{"type":"string"},"offset":{"type":"integer","minimum":0},"source":{"enum":["linkedin_outreach_reply","linkedin_inbound","linkedin_manual","email_reply_real","widget_chat","widget_voice","widget_form","narrator_form","telegram_message","whatsapp_message","phone_call_interested","meeting_booked","crm_integration_inbound","manual"],"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List CRM leads"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":349,"tokensAfter":349},{"name":"crm_list_linkedin_accounts","fixed":{"name":"crm_list_linkedin_accounts","description":"List the LinkedIn accounts connected to this workspace, as shown in the CRM. Useful to see which account owns a conversation. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List connected LinkedIn accounts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":83,"tokensAfter":83},{"name":"crm_list_notifications","fixed":{"name":"crm_list_notifications","description":"Latest 50 CRM notifications of the caller (types: assigned, reassigned, mentioned, new_lead, stage_change) plus total and unread counts. unread_only=true returns only unread ones. For the app bell (billing, meetings, invitations) use list_app_notifications. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"unread_only":{"type":"boolean"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List CRM notifications"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":135,"tokensAfter":135},{"name":"crm_list_stages","fixed":{"name":"crm_list_stages","description":"Ordered kanban columns of ONE pipeline (id, name, color, is_terminal). Every branch has its own stages: pass branch (\"general\" = default, or a branch id from crm_list_branches). Read-only. Call before moving leads.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"branch":{"type":"string","description":"\"general\" (default) or a branch id"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List pipeline stages"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"crm_list_workspace_agents","fixed":{"name":"crm_list_workspace_agents","description":"List the AI agents in this workspace that CRM leads can be attributed to. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List agents visible in CRM"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":68,"tokensAfter":68},{"name":"crm_list_workspace_members","fixed":{"name":"crm_list_workspace_members","description":"List the people in this workspace who can own a CRM lead. Use before `reassign_crm_lead` to get valid owner ids. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List workspace members"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":79,"tokensAfter":79},{"name":"crm_mark_all_notifications_read","fixed":{"name":"crm_mark_all_notifications_read","description":"Clear the CRM notification badge by marking everything read.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Mark all notifications as read"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":61,"tokensAfter":61},{"name":"crm_mark_notification_read","fixed":{"name":"crm_mark_notification_read","description":"Mark a single CRM notification as read. Write operation, no credit cost.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Mark one notification as read"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":82,"tokensAfter":82},{"name":"crm_move_lead","fixed":{"name":"crm_move_lead","description":"Drag-and-drop equivalent: move a lead to a different pipeline stage by stage_id (get ids from crm_list_stages). Reversible.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","stage_id"],"properties":{"id":{"type":"string"},"stage_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Move lead to another stage"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":104,"tokensAfter":104},{"name":"crm_move_lead_to_branch","fixed":{"name":"crm_move_lead_to_branch","description":"Move the lead out of one pipeline into another (entry stage, or to_stage_id of the destination). Reversible.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","from_branch_id","to_branch_id"],"properties":{"id":{"type":"string","description":"Lead id (UUID)"},"to_stage_id":{"type":"string","description":"A stage of the destination (crm_list_stages branch=<to>)"},"to_branch_id":{"type":"string","description":"\"general\" or the destination branch id"},"from_branch_id":{"type":"string","description":"\"general\" or the branch id it leaves"},"assignee_user_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Move a lead between pipelines"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":199,"tokensAfter":199},{"name":"crm_preview_email_to_lead","fixed":{"name":"crm_preview_email_to_lead","description":"Dry-run of crm_send_email_to_lead: shows recipient, subject and body exactly as they would be sent. Sends nothing. ALWAYS call first and show the draft to the human.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","subject","body"],"properties":{"id":{"type":"string","description":"Lead id (UUID)"},"to":{"type":"string","description":"Recipient (default: the lead's email)"},"body":{"type":"string","minLength":1,"description":"Plain-text message"},"subject":{"type":"string","minLength":1}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Preview an email to a lead (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":175,"tokensAfter":175},{"name":"crm_reply_to_lead","fixed":{"name":"crm_reply_to_lead","description":"Sends a REAL LinkedIn message or email reply to the lead on their source channel, from the customer's own account. Also moves the lead to the \"Manager Dialog\" stage. ALWAYS show the drafted text to the human and get approval BEFORE calling this.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","text"],"properties":{"id":{"type":"string"},"text":{"type":"string","minLength":1}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Send a reply to a lead (REAL outbound message)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":141,"tokensAfter":141},{"name":"crm_send_email_to_lead","fixed":{"name":"crm_send_email_to_lead","description":"Sends a REAL email from the CRM card (\"<your name> via Vendo AI\", replies go to your own address) and logs it on the card. Members need the crm-contact-details permission. Only call after the user approved the exact draft from crm_preview_email_to_lead.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","subject","body"],"properties":{"id":{"type":"string","description":"Lead id (UUID)"},"to":{"type":"string"},"body":{"type":"string","minLength":1},"subject":{"type":"string","minLength":1}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Send a REAL email to a lead"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":174,"tokensAfter":174},{"name":"crm_stats","fixed":{"name":"crm_stats","description":"Counts per stage, new today/this week, stale leads. Read-only. Optional branch (\"general\" or a branch id from crm_list_branches) — omitted = all branches visible to the user. If the workspace has more than one branch, call crm_list_branches first and report per branch or ask which one.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"branch":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"CRM pipeline stats"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":134,"tokensAfter":134},{"name":"crm_update_branch","fixed":{"name":"crm_update_branch","description":"Rename a pipeline and/or replace its member list. The General pipeline cannot be changed. Admins/owner only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Branch id (UUID)"},"name":{"type":"string","maxLength":120,"minLength":1},"member_user_ids":{"type":"array","items":{"type":"string"},"description":"Replaces the member list"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Rename a pipeline / change its members"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":143,"tokensAfter":143},{"name":"crm_update_calendar_event","fixed":{"name":"crm_update_calendar_event","description":"Edit an existing custom calendar event (title, times, all-day, description, colour, linked lead — lead_id null unlinks). Write operation, no credit cost.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","description":"#RRGGBB"},"title":{"type":"string"},"end_at":{"type":"string","description":"ISO datetime"},"all_day":{"type":"boolean"},"lead_id":{"type":["string","null"],"description":"Lead id, or null to unlink"},"start_at":{"type":"string","description":"ISO datetime"},"description":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Update a CRM calendar event"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":205,"tokensAfter":205},{"name":"crm_update_lead","fixed":{"name":"crm_update_lead","description":"Patch lead attributes (name, company, title, email, LinkedIn, phone, notes, tags, deal value + currency). Stage and owner have their own tools (crm_move_lead, reassign_crm_lead). Reversible.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"},"tags":{"type":"array","items":{"type":"string"},"description":"Replaces the tag list"},"email":{"type":"string"},"notes":{"type":"string"},"phone":{"type":"string"},"title":{"type":"string"},"currency":{"type":"string","maxLength":3,"description":"ISO code, e.g. USD"},"last_name":{"type":"string"},"deal_value":{"type":"number"},"first_name":{"type":"string"},"company_name":{"type":"string"},"linkedin_url":{"type":"string","description":"Full http(s) URL"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Update lead fields"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":240,"tokensAfter":240},{"name":"crm_update_settings","fixed":{"name":"crm_update_settings","description":"Change workspace CRM settings: which notifications fire (new lead, reassigned, mention; by email and/or in-app), the stale-lead alert, the default date range, and which agents / sources / LinkedIn accounts never create leads. Write operation, no credit cost. Turning notifications off or excluding sources means the human stops being alerted / leads stop appearing, so confirm with the user first. (Personal email preferences: update_notification_preferences.)","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"notify_email":{"type":"boolean","description":"Send CRM notifications by email"},"notify_in_app":{"type":"boolean","description":"Show CRM notifications in the bell"},"notify_mention":{"type":"boolean"},"notify_new_lead":{"type":"boolean"},"excluded_sources":{"type":"array","items":{"type":"string"},"description":"Lead sources to ignore, e.g. [\"widget_form\"]. Replaces the list."},"stale_alert_days":{"type":"integer","maximum":90,"minimum":1},"notify_reassigned":{"type":"boolean"},"default_date_range":{"enum":["24h","7d","30d","90d","180d","1y","all"],"type":"string"},"excluded_agent_ids":{"type":"array","items":{"type":"string"},"description":"Agents whose conversations never create leads (ids from crm_list_workspace_agents). Replaces the list."},"excluded_linkedin_account_ids":{"type":"array","items":{"type":"string"},"description":"From crm_list_linkedin_accounts. Replaces the list."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Update CRM settings"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":428,"tokensAfter":428},{"name":"crm_update_stage","fixed":{"name":"crm_update_stage","description":"Rename, recolor or toggle is_terminal of a stage. System stages (New, Manager Dialog) cannot be renamed. To change the column order use crm_reorder_stages.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"color":{"type":"string","description":"#RRGGBB"},"is_terminal":{"type":"boolean"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Rename / recolor a pipeline stage"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":133,"tokensAfter":133},{"name":"crm_upload_lead_document","fixed":{"name":"crm_upload_lead_document","description":"Attach one file to a lead card (base64 or https URL). Allowed: pdf, doc(x), xls(x), csv, txt, rtf, odt, ods, ppt(x), png, jpg, gif, webp, heic, zip. Stored privately; adds an activity entry. No credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Lead id (UUID)"},"file_url":{"type":"string","description":"Public https URL to fetch the file from (≤10 MB). Use this OR content_base64."},"filename":{"type":"string","description":"File name WITH extension (decides the type). Required with content_base64."},"content_base64":{"type":"string","description":"File content, base64 (≤ ~7 MB). Use this OR file_url."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Attach a document to a lead"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":223,"tokensAfter":223},{"name":"delete_agent","fixed":{"name":"delete_agent","description":"Permanently delete an agent. NOT reversible. Only call after the user has reviewed `preview_delete_agent` output and explicitly approved.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete an agent (irreversible)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":97,"tokensAfter":97},{"name":"delete_agent_connection","fixed":{"name":"delete_agent_connection","description":"Remove a channel from the agent (the embed code stops working). No undo. Only after preview_delete_agent_connection and explicit user approval.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","connection_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"connection_id":{"type":"string","description":"Channel (connection) id (UUID) — from list_agent_connections"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Remove a channel (irreversible)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":151,"tokensAfter":151},{"name":"delete_app_notification","fixed":{"name":"delete_app_notification","description":"Remove one in-app notification from the caller's list.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Notification id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete an app notification"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":87,"tokensAfter":87},{"name":"delete_campaign","fixed":{"name":"delete_campaign","description":"Permanently delete a campaign. NOT reversible. Only call after the user has reviewed `preview_delete_campaign` output and explicitly approved.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete a campaign (irreversible)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":99,"tokensAfter":99},{"name":"delete_crm_branch","fixed":{"name":"delete_crm_branch","description":"Delete a non-default pipeline; its leads are not deleted but return to General. NOT reversible. Admins/owner only. Only call after the user approved preview_delete_crm_branch.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Branch id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete a pipeline"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":118,"tokensAfter":118},{"name":"delete_crm_lead","fixed":{"name":"delete_crm_lead","description":"Soft-delete a lead — it disappears from the pipeline (restorable by support only). Only call after the user reviewed `preview_delete_crm_lead` output and explicitly approved.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete a CRM lead (soft)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":108,"tokensAfter":108},{"name":"delete_crm_lead_document","fixed":{"name":"delete_crm_lead_document","description":"Permanently delete a file from a lead card. NOT reversible. Only call after the user approved preview_delete_crm_lead_document.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","document_id"],"properties":{"id":{"type":"string","description":"Lead id (UUID)"},"document_id":{"type":"string","description":"Document id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete a lead document"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":128,"tokensAfter":128},{"name":"delete_crm_stage","fixed":{"name":"delete_crm_stage","description":"Delete an EMPTY, non-system pipeline stage. Only call after the user reviewed `preview_delete_crm_stage` and explicitly approved.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete a pipeline stage"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"delete_custom_audience","fixed":{"name":"delete_custom_audience","description":"Permanently delete a custom audience with all its contacts and source file. NOT reversible. Only call after the user approved `preview_delete_custom_audience`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Custom audience id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete a custom audience"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":117,"tokensAfter":117},{"name":"delete_custom_audience_contact","fixed":{"name":"delete_custom_audience_contact","description":"Permanently remove one contact from a custom audience (not reversible). Optional reason (UI choices: Not relevant, Wrong contact, Already a customer, Bad data, Other) is logged to improve automatic selection. Only call after the user approved `preview_delete_custom_audience_contact`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","contact_id"],"properties":{"id":{"type":"string","description":"Custom audience id (UUID)"},"reason":{"type":"string","maxLength":200},"contact_id":{"type":"string","description":"Contact id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Remove a contact from a custom audience"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":188,"tokensAfter":188},{"name":"delete_narrator_lead","fixed":{"name":"delete_narrator_lead","description":"Permanently delete a presentation lead. Only after preview_delete_narrator_lead and explicit user approval.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","lead_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"lead_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete a presentation lead (irreversible)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":115,"tokensAfter":115},{"name":"disconnect_content_account","fixed":{"name":"disconnect_content_account","description":"Remove the publishing account; it can no longer publish posts. Only after the user approved preview_disconnect_content_account.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["account_id"],"properties":{"account_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Disconnect a social publishing account"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":102,"tokensAfter":102},{"name":"export_custom_audience_csv","fixed":{"name":"export_custom_audience_csv","description":"Download every contact of a custom audience as CSV text (filename, total_rows, csv). Can be large. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Custom audience id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Export a custom audience as CSV"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":106,"tokensAfter":106},{"name":"generate_agent_page_descriptions","fixed":{"name":"generate_agent_page_descriptions","description":"Write AI descriptions + keywords for website pages (output of scan_agent_website). Costs 1 credit per 5 pages. Not saved.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","pages"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"pages":{"type":"array","items":{"type":"object","required":["path","title"],"properties":{"path":{"type":"string"},"title":{"type":"string"}},"additionalProperties":false},"minItems":1}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Describe website pages with AI"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":166,"tokensAfter":166},{"name":"generate_slide_script","fixed":{"name":"generate_slide_script","description":"AI-write what the presenter says on one slide, in the presentation's language. 1 credit (2 with image_url — the AI looks at the slide). NOT saved — put it into narrator_script with set_presentation_slides.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","slide_number","total_slides"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"image_url":{"type":"string","description":"Public URL of the slide image (optional, 2 credits)"},"slide_number":{"type":"integer","minimum":1},"total_slides":{"type":"integer","minimum":1},"extracted_text":{"type":"string","description":"Text on the slide"},"next_slide_text":{"type":"string"},"previous_script":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Write the presenter script for a slide"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":232,"tokensAfter":232},{"name":"get_agent","fixed":{"name":"get_agent","description":"Fetch the full details of a single agent by id.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"The agent UUID"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get an agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":79,"tokensAfter":79},{"name":"get_agent_connection","fixed":{"name":"get_agent_connection","description":"Full settings of one channel (website widget, button, presentation, Google Meet, phone, Telegram). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","connection_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"connection_id":{"type":"string","description":"Channel (connection) id (UUID) — from list_agent_connections"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get one channel of an agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":140,"tokensAfter":140},{"name":"get_agent_connection_stats","fixed":{"name":"get_agent_connection_stats","description":"Conversations, messages, unique visitors, last activity of one channel. For widgets prefer get_connection_analytics (fresher). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","connection_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"connection_id":{"type":"string","description":"Channel (connection) id (UUID) — from list_agent_connections"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Channel counters"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":150,"tokensAfter":150},{"name":"get_agent_job","fixed":{"name":"get_agent_job","description":"Status and result of a deep scan or script generation job started by deep_scan_agent / generate_agent_script (kept 1 hour). Poll every 10-20 s while status is \"running\". Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","job_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"job_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get a long job (deep scan / script) result"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":134,"tokensAfter":134},{"name":"get_agent_plan_limits","fixed":{"name":"get_agent_plan_limits","description":"How many agents can the user create (base plan + purchased extra slots) vs how many they have. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get agent capacity"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":71,"tokensAfter":71},{"name":"get_agents_dashboard","fixed":{"name":"get_agents_dashboard","description":"Older overview numbers of all agents (superseded by get_analytics_agents). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Legacy agents dashboard numbers"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":65,"tokensAfter":65},{"name":"get_analytics_agents","fixed":{"name":"get_analytics_agents","description":"All metrics of the workspace's agents for a UTC date range (default: the page default), optionally one agent: totals, rates, daily series, funnel (widget loads → opens → conversations → contacts → leads), by agent / channel, leads by source, recent leads, credits by type, languages, pages, traffic sources, hours, durations, previous-period comparison. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"to":{"type":"string","description":"YYYY-MM-DD"},"from":{"type":"string","description":"YYYY-MM-DD"},"agent_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Agents analytics (page /analytics/agents)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":187,"tokensAfter":187},{"name":"get_analytics_sdr","fixed":{"name":"get_analytics_sdr","description":"Outreach analytics for a UTC date range across Vendo SDR and classic campaigns, or narrowed to one SDR search (search_id) or one campaign (campaign_id) — never both: totals, rates, daily series, delivery (sent/delivered/bounced/inbox placement), by product / source / type, contacts by source, enrichment, funnel, per-process rows. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"to":{"type":"string","description":"YYYY-MM-DD"},"from":{"type":"string","description":"YYYY-MM-DD"},"search_id":{"type":"string"},"campaign_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"SDR & outreach analytics (page /analytics/sdr)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":189,"tokensAfter":189},{"name":"get_app_notifications_unread_count","fixed":{"name":"get_app_notifications_unread_count","description":"Number of unread in-app notifications (the bell badge). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Unread app notifications count"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":64,"tokensAfter":64},{"name":"get_audience","fixed":{"name":"get_audience","description":"Read one saved audience with its filters and contact count. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get one saved audience"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":80,"tokensAfter":80},{"name":"get_audience_set","fixed":{"name":"get_audience_set","description":"Details of one marketplace set by slug: size, description, freshness. Use the contact count here to work out the purchase cost (2 credits per contact). Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string","description":"Human-readable slug, not a UUID"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get one audience set"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":121,"tokensAfter":121},{"name":"get_audience_set_contact","fixed":{"name":"get_audience_set_contact","description":"Full card of one contact in a marketplace set: person, company, buying signal, channels. Contact details stay masked until the set is bought. Contact ids come from `get_audience_set_contacts`. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug","contact_id"],"properties":{"slug":{"type":"string","description":"Set slug"},"contact_id":{"type":"string","description":"Contact id from get_audience_set_contacts"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"One contact card of an audience set"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":156,"tokensAfter":156},{"name":"get_audience_set_contacts","fixed":{"name":"get_audience_set_contacts","description":"Paginated preview of the contacts inside a marketplace set. Contact details stay masked until the set is purchased. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["slug"],"properties":{"slug":{"type":"string"},"limit":{"type":"number"},"offset":{"type":"number"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview contacts in an audience set"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":115,"tokensAfter":115},{"name":"get_balance","fixed":{"name":"get_balance","description":"Get the current shared credit balance of the workspace (credits belong to the workspace owner; member keys see the same number). Read-only, no side-effects, no cost.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get credit balance"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"get_balance_full","fixed":{"name":"get_balance_full","description":"Richer than `get_balance` — returns balance, total subscription credits, total purchased, total spent, free-trial credits, email/workspace info.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get full billing balance + plan summary"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":80,"tokensAfter":80},{"name":"get_campaign","fixed":{"name":"get_campaign","description":"Full campaign: status, settings (all wizard fields), sequence, channel paused flags, channelStatuses, today's sends, stats.totalContacts. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":115,"tokensAfter":115},{"name":"get_campaign_activity","fixed":{"name":"get_campaign_activity","description":"Paged activity events of a campaign (discovery, outreach, engagement, system, billing). Poll it instead of a live stream. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (default 50)"},"offset":{"type":"integer","minimum":0,"description":"Rows to skip (default 0)"},"category":{"enum":["discovery","outreach","engagement","system","billing"],"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Campaign activity feed"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":187,"tokensAfter":187},{"name":"get_campaign_analytics","fixed":{"name":"get_campaign_analytics","description":"Sales Process KPIs for the workspace: totals (campaigns, emails sent, opens, clicks, replies, contacts, rates) and per-campaign performance, optionally for a date range. Read-only. For SDR + campaigns combined use the SDR analytics tool.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"to":{"type":"string","description":"YYYY-MM-DD"},"from":{"type":"string","description":"YYYY-MM-DD"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Campaign analytics (all campaigns)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"get_campaign_discovery","fixed":{"name":"get_campaign_discovery","description":"AI lead discovery settings of a campaign (null when never configured). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get AI lead discovery config"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":99,"tokensAfter":99},{"name":"get_campaign_email","fixed":{"name":"get_campaign_email","description":"One sent email by email id (from list_campaign_emails / list_campaign_replies): content, recipient, related open/click/reply events, the reply and the conversation. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["email_id"],"properties":{"email_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Open one campaign email"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":112,"tokensAfter":112},{"name":"get_campaign_email_stats","fixed":{"name":"get_campaign_email_stats","description":"Email funnel: sent, delivered, opened, clicked, replied (real / auto-reply / bounce), bounced; delivery block (delivered vs not delivered: bounced, rejected as spam, unsubscribed; sender inbox-placement test — real inbox vs spam folder is not reported by providers) and unique opened/clicked/replied. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Campaign email funnel incl. delivery"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":164,"tokensAfter":164},{"name":"get_campaign_linkedin_stats","fixed":{"name":"get_campaign_linkedin_stats","description":"LinkedIn counters (total, pending, invites sent, connected, messaged, replied, failed), invites sent today, effective daily limit and active accounts; optionally for one account. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"account_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"LinkedIn stats of a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":139,"tokensAfter":139},{"name":"get_campaign_live_status","fixed":{"name":"get_campaign_live_status","description":"Email channel progress: audience size, processed, % complete, event counts, queue depth and provider status / sent today. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Campaign email progress"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":114,"tokensAfter":114},{"name":"get_campaign_monitor","fixed":{"name":"get_campaign_monitor","description":"Monitor page data: AI lead discovery config + stats, audience growth by day, the last 100 activity events, event counts and credits (balance, spent today/total, daily budget). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Campaign monitor"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":128,"tokensAfter":128},{"name":"get_campaign_phone_stats","fixed":{"name":"get_campaign_phone_stats","description":"Call counters: total, completed, active, pending, no answer, voicemail, failed, interested, meetings booked, not interested, average/total duration. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Phone stats of a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":121,"tokensAfter":121},{"name":"get_campaign_pulse","fixed":{"name":"get_campaign_pulse","description":"What the campaign is doing now (sending / idle / outside_hours / paused / queue_empty / done), today vs daily limits, 7–28-day email + LinkedIn series and the latest events. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"days":{"type":"integer","maximum":28,"minimum":7},"limit":{"type":"integer","maximum":60,"minimum":8,"description":"Recent events to return"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Campaign pulse (live status)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":166,"tokensAfter":166},{"name":"get_campaign_thread","fixed":{"name":"get_campaign_thread","description":"One conversation with all messages (AI, human and contact). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["thread_id"],"properties":{"thread_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Open an AI email conversation"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":84,"tokensAfter":84},{"name":"get_connection_analytics","fixed":{"name":"get_connection_analytics","description":"For a website widget/button/presentation channel: widget loaded, activated, chats started, voice calls started, plus estimated credits (text messages, voice minutes) for a date range. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","connection_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"date_to":{"type":"string","description":"To (YYYY-MM-DD or ISO 8601)"},"date_from":{"type":"string","description":"From (YYYY-MM-DD or ISO 8601)"},"connection_id":{"type":"string","description":"Channel (connection) id (UUID) — from list_agent_connections"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Widget/button channel analytics"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":206,"tokensAfter":206},{"name":"get_conversation_recordings","fixed":{"name":"get_conversation_recordings","description":"Recording URLs (WAV), duration and start time of the voice calls in one widget conversation (up to 10 calls). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","connection_id","conversation_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"connection_id":{"type":"string","description":"Channel (connection) id (UUID) — from list_agent_connections"},"conversation_id":{"type":"string","description":"From list_connection_conversations"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get voice recordings of a conversation"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":175,"tokensAfter":175},{"name":"get_credit_transactions","fixed":{"name":"get_credit_transactions","description":"Credit deductions + grants of the workspace, newest first. Optional filters: type, date range (from/to, a date-only `to` is inclusive), pagination. With filters the gateway scans the newest 5000 rows; `has_more`/`total_matched` tell you if there is more. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"to":{"type":"string","description":"ISO date, e.g. 2026-06-30"},"from":{"type":"string","description":"ISO date, e.g. 2026-06-01"},"type":{"type":"string","description":"Transaction type, e.g. SUBSCRIPTION_GRANT, PURCHASE, FREE_TRIAL, BONUS, REFUND, EMAIL_OUTREACH, LINKEDIN_INVITE, LINKEDIN_MESSAGE, SDR_CONTACT, PHONE_CALL, VOICE_MINUTE, TEXT_MESSAGE, AUDIENCE_ENRICHMENT, AUDIENCE_SET_CONTACT, DISCOVERY_ENRICH, ASSISTANT_MESSAGE, SCRIPT_GENERATION, IMAGE_GENERATION"},"limit":{"type":"integer","maximum":200,"minimum":1},"offset":{"type":"integer","minimum":0}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get credit transaction history"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":281,"tokensAfter":281},{"name":"get_credit_usage_by_agent","fixed":{"name":"get_credit_usage_by_agent","description":"Total credit spend per agent in the workspace. Identifies the most expensive agents.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get credit spend per agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":66,"tokensAfter":66},{"name":"get_credit_usage_by_type","fixed":{"name":"get_credit_usage_by_type","description":"Per-session credit spend (newest first) with connectionType (email_outreach, linkedin_invite, linkedin_message, phone_call, widget, voice, sdr_contact, ...). With from/to it also returns totals_by_type for that range. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"to":{"type":"string","description":"ISO date, end of range (date-only = inclusive)"},"from":{"type":"string","description":"ISO date, start of range"},"limit":{"type":"integer","maximum":500,"minimum":1},"offset":{"type":"integer","minimum":0}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get credit spend by type / session"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":182,"tokensAfter":182},{"name":"get_credit_usage_for_agent","fixed":{"name":"get_credit_usage_for_agent","description":"Total credits spent by one specific agent.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_id"],"properties":{"agent_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get credit spend for a single agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":77,"tokensAfter":77},{"name":"get_credit_usage_for_agent_connections","fixed":{"name":"get_credit_usage_for_agent_connections","description":"Per-channel credit spend (widget, telegram, phone, etc.) for one agent. Identifies the costliest channels.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_id"],"properties":{"agent_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get credit spend by connection for an agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":99,"tokensAfter":99},{"name":"get_credit_usage_monthly","fixed":{"name":"get_credit_usage_monthly","description":"Calendar-month breakdown of credit spend across all categories.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get credit spend per month"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":60,"tokensAfter":60},{"name":"get_crm_integration","fixed":{"name":"get_crm_integration","description":"Status and settings of the Kommo or HubSpot connection ({connected:false} if none). Use it to poll after connect_crm_integration. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["provider"],"properties":{"provider":{"enum":["kommo","hubspot"],"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get one CRM integration"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":110,"tokensAfter":110},{"name":"get_crm_integration_logs","fixed":{"name":"get_crm_integration_logs","description":"Recent sync events (contact/lead created, errors) of the caller's own Kommo/HubSpot connection. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["provider"],"properties":{"limit":{"type":"integer","maximum":200,"minimum":1},"provider":{"enum":["kommo","hubspot"],"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"CRM integration sync log"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":117,"tokensAfter":117},{"name":"get_custom_audience","fixed":{"name":"get_custom_audience","description":"One custom audience: status, counts (with email/phone/LinkedIn), enrichment progress, column mapping and the first 20 contacts. Page through all contacts with `get_custom_audience_contacts`. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Custom audience id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get one custom audience"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"get_custom_audience_contacts","fixed":{"name":"get_custom_audience_contacts","description":"Paged contacts of a custom audience (max 100 per page). Contacts added by Vendo SDR carry signal_context (why they were picked: reasoning, relevance score, ICP group). Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Custom audience id (UUID)"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","maximum":100,"minimum":1}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Page through custom audience contacts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":151,"tokensAfter":151},{"name":"get_custom_audience_enrichment","fixed":{"name":"get_custom_audience_enrichment","description":"Status and progress of a running (or finished) enrichment: status, enrichment_total, enrichment_done, enrichment_progress (%), done flag. Poll every 10–30 s. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Custom audience id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Enrichment progress of a custom audience"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":122,"tokensAfter":122},{"name":"get_google_meet_analytics","fixed":{"name":"get_google_meet_analytics","description":"Meetings, minutes, completed, missed and credits used for a date range. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"date_to":{"type":"string","description":"To (YYYY-MM-DD or ISO 8601)"},"date_from":{"type":"string","description":"From (YYYY-MM-DD or ISO 8601)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Google Meet analytics of an agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":140,"tokensAfter":140},{"name":"get_google_meet_settings","fixed":{"name":"get_google_meet_settings","description":"Whether Google Meet is connected for this agent, its invite address, settings and totals. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Google Meet status & settings"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":104,"tokensAfter":104},{"name":"get_invoices","fixed":{"name":"get_invoices","description":"List of Stripe invoices (paid + open). Optional year/month scope.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"year":{"type":"integer"},"month":{"type":"integer","maximum":12,"minimum":1}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Stripe invoices"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":87,"tokensAfter":87},{"name":"get_linkedin_account_settings","fixed":{"name":"get_linkedin_account_settings","description":"Per-account LinkedIn settings shared by every campaign and SDR process using the account: AI auto-replies (on/off, tone, instructions, pitch, booking link, reply delays, daily limit, working hours, agent, contact info), invites (on/off, tone, pitch, instructions, CTA), follow-ups (on/off, pitch, instructions, CTA) and signature (text, first_message|every_message). The first read creates defaults (pre-filled from campaign_id's agent).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["account_id"],"properties":{"account_id":{"type":"string"},"campaign_id":{"type":"string","description":"Pre-fill defaults from this campaign's agent"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"LinkedIn account settings"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":215,"tokensAfter":215},{"name":"get_linkedin_conversation","fixed":{"name":"get_linkedin_conversation","description":"All messages of one LinkedIn chat (chat_id from list_linkedin_conversations). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["chat_id"],"properties":{"chat_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Open a LinkedIn conversation"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":89,"tokensAfter":89},{"name":"get_meeting","fixed":{"name":"get_meeting","description":"One meeting with transcript, summary, action items, join/leave time and duration. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["meeting_id"],"properties":{"meeting_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get a meeting"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":88,"tokensAfter":88},{"name":"get_meeting_transcript","fixed":{"name":"get_meeting_transcript","description":"Transcript messages, summary and action items of a meeting (from the database or the recording service). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["meeting_id"],"properties":{"meeting_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get a meeting transcript"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":98,"tokensAfter":98},{"name":"get_narrator_analytics","fixed":{"name":"get_narrator_analytics","description":"Slide Presenter analytics. view \"summary\" (default): views, presentations started, watch time, unique viewers, average duration, completion rate, recent sessions, per channel. view \"period\" with date_from/date_to: widget loads, starts, watch minutes, unique viewers, credits used. Read-only. (No per-slide drop-off.)","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"view":{"enum":["summary","period"],"type":"string"},"date_to":{"type":"string","description":"To (YYYY-MM-DD or ISO 8601)"},"date_from":{"type":"string","description":"From (YYYY-MM-DD or ISO 8601)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Presentation analytics"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":220,"tokensAfter":220},{"name":"get_notification_preferences","fixed":{"name":"get_notification_preferences","description":"Personal email/in-app preferences: email_notifications, in_app_notifications, meeting_reminders, credit_alerts, analytics_emails_enabled. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get my notification preferences"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"get_phone_channel_stats","fixed":{"name":"get_phone_channel_stats","description":"Calls attempted/completed/successful, minutes and credits of one Voice Call channel. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","connection_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"connection_id":{"type":"string","description":"Channel (connection) id (UUID) — from list_agent_connections"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Voice Call channel counters"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"get_planner_events","fixed":{"name":"get_planner_events","description":"The planner layer of the calendar page: campaign and SDR sending windows per day and channel (paused flag, planned today, sent today) with campaign/search info, for an ISO date range (wide ranges are capped; `range` says what was materialised). CRM events: crm_list_calendar_events. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["from","to"],"properties":{"to":{"type":"string","description":"ISO date"},"from":{"type":"string","description":"ISO date"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Planner: sending windows per day"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":164,"tokensAfter":164},{"name":"get_presentation","fixed":{"name":"get_presentation","description":"The agent's presentation: PDF name, slides (text + presenter script; images with include_images), look, call-to-action, presenter voice, published channels and direct link. Read-only. (list_agent_presentations shows only the legacy creator.)","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"include_images":{"type":"boolean","description":"Add slide image URLs"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get the agent's Slide Presenter"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":161,"tokensAfter":161},{"name":"get_presentation_embed_code","fixed":{"name":"get_presentation_embed_code","description":"Direct link (narrator page) and the HTML snippet with the saved look. Publish it as a channel first (create_agent_connection type PRESENTATION_WIDGET). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get the presentation embed code & link"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":122,"tokensAfter":122},{"name":"get_pricing","fixed":{"name":"get_pricing","description":"List of public plans + add-ons (Extra Agent Slot, SDR sender pair, etc.) with prices. Optional currency filter (USD/GBP/EUR); omitted = every currency. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"currency":{"enum":["USD","GBP","EUR"],"type":"string","description":"Only prices in this currency"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get public pricing catalogue"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"get_profile","fixed":{"name":"get_profile","description":"The API key owner's profile: name, email, company, position, avatar. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get my profile"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":61,"tokensAfter":61},{"name":"get_referral_overview","fixed":{"name":"get_referral_overview","description":"Commission %, minimum payout, totals (visits, signups, paying customers, revenue, earned, paid out, available), every referral link with its stats, and payout request statuses. Payout requests themselves can only be made in the app. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Referral program overview"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":109,"tokensAfter":109},{"name":"get_referral_share_card","fixed":{"name":"get_referral_share_card","description":"Everything needed to render the share card / QR for a link: url (QR payload), short url, headline and description texts. Render the QR image yourself. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Referral link id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Referral share card data"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":117,"tokensAfter":117},{"name":"get_sdr_email_capacity","fixed":{"name":"get_sdr_email_capacity","description":"How many SDR sender email addresses the account has (included + purchased extras) and the estimated daily email throughput. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get Vendo SDR managed-sender capacity"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":79,"tokensAfter":79},{"name":"get_subscription","fixed":{"name":"get_subscription","description":"Plan, status (ACTIVE/CANCELLED/PAST_DUE/EXPIRED/TRIALING), period dates, currency, amount, Stripe IDs.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get current subscription"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":69,"tokensAfter":69},{"name":"get_subscription_limits","fixed":{"name":"get_subscription_limits","description":"Base + purchased extra agent slots. Useful to check \"can I create another agent?\" before calling `create_agent`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get plan limits (max agents, extra slots)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":74,"tokensAfter":74},{"name":"get_supported_currencies","fixed":{"name":"get_supported_currencies","description":"Currencies Vendo bills in (code, symbol, name) and the account's own billing currency. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Supported billing currencies"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":70,"tokensAfter":70},{"name":"get_telegram_analytics","fixed":{"name":"get_telegram_analytics","description":"Chats, messages, voice calls, text messages, unique users and credits (text/voice) of the agent's Telegram bot for a date range. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"date_to":{"type":"string","description":"To (YYYY-MM-DD or ISO 8601)"},"date_from":{"type":"string","description":"From (YYYY-MM-DD or ISO 8601)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Telegram analytics"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":155,"tokensAfter":155},{"name":"get_telegram_bot_info","fixed":{"name":"get_telegram_bot_info","description":"See the connected bot username + settings.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get current Telegram bot info"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":73,"tokensAfter":73},{"name":"get_telegram_chat","fixed":{"name":"get_telegram_chat","description":"All messages of one Telegram chat, incl. voice-call turns with recording URL and duration. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","chat_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"chat_id":{"type":"string","description":"chats[].id from list_telegram_chats"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Read a Telegram chat"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":127,"tokensAfter":127},{"name":"get_widget_embed_code","fixed":{"name":"get_widget_embed_code","description":"HTML to paste on a site for a channel: website widget (settings load from the server), website button (style it here: text, colours, radius, size — not stored server-side) or Slide Presenter (also the direct link). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","connection_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"size":{"enum":["small","medium","large"],"type":"string","description":"Button only"},"text":{"type":"string","description":"Button only: label (default \"Talk to Assistant\")"},"text_color":{"$ref":"#/properties/background_color","description":"Button only"},"border_radius":{"type":"number","maximum":50,"minimum":0,"description":"Button only (px)"},"connection_id":{"type":"string","description":"Channel (connection) id (UUID) — from list_agent_connections"},"background_color":{"type":"string","pattern":"^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$","description":"Button only"},"modal_primary_color":{"$ref":"#/properties/background_color","description":"Button only: colour of the chat window it opens"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get the embed code of a channel"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":342,"tokensAfter":342},{"name":"get_workspace","fixed":{"name":"get_workspace","description":"Workspace name/owner, members (user_id, email, name, role, feature permissions), pending invitations, and whether the caller is admin/owner. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get workspace, members and invitations"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":82,"tokensAfter":82},{"name":"invite_workspace_member","fixed":{"name":"invite_workspace_member","description":"Sends a REAL invitation email (link valid 7 days). Admins only. Only call after the user approved preview_invite_workspace_member.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["email"],"properties":{"email":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Invite a teammate (sends an email)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":99,"tokensAfter":99},{"name":"launch_audience_set","fixed":{"name":"launch_audience_set","description":"Creates a campaign-ready audience from a marketplace set and returns its audienceId. Signals sets SPEND CREDITS (a fresh snapshot is bought, price per contact; it also appears in My Audiences); people sets are free. Does NOT contact anyone. Next: `create_campaign` with the audienceId, then `preview_launch_campaign`. Only call after the user approved `preview_launch_audience_set`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Turn an audience set into a campaign audience"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":167,"tokensAfter":167},{"name":"list_agent_connections","fixed":{"name":"list_agent_connections","description":"See every channel attached to this agent: widgets, telegram, phone, presentations, etc.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List an agent's connections (channels)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"list_agent_jobs","fixed":{"name":"list_agent_jobs","description":"Deep scans and script generations of this agent in the last hour (status only) — use when a job_id was lost. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List recent long jobs of an agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"list_agent_presentations","fixed":{"name":"list_agent_presentations","description":"Alias of get_presentation kept for older clients: returns the agent's current Slide Presenter deck (PDF name, slides with text and presenter script, look, call-to-action, voice, published channels, direct link) — slides_count 0 when no deck is uploaded. Prefer get_presentation. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"include_images":{"type":"boolean","description":"Add slide image URLs"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get the agent's presentation (alias)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":177,"tokensAfter":177},{"name":"list_agents","fixed":{"name":"list_agents","description":"List all AI agents in the account. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List agents"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":52,"tokensAfter":52},{"name":"list_agents_with_stats","fixed":{"name":"list_agents_with_stats","description":"Same as `list_agents` but includes per-agent stats (connections, credits spent, status).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List agents with usage stats"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":67,"tokensAfter":67},{"name":"list_app_notifications","fixed":{"name":"list_app_notifications","description":"The caller's in-app notifications, newest first (type, subject, preview, isRead, createdAt), with unreadCount and paging. Types include MEETING_TRANSCRIPT, MEETING_NOTIFICATION, SUBSCRIPTION_*, PAYMENT_RECEIPT, LOW_CREDITS, CREDITS_ADDED, INVITATION, CUSTOM. CRM lead notifications are separate (crm_list_notifications). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","maximum":100,"minimum":1}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List app notifications (bell)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":167,"tokensAfter":167},{"name":"list_audience_sets","fixed":{"name":"list_audience_sets","description":"Browse pre-built, ready-to-use audiences available for purchase, plus their categories. Browsing is free; buying costs credits. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Browse the Audience Sets marketplace"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":79,"tokensAfter":79},{"name":"list_audiences","fixed":{"name":"list_audiences","description":"List the CAMPAIGN audiences (filter-based, attachable to campaigns) of this workspace. Uploaded / purchased / CRM-built lists (\"My Audiences\") are listed by `list_custom_audiences`. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List saved audiences"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"list_campaign_discovered_leads","fixed":{"name":"list_campaign_discovered_leads","description":"Leads found by AI lead discovery for a campaign, filterable by status (discovered, enriching, enriched, added_to_audience, rejected, duplicate, enrichment_failed). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (default 50)"},"offset":{"type":"integer","minimum":0,"description":"Rows to skip (default 0)"},"status":{"enum":["discovered","enriching","enriched","added_to_audience","rejected","duplicate","enrichment_failed"],"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Leads found by AI discovery"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":213,"tokensAfter":213},{"name":"list_campaign_email_leads","fixed":{"name":"list_campaign_email_leads","description":"Recipients with their open/click/reply counts, read live from the sending provider (throttled: once per 15 s per campaign). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"filter":{"enum":["opened","clicked","replied","all"],"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Engaged email leads"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":134,"tokensAfter":134},{"name":"list_campaign_emails","fixed":{"name":"list_campaign_emails","description":"state=sent: emails already sent (filter by status, search by address); state=queued: scheduled/queued emails waiting to go out; state=prepared: pre-generated emails pipeline with status counts and preparation progress. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","state"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (default 50)"},"state":{"enum":["sent","queued","prepared"],"type":"string"},"offset":{"type":"integer","minimum":0,"description":"Rows to skip (default 0)"},"search":{"type":"string","description":"Search by email address (sent/queued)"},"status":{"type":"string","description":"sent: sent|delivered|opened|clicked|replied|bounced; prepared: pipeline status e.g. ready_to_send, scheduled"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List sent / queued / prepared emails"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":272,"tokensAfter":272},{"name":"list_campaign_linkedin_accounts","fixed":{"name":"list_campaign_linkedin_accounts","description":"Accounts working this campaign with per-account counters (pending, invites sent, connected, messaged, replied). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"LinkedIn accounts working a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":113,"tokensAfter":113},{"name":"list_campaign_linkedin_outreach","fixed":{"name":"list_campaign_linkedin_outreach","description":"Contacts in the campaign's LinkedIn queue with their status (pending, invite_sent, connected, message_sent, replied, failed, skipped), optionally for one account. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (default 50)"},"offset":{"type":"integer","minimum":0,"description":"Rows to skip (default 0)"},"status":{"enum":["pending","invite_sent","connected","message_sent","replied","failed","skipped"],"type":"string"},"account_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"LinkedIn outreach of a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":216,"tokensAfter":216},{"name":"list_campaign_phone_calls","fixed":{"name":"list_campaign_phone_calls","description":"Calls with contact, status, outcome, duration, sentiment, summary and recording URL. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (default 50)"},"offset":{"type":"integer","minimum":0,"description":"Rows to skip (default 0)"},"status":{"enum":["pending","scheduled","calling","completed","failed","skipped","no_answer","voicemail","busy"],"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Calls of a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":188,"tokensAfter":188},{"name":"list_campaign_replies","fixed":{"name":"list_campaign_replies","description":"Email replies received by a campaign with body and classification: real (a person answered), auto_reply (out of office), bounce. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"type":{"enum":["real","auto_reply","bounce"],"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Campaign replies inbox"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":132,"tokensAfter":132},{"name":"list_campaign_threads","fixed":{"name":"list_campaign_threads","description":"Conversations the AI is handling for a campaign (filter by status ai_handling|human_takeover|closed and sentiment positive|objection|referral|unsubscribe|neutral), plus counters by status and sentiment. Only threads of the API key's user. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Page size (default 50)"},"offset":{"type":"integer","minimum":0,"description":"Rows to skip (default 0)"},"status":{"enum":["ai_handling","human_takeover","closed"],"type":"string"},"sentiment":{"enum":["positive","objection","referral","unsubscribe","neutral"],"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"AI email conversations of a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":242,"tokensAfter":242},{"name":"list_campaigns","fixed":{"name":"list_campaigns","description":"List classic Sales Process campaigns with status and live stats. Archived campaigns are hidden unless include_archived=true. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"include_archived":{"type":"boolean","description":"Also return archived campaigns"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List campaigns"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":109,"tokensAfter":109},{"name":"list_client_mailboxes","fixed":{"name":"list_client_mailboxes","description":"The workspace's own connected mailboxes (status connecting|warming|ready|error|disconnected, warm-up reputation, last error). Capacity ≈ 50 emails/day per READY box. Used when settings.emailSenderMode=client_owned (classic campaigns and SDR). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Own sending mailboxes"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":112,"tokensAfter":112},{"name":"list_connection_conversations","fixed":{"name":"list_connection_conversations","description":"Conversations of a widget/presentation channel with messages, mode (chat/voice), visitor name/email/phone and page. Paged (limit ≤500). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","connection_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","maximum":500,"minimum":1},"connection_id":{"type":"string","description":"Channel (connection) id (UUID) — from list_agent_connections"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List conversations of a channel"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":179,"tokensAfter":179},{"name":"list_content_accounts","fixed":{"name":"list_content_accounts","description":"LinkedIn / Instagram accounts connected for publishing posts (Settings → Social), with status. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Social publishing accounts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":71,"tokensAfter":71},{"name":"list_crm_integrations","fixed":{"name":"list_crm_integrations","description":"External CRM connections of the workspace (Kommo, HubSpot): status, account, sync settings and counters. Tokens are never returned. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List CRM integrations"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":81,"tokensAfter":81},{"name":"list_custom_audiences","fixed":{"name":"list_custom_audiences","description":"List the workspace's custom audiences — uploaded CSV/XLSX lists, purchased audience sets, CRM selections — with status (processing|ready|enriching|error), contact counts and enrichment progress. These are different from campaign audiences (`list_audiences`). Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"page":{"type":"integer","minimum":1},"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Omit to get all"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List My Audiences (custom lists)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":160,"tokensAfter":160},{"name":"list_google_meet_history","fixed":{"name":"list_google_meet_history","description":"All meetings of this agent (newest first) with status, times, duration, whether a transcript exists. Paged. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","maximum":200,"minimum":1}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Meeting history of an agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":134,"tokensAfter":134},{"name":"list_google_meet_meetings","fixed":{"name":"list_google_meet_meetings","description":"Read-only list of meetings the agent has scheduled. Requires Google Meet connected first.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List Google Meet meetings booked by this agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":87,"tokensAfter":87},{"name":"list_kommo_pipelines","fixed":{"name":"list_kommo_pipelines","description":"Pipelines and their statuses (stages) in the connected Kommo account — values for pipeline_config. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List Kommo pipelines"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":72,"tokensAfter":72},{"name":"list_kommo_users","fixed":{"name":"list_kommo_users","description":"Users of the connected Kommo account — values for pipeline_config.responsible_user_id. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List Kommo users"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":67,"tokensAfter":67},{"name":"list_linkedin_accounts","fixed":{"name":"list_linkedin_accounts","description":"LinkedIn accounts of the workspace and their status (ok = can send; ~70–80 invites/day each). Returns { role, accounts } (role is filled only with detailed=true). detailed=true adds owner/role, campaigns and SDR searches using each account, 7-day activity, prospecting caps, warm-up stage, premium tier and proxy country. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"detailed":{"type":"boolean"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List connected LinkedIn accounts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":150,"tokensAfter":150},{"name":"list_linkedin_conversations","fixed":{"name":"list_linkedin_conversations","description":"LinkedIn chats of the workspace (optionally of one campaign and/or account): contact, last message, pending AI reply, human takeover flag, outreach status. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":100,"minimum":1},"offset":{"type":"integer","minimum":0},"account_id":{"type":"string"},"campaign_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"LinkedIn conversations"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":141,"tokensAfter":141},{"name":"list_meeting_agents","fixed":{"name":"list_meeting_agents","description":"Agents that have Google Meet connected (the calendar's agent filter). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Agents with Google Meet"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":64,"tokensAfter":64},{"name":"list_meetings","fixed":{"name":"list_meetings","description":"Google Meet meetings of all your agents in a date range (default: next 7 days, max 62 days) — title, time, link, organizer, attendees, status, agent, has transcript. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"end":{"type":"string","description":"ISO date/time"},"start":{"type":"string","description":"ISO date/time"},"agent_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Meetings calendar (all agents)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":135,"tokensAfter":135},{"name":"list_narrator_leads","fixed":{"name":"list_narrator_leads","description":"Leads from the presentation call-to-action form (form data, page, status, notes). Filter by status, page with limit/offset. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"limit":{"type":"integer","maximum":500,"minimum":1},"offset":{"type":"integer","minimum":0},"status":{"enum":["new","contacted","converted","spam"],"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List presentation leads"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":158,"tokensAfter":158},{"name":"list_phone_calls","fixed":{"name":"list_phone_calls","description":"Phone calls of this agent (incl. test and inbound) with transcript, recording URL, summary, outcome, sentiment, duration and credits, plus totals by outcome/sentiment. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"limit":{"type":"integer","maximum":500,"minimum":1}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List the agent's phone calls"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":138,"tokensAfter":138},{"name":"list_phone_numbers","fixed":{"name":"list_phone_numbers","description":"Phone numbers already on your account (number, country, type, monthly cost, per-minute rate). Buying numbers is done in the app. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List my phone numbers"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":80,"tokensAfter":80},{"name":"list_referred_users","fixed":{"name":"list_referred_users","description":"People who signed up through the caller's referral links (masked email, link, signup date, free/paying, revenue and commission). Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List referred users"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":80,"tokensAfter":80},{"name":"list_retell_voices","fixed":{"name":"list_retell_voices","description":"Catalogue of voices that can be assigned via `set_agent_voice`. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List available Retell voices"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":62,"tokensAfter":62},{"name":"list_sender_emails","fixed":{"name":"list_sender_emails","description":"Sending addresses available to this workspace (Vendo managed pool + own mailboxes) with warm-up level, daily limit and status; summary.emails_per_day_ready = capacity in managed mode. Managed senders require a paid plan to launch (summary.paid_plan). Use ids in settings.senderEmailIds. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Email senders + capacity"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":124,"tokensAfter":124},{"name":"list_telegram_chats","fixed":{"name":"list_telegram_chats","description":"People/groups talking to the agent's Telegram bot: name, username, type, message count, last message time. Paged. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"page":{"type":"integer","minimum":1},"limit":{"type":"integer","maximum":200,"minimum":1}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List Telegram chats"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":134,"tokensAfter":134},{"name":"list_voice_catalog","fixed":{"name":"list_voice_catalog","description":"All voices for the website widget, Slide Presenter and Telegram voice: engine, gender, accent, expressive support, Ukrainian support, recommended flag, preview audio. Read-only. Use a voice_id from here in set_agent_voice / set_presentation_voice / set_telegram_voice_settings.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List voices (Voice v2 catalogue)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":118,"tokensAfter":118},{"name":"list_whatsapp_accounts","fixed":{"name":"list_whatsapp_accounts","description":"WhatsApp accounts connected to your user (phone, name, status: connecting / ok / error / credentials / stopped). Account-level: auto-replies use your latest campaign's agent. Read-only.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List WhatsApp accounts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"mark_all_app_notifications_read","fixed":{"name":"mark_all_app_notifications_read","description":"Mark every in-app notification of the caller as read (clears the badge).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Mark all app notifications read"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":65,"tokensAfter":65},{"name":"mark_app_notification_read","fixed":{"name":"mark_app_notification_read","description":"Mark one in-app notification as read.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Notification id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Mark an app notification read"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":84,"tokensAfter":84},{"name":"preview_activate_campaign_linkedin","fixed":{"name":"preview_activate_campaign_linkedin","description":"Dry-run: which accounts would get the campaign audience queued, how many contacts and what is already queued. Nothing changes. Call before activate_campaign_linkedin.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"account_ids":{"type":"array","items":{"type":"string"},"description":"Default: settings.selectedLinkedinAccountIds, else all connected accounts"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview activating LinkedIn on a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":167,"tokensAfter":167},{"name":"preview_activate_campaign_phone","fixed":{"name":"preview_activate_campaign_phone","description":"Dry-run of activating the phone channel with numbers the account already owns: numbers, objective, calls/day, window and estimated credits per call/day. Nothing is scheduled. Numbers cannot be bought through the API.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","phone_number_ids"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"timezone":{"type":"string"},"call_objective":{"enum":["sell","inform","book_meeting","collect_info","qualify_lead"],"type":"string","description":"Default inform"},"talking_points":{"type":"string"},"exclude_weekends":{"type":"boolean"},"phone_number_ids":{"type":"array","items":{"type":"string"},"description":"Ids of the account's existing phone numbers"},"max_calls_per_day":{"type":"integer","maximum":1000,"minimum":1,"description":"Default 50"},"working_hours_end":{"type":"integer","maximum":24,"minimum":1},"working_hours_start":{"type":"integer","maximum":23,"minimum":0,"description":"Default: campaign working hours"},"max_call_duration_seconds":{"type":"integer","maximum":1800,"minimum":30,"description":"Default 300"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview AI phone calls for a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":348,"tokensAfter":348},{"name":"preview_agent_email","fixed":{"name":"preview_agent_email","description":"Render a sample outreach email from an agent — no sending, no credits. Optional mode/prompt/tone/customInstructions/variant/followUp{index,delayDays,previous}/sample make it render exactly like a campaign would (same as preview_campaign_email).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview an email the agent would write"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":135,"tokensAfter":135},{"name":"preview_archive_campaign","fixed":{"name":"preview_archive_campaign","description":"Show what archiving would do — NOTHING CHANGES: current status and channels, what stops (an active campaign stops ALL outreach at once and releases its mailboxes / LinkedIn accounts), what is kept (history, threads, stats, CRM leads). Archiving cannot be undone (duplicate_campaign to run the same setup again). ALWAYS call first and show the user before archive_campaign.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview archiving a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":180,"tokensAfter":180},{"name":"preview_buy_audience_set","fixed":{"name":"preview_buy_audience_set","description":"Dry-run of purchasing an audience set — returns the set, contact count, price per contact, estimated credits, current balance and can_afford, WITHOUT spending credits. ALWAYS call this first and show the cost to the human.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Set id (UUID), not the slug"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview buying an audience set (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":136,"tokensAfter":136},{"name":"preview_campaign_email","fixed":{"name":"preview_campaign_email","description":"Render the exact email a campaign would send — first email or follow-up #k — with the writing rules, tone, Communication Rules or fixed text. Pass campaign_id to use its saved settings (any field you pass overrides them), or agent_id + rules for an unsaved draft. No sending, no credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"mode":{"enum":["ai","fixed"],"type":"string"},"tone":{"enum":["formal","casual","friendly"],"type":"string"},"prompt":{"type":"string","description":"AI writing rules (for the follow-up when follow_up is set)"},"sample":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string"},"website":{"type":"string"},"position":{"type":"string"},"company_name":{"type":"string"},"contact_name":{"type":"string"}},"description":"Sample recipient used for the preview (defaults to a demo contact).","additionalProperties":false},"variant":{"type":"object","required":["subject","body"],"properties":{"body":{"type":"string"},"subject":{"type":"string"}},"description":"Fixed mode text","additionalProperties":false},"agent_id":{"type":"string","description":"Required for AI mode when no campaign_id"},"follow_up":{"type":"object","required":["index"],"properties":{"index":{"type":"integer","maximum":7,"minimum":1},"previous":{"type":"object","properties":{"body":{"type":"string"},"subject":{"type":"string"}},"additionalProperties":false},"delay_days":{"type":"integer","maximum":90,"minimum":1}},"description":"Preview follow-up #index instead of the first email","additionalProperties":false},"campaign_id":{"type":"string"},"custom_instructions":{"type":"string","description":"Communication Rules"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview a campaign email (first or follow-up #k)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":497,"tokensAfter":497},{"name":"preview_campaign_linkedin_followup","fixed":{"name":"preview_campaign_linkedin_followup","description":"Render the first LinkedIn message sent after an invite is accepted (AI from the agent, or the fixed text with placeholders filled). Pass campaign_id to use saved settings. No sending, no credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"mode":{"enum":["ai","fixed"],"type":"string"},"sample":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string"},"website":{"type":"string"},"position":{"type":"string"},"company_name":{"type":"string"},"contact_name":{"type":"string"}},"description":"Sample recipient used for the preview (defaults to a demo contact).","additionalProperties":false},"agent_id":{"type":"string"},"exact_text":{"type":"string","maxLength":1500},"campaign_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview the LinkedIn message after connect"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":243,"tokensAfter":243},{"name":"preview_campaign_linkedin_invite","fixed":{"name":"preview_campaign_linkedin_invite","description":"Render the LinkedIn connection note a campaign would send (AI from rules/tone, or fixed text with placeholders), with its length vs the 200-char limit. Pass campaign_id to use saved settings. No sending, no credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"mode":{"enum":["ai","fixed"],"type":"string"},"tone":{"enum":["formal","casual","friendly"],"type":"string"},"prompt":{"type":"string"},"sample":{"type":"object","properties":{"city":{"type":"string"},"country":{"type":"string"},"website":{"type":"string"},"position":{"type":"string"},"company_name":{"type":"string"},"contact_name":{"type":"string"}},"description":"Sample recipient used for the preview (defaults to a demo contact).","additionalProperties":false},"agent_id":{"type":"string"},"exact_text":{"type":"string","maxLength":300},"campaign_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview a campaign LinkedIn invite"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":272,"tokensAfter":272},{"name":"preview_cancel_meeting","fixed":{"name":"preview_cancel_meeting","description":"Show which meeting the agent would skip. Nothing changes. Call first and show the user.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["meeting_id"],"properties":{"meeting_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview cancelling a meeting for the agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":90,"tokensAfter":90},{"name":"preview_connect_whatsapp_account","fixed":{"name":"preview_connect_whatsapp_account","description":"Explain what connecting a WhatsApp number does and list the accounts already connected. No link is created. Call first, then connect_whatsapp_account after the user approves.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"Preview connecting WhatsApp"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":93,"tokensAfter":93},{"name":"preview_custom_audience_file","fixed":{"name":"preview_custom_audience_file","description":"Step 1 of an upload: send a CSV/XLSX/XLS/TSV/TXT file (base64 or https URL) and get the detected headers, a suggested column mapping, sample rows, total rows and the list of target fields. Creates nothing, no credits. Then call `upload_custom_audience` (optionally with a corrected column_mapping).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"file_url":{"type":"string","description":"Public https URL to fetch the file from (≤10 MB). Use this OR content_base64."},"filename":{"type":"string","description":"File name WITH extension (decides the type). Required with content_base64."},"content_base64":{"type":"string","description":"File content, base64 (≤ ~7 MB). Use this OR file_url."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Detect columns of a contacts file"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":231,"tokensAfter":231},{"name":"preview_deep_scan","fixed":{"name":"preview_deep_scan","description":"Show what deep_scan_agent would do: cost (15 credits), duration (60-180 s) and what gets saved. Nothing runs. ALWAYS call first and get the user's approval.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"persist":{"type":"boolean"},"company_name":{"type":"string"},"company_website":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview a deep website scan"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":145,"tokensAfter":145},{"name":"preview_delete_agent","fixed":{"name":"preview_delete_agent","description":"Show what would happen if you delete an agent. The agent is NOT deleted. ALWAYS call this first and surface the result to the user before calling `delete_agent`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview deleting an agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":105,"tokensAfter":105},{"name":"preview_delete_agent_connection","fixed":{"name":"preview_delete_agent_connection","description":"Show what removing a channel would do. Nothing is removed. ALWAYS call first and show the user before delete_agent_connection.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","connection_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"connection_id":{"type":"string","description":"Channel (connection) id (UUID) — from list_agent_connections"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview removing a channel"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":148,"tokensAfter":148},{"name":"preview_delete_campaign","fixed":{"name":"preview_delete_campaign","description":"Show what would happen if you delete a campaign. The campaign is NOT deleted.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview deleting a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":83,"tokensAfter":83},{"name":"preview_delete_crm_branch","fixed":{"name":"preview_delete_crm_branch","description":"Dry-run: shows the pipeline and how many leads would fall back to General. Changes nothing. ALWAYS call before delete_crm_branch.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Branch id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview deleting a pipeline (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"preview_delete_crm_lead","fixed":{"name":"preview_delete_crm_lead","description":"Dry-run of deleting a CRM lead — shows who would be removed from the board. ALWAYS call this first and show the result to the human.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview lead deletion (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":98,"tokensAfter":98},{"name":"preview_delete_crm_lead_document","fixed":{"name":"preview_delete_crm_lead_document","description":"Dry-run: shows which file would be deleted. Changes nothing.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","document_id"],"properties":{"id":{"type":"string","description":"Lead id (UUID)"},"document_id":{"type":"string","description":"Document id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview deleting a lead document (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":112,"tokensAfter":112},{"name":"preview_delete_crm_stage","fixed":{"name":"preview_delete_crm_stage","description":"Dry-run of deleting a pipeline stage. Deletion is refused downstream if the stage still holds leads or is a system stage.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview stage deletion (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":95,"tokensAfter":95},{"name":"preview_delete_custom_audience","fixed":{"name":"preview_delete_custom_audience","description":"Dry-run: shows the audience name and how many contacts would be deleted. Changes nothing. ALWAYS call before `delete_custom_audience` and show the result.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Custom audience id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview deleting a custom audience (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":118,"tokensAfter":118},{"name":"preview_delete_custom_audience_contact","fixed":{"name":"preview_delete_custom_audience_contact","description":"Dry-run of removing one contact from a custom audience. Changes nothing. Show the result to the human before `delete_custom_audience_contact`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","contact_id"],"properties":{"id":{"type":"string","description":"Custom audience id (UUID)"},"reason":{"type":"string"},"contact_id":{"type":"string","description":"Contact id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview removing a contact (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":146,"tokensAfter":146},{"name":"preview_delete_narrator_lead","fixed":{"name":"preview_delete_narrator_lead","description":"Show the lead that would be deleted. Nothing is deleted. Call first and show the user before delete_narrator_lead.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","lead_id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"lead_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview deleting a presentation lead"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":119,"tokensAfter":119},{"name":"preview_disconnect_client_mailbox","fixed":{"name":"preview_disconnect_client_mailbox","description":"Dry-run: which client_owned campaigns are affected and how many usable mailboxes remain. Nothing changes.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["mailbox_id"],"properties":{"mailbox_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview disconnecting an own mailbox"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":98,"tokensAfter":98},{"name":"preview_disconnect_content_account","fixed":{"name":"preview_disconnect_content_account","description":"Dry-run of removing a publishing account. Nothing changes.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["account_id"],"properties":{"account_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview disconnecting a social publishing account"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"preview_disconnect_crm_integration","fixed":{"name":"preview_disconnect_crm_integration","description":"Dry-run: shows which connection would be removed. Changes nothing.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["provider"],"properties":{"provider":{"enum":["kommo","hubspot"],"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview disconnecting a CRM (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"preview_disconnect_google_meet","fixed":{"name":"preview_disconnect_google_meet","description":"Show what disconnecting Google Meet would do. Nothing changes. Call first and show the user.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview disconnecting Google Meet"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":103,"tokensAfter":103},{"name":"preview_disconnect_linkedin_account","fixed":{"name":"preview_disconnect_linkedin_account","description":"Dry-run of removing a LinkedIn account, showing the capacity that would be lost. ALWAYS call this first.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview disconnecting a LinkedIn account (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"preview_disconnect_telegram_bot","fixed":{"name":"preview_disconnect_telegram_bot","description":"Show which Telegram bot would be detached from the agent (username, chats, messages). Nothing changes. Call first.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview disconnecting the Telegram bot"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":110,"tokensAfter":110},{"name":"preview_disconnect_whatsapp_account","fixed":{"name":"preview_disconnect_whatsapp_account","description":"Show the WhatsApp account that would be disconnected. Nothing changes. Call first.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["account_id"],"properties":{"account_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview disconnecting WhatsApp"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"preview_enrich_custom_audience","fixed":{"name":"preview_enrich_custom_audience","description":"Dry-run of enrichment: how many contacts still need enrichment, the maximum credits (1 per contact), estimated minutes, the current balance and whether it can start. Spends nothing. ALWAYS call first and show the cost to the human.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Custom audience id (UUID)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview enriching a custom audience (cost)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":139,"tokensAfter":139},{"name":"preview_invite_workspace_member","fixed":{"name":"preview_invite_workspace_member","description":"Dry-run: checks whether the email can be invited (caller is admin, not already a member, no pending invite). Sends nothing.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["email"],"properties":{"email":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview inviting a teammate (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":100,"tokensAfter":100},{"name":"preview_launch_audience_set","fixed":{"name":"preview_launch_audience_set","description":"Dry-run of `launch_audience_set`: shows the set, contact count, credits it would cost (signals sets: price per contact for a fresh snapshot; people sets: free) and the balance. Nothing is bought or sent. ALWAYS call this first and show the cost.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview preparing a campaign audience from a set (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":131,"tokensAfter":131},{"name":"preview_launch_campaign","fixed":{"name":"preview_launch_campaign","description":"Readiness report for launch/resume — NOTHING IS SENT: ready flag, blockers (AGENT_REQUIRED, AUDIENCE_REQUIRED, AUDIENCE_EMPTY (0 contacts), CLIENT_MAILBOX_NOT_CONNECTED, PAID_PLAN_REQUIRED for Vendo managed senders, INVALID_STATUS), warnings, real recipient count, channels, daily email/LinkedIn limits, sender mode, email steps, schedule and the LinkedIn accounts that will be activated. ALWAYS call this first and show the result to the user before launch_campaign.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"linkedin_account_ids":{"type":"array","items":{"type":"string"},"description":"Override which LinkedIn accounts get activated (default: settings.selectedLinkedinAccountIds, else all connected)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview launching a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":261,"tokensAfter":261},{"name":"preview_linkedin_account_messages","fixed":{"name":"preview_linkedin_account_messages","description":"Sample invite, follow-up and auto-reply plus suggested pitch/signature for an account in a campaign (built from the campaign's agent). No sending, no credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["account_id","campaign_id"],"properties":{"account_id":{"type":"string"},"campaign_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Sample LinkedIn messages for an account"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":125,"tokensAfter":125},{"name":"preview_linkedin_followup","fixed":{"name":"preview_linkedin_followup","description":"Render a sample first follow-up (after the connection is accepted). No sending, no cost.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview a LinkedIn follow-up the agent would write"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":87,"tokensAfter":87},{"name":"preview_linkedin_invite","fixed":{"name":"preview_linkedin_invite","description":"Render a sample LinkedIn connection request from this agent. No sending, no cost.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview a LinkedIn invite the agent would write"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":84,"tokensAfter":84},{"name":"preview_phone_test_call","fixed":{"name":"preview_phone_test_call","description":"Show which number would be called from which, and the cost (25 credits/min, max 2 min). Nothing is dialled. ALWAYS call first.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","to_number"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"to_number":{"type":"string","description":"E.164, e.g. +447700900123"},"connection_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview a test call"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144},{"name":"preview_reconnect_linkedin_account","fixed":{"name":"preview_reconnect_linkedin_account","description":"Dry-run of re-authenticating a LinkedIn account. Explains the side-effects without doing anything. ALWAYS call this first — reconnecting changes the account id upstream and can orphan existing outreach history.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview reconnecting a LinkedIn account (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":123,"tokensAfter":123},{"name":"preview_remove_agent_from_meeting","fixed":{"name":"preview_remove_agent_from_meeting","description":"Show whether the agent is in this live meeting and what removing it does. Nothing changes.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["meeting_id"],"properties":{"meeting_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview removing the agent from a live call"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"preview_remove_workspace_member","fixed":{"name":"preview_remove_workspace_member","description":"Dry-run: shows who would lose access. Changes nothing. ALWAYS call before remove_workspace_member.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["user_id"],"properties":{"user_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview removing a teammate (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"preview_reply_in_campaign_thread","fixed":{"name":"preview_reply_in_campaign_thread","description":"Dry-run: recipient, subject (defaults to Re: last subject) and the exact text. Nothing is sent. Call before reply_in_campaign_thread and show the text to the user.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["thread_id","body"],"properties":{"body":{"type":"string","description":"Plain text"},"subject":{"type":"string"},"body_html":{"type":"string"},"thread_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview a human reply in a conversation"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":146,"tokensAfter":146},{"name":"preview_reply_to_campaign_email","fixed":{"name":"preview_reply_to_campaign_email","description":"Dry-run of replying to a lead's email reply: shows recipient, subject and the exact text. Nothing is sent. Call before reply_to_campaign_email and show the text to the user.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["email_id","body"],"properties":{"body":{"type":"string","description":"Reply body (HTML allowed)"},"email_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview a manual reply to a lead"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":136,"tokensAfter":136},{"name":"preview_schedule_campaign_delivery","fixed":{"name":"preview_schedule_campaign_delivery","description":"Dry-run: how many ready prepared emails would be scheduled into the campaign working hours. Nothing changes. Call before schedule_campaign_delivery.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview scheduling prepared emails"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":121,"tokensAfter":121},{"name":"preview_send_campaign_emails_now","fixed":{"name":"preview_send_campaign_emails_now","description":"Dry-run: how many prepared emails would be sent immediately (outside the schedule). Nothing is sent.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Max emails (default 10)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview sending prepared emails now"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":133,"tokensAfter":133},{"name":"preview_send_linkedin_message","fixed":{"name":"preview_send_linkedin_message","description":"Dry-run: recipient, exact text, cost (5 credits) and whether the balance suffices. Nothing is sent. Call before send_linkedin_message and show the text to the user.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["chat_id","text"],"properties":{"text":{"type":"string"},"chat_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview a manual LinkedIn message"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"preview_send_telegram_message","fixed":{"name":"preview_send_telegram_message","description":"Show the recipient and exact text of an operator message. Nothing is sent. ALWAYS call first and show the user the text.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","chat_id","message"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"chat_id":{"type":"string"},"message":{"type":"string","maxLength":4096}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview an operator Telegram message"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"preview_set_workspace_member_role","fixed":{"name":"preview_set_workspace_member_role","description":"Dry-run of set_workspace_member_role. Changes nothing.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["user_id","admin"],"properties":{"admin":{"type":"boolean"},"user_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview promoting/demoting an admin (dry-run)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"preview_setup_phone_agent","fixed":{"name":"preview_setup_phone_agent","description":"Show what setup_phone_agent would do with the same arguments: which channel is created or updated, which of YOUR numbers is attached, objective, voice, inbound on/off. Nothing is attached or created. ALWAYS call first and show the user, then call setup_phone_agent with the same arguments after approval.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"speed":{"type":"number","maximum":1.3,"minimum":0.7},"emotion":{"enum":["neutral","expressive","calm","dynamic"],"type":"string"},"language":{"enum":["auto","multi"],"type":"string","description":"auto = script language; multi = switch to the caller's language"},"voice_id":{"type":"string","description":"From list_retell_voices / list_voice_catalog"},"call_script":{"type":"string"},"voice_gender":{"enum":["male","female"],"type":"string"},"ambient_sound":{"enum":["","coffee-shop","call-center","convention-hall"],"type":"string"},"connection_id":{"type":"string","description":"Existing PHONE_CALL channel; default = the agent's first one or a new one"},"call_objective":{"enum":["sell","inform","book_meeting","collect_info","qualify_lead"],"type":"string"},"accept_incoming":{"type":"boolean","description":"Answer calls TO this number with an inbound agent"},"phone_number_id":{"type":"string","description":"Required the first time — from list_phone_numbers"},"greeting_message":{"type":"string"},"enable_backchannel":{"type":"boolean"},"communication_rules":{"type":"string"},"end_call_silence_seconds":{"type":"number","maximum":120,"minimum":10},"reminder_trigger_seconds":{"type":"number","maximum":60,"minimum":5},"max_call_duration_seconds":{"type":"number","maximum":1800,"minimum":30}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview the Voice Call setup"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":523,"tokensAfter":523},{"name":"preview_update_campaign_discovery","fixed":{"name":"preview_update_campaign_discovery","description":"Dry-run of enabling/changing automatic lead discovery: source, daily credit budget, leads/day. Nothing changes. Call before update_campaign_discovery whenever discovery is (or stays) enabled.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"enabled":{"type":"boolean"},"require_email":{"type":"boolean"},"search_source":{"enum":["apollo","signal"],"type":"string"},"max_leads_per_day":{"type":"integer","minimum":0},"apollo_search_config":{"type":"object","properties":{"person_titles":{"type":"array","items":{"type":"string"}},"person_locations":{"type":"array","items":{"type":"string"}},"organization_keywords":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"max_total_discovered":{"type":"integer","minimum":0},"signal_search_config":{"type":"object","properties":{"queries":{"type":"array","items":{"type":"string"}},"linkedin_account_id":{"type":"string"}},"additionalProperties":false},"search_interval_minutes":{"type":"integer","minimum":5},"daily_discovery_budget_credits":{"type":"integer","minimum":0}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview AI lead discovery settings"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":355,"tokensAfter":355},{"name":"remove_agent_document","fixed":{"name":"remove_agent_document","description":"Remove an uploaded material from the agent (see get_agent → documents[].url). Free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"url":{"type":"string","description":"documents[].url (preferred)"},"filename":{"type":"string","description":"documents[].filename if you have no url"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Remove a knowledge file from the agent"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":141,"tokensAfter":141},{"name":"remove_agent_from_meeting","fixed":{"name":"remove_agent_from_meeting","description":"The agent leaves the live Google Meet call right now. Only works while the meeting is in progress. Only after preview_remove_agent_from_meeting and user approval.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["meeting_id"],"properties":{"meeting_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Remove the agent from a live call"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":112,"tokensAfter":112},{"name":"remove_campaign_linkedin_account","fixed":{"name":"remove_campaign_linkedin_account","description":"Stop using an account for this campaign; its pending contacts move to the remaining accounts. Already-sent invites stay.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","account_id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"account_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Remove a LinkedIn account from a campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":125,"tokensAfter":125},{"name":"remove_workspace_member","fixed":{"name":"remove_workspace_member","description":"Remove a member: they immediately lose access to this workspace (their account gets its own empty workspace). Re-adding needs a new invitation. Admins only. Only call after the user approved preview_remove_workspace_member.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["user_id"],"properties":{"user_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Remove a teammate"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":126,"tokensAfter":126},{"name":"rename_custom_audience","fixed":{"name":"rename_custom_audience","description":"Rename a custom audience. Reversible, no credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","name"],"properties":{"id":{"type":"string","description":"Custom audience id (UUID)"},"name":{"type":"string","maxLength":255,"minLength":1}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Rename a custom audience"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":104,"tokensAfter":104},{"name":"reply_in_campaign_thread","fixed":{"name":"reply_in_campaign_thread","description":"Send the email to the contact now. REAL email. Only after the user approved preview_reply_in_campaign_thread. Consider takeover_campaign_thread first so the AI stops answering.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["thread_id","body"],"properties":{"body":{"type":"string"},"subject":{"type":"string"},"body_html":{"type":"string"},"thread_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Send a human reply in a conversation (REAL email)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":140,"tokensAfter":140},{"name":"reply_to_campaign_email","fixed":{"name":"reply_to_campaign_email","description":"Send the reply immediately in the lead's thread (bypasses daily limits). REAL email. Only after the user approved the exact text from preview_reply_to_campaign_email.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["email_id","body"],"properties":{"body":{"type":"string"},"email_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Send a manual reply to a lead (REAL email)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"schedule_campaign_delivery","fixed":{"name":"schedule_campaign_delivery","description":"Spread all ready prepared emails over the campaign's working-hour slots; they are then SENT for real automatically. Only after the user approved preview_schedule_campaign_delivery.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Schedule prepared emails for delivery"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":128,"tokensAfter":128},{"name":"sdr_activate_search","fixed":{"name":"sdr_activate_search","description":"Set status=active and fire-start all enabled hunters. Reversible via `sdr_pause_search`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Activate (start) a Signal Search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"sdr_activity_feed","fixed":{"name":"sdr_activity_feed","description":"Recent discovery + outreach events for one SDR search, newest first — the same ticker the dashboard shows. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"limit":{"type":"number","description":"Default 40"},"search_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Live activity feed for an SDR search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":113,"tokensAfter":113},{"name":"sdr_bulk_delete_people","fixed":{"name":"sdr_bulk_delete_people","description":"Removes up to 500 contacts of one search. No restore. Only after sdr_preview_bulk_delete_people was approved.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id","ids"],"properties":{"ids":{"type":"array","items":{"$ref":"#/properties/search_id"},"maxItems":500,"minItems":1},"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Remove several contacts (no restore)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":127,"tokensAfter":127},{"name":"sdr_create_search","fixed":{"name":"sdr_create_search","description":"Creates an SDR search like the wizard's \"Create & Start\". Preferred: research_job_id from a finished sdr_get_research — every field defaults to the research profile, regions to its regions (or HQ country), all 24 hunters on, competitor pages saved, then the search is activated and the research's first buyers are copied in. Legacy: agent_id + name + target_regions (profile generated from the company profile if offer/ICP omitted). start=false creates a draft without hunting. Hunting is not billed ","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"name":{"type":"string","maxLength":200},"start":{"type":"boolean","description":"Activate hunters right away (default true)"},"agent_id":{"$ref":"#/properties/research_job_id","description":"Company profile id (legacy path, or must match the research's)"},"languages":{"type":"array","items":{"type":"string"},"description":"Outreach languages; written into icp_summary"},"icp_summary":{"type":"string","description":"\"Who buys\". The decision-makers sentence and company-size line are added automatically."},"company_size":{"type":"string","description":"e.g. \"11–50 employees\"; written into icp_summary as \"Preferred company size: …\""},"offer_summary":{"type":"string","description":"\"What you sell\""},"target_cities":{"type":"array","items":{"type":"object","required":["country","name"],"properties":{"lat":{"type":"number"},"lng":{"type":"number"},"name":{"type":"string"},"admin1":{"type":"string"},"country":{"type":"string","maxLength":2,"minLength":2,"description":"ISO-2 country code; must be one of target_regions"},"admin1_code":{"type":"string"}},"additionalProperties":false},"maxItems":100,"description":"Optional cities inside target_regions (use sdr_find_cities). Empty = whole countries."},"decision_roles":{"type":"array","items":{"type":"string"},"maxItems":20,"description":"Decision-maker job titles; used by Decision-maker matching and Website profile hunters"},"signal_weights":{"type":"object","additionalProperties":{"type":"number"}},"target_regions":{"type":"array","items":{"type":"string"},"description":"ISO-2 countries or US states as CC:SUB, e.g. ['GB','US:FL']. At least one."},"enabled_sources":{"type":"array","items":{"enum":["linkedin_jobs","linkedin_company","linkedin_activity","ai_web_hunter","social_signal_hunter","crunchbase_rss","hn_hiring","g2_reviews","tech_stack","connected_people","email_enricher","linkedin_engagement","linkedin_job_change","linkedin_competitor_followers","cross_pool","people_pool","github_issues","adzuna_jobs","corporate_registries","web_news_radar","web_pulse_hunter","google_places","web_profile","local_listings"],"type":"string","description":"Hunter source id (see sdr_list_hunters)"},"description":"Hunters to run. Omitted on create = all 24, exactly like the web wizard (includes paid engines and opt-in hunters)."},"relevant_topics":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"research_job_id":{"type":"string","format":"uuid"},"competitor_pages":{"type":"array","items":{"type":"string"},"maxItems":30,"description":"Competitor LinkedIn page URLs (Competitor Engagement and Competitor Switching hunters)"},"exclude_keywords":{"type":"array","items":{"type":"string"}},"generation_model":{"type":"string"},"industry_keywords":{"type":"array","items":{"type":"string"}},"generation_reasoning":{"type":"string"},"linkedin_search_queries":{"type":"array","items":{"type":"object","required":["query"],"properties":{"query":{"type":"string"},"rationale":{"type":"string"},"location_hint":{"type":"string"}},"additionalProperties":false},"maxItems":50}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Create an SDR search (Create & Start)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":1042,"tokensAfter":1042},{"name":"sdr_delete_outreach","fixed":{"name":"sdr_delete_outreach","description":"Delete the SDR outreach campaign. The Signal Search and its hunters CONTINUE running. Only call after `sdr_preview_delete_outreach`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete the SDR outreach campaign (irreversible)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":101,"tokensAfter":101},{"name":"sdr_delete_person","fixed":{"name":"sdr_delete_person","description":"Removes one contact from the search: hidden from lists, counts, exports and outreach. No restore, no refund. Only after sdr_preview_delete_person was approved.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","search_id"],"properties":{"id":{"type":"string","format":"uuid"},"search_id":{"$ref":"#/properties/id"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Remove a contact (no restore)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":123,"tokensAfter":123},{"name":"sdr_delete_search","fixed":{"name":"sdr_delete_search","description":"Deletes the SDR process and ALL its data: hunters stop, the outreach campaign is stopped and deleted, signals, contacts, hunter state, QA runs and learning weights are removed. Not reversible, no refund. Only after the user approved sdr_preview_delete_search.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Delete an SDR process (irreversible)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":136,"tokensAfter":136},{"name":"sdr_export_companies_csv","fixed":{"name":"sdr_export_companies_csv","description":"Read-only. CSV of every company the search found: Company, Domain, Heat, ICP fit, Signal count, Signal types, Contact status, Contacts found.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Export companies CSV"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":109,"tokensAfter":109},{"name":"sdr_export_people_csv","fixed":{"name":"sdr_export_people_csv","description":"Export the contacts of an SDR search as CSV text (name, title, email, LinkedIn, location, company). Contacts ONLY — deliberately carries no scores or signal reasoning, because this file leaves the platform. Returns the raw CSV; can be large. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"role":{"type":"string"},"company":{"type":"string"},"search_id":{"type":"string"},"min_relevance":{"type":"number"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Export SDR contacts as CSV"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":161,"tokensAfter":161},{"name":"sdr_export_personas_to_audience","fixed":{"name":"sdr_export_personas_to_audience","description":"Creates a custom audience from a search's contacts with an email (segment fit by default, optional roles or explicit ids). No credits. The audience can then be used in any campaign.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id","name"],"properties":{"ids":{"type":"array","items":{"$ref":"#/properties/search_id"}},"name":{"type":"string","maxLength":200,"minLength":1,"description":"Name of the new audience"},"roles":{"type":"array","items":{"type":"string"}},"search_id":{"type":"string","format":"uuid"},"fit_segment":{"enum":["fit","fit_uncertain","all","uncertain","unfit","unchecked"],"type":"string"},"only_with_email":{"type":"boolean"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Export SDR contacts to an audience"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":222,"tokensAfter":222},{"name":"sdr_find_cities","fixed":{"name":"sdr_find_cities","description":"Read-only. Main cities of the given countries (no q), or a name search (q ≥ 2 Latin letters). Use the returned objects as target_cities in sdr_create_search / sdr_update_search.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["countries"],"properties":{"q":{"type":"string"},"limit":{"type":"integer","maximum":50,"minimum":1,"description":"Per country without q (max 30); total with q (max 50)"},"countries":{"type":"array","items":{"type":"string"},"maxItems":40,"minItems":1,"description":"ISO-2 or CC:SUB codes, e.g. ['GB','US:FL']"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Find cities for an SDR search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":183,"tokensAfter":183},{"name":"sdr_get_agent_signal_profile","fixed":{"name":"sdr_get_agent_signal_profile","description":"Read the agent's current signal profile (ICP, offer summary, hunter weights). Returns { exists: false } when nothing's generated yet.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_id"],"properties":{"agent_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get an agent's signal profile"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":103,"tokensAfter":103},{"name":"sdr_get_outreach","fixed":{"name":"sdr_get_outreach","description":"Read the SDR outreach campaign — channels enabled, ready/queued/sent counts, current content config.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get SDR outreach status for a search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":91,"tokensAfter":91},{"name":"sdr_get_outreach_content","fixed":{"name":"sdr_get_outreach_content","description":"Read the configured email subject/body templates and LinkedIn invite template for SDR outreach.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get SDR outreach content (templates)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"sdr_get_person_detail","fixed":{"name":"sdr_get_person_detail","description":"Read-only. Provenance of one contact: hunter, query, triggering signal, scores and the reasoning chain. Needs the search_id the contact belongs to.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","search_id"],"properties":{"id":{"type":"string","format":"uuid","description":"Contact id"},"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Why was this person picked?"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":130,"tokensAfter":130},{"name":"sdr_get_research","fixed":{"name":"sdr_get_research","description":"Read-only. Pass job_id (from sdr_start_research / a previous poll) or agent_id (while the company profile is still being built, or to get the latest research of a company). Returns status (queued/running/done/error), stages, events and, when done, the result: company dossier and the editable profile (search name, offer, ICP, decision roles, regions, keywords, LinkedIn queries, competitor pages, hunter plan). Poll every 5–10 s.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"job_id":{"type":"string","format":"uuid"},"agent_id":{"$ref":"#/properties/job_id"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Poll an SDR ICP research"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":191,"tokensAfter":191},{"name":"sdr_get_research_audience","fixed":{"name":"sdr_get_research_audience","description":"Read-only. The instant audience of a finished research: up to ~20 matching people from the Vendo database with company, position, country, LinkedIn, email and why they fit — the wizard's \"buyers already found\" cards. refresh=true rebuilds it (slower).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["job_id"],"properties":{"job_id":{"type":"string","format":"uuid"},"refresh":{"type":"boolean"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"First buyers found by an ICP research"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":147,"tokensAfter":147},{"name":"sdr_get_search","fixed":{"name":"sdr_get_search","description":"Fetch one Signal Search by id, including its profile, hunters, and contact counts.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get a Signal Search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":82,"tokensAfter":82},{"name":"sdr_health","fixed":{"name":"sdr_health","description":"Operator-level health view: states, signals/contacts produced, credits spent, recent events, learning insights for a single search.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Signal Search health dashboard"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":98,"tokensAfter":98},{"name":"sdr_icp_qa_history","fixed":{"name":"sdr_icp_qa_history","description":"Read-only. Past ICP-QA runs (checked, fits, uncertain, unfit, quality %, keyword changes) and whether keyword auto-correction is on.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"limit":{"type":"integer","maximum":100,"minimum":1},"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"ICP check history"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"sdr_icp_qa_rollback","fixed":{"name":"sdr_icp_qa_rollback","description":"Restores the search's industry_keywords to the snapshot taken before the given ICP-QA run (undo an auto-correction).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id","run_id"],"properties":{"run_id":{"$ref":"#/properties/search_id"},"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Roll keywords back to a QA run"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":115,"tokensAfter":115},{"name":"sdr_icp_qa_run","fixed":{"name":"sdr_icp_qa_run","description":"People page \"Check now\": classifies unchecked contacts of a search as Fit / Uncertain / Not a fit (AI, not billed) and may suggest keyword changes. Returns the run, or null when nothing is unchecked.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"ICP check now"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":123,"tokensAfter":123},{"name":"sdr_icp_review_run","fixed":{"name":"sdr_icp_review_run","description":"ICP Review \"Re-check now\": re-judges this search's Uncertain contacts (bounded per run, one run at a time). Contacts moved to Fit become billable (5 credits) when used.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Re-check Uncertain contacts now"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":116,"tokensAfter":116},{"name":"sdr_learning_recompute","fixed":{"name":"sdr_learning_recompute","description":"Recalculate per-signal-type weights from outreach outcomes (replies/meetings vs sends) for one search. Safe, no cost; use when the user asks to refresh/recalculate Signal Learning.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Recompute signal-learning weights for a search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":115,"tokensAfter":115},{"name":"sdr_linkedin_connect_link","fixed":{"name":"sdr_linkedin_connect_link","description":"Returns a hosted link where the user connects a LinkedIn account for this SDR's outreach. A human must open it; then pick the account in selected_linkedin_account_ids.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get a LinkedIn connect link for SDR outreach"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":117,"tokensAfter":117},{"name":"sdr_list_hunters","fixed":{"name":"sdr_list_hunters","description":"Read-only. The 24 hunter sources a search can run, with UI name, what each looks at, opt-in/paid-engine/LinkedIn-budget flags, whether it can be run by hand, and which search fields it reads. Use to map a hunter the user names (\"Competitor Switching\") to its id (g2_reviews) before sdr_set_hunters / sdr_configure_hunter / sdr_run_now. Hunters are not billed per run; each usable contact costs 5 credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List all SDR hunters (sources)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":153,"tokensAfter":153},{"name":"sdr_list_outreach_processes","fixed":{"name":"sdr_list_outreach_processes","description":"Read-only. SDR outreach processes of the workspace as listed on the Sales Process page (status, channels, counters).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"SDR processes on the Sales Process page"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":76,"tokensAfter":76},{"name":"sdr_list_personas","fixed":{"name":"sdr_list_personas","description":"Read-only. Contacts of a search, newest first. Filters: group (fits/uncertain/unfit/unchecked), source (contacts of one hunter, incl. pending/phone-only), company, role, min_relevance; paging up to 200.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"role":{"type":"string"},"group":{"enum":["fits","uncertain","unfit","unchecked"],"type":"string"},"limit":{"type":"integer","maximum":200,"minimum":1},"offset":{"type":"integer","minimum":0},"source":{"enum":["linkedin_jobs","linkedin_company","linkedin_activity","ai_web_hunter","social_signal_hunter","crunchbase_rss","hn_hiring","g2_reviews","tech_stack","connected_people","email_enricher","linkedin_engagement","linkedin_job_change","linkedin_competitor_followers","cross_pool","people_pool","github_issues","adzuna_jobs","corporate_registries","web_news_radar","web_pulse_hunter","google_places","web_profile","local_listings"],"type":"string","description":"Hunter source id (see sdr_list_hunters)"},"company":{"type":"string"},"search_id":{"type":"string","format":"uuid"},"min_relevance":{"type":"integer","maximum":100,"minimum":0}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List SDR contacts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":346,"tokensAfter":346},{"name":"sdr_list_searches","fixed":{"name":"sdr_list_searches","description":"List active Signal Searches in this workspace. Optionally filter by agent.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"agent_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List Vendo SDR Signal Searches"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":77,"tokensAfter":77},{"name":"sdr_materialize_research","fixed":{"name":"sdr_materialize_research","description":"Copies the instant audience of a finished research into a search as contacts (background, idempotent, filtered by the search's regions/cities). sdr_create_search with research_job_id already does this after activation; use this only to repeat it. Contacts are billed (5 credits each) like any other contact when used.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["job_id","search_id"],"properties":{"job_id":{"type":"string","format":"uuid"},"search_id":{"$ref":"#/properties/job_id"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Copy a research's instant audience into a search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":172,"tokensAfter":172},{"name":"sdr_outreach_summary","fixed":{"name":"sdr_outreach_summary","description":"Per-channel sent and queued counts for one SDR search. Read-only, free.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Sent/queued counters for an SDR search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":84,"tokensAfter":84},{"name":"sdr_pause_search","fixed":{"name":"sdr_pause_search","description":"Pauses the whole SDR process: every hunter AND all outreach sending (email and LinkedIn). Data is kept. Reversible with sdr_resume_search.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Pause an SDR process"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":102,"tokensAfter":102},{"name":"sdr_people_group_counts","fixed":{"name":"sdr_people_group_counts","description":"Read-only. How many contacts are Fit, Uncertain, Not a fit and unchecked. only_with_email=false counts email-or-LinkedIn reachable contacts (what outreach \"Who to contact\" uses). Use before choosing icp_segment.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string","format":"uuid"},"only_with_email":{"type":"boolean"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Fit / Uncertain / Not a fit counts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":139,"tokensAfter":139},{"name":"sdr_persona_stats","fixed":{"name":"sdr_persona_stats","description":"Read-only. Contact totals, by role, top companies, daily series (7, 14 or 28 days), credits spent.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"days":{"enum":[7,14,28],"type":"number"},"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"SDR contact stats"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"sdr_preview_bulk_delete_people","fixed":{"name":"sdr_preview_bulk_delete_people","description":"Dry run of multi-select delete: checks every id belongs to the search and counts them by group.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id","ids"],"properties":{"ids":{"type":"array","items":{"$ref":"#/properties/search_id"},"maxItems":500,"minItems":1},"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview removing several contacts"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":126,"tokensAfter":126},{"name":"sdr_preview_delete_outreach","fixed":{"name":"sdr_preview_delete_outreach","description":"Show what would happen. The Signal Search ITSELF is NOT deleted, only the outreach campaign.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview deleting an SDR outreach campaign"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"sdr_preview_delete_person","fixed":{"name":"sdr_preview_delete_person","description":"Dry run. Shows the contact that would be removed. Nothing changes.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","search_id"],"properties":{"id":{"type":"string","format":"uuid"},"search_id":{"$ref":"#/properties/id"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview removing a contact"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":99,"tokensAfter":99},{"name":"sdr_preview_delete_search","fixed":{"name":"sdr_preview_delete_search","description":"Dry run. Shows the process, how many contacts and signals would be lost and the outreach campaign status. Nothing is deleted. Call before sdr_delete_search.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true,"idempotentHint":true},"title":"Preview deleting an SDR process"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: true, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":110,"tokensAfter":110},{"name":"sdr_preview_launch_outreach","fixed":{"name":"sdr_preview_launch_outreach","description":"Dry run of \"Save and Launch\". Shows the effective settings (request + saved + defaults), contacts in the chosen segment, ready email/LinkedIn contacts, predicted blockers (no LinkedIn account, no own mailbox), the paid-plan rule for managed senders and the delivery window. Nothing is sent. Always call first and show it to the user.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"channels":{"type":"array","items":{"enum":["email","linkedin"],"type":"string"}},"timezone":{"type":"string","description":"IANA time zone, e.g. Europe/London"},"branch_id":{"type":["string","null"],"description":"CRM branch for replies: a branch id from crm_list_branches, or null/'general' for General"},"search_id":{"type":"string","format":"uuid"},"icp_segment":{"enum":["fit","fit_uncertain","all","uncertain","unfit","unchecked"],"type":"string","description":"Who to contact: fit (Fit + unchecked, default), fit_uncertain, all; legacy: uncertain, unfit, unchecked"},"work_end_hour":{"type":"integer","maximum":23,"minimum":0},"work_start_hour":{"type":"integer","maximum":23,"minimum":0},"exclude_weekends":{"type":"boolean"},"daily_email_limit":{"type":"integer","maximum":500,"minimum":1},"email_sender_mode":{"enum":["managed","client_owned"],"type":"string","description":"managed = Vendo sender pool (paid plans only); client_owned = the workspace's own connected mailboxes"},"daily_linkedin_limit":{"type":"integer","maximum":200,"minimum":1},"client_email_provider":{"anyOf":[{"enum":["google","microsoft"],"type":"string"},{"type":"null"}]},"selected_linkedin_account_ids":{"type":"array","items":{"type":"string"},"description":"Ids from sdr_get_outreach → linkedin_accounts; empty = every connected account in status OK"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview launching SDR outreach"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":524,"tokensAfter":524},{"name":"sdr_preview_outreach_content","fixed":{"name":"sdr_preview_outreach_content","description":"Render an example personalized email/LinkedIn message for a specific contact. Costs ~1 Claude call.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview a personalized SDR message"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":94,"tokensAfter":94},{"name":"sdr_preview_run_now","fixed":{"name":"sdr_preview_run_now","description":"Dry run of the hunter \"Run\" button. Lists which hunters would run (one source, or every enabled runnable hunter when omitted), flags paid engines and LinkedIn-budget hunters. Nothing runs.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"source":{"enum":["linkedin_jobs","linkedin_company","linkedin_activity","ai_web_hunter","social_signal_hunter","crunchbase_rss","hn_hiring","g2_reviews","tech_stack","connected_people","email_enricher","linkedin_engagement","linkedin_job_change","linkedin_competitor_followers","github_issues","adzuna_jobs","corporate_registries","web_news_radar","web_pulse_hunter","google_places","web_profile","local_listings"],"type":"string","description":"Hunter source id; cross_pool and people_pool run automatically and cannot be started by hand"},"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Preview running hunters now"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":272,"tokensAfter":272},{"name":"sdr_preview_search","fixed":{"name":"sdr_preview_search","description":"Run Claude on the agent's script and return the auto-generated ICP profile (offer summary, ideal customer profile, relevant topics, LinkedIn queries) WITHOUT persisting anything. Use to review/edit before calling `sdr_create_search`.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["agent_id"],"properties":{"agent_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Preview a Signal Search profile (no save)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":128,"tokensAfter":128},{"name":"sdr_preview_set_person_group","fixed":{"name":"sdr_preview_set_person_group","description":"Dry run. Shows the move and whether it costs credits: moving a contact the ICP check left free to Fit charges 5 credits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","search_id","group"],"properties":{"id":{"type":"string","format":"uuid"},"group":{"enum":["fits","uncertain","unfit"],"type":"string"},"search_id":{"$ref":"#/properties/id"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Preview moving a contact between groups"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":134,"tokensAfter":134},{"name":"sdr_preview_start_research","fixed":{"name":"sdr_preview_start_research","description":"Dry run of the New SDR wizard's first steps. Tells whether a company profile for this website already exists (reused, 0 credits) or must be built (deep website scan 15 + outreach playbook 1 = 16 credits), and whether a recent ICP research (< 24 h) would be reused. Nothing is created. Always call before sdr_start_research and show the cost.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["company_name","website"],"properties":{"force":{"type":"boolean","description":"Run a fresh research even if a recent one exists"},"website":{"type":"string","description":"Domain or URL, e.g. acme.com"},"company_name":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Preview: research a company website for a new SDR"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":211,"tokensAfter":211},{"name":"sdr_regenerate_search","fixed":{"name":"sdr_regenerate_search","description":"Re-run Claude on the agent's current knowledge to regenerate the entire ICP profile and hunter configuration. Useful after the agent's script changed significantly.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Regenerate a Signal Search profile (re-run Claude)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"sdr_resume_search","fixed":{"name":"sdr_resume_search","description":"Resumes a paused SDR process: hunters restart and outreach that was paused together with the search resumes (outreach you paused separately stays paused).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Resume an SDR process"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":107,"tokensAfter":107},{"name":"sdr_run_now","fixed":{"name":"sdr_run_now","description":"Starts (or wakes, if already running) one hunter or every enabled runnable hunter of a search. Paid engines use Vendo's provider budget, LinkedIn hunters the LinkedIn budget; contacts found cost 5 credits each. Call after sdr_preview_run_now.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"source":{"enum":["linkedin_jobs","linkedin_company","linkedin_activity","ai_web_hunter","social_signal_hunter","crunchbase_rss","hn_hiring","g2_reviews","tech_stack","connected_people","email_enricher","linkedin_engagement","linkedin_job_change","linkedin_competitor_followers","github_issues","adzuna_jobs","corporate_registries","web_news_radar","web_pulse_hunter","google_places","web_profile","local_listings"],"type":"string","description":"Hunter source id; cross_pool and people_pool run automatically and cannot be started by hand"},"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Run hunters now"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":284,"tokensAfter":284},{"name":"sdr_run_state","fixed":{"name":"sdr_run_state","description":"Read-only. Overall run state of a search (running / paused / idle) with the current action.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Primary run state of a search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":92,"tokensAfter":92},{"name":"sdr_run_states","fixed":{"name":"sdr_run_states","description":"Per-source map of run state (running / paused / idle) for a Signal Search.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Get per-source hunter run-states"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":84,"tokensAfter":84},{"name":"sdr_save_outreach_settings","fixed":{"name":"sdr_save_outreach_settings","description":"Outreach window 1 \"Save\": Who to contact (icp_segment), channels, email sender mode/provider, LinkedIn accounts, time zone, working hours, weekends, daily limits, CRM branch. Partial: missing fields keep their saved values. Never launches: a new process stays a draft; a running one keeps its status and applies the change at once (widening Who to contact on a running process queues more contacts at 5 credits each). Set dry_run=true to preview.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"dry_run":{"type":"boolean"},"channels":{"type":"array","items":{"enum":["email","linkedin"],"type":"string"}},"timezone":{"type":"string","description":"IANA time zone, e.g. Europe/London"},"branch_id":{"type":["string","null"],"description":"CRM branch for replies: a branch id from crm_list_branches, or null/'general' for General"},"search_id":{"type":"string","format":"uuid"},"icp_segment":{"enum":["fit","fit_uncertain","all","uncertain","unfit","unchecked"],"type":"string","description":"Who to contact: fit (Fit + unchecked, default), fit_uncertain, all; legacy: uncertain, unfit, unchecked"},"work_end_hour":{"type":"integer","maximum":23,"minimum":0},"work_start_hour":{"type":"integer","maximum":23,"minimum":0},"exclude_weekends":{"type":"boolean"},"daily_email_limit":{"type":"integer","maximum":500,"minimum":1},"email_sender_mode":{"enum":["managed","client_owned"],"type":"string","description":"managed = Vendo sender pool (paid plans only); client_owned = the workspace's own connected mailboxes"},"daily_linkedin_limit":{"type":"integer","maximum":200,"minimum":1},"client_email_provider":{"anyOf":[{"enum":["google","microsoft"],"type":"string"},{"type":"null"}]},"selected_linkedin_account_ids":{"type":"array","items":{"type":"string"},"description":"Ids from sdr_get_outreach → linkedin_accounts; empty = every connected account in status OK"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Save SDR outreach settings (no launch)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":563,"tokensAfter":563},{"name":"sdr_search_hunters","fixed":{"name":"sdr_search_hunters","description":"Read-only. Every hunter for a search: enabled or not, live run state, signals in 30 days, 7-day sparkline, and the current values of the settings it reads. The search page's hunter stations.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Hunters of one SDR search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":121,"tokensAfter":121},{"name":"sdr_set_hunters","fixed":{"name":"sdr_set_hunters","description":"Enables/disables hunters (the wizard's Hunters step). Pass enable/disable lists, or enabled_sources as the full list. On an active search new hunters start within ~10 min (budget-throttled ones ~30); disabled ones stop at their next cycle. To stop one immediately without disabling it use sdr_pause_hunter.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"enable":{"type":"array","items":{"enum":["linkedin_jobs","linkedin_company","linkedin_activity","ai_web_hunter","social_signal_hunter","crunchbase_rss","hn_hiring","g2_reviews","tech_stack","connected_people","email_enricher","linkedin_engagement","linkedin_job_change","linkedin_competitor_followers","cross_pool","people_pool","github_issues","adzuna_jobs","corporate_registries","web_news_radar","web_pulse_hunter","google_places","web_profile","local_listings"],"type":"string","description":"Hunter source id (see sdr_list_hunters)"}},"disable":{"type":"array","items":{"$ref":"#/properties/enable/items"}},"search_id":{"type":"string","format":"uuid"},"enabled_sources":{"type":"array","items":{"$ref":"#/properties/enable/items"}}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Switch hunters on/off for a search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":345,"tokensAfter":345},{"name":"sdr_set_person_group","fixed":{"name":"sdr_set_person_group","description":"Overrides the ICP verdict for one contact. Moving a free (precheck-skipped) contact to Fit charges 5 credits (402 if the balance is too low). Call sdr_preview_set_person_group first when moving to fits.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","search_id","group"],"properties":{"id":{"type":"string","format":"uuid"},"group":{"enum":["fits","uncertain","unfit"],"type":"string"},"search_id":{"$ref":"#/properties/id"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Move a contact to Fit / Uncertain / Not a fit"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":155,"tokensAfter":155},{"name":"sdr_signal_stats","fixed":{"name":"sdr_signal_stats","description":"Read-only. KPI cards: fresh signals, signals and contacts by source over the last N days (1–90, default 30).","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"days":{"type":"integer","maximum":90,"minimum":1},"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Signal stats by hunter"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":112,"tokensAfter":112},{"name":"sdr_start_research","fixed":{"name":"sdr_start_research","description":"Starts the New SDR wizard for a company + website, exactly like the web app: reuses the company profile for the same domain or builds a hidden one (website deep scan, playbook; 16 credits), then runs the ICP research (1–3 min, not billed). Returns agent_id and either the research job or a setup state. Poll sdr_get_research until the job status is done, then call sdr_create_search with research_job_id. Only call after the user approved sdr_preview_start_research.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["company_name","website"],"properties":{"force":{"type":"boolean"},"website":{"type":"string"},"company_name":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Research a company website (New SDR wizard)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":213,"tokensAfter":213},{"name":"sdr_update_outreach_content","fixed":{"name":"sdr_update_outreach_content","description":"Outreach windows 2–3: email (mode ai/fixed/html, prompt, tone, ≤5 fixed variants with {{placeholders}}, per-step follow-ups, own-HTML steps, signature, auto-reply) and LinkedIn (invite on/off, ai/exact texts, follow-up, delay after accept, conversation rules, auto-reply delays, signature, Calendly). Partial; takes effect on new sends. Follow-up changes are blocked while an email sequence is already sending.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["search_id"],"properties":{"email":{"type":"object","properties":{"mode":{"enum":["ai","fixed","html"],"type":"string","description":"ai = model writes each email from prompt; fixed = variants; html = html_steps"},"tone":{"enum":["formal","casual","friendly"],"type":"string"},"prompt":{"type":"string"},"variants":{"type":"array","items":{"type":"object","required":["subject","body"],"properties":{"body":{"type":"string"},"subject":{"type":"string"}},"additionalProperties":false},"maxItems":5,"description":"Fixed texts, rotated per recipient. Placeholders: {{first_name}} {{last_name}} {{full_name}} {{company_name}} {{position}} {{city}} {{country}}"},"followups":{"type":"array","items":{"type":"object","required":["delay_days"],"properties":{"body":{"type":"string"},"prompt":{"type":"string"},"subject":{"type":"string"},"delay_days":{"type":"integer","maximum":90,"minimum":1}},"additionalProperties":false},"maxItems":7,"description":"Per-step follow-ups; delay counts from the previous email"},"html_steps":{"type":"array","items":{"type":"object","required":["subject","html"],"properties":{"html":{"type":"string"},"subject":{"type":"string"},"delay_days":{"type":"integer"}},"additionalProperties":false},"maxItems":20},"max_followups":{"type":"integer","maximum":7,"minimum":0},"signature_text":{"type":"string"},"followups_enabled":{"type":"boolean"},"signature_enabled":{"type":"boolean"},"auto_reply_enabled":{"type":"boolean"},"followup_interval_days":{"type":"integer","maximum":90,"minimum":1},"validation_note_enabled":{"type":"boolean"},"auto_reply_delay_minutes":{"type":"integer","maximum":120,"minimum":1}},"additionalProperties":false},"linkedin":{"type":"object","properties":{"invite_mode":{"enum":["ai","exact"],"type":"string"},"invite_tone":{"enum":["formal","casual","friendly"],"type":"string"},"calendly_url":{"type":"string"},"followup_cta":{"type":"string"},"followup_mode":{"enum":["ai","exact"],"type":"string"},"invite_prompt":{"type":"string"},"invite_enabled":{"type":"boolean"},"signature_mode":{"enum":["first_message","every_message"],"type":"string"},"signature_text":{"type":"string"},"followup_prompt":{"type":"string"},"followup_enabled":{"type":"boolean"},"invite_exact_text":{"type":"string"},"signature_enabled":{"type":"boolean"},"auto_reply_enabled":{"type":"boolean"},"conversation_rules":{"type":"string","maxLength":3000,"description":"What we want from these conversations: goal, CTA, links. Applied to AI invites, follow-ups and smart replies."},"followup_exact_text":{"type":"string"},"followup_delay_minutes":{"type":"integer","maximum":20160,"minimum":0,"description":"Minutes between accepted invite and first message"},"reply_delay_max_minutes":{"type":"integer","maximum":120,"minimum":1},"reply_delay_min_minutes":{"type":"integer","maximum":60,"minimum":1}},"additionalProperties":false},"search_id":{"type":"string","format":"uuid"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Edit SDR outreach messages"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":971,"tokensAfter":971},{"name":"sdr_update_search","fixed":{"name":"sdr_update_search","description":"The wizard's Edit → \"Save changes\": name, hunters, regions, cities, offer, ICP, decision-makers, company size, keywords, exclusions, LinkedIn queries, competitor pages, hot threshold. Partial updates; status is not touched (an active search keeps hunting with the new profile). Status changes only via sdr_activate_search / sdr_pause_search / sdr_resume_search.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string","maxLength":200},"icp_summary":{"type":"string","description":"\"Who buys\". The decision-makers sentence and company-size line are added automatically."},"company_size":{"type":"string","description":"e.g. \"11–50 employees\"; written into icp_summary as \"Preferred company size: …\""},"hot_threshold":{"type":"integer","maximum":100,"minimum":0},"offer_summary":{"type":"string","description":"\"What you sell\""},"target_cities":{"type":"array","items":{"type":"object","required":["country","name"],"properties":{"lat":{"type":"number"},"lng":{"type":"number"},"name":{"type":"string"},"admin1":{"type":"string"},"country":{"type":"string","maxLength":2,"minLength":2,"description":"ISO-2 country code; must be one of target_regions"},"admin1_code":{"type":"string"}},"additionalProperties":false},"maxItems":100,"description":"Optional cities inside target_regions (use sdr_find_cities). Empty = whole countries."},"decision_roles":{"type":"array","items":{"type":"string"},"maxItems":20,"description":"Decision-maker job titles; used by Decision-maker matching and Website profile hunters"},"signal_weights":{"type":"object","additionalProperties":{"type":"number"}},"target_regions":{"type":"array","items":{"type":"string"},"description":"ISO-2 countries or US states as CC:SUB, e.g. ['GB','US:FL']. At least one."},"enabled_sources":{"type":"array","items":{"enum":["linkedin_jobs","linkedin_company","linkedin_activity","ai_web_hunter","social_signal_hunter","crunchbase_rss","hn_hiring","g2_reviews","tech_stack","connected_people","email_enricher","linkedin_engagement","linkedin_job_change","linkedin_competitor_followers","cross_pool","people_pool","github_issues","adzuna_jobs","corporate_registries","web_news_radar","web_pulse_hunter","google_places","web_profile","local_listings"],"type":"string","description":"Hunter source id (see sdr_list_hunters)"},"description":"Hunters to run. Omitted on create = all 24, exactly like the web wizard (includes paid engines and opt-in hunters)."},"relevant_topics":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"competitor_pages":{"type":"array","items":{"type":"string"},"maxItems":30,"description":"Competitor LinkedIn page URLs (Competitor Engagement and Competitor Switching hunters)"},"exclude_keywords":{"type":"array","items":{"type":"string"}},"industry_keywords":{"type":"array","items":{"type":"string"}},"linkedin_search_queries":{"type":"array","items":{"type":"object","required":["query"],"properties":{"query":{"type":"string"},"rationale":{"type":"string"},"location_hint":{"type":"string"}},"additionalProperties":false},"maxItems":50}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true},"title":"Edit an SDR search"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: true (inferred from the name).","verify":true}],"tokensBefore":908,"tokensAfter":908},{"name":"search_audience","fixed":{"name":"search_audience","description":"Search the people graph for prospects matching include AND exclude filters (countries, cities, industries, positions, company sizes, tags, company keywords, language, freshness, must-have-email/LinkedIn/phone/booking link). PREVIEW only — returns aggregate counts and a small sample. Does not save anything, does not contact anyone, does not spend credits. Next: `save_audience` with the same filters.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"city":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Sample size (max 100)"},"cities":{"type":"array","items":{"type":"string"}},"country":{"type":"string"},"language":{"type":"string","description":"Approximate language segment by country set, e.g. \"russian\""},"position":{"type":"string"},"countries":{"type":"array","items":{"type":"string"},"description":"Country names, e.g. [\"United Kingdom\",\"Germany\"]"},"positions":{"type":"array","items":{"type":"string"},"description":"Job titles / roles, e.g. [\"CEO\",\"Head of Sales\"]"},"industries":{"type":"array","items":{"type":"string"}},"maxAgeDays":{"type":"integer","minimum":1,"description":"Only people added within the last N days"},"searchMode":{"enum":["keyword","exact","semantic"],"type":"string"},"companySize":{"enum":["startup","small","medium","large","enterprise"],"type":"string"},"companySizes":{"type":"array","items":{"enum":["startup","small","medium","large","enterprise"],"type":"string"}},"exactKeyword":{"type":"string","description":"Exact phrase (searchMode=exact)"},"mustHaveEmail":{"type":"boolean"},"mustHavePhone":{"type":"boolean"},"semanticQuery":{"type":"string","description":"Free-text description of the ideal person (searchMode=semantic)"},"excludedCities":{"type":"array","items":{"type":"string"}},"companyKeywords":{"type":"array","items":{"type":"string"},"description":"Keywords matched in company description / name / position"},"excludeCountries":{"type":"array","items":{"type":"string"}},"mustHaveLinkedin":{"type":"boolean"},"excludedPositions":{"type":"array","items":{"type":"string"}},"excludedIndustries":{"type":"array","items":{"type":"string"}},"mustHaveBookingUrl":{"type":"boolean"},"excludedCompanySizes":{"type":"array","items":{"enum":["startup","small","medium","large","enterprise"],"type":"string"}}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Search the people database"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":690,"tokensAfter":690},{"name":"send_campaign_emails_now","fixed":{"name":"send_campaign_emails_now","description":"Send up to `limit` prepared emails immediately, ignoring the schedule. REAL emails to real people. Only after the user approved preview_send_campaign_emails_now.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","description":"Campaign id (UUID) from list_campaigns"},"limit":{"type":"integer","maximum":100,"minimum":1}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Send prepared emails now (REAL emails)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":137,"tokensAfter":137},{"name":"send_linkedin_message","fixed":{"name":"send_linkedin_message","description":"Send a REAL LinkedIn message in the chat; costs 5 credits, the AI stops messaging this contact (human takeover) and the CRM lead moves to Manager Dialog. Only after the user approved preview_send_linkedin_message.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["chat_id","text"],"properties":{"text":{"type":"string"},"chat_id":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Send a LinkedIn message (REAL, 5 credits)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":132,"tokensAfter":132},{"name":"send_telegram_message","fixed":{"name":"send_telegram_message","description":"Sends a REAL Telegram message from the bot to this person (human takeover). Only after preview_send_telegram_message and the user approved the exact text.","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id","chat_id","message"],"properties":{"id":{"type":"string","description":"Agent id (UUID) — from list_agents"},"chat_id":{"type":"string"},"message":{"type":"string","maxLength":4096}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Send a Telegram message as the operator"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":144,"tokensAfter":144}],"toolsChanged":332,"tokensSaved":0,"todo":[{"tool":"activate_campaign_linkedin","params":["account_ids"]},{"tool":"activate_campaign_phone","params":["timezone","call_objective","talking_points","exclude_weekends","phone_number_ids","max_calls_per_day","working_hours_end","working_hours_start","max_call_duration_seconds"]},{"tool":"add_campaign_linkedin_account","params":["account_id"]},{"tool":"add_custom_audience_contacts","params":["contacts"]},{"tool":"buy_audience_set","params":["id"]},{"tool":"cancel_meeting","params":["meeting_id"]},{"tool":"close_campaign_thread","params":["thread_id"]},{"tool":"connect_client_mailbox","params":["email","provider","from_name","imap_host","imap_port","smtp_host","smtp_port"]},{"tool":"connect_content_account","params":["provider"]},{"tool":"connect_crm_integration","params":["provider"]},{"tool":"connect_google_meet","params":["auto_join","greeting_message"]},{"tool":"connect_telegram_bot","params":["id"]},{"tool":"create_agent_connection","params":["name","type","google_meet_config"]},{"tool":"create_campaign","params":["name","settings","description"]},{"tool":"create_custom_audience","params":["name"]},{"tool":"crm_add_comment","params":["id","body"]},{"tool":"crm_communication_cards","params":["limit"]},{"tool":"crm_communication_history","params":["type","limit","offset","channel","replied"]},{"tool":"crm_communication_thread","params":["id","type"]},{"tool":"crm_create_branch","params":["name"]},{"tool":"crm_create_calendar_event","params":["title","all_day","description"]},{"tool":"crm_create_lead","params":["email","notes","phone","title","last_name","first_name","company_name"]},{"tool":"crm_create_stage","params":["name","is_terminal"]},{"tool":"crm_delete_calendar_event","params":["id"]},{"tool":"crm_enrich_from_linkedin","params":["linkedin_url"]},{"tool":"crm_get_conversation","params":["id"]},{"tool":"crm_get_lead","params":["id"]},{"tool":"crm_import_leads","params":["rows"]},{"tool":"crm_list_leads","params":["q","limit","stage","branch","offset","source"]},{"tool":"crm_list_notifications","params":["unread_only"]},{"tool":"crm_mark_notification_read","params":["id"]},{"tool":"crm_move_lead","params":["id","stage_id"]},{"tool":"crm_move_lead_to_branch","params":["assignee_user_id"]},{"tool":"crm_preview_email_to_lead","params":["subject"]},{"tool":"crm_promote_contact_to_lead","params":["email","phone","title","avatar_url","company_name","contact_name","linkedin_url"]},{"tool":"crm_reply_to_lead","params":["id","text"]},{"tool":"crm_send_email_to_lead","params":["to","body","subject"]},{"tool":"crm_stats","params":["branch"]},{"tool":"crm_update_branch","params":["name"]},{"tool":"crm_update_calendar_event","params":["id","title","all_day","description"]},{"tool":"crm_update_lead","params":["id","email","notes","phone","title","last_name","deal_value","first_name","company_name"]},{"tool":"crm_update_settings","params":["notify_mention","notify_new_lead","stale_alert_days","notify_reassigned","default_date_range"]},{"tool":"crm_update_stage","params":["id","name","is_terminal"]},{"tool":"delete_agent","params":["id"]},{"tool":"delete_campaign","params":["id"]},{"tool":"delete_crm_lead","params":["id"]},{"tool":"delete_crm_stage","params":["id"]},{"tool":"delete_custom_audience_contact","params":["reason"]},{"tool":"delete_narrator_lead","params":["lead_id"]},{"tool":"disconnect_client_mailbox","params":["mailbox_id"]},{"tool":"disconnect_content_account","params":["account_id"]},{"tool":"disconnect_crm_integration","params":["provider"]},{"tool":"disconnect_linkedin_account","params":["id"]},{"tool":"disconnect_whatsapp_account","params":["account_id"]},{"tool":"duplicate_agent","params":["id"]},{"tool":"generate_agent_page_descriptions","params":["pages"]},{"tool":"generate_phone_script","params":["voice_gender","call_objective"]},{"tool":"generate_slide_script","params":["slide_number","total_slides","next_slide_text","previous_script"]},{"tool":"get_agent_job","params":["job_id"]},{"tool":"get_analytics_agents","params":["agent_id"]},{"tool":"get_analytics_sdr","params":["search_id","campaign_id"]},{"tool":"get_audience","params":["id"]},{"tool":"get_audience_set_contacts","params":["slug","limit","offset"]},{"tool":"get_campaign_activity","params":["category"]},{"tool":"get_campaign_email","params":["email_id"]},{"tool":"get_campaign_linkedin_stats","params":["account_id"]},{"tool":"get_campaign_pulse","params":["days"]},{"tool":"get_campaign_thread","params":["thread_id"]},{"tool":"get_credit_transactions","params":["limit","offset"]},{"tool":"get_credit_usage_by_type","params":["limit","offset"]},{"tool":"get_credit_usage_for_agent","params":["agent_id"]},{"tool":"get_credit_usage_for_agent_connections","params":["agent_id"]},{"tool":"get_crm_integration","params":["provider"]},{"tool":"get_crm_integration_logs","params":["limit","provider"]},{"tool":"get_custom_audience_contacts","params":["page","limit"]},{"tool":"get_invoices","params":["year","month"]},{"tool":"get_linkedin_account_settings","params":["account_id"]},{"tool":"get_linkedin_conversation","params":["chat_id"]},{"tool":"get_meeting","params":["meeting_id"]},{"tool":"get_meeting_transcript","params":["meeting_id"]},{"tool":"get_narrator_analytics","params":["view"]},{"tool":"get_telegram_bot_info","params":["id"]},{"tool":"invite_workspace_member","params":["email"]},{"tool":"launch_audience_set","params":["id"]},{"tool":"launch_campaign","params":["linkedin_account_ids"]},{"tool":"list_agent_connections","params":["id"]},{"tool":"list_app_notifications","params":["page","limit"]},{"tool":"list_campaign_discovered_leads","params":["status"]},{"tool":"list_campaign_email_leads","params":["filter"]},{"tool":"list_campaign_emails","params":["state"]},{"tool":"list_campaign_linkedin_outreach","params":["status","account_id"]},{"tool":"list_campaign_phone_calls","params":["status"]},{"tool":"list_campaign_replies","params":["type"]},{"tool":"list_campaign_threads","params":["status","sentiment"]},{"tool":"list_connection_conversations","params":["page","limit"]},{"tool":"list_custom_audiences","params":["page"]},{"tool":"list_google_meet_history","params":["page","limit"]},{"tool":"list_google_meet_meetings","params":["id"]},{"tool":"list_linkedin_accounts","params":["detailed"]},{"tool":"list_linkedin_conversations","params":["limit","offset","account_id","campaign_id"]},{"tool":"list_meetings","params":["agent_id"]},{"tool":"list_narrator_leads","params":["limit","offset","status"]},{"tool":"list_phone_calls","params":["limit"]},{"tool":"list_telegram_chats","params":["page","limit"]},{"tool":"pause_campaign","params":["id"]},{"tool":"pause_channel","params":["id","channel"]},{"tool":"phone_test_call","params":["to_number","connection_id"]},{"tool":"preview_activate_campaign_phone","params":["timezone","talking_points","exclude_weekends","working_hours_end"]},{"tool":"preview_campaign_email","params":["mode","tone","campaign_id"]},{"tool":"preview_campaign_linkedin_followup","params":["mode","agent_id","exact_text","campaign_id"]},{"tool":"preview_campaign_linkedin_invite","params":["mode","tone","prompt","agent_id","exact_text","campaign_id"]},{"tool":"preview_cancel_meeting","params":["meeting_id"]},{"tool":"preview_deep_scan","params":["persist","company_name","company_website"]},{"tool":"preview_delete_agent","params":["id"]},{"tool":"preview_delete_campaign","params":["id"]},{"tool":"preview_delete_crm_lead","params":["id"]},{"tool":"preview_delete_crm_stage","params":["id"]},{"tool":"preview_delete_custom_audience_contact","params":["reason"]},{"tool":"preview_delete_narrator_lead","params":["lead_id"]},{"tool":"preview_disconnect_client_mailbox","params":["mailbox_id"]},{"tool":"preview_disconnect_content_account","params":["account_id"]},{"tool":"preview_disconnect_crm_integration","params":["provider"]},{"tool":"preview_disconnect_linkedin_account","params":["id"]},{"tool":"preview_disconnect_whatsapp_account","params":["account_id"]},{"tool":"preview_invite_workspace_member","params":["email"]},{"tool":"preview_launch_audience_set","params":["id"]},{"tool":"preview_linkedin_account_messages","params":["account_id","campaign_id"]},{"tool":"preview_linkedin_followup","params":["id"]},{"tool":"preview_linkedin_invite","params":["id"]},{"tool":"preview_phone_test_call","params":["connection_id"]},{"tool":"preview_reconnect_linkedin_account","params":["id"]},{"tool":"preview_remove_agent_from_meeting","params":["meeting_id"]},{"tool":"preview_remove_workspace_member","params":["user_id"]},{"tool":"preview_reply_in_campaign_thread","params":["subject","body_html","thread_id"]},{"tool":"preview_reply_to_campaign_email","params":["email_id"]},{"tool":"preview_send_linkedin_message","params":["text","chat_id"]},{"tool":"preview_send_telegram_message","params":["chat_id","message"]},{"tool":"preview_set_workspace_member_role","params":["admin","user_id"]},{"tool":"preview_setup_phone_agent","params":["speed","emotion","call_script","voice_gender","ambient_sound","call_objective","greeting_message","enable_backchannel","communication_rules","end_call_silence_seconds","reminder_trigger_seconds","max_call_duration_seconds"]},{"tool":"preview_update_campaign_discovery","params":["enabled","require_email","search_source","max_leads_per_day","apollo_search_config","max_total_discovered","signal_search_config","search_interval_minutes","daily_discovery_budget_credits"]},{"tool":"reassign_crm_lead","params":["reason"]},{"tool":"reconnect_client_mailbox","params":["mailbox_id"]},{"tool":"reconnect_linkedin_account","params":["id"]},{"tool":"refresh_campaign_email_reply","params":["email_id"]},{"tool":"remove_agent_from_meeting","params":["meeting_id"]},{"tool":"remove_campaign_linkedin_account","params":["account_id"]},{"tool":"remove_workspace_member","params":["user_id"]},{"tool":"rename_custom_audience","params":["name"]},{"tool":"reply_in_campaign_thread","params":["body","subject","body_html","thread_id"]},{"tool":"reply_to_campaign_email","params":["body","email_id"]},{"tool":"resume_channel","params":["id","channel"]},{"tool":"save_audience","params":["filters"]},{"tool":"save_scan_data","params":["pricing","contacts","auto_update","company_name","social_links","employee_count","company_website"]},{"tool":"scan_agent_website","params":["website_url"]},{"tool":"scan_website_quick","params":["website_url"]},{"tool":"sdr_activate_search","params":["id"]},{"tool":"sdr_activity_feed","params":["search_id"]},{"tool":"sdr_bulk_delete_people","params":["ids","search_id"]},{"tool":"sdr_company_detail","params":["name","part","domain","search_id"]},{"tool":"sdr_company_heat","params":["limit","offset","search_id"]},{"tool":"sdr_configure_hunter","params":["enabled","settings","search_id"]},{"tool":"sdr_create_search","params":["name","signal_weights","relevant_topics","research_job_id","exclude_keywords","generation_model","industry_keywords","generation_reasoning","linkedin_search_queries"]},{"tool":"sdr_daily_by_hunter","params":["days","search_id"]},{"tool":"sdr_delete_outreach","params":["search_id"]},{"tool":"sdr_delete_person","params":["id","search_id"]},{"tool":"sdr_delete_search","params":["id"]},{"tool":"sdr_events","params":["limit","search_id"]},{"tool":"sdr_export_companies_csv","params":["search_id"]},{"tool":"sdr_export_people_csv","params":["role","company","search_id","min_relevance"]},{"tool":"sdr_export_personas_to_audience","params":["ids","roles","search_id","fit_segment","only_with_email"]},{"tool":"sdr_find_cities","params":["q"]},{"tool":"sdr_generate_agent_signal_profile","params":["agent_id"]},{"tool":"sdr_get_agent_signal_profile","params":["agent_id"]},{"tool":"sdr_get_outreach","params":["search_id"]},{"tool":"sdr_get_outreach_content","params":["search_id"]},{"tool":"sdr_get_person_detail","params":["search_id"]},{"tool":"sdr_get_research","params":["job_id","agent_id"]},{"tool":"sdr_get_research_audience","params":["job_id","refresh"]},{"tool":"sdr_get_search","params":["id"]},{"tool":"sdr_health","params":["search_id"]},{"tool":"sdr_hunter_daily","params":["days","search_id"]},{"tool":"sdr_hunter_detail","params":["days","search_id","contacts_limit"]},{"tool":"sdr_icp_qa_autocorrect","params":["enabled","search_id"]},{"tool":"sdr_icp_qa_history","params":["limit","search_id"]},{"tool":"sdr_icp_qa_rollback","params":["run_id","search_id"]},{"tool":"sdr_icp_qa_run","params":["search_id"]},{"tool":"sdr_icp_review","params":["search_id"]},{"tool":"sdr_icp_review_run","params":["search_id"]},{"tool":"sdr_launch_outreach","params":["channels","search_id","work_end_hour","work_start_hour","exclude_weekends","daily_email_limit","daily_linkedin_limit","client_email_provider"]},{"tool":"sdr_learning_insights","params":["search_id"]},{"tool":"sdr_learning_recompute","params":["search_id"]},{"tool":"sdr_linkedin_connect_link","params":["search_id"]},{"tool":"sdr_list_personas","params":["role","group","limit","offset","company","search_id","min_relevance"]},{"tool":"sdr_list_searches","params":["agent_id"]},{"tool":"sdr_materialize_research","params":["job_id","search_id"]},{"tool":"sdr_outreach_summary","params":["search_id"]},{"tool":"sdr_pause_hunter","params":["search_id"]},{"tool":"sdr_pause_outreach","params":["search_id"]},{"tool":"sdr_pause_search","params":["id"]},{"tool":"sdr_people_group_counts","params":["search_id","only_with_email"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API. Showing the first 300 of 332 changed tools.","truncated":true}