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.