Skip to main content
Manually maintained from apps/api/src/mcp/tools/. When a tool is added, removed, or its schema changes, update this page in the same PR.

Read tools — require mcp.read

list_campaigns

List the authenticated team’s campaigns. Optional status filter. Returns each campaign’s id, name, status, leadCount, and createdAt.

get_campaign

Fetch a single campaign by id.

get_campaign_statistics

Heavy aggregation. Invitations sent/accepted, messages sent/replied, profile visits, acceptance/reply rates.

get_analytics

Account-level analytics for a period.

get_analytics_daily

Per-day breakdown for a date range (max 90 days).

get_analytics_by_user

Per-team-member breakdown for a period.

list_users

List the authenticated team’s members.

get_user

Fetch one team member by id.

get_team

Fetch the authenticated team’s profile.

get_leads_from_campaign

List leads in a campaign (team-scoped). Optional filters by campaign status and reply state. Returns id, name, linkedinProfile, company, campaignStatus, and hasReplied. Paginated.

get_lead

Look up a single lead by lead id or LinkedIn URL. Returns profile, company, campaign status, reply state, and last message.

find_leads_by_linkedin_url

Find the lead(s) for one LinkedIn profile (team-scoped). The URL is normalized before matching, so any spelling works — http/https, with or without www., a trailing slash, or tracking parameters; Sales Navigator and private profile URLs match too. The same person can hold one lead per campaign and one per list, so this returns a list — check campaignId and campaignStatus to pick the right one before stopping a sequence.

list_replies

Inbox view: leads who replied (team-scoped). Returns name, lastMessage preview, repliedAt, and unread state. Full message threads are not yet exposed.

list_lists

List the team’s lead/audience lists. Returns id, name, isBlacklist, and leadCount. Paginated.

get_list

Fetch one lead/audience list by id. Returns name, isBlacklist, and leadCount.

get_leads_from_list

List leads in a lead/audience list (team-scoped). Returns id, name, linkedinProfile, and company. Paginated.

list_linkedin_accounts

List the team’s connected LinkedIn sender accounts. Returns each account’s id, connection status, and owning user email.

get_account_limits

Daily sending caps and remaining quota for today for one connected account (seat). Read-only.

get_paused_activities

List the activity types currently paused for a campaign (e.g. SEND_INVITATION). Empty when nothing is individually paused.

list_snippets

List message snippets/templates visible to you: your personal snippets plus any shared with your team. Optional status filter. Paginated.

list_webhooks

List the team’s webhooks. Returns id, name, endpoint, and status.

get_webhook

Fetch one webhook by id (team-scoped).

get_api_setup_guide

Integration guide for the public REST API: base URL, x-api-key auth (key prefix bd_live_), a first-request snippet in the chosen language, and the list of Botdog operations (generated from this server’s tools, each marked read or write). Unlike the other tools it does not mirror a single endpoint — it explains how to call the API from your own code.

Write tools — require mcp.write

add_leads_to_campaign

Add 1–100 leads to a campaign. Adds REAL leads to a LIVE outreach campaign — only call after the user has confirmed both the campaign id and the lead list.

pause_campaign

Pause a running campaign (ACTIVE → PAUSED). Affects live outreach — the assistant confirms first. If the campaign was not ACTIVE, returns its current status unchanged.

resume_campaign

Resume a paused campaign (PAUSED → ACTIVE) and re-engage outreach. Affects live outreach — the assistant confirms first. If the campaign was not PAUSED, returns its current status unchanged.

stop_lead_in_campaign

Stop a single lead’s progression in its campaign (cancels pending outreach for that lead). Identify the lead by lead_id, or by campaign_id + linkedin_url — the URL is normalized before matching, so any spelling works. If the person holds more than one lead in that campaign, the most recent one that isn’t already stopped is used; call find_leads_by_linkedin_url first if you need to pick.

create_list

Create a new empty lead/audience list. Set is_blacklist for an exclusion list. Returns the new list id.

add_leads_to_list

Add up to 100 leads to an existing list. Each lead needs a linkedinUrl. Returns the count of newly created leads (duplicates are skipped).

delete_leads_from_list

Delete leads from a list by lead_ids or linkedin_urls. Destructive — the assistant confirms first. Returns the number deleted.

create_webhook

Create a webhook that posts event notifications to your endpoint. Returns the new webhook id.

update_webhook

Update a webhook’s name, endpoint, and/or event types.

delete_webhook

Delete a webhook by id. Destructive — the assistant confirms first.

create_campaign

Create a campaign (name + optional start/end dates). Creates the shell only — the message sequence is built, and the campaign launched, in the app.

update_campaign

Update a campaign’s name and/or start/end dates. Does not change the message sequence or status (use pause_campaign/resume_campaign for status). Provide at least one field.

pause_campaign_activities

Pause specific activity types for a campaign (e.g. stop sending invitations while messages continue) without pausing the whole campaign. Affects live outreach. Reversible with resume_campaign_activities.

resume_campaign_activities

Resume previously paused activity types for a campaign. Affects live outreach.

update_lead

Update editable lead metadata (notes, custom fields, name, company). Does not change campaign/workflow status. Provide at least one field.

create_snippet

Create a message snippet. TEXT snippets need content; LLM snippets need prompt.

update_snippet

Update a snippet’s name, content, prompt, shortcut, and/or status. Provide at least one field.

update_account_limits

Update a connected account’s daily caps, sending days, timezone, and auto-withdraw settings. Daily caps are clamped to safe maximums (you cannot set an unsafe value). Provide at least one field. Returns the resulting limits.