# Vendo AI (remote · api.vendo-ai.com)

Autonomous AI sales: agents, signal-based prospecting, outreach, CRM — 149 tools.

- Trust score: 23/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `api.vendo-ai.com`: 23/100 (this document), [markdown](https://verifymcp.io/servers/com-vendo-ai-vendo-ai/api.md), [page](https://verifymcp.io/servers/com-vendo-ai-vendo-ai/api)

## Channel facts

- Endpoint: `https://api.vendo-ai.com/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to connect, but we couldn't read the tool list to see what that exposes.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 0/100
  - Transport check failed: declared streamable-http, but the endpoint returned HTTP 429.
- **Schema Quality & AI Usability**: 0/100
  - Schema not yet verified: we couldn't read the endpoint's schema.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 0/100
  - Tool coverage not yet verified: we couldn't read the endpoint's tools.
- **Capabilities**: 0/100
  - Capabilities not yet verified: we couldn't read the endpoint's capabilities.

**Unverified: 4 categories.** Categories scored 0 because we could not verify them: authentication we do not have, an unreachable endpoint, or not enough scan history. We only credit what we can confirm.

## Install

### Claude

```bash
claude mcp add --transport http com-vendo-ai-vendo-ai https://api.vendo-ai.com/mcp
```

### Codex

```toml
[mcp_servers.com-vendo-ai-vendo-ai]
url = "https://api.vendo-ai.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-vendo-ai-vendo-ai": {
      "type": "remote",
      "url": "https://api.vendo-ai.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-vendo-ai-vendo-ai --url https://api.vendo-ai.com/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-vendo-ai-vendo-ai:
    url: "https://api.vendo-ai.com/mcp"
```

### Other

```json
{
  "mcpServers": {
    "com-vendo-ai-vendo-ai": {
      "type": "http",
      "url": "https://api.vendo-ai.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-07-31 (score 23, +9)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 14, −44)

- [security regression] Endpoint reachability: reachable → not serving MCP
- [security regression] Transport: pass → fail
- [security] Authorization: Authorisation not fully verified: no authorisation is required to connect, but we couldn't read the tool list to see what that exposes.
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] Schema quality: Schema not yet verified: we couldn't read the endpoint's schema.

### 2026-07-29 (score 58, +37)

- [security regression] Authorization: fail → unverified
- [security improvement] Transport: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional] First check of Schema quality: good
- [functional] First check of Schema quality: fail
- [functional] First check of Tool coverage: 10
- [functional] First check of Schema quality: pass

### 2026-07-28 (score 21)

First indexed and scored.

## MCP tools (149)

### `get_balance` (~27 tokens)

Get credit balance

Get the current credit balance for the account. Read-only, no side-effects, no cost.

### `get_balance_full` (~40 tokens)

Get full billing balance + plan summary

Richer than `get_balance` — returns balance, total subscription credits, total purchased, total spent, free-trial credits, email/workspace info.

### `get_subscription` (~38 tokens)

Get current subscription

Plan, status (ACTIVE/CANCELLED/PAST_DUE/EXPIRED/TRIALING), period dates, currency, amount, Stripe IDs.

### `get_subscription_limits` (~32 tokens)

Get plan limits (max agents, extra slots)

Base + purchased extra agent slots. Useful to check "can I create another agent?" before calling `create_agent`.

### `get_pricing` (~33 tokens)

Get public pricing catalogue

List of public plans + add-ons (Extra Agent Slot, SDR sender pair, etc.) with prices in user currency.

### `get_credit_transactions` (~103 tokens)

Get credit transaction history

Credit deductions + grants, newest first. Optional filters: type (e.g. EMAIL_SENT, LINKEDIN_INVITE, SDR_CONTACT), date range, pagination.

Input parameters:

- `from` (string): ISO date, e.g. 2026-06-01
- `limit` (integer)
- `offset` (integer)
- `to` (string): ISO date, e.g. 2026-06-30
- `type` (string)

### `get_invoices` (~37 tokens)

Get Stripe invoices

List of Stripe invoices (paid + open). Optional year/month scope.

Input parameters:

- `month` (integer)
- `year` (integer)

### `get_credit_usage_by_type` (~57 tokens)

Get credit spend by type / session

Per-session credit spend grouped by connection type (email_outreach, linkedin_outreach, phone_call, widget, sdr_contact, etc.). Useful for analytics.

Input parameters:

- `from` (string)
- `to` (string)

### `get_credit_usage_monthly` (~21 tokens)

Get credit spend per month

Calendar-month breakdown of credit spend across all categories.

### `get_credit_usage_by_agent` (~27 tokens)

Get credit spend per agent

Total credit spend per agent in the workspace. Identifies the most expensive agents.

### `get_credit_usage_for_agent` (~27 tokens)

Get credit spend for a single agent

Total credits spent by one specific agent.

Input parameters:

- `agent_id` (string, required)

### `get_credit_usage_for_agent_connections` (~44 tokens)

Get credit spend by connection for an agent

Per-channel credit spend (widget, telegram, phone, etc.) for one agent. Identifies the costliest channels.

Input parameters:

- `agent_id` (string, required)

### `get_sdr_email_capacity` (~36 tokens)

Get Vendo SDR managed-sender capacity

How many SDR sender email addresses the account has (included + purchased extras) and the estimated daily email throughput. Read-only.

### `list_agents` (~19 tokens)

List agents

List all AI agents in the account. Read-only.

### `get_agent` (~29 tokens)

Get an agent

Fetch the full details of a single agent by id.

Input parameters:

- `id` (string, required): The agent UUID

### `create_agent` (~132 tokens)

Create a new agent

Create a new AI sales agent. Costs 1 credit. The agent is created in DRAFT status and does not start contacting anyone — you still need to attach it to a campaign and launch the campaign. Required: name + description. Company info (name/website/description) is required BEFORE generating a sales script, so you can either pass it here OR call `set_agent_company` later.

Input parameters:

- `description` (string, required): A short description of the agent itself (1-2 sentences, what it does)
- `name` (string, required): Agent's display name (e.g. 'Sales agent for Acme')

### `update_agent` (~75 tokens)

Update an agent

Update an agent's basic info (name, description, company info). Partial updates are fine — only include the fields you want to change.

Input parameters:

- `company_description` (string)
- `company_name` (string)
- `company_website` (string)
- `id` (string, required)
- `name` (string)

### `preview_delete_agent` (~49 tokens)

Preview deleting an agent

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`.

Input parameters:

- `id` (string, required)

### `delete_agent` (~41 tokens)

Delete an agent (irreversible)

Permanently delete an agent. NOT reversible. Only call after the user has reviewed `preview_delete_agent` output and explicitly approved.

Input parameters:

- `id` (string, required)

### `list_agents_with_stats` (~29 tokens)

List agents with usage stats

Same as `list_agents` but includes per-agent stats (connections, credits spent, status).

### `get_agent_plan_limits` (~34 tokens)

Get agent capacity

How many agents can the user create (base plan + purchased extra slots) vs how many they have. Read-only.

### `duplicate_agent` (~34 tokens)

Duplicate an agent

Create a copy of an existing agent (new id, same config). Counts toward agent capacity.

Input parameters:

- `id` (string, required)

### `set_agent_status` (~41 tokens)

Pause / resume / archive an agent

Change agent status. Allowed values: ACTIVE, PAUSED, ARCHIVED, DRAFT.

Input parameters:

- `id` (string, required)
- `status` (string, required)

### `set_agent_company` (~68 tokens)

Set company info (name / website / description)

Required before `generate_agent_script` will work. Set the company the agent represents — its name, website, and what it sells.

Input parameters:

- `company_description` (string, required)
- `company_name` (string, required)
- `company_website` (string, required)
- `id` (string, required)

### `set_agent_avatar_from_url` (~70 tokens)

Set agent avatar from an image URL

Set the agent avatar from a publicly-reachable image URL (jpg, png). The MCP server downloads the image and uploads it on your behalf — you do not need to handle multipart yourself.

Input parameters:

- `id` (string, required)
- `image_url` (string, required): Publicly reachable HTTPS image URL

### `set_agent_voice` (~89 tokens)

Configure agent voice (Retell)

Set agent voice settings: voice_type (e.g. "11labs-Anthony"), language, speed, temperature, backchannel. Call `list_retell_voices` first to see what is available.

Input parameters:

- `id` (string, required)
- `language` (string)
- `speech_speed` (number)
- `voice_temperature` (number)
- `voice_type` (string)

### `list_retell_voices` (~27 tokens)

List available Retell voices

Catalogue of voices that can be assigned via `set_agent_voice`. Read-only.

### `scan_website_quick` (~52 tokens)

Quick website scan

Crawl a website's structure (sitemap, top pages) BEFORE creating an agent. Useful when deciding which company to set on the agent. Costs ~2 credits.

Input parameters:

- `website_url` (string, required)

### `preview_deep_scan` (~70 tokens)

Preview a deep scan

Show what would happen if you run `deep_scan_agent`. The scan is NOT executed. ALWAYS call this first and confirm the cost (15 credits) and duration with the user.

Input parameters:

- `company_name` (string)
- `company_website` (string)
- `id` (string, required)

### `deep_scan_agent` (~78 tokens)

Deep-scan an agent (15 credits, 60-180s)

Crawl 15+ pages of the agent's company website, extract people, contacts, pricing, social links. Saves to the agent. Costs 15 credits. Only call after `preview_deep_scan` and user approval.

Input parameters:

- `company_name` (string, required)
- `company_website` (string, required)
- `id` (string, required)

### `save_scan_data` (~34 tokens)

Persist scan results

Save the output of a deep scan onto the agent (company description, people, contacts).

Input parameters:

- `id` (string, required)

### `generate_agent_description` (~43 tokens)

Generate company description from website

Use AI to draft a 2-3 paragraph company description. Costs 1 credit. Requires `company_website` already set.

Input parameters:

- `id` (string, required)

### `generate_agent_script` (~91 tokens)

Generate sales / support / info script

Generate the agent's full sales script (8 stages) and email_script (for email/LinkedIn channels). Requires `company_name` AND `company_description` already set on the agent — call `set_agent_company` first. Costs 1 credit. Re-running OVERWRITES the existing script.

Input parameters:

- `id` (string, required)
- `purpose` (string)
- `script_style` (string, required)

### `preview_agent_email` (~40 tokens)

Preview an email the agent would write

Render a sample outreach email from this agent — no sending, no credit cost. Useful to check tone/script before launching.

Input parameters:

- `id` (string, required)

### `preview_linkedin_invite` (~35 tokens)

Preview a LinkedIn invite the agent would write

Render a sample LinkedIn connection request from this agent. No sending, no cost.

Input parameters:

- `id` (string, required)

### `preview_linkedin_followup` (~37 tokens)

Preview a LinkedIn follow-up the agent would write

Render a sample first follow-up (after the connection is accepted). No sending, no cost.

Input parameters:

- `id` (string, required)

### `list_agent_connections` (~34 tokens)

List an agent's connections (channels)

See every channel attached to this agent: widgets, telegram, phone, presentations, etc.

Input parameters:

- `id` (string, required)

### `get_widget_embed_code` (~33 tokens)

Get the widget embed code

Get the HTML snippet to embed the agent's website widget on a customer's site.

Input parameters:

- `id` (string, required)

### `connect_google_meet` (~45 tokens)

Start the Google Meet OAuth flow

Returns a Google OAuth URL. The user MUST open this URL in a browser and grant consent — the MCP cannot complete OAuth on its own.

Input parameters:

- `id` (string, required)

### `list_google_meet_meetings` (~36 tokens)

List Google Meet meetings booked by this agent

Read-only list of meetings the agent has scheduled. Requires Google Meet connected first.

Input parameters:

- `id` (string, required)

### `disconnect_google_meet` (~33 tokens)

Disconnect Google Meet

Revoke Google Meet for this agent. Existing meetings stay in the user's calendar.

Input parameters:

- `id` (string, required)

### `connect_telegram_bot` (~68 tokens)

Connect a Telegram bot to the agent

The user creates a bot with @BotFather, gets the HTTP API token, and passes it here. After that, all messages to the bot are answered by the agent.

Input parameters:

- `bot_token` (string, required): Telegram Bot API token from @BotFather
- `id` (string, required)

### `get_telegram_bot_info` (~26 tokens)

Get current Telegram bot info

See the connected bot username + settings.

Input parameters:

- `id` (string, required)

### `disconnect_telegram_bot` (~34 tokens)

Disconnect Telegram bot

Detach the bot from this agent. Bot keeps existing in Telegram but stops responding.

Input parameters:

- `id` (string, required)

### `get_telegram_analytics` (~30 tokens)

Get Telegram analytics for this agent

Read-only stats: chats, messages, voice-call duration.

Input parameters:

- `id` (string, required)

### `list_agent_presentations` (~31 tokens)

List presentations attached to the agent

Each agent can host one or more interactive presentations. Read-only list.

Input parameters:

- `id` (string, required)

### `get_narrator_analytics` (~32 tokens)

Get presentation/narrator analytics

Views, sessions, conversion to lead, drop-off by slide.

Input parameters:

- `id` (string, required)

### `list_narrator_leads` (~30 tokens)

List leads captured by the agent's presentations

Anonymized lead list from CTA forms in presentations.

Input parameters:

- `id` (string, required)

### `sdr_list_searches` (~33 tokens)

List Vendo SDR Signal Searches

List active Signal Searches in this workspace. Optionally filter by agent.

Input parameters:

- `agent_id` (string)

### `sdr_get_search` (~34 tokens)

Get a Signal Search

Fetch one Signal Search by id, including its profile, hunters, and contact counts.

Input parameters:

- `id` (string, required)

### `sdr_preview_search` (~64 tokens)

Preview a Signal Search profile (no save)

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`.

Input parameters:

- `agent_id` (string, required)

### `sdr_create_search` (~182 tokens)

Create a Signal Search (and start hunting)

Create a Signal Search and immediately activate the configured hunters. Required: name, agent_id. Optional: enabled_sources, target_regions (ISO-2 country codes), pre-edited profile fields from `sdr_preview_search`.

Input parameters:

- `agent_id` (string, required)
- `enabled_sources` (array): E.g. ['linkedin_jobs', 'connected_people']. Paid sources (ai_web_hunter, g2_reviews, tech_stack) are off by default.
- `exclude_keywords` (array)
- `icp_summary` (string)
- `industry_keywords` (array)
- `name` (string, required)
- `offer_summary` (string)
- `relevant_topics` (object)
- `signal_weights` (object)
- `target_regions` (array): ISO-2 country codes the search targets, e.g. ['GB', 'US'].

### `sdr_update_search` (~38 tokens)

Update a Signal Search

Edit a Signal Search — name, enabled_sources, target_regions, or profile fields. Partial updates fine.

Input parameters:

- `id` (string, required)

### `sdr_activate_search` (~37 tokens)

Activate (start) a Signal Search

Set status=active and fire-start all enabled hunters. Reversible via `sdr_pause_search`.

Input parameters:

- `id` (string, required)

### `sdr_pause_search` (~38 tokens)

Pause a Signal Search

Pause hunters. Existing data stays; no new contacts surface. Reversible via `sdr_resume_search`.

Input parameters:

- `id` (string, required)

### `sdr_resume_search` (~25 tokens)

Resume a paused Signal Search

Clear paused state and restart all hunters.

Input parameters:

- `id` (string, required)

### `sdr_regenerate_search` (~46 tokens)

Regenerate a Signal Search profile (re-run Claude)

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.

Input parameters:

- `id` (string, required)

### `sdr_preview_delete_search` (~33 tokens)

Preview deleting a Signal Search

Show what would happen if you delete the Signal Search. Nothing is deleted.

Input parameters:

- `id` (string, required)

### `sdr_delete_search` (~44 tokens)

Delete a Signal Search (irreversible)

Permanently delete a Signal Search. Hunters are paused first, then the search and all its contacts/personas are removed. NOT reversible.

Input parameters:

- `id` (string, required)

### `sdr_get_agent_signal_profile` (~48 tokens)

Get an agent's signal profile

Read the agent's current signal profile (ICP, offer summary, hunter weights). Returns { exists: false } when nothing's generated yet.

Input parameters:

- `agent_id` (string, required)

### `sdr_generate_agent_signal_profile` (~48 tokens)

Generate an agent's signal profile (Claude)

Run Claude on the agent's knowledge to (re)generate its signal profile. Persists onto the agent so later Signal Searches reuse it.

Input parameters:

- `agent_id` (string, required)

### `sdr_list_personas` (~81 tokens)

List personas (contacts) discovered for a search

List the people Vendo SDR has discovered for a given Signal Search. Filterable by company, role, min_relevance.

Input parameters:

- `company` (string)
- `limit` (integer)
- `min_relevance` (string)
- `offset` (integer)
- `role` (string)
- `search_id` (string, required)

### `sdr_persona_stats` (~44 tokens)

Get persona stats for a Signal Search

Aggregate stats: total personas, by_role, top_companies, daily count series, credits_spent, quality_blocked.

Input parameters:

- `search_id` (string, required)

### `sdr_export_personas_to_audience` (~89 tokens)

Export personas to a saveable audience

Take the personas matched by a Signal Search (optionally filtered by role / having email / specific IDs) and export them into a custom audience that can then be attached to any campaign.

Input parameters:

- `ids` (array)
- `name` (string)
- `only_with_email` (boolean)
- `roles` (array)
- `search_id` (string, required)

### `sdr_get_outreach` (~39 tokens)

Get SDR outreach status for a search

Read the SDR outreach campaign — channels enabled, ready/queued/sent counts, current content config.

Input parameters:

- `search_id` (string, required)

### `sdr_preview_launch_outreach` (~68 tokens)

Preview launching SDR outreach

Show what would happen if you launch SDR outreach for this search — recipient counts per channel. NOTHING IS SENT. ALWAYS call first and surface the counts to the user.

Input parameters:

- `channels` (array)
- `search_id` (string, required)
- `sender_mode` (string)

### `sdr_launch_outreach` (~89 tokens)

Launch SDR outreach (sends real messages, spends credits)

Launch SDR outreach. Contacts will start receiving emails and/or LinkedIn invites. Credits spent per message. Only call after `sdr_preview_launch_outreach` and explicit user approval.

Input parameters:

- `channels` (array)
- `daily_email_limit` (integer)
- `daily_linkedin_limit` (integer)
- `search_id` (string, required)
- `sender_mode` (string)

### `sdr_get_outreach_content` (~36 tokens)

Get SDR outreach content (templates)

Read the configured email subject/body templates and LinkedIn invite template for SDR outreach.

Input parameters:

- `search_id` (string, required)

### `sdr_update_outreach_content` (~37 tokens)

Update SDR outreach content templates

Edit email/LinkedIn templates for this SDR outreach. Takes effect on new sends.

Input parameters:

- `search_id` (string, required)

### `sdr_preview_outreach_content` (~40 tokens)

Preview a personalized SDR message

Render an example personalized email/LinkedIn message for a specific contact. Costs ~1 Claude call.

Input parameters:

- `search_id` (string, required)

### `sdr_pause_outreach` (~31 tokens)

Pause SDR outreach delivery

Stop sending new messages on this SDR campaign. Reversible.

Input parameters:

- `search_id` (string, required)

### `sdr_resume_outreach` (~26 tokens)

Resume SDR outreach delivery

Resume a paused SDR outreach campaign.

Input parameters:

- `search_id` (string, required)

### `sdr_preview_delete_outreach` (~39 tokens)

Preview deleting an SDR outreach campaign

Show what would happen. The Signal Search ITSELF is NOT deleted, only the outreach campaign.

Input parameters:

- `search_id` (string, required)

### `sdr_delete_outreach` (~46 tokens)

Delete the SDR outreach campaign (irreversible)

Delete the SDR outreach campaign. The Signal Search and its hunters CONTINUE running. Only call after `sdr_preview_delete_outreach`.

Input parameters:

- `search_id` (string, required)

### `sdr_run_states` (~36 tokens)

Get per-source hunter run-states

Per-source map of run state (running / paused / idle) for a Signal Search.

Input parameters:

- `search_id` (string, required)

### `sdr_health` (~42 tokens)

Get Signal Search health dashboard

Operator-level health view: states, signals/contacts produced, credits spent, recent events, learning insights for a single search.

Input parameters:

- `search_id` (string, required)

### `sdr_signal_stats` (~44 tokens)

Signal stats by source (counts over time)

Signals collected by source over the last N days (max 90, default 30).

Input parameters:

- `days_back` (integer)
- `search_id` (string, required)

### `sdr_recent_signals` (~39 tokens)

Recent signals (workspace-wide)

Last N signals across all Signal Searches in the workspace. Useful for the "is it working?" check.

Input parameters:

- `limit` (integer)

### `sdr_company_heat` (~33 tokens)

Hottest companies by signal strength

Composite "heat" ranking — companies with the strongest live signal in the workspace.

Input parameters:

- `limit` (integer)

### `sdr_learning_insights` (~25 tokens)

Learning insights — per-signal-type performance

Learned weights per signal type and conversion stats based on real outreach outcomes.

### `sdr_preview_run_now` (~93 tokens)

Preview an immediate connector run

Show what would happen if you trigger an immediate hunter run. Useful because some sources are paid (ai_web_hunter, g2_reviews, tech_stack — Anthropic + web_search credits).

Input parameters:

- `search_id` (string, required)
- `source` (string): Name of one specific hunter, or omit to run all enabled. E.g. 'linkedin_jobs', 'ai_web_hunter', 'connected_people'.

### `sdr_run_now` (~63 tokens)

Trigger an immediate connector run

Fire-and-forget kick of one (or all) hunters for this Signal Search. Spends Anthropic + web_search credits for paid sources. Call after `sdr_preview_run_now`.

Input parameters:

- `search_id` (string, required)
- `source` (string)

### `search_audience` (~161 tokens)

Search the people database

Search the people graph for prospects matching filters (countries, industries, positions, tags, must-have-email, etc.). PREVIEW only — returns aggregate counts and a small sample. Does not save anything, does not contact anyone, does not spend credits.

Input parameters:

- `cities` (array)
- `companySizes` (array)
- `countries` (array)
- `exactKeyword` (string)
- `industries` (array)
- `limit` (integer)
- `mustHaveEmail` (boolean)
- `mustHaveLinkedin` (boolean)
- `mustHavePhone` (boolean)
- `positions` (array)
- `searchMode` (string)
- `semanticQuery` (string)
- `tags` (array)

### `save_audience` (~56 tokens)

Save an audience

Save a searchable audience using the same filter set as `search_audience`. The audience is named and can then be attached to a campaign. No outreach happens here.

Input parameters:

- `filters` (object, required)
- `name` (string)

### `list_campaigns` (~23 tokens)

List campaigns

List all campaigns in the account, with current status and live stats.

### `get_campaign` (~34 tokens)

Get a campaign

Fetch full details of a single campaign: status, sequence, channel paused flags, today stats.

Input parameters:

- `id` (string, required)

### `create_campaign` (~79 tokens)

Create a campaign (DRAFT, not launched)

Create a new campaign in DRAFT status. The campaign is NOT launched — nobody is contacted until you call `launch_campaign`. Needs an audience id and an agent id.

Input parameters:

- `agentId` (string)
- `audienceId` (string, required)
- `description` (string)
- `name` (string, required)
- `settings` (object)

### `update_campaign` (~58 tokens)

Update campaign settings

Update a campaign before or after it has started. Partial updates allowed (only include fields you want to change).

Input parameters:

- `description` (string)
- `id` (string, required)
- `name` (string)
- `settings` (object)

### `preview_launch_campaign` (~81 tokens)

Preview launching a campaign

Show what would happen if you launch the campaign: recipient count, channels, daily limit. NOTHING IS SENT. ALWAYS call this first and surface the result to the user (recipient count, channels) before calling `launch_campaign`. This is required by Vendo AI policy and protects the user from a launch they did not intend.

Input parameters:

- `id` (string, required)

### `launch_campaign` (~59 tokens)

Launch a campaign (sends real outreach)

Launch the campaign — contacts will start receiving outreach immediately. SPENDS CREDITS continuously while the campaign runs. Only call AFTER the user has reviewed `preview_launch_campaign` output and explicitly approved the recipient count and channels.

Input parameters:

- `id` (string, required)

### `pause_campaign` (~34 tokens)

Pause a campaign (all channels)

Pause a running campaign across every channel. Reversible — call `launch_campaign` to resume.

Input parameters:

- `id` (string, required)

### `pause_channel` (~47 tokens)

Pause one channel of a campaign

Pause a single channel (email, linkedin, phone_call, voice_call) on a running campaign. Other channels keep going.

Input parameters:

- `channel` (string, required)
- `id` (string, required)

### `resume_channel` (~30 tokens)

Resume one channel of a campaign

Resume a paused channel on a campaign.

Input parameters:

- `channel` (string, required)
- `id` (string, required)

### `archive_campaign` (~30 tokens)

Archive a campaign

Archive a campaign — it stops processing and is hidden from the default views.

Input parameters:

- `id` (string, required)

### `preview_delete_campaign` (~32 tokens)

Preview deleting a campaign

Show what would happen if you delete a campaign. The campaign is NOT deleted.

Input parameters:

- `id` (string, required)

### `delete_campaign` (~41 tokens)

Delete a campaign (irreversible)

Permanently delete a campaign. NOT reversible. Only call after the user has reviewed `preview_delete_campaign` output and explicitly approved.

Input parameters:

- `id` (string, required)

### `crm_list_leads` (~132 tokens)

List CRM leads

List leads in the CRM pipeline. Filters: stage (stage id), source (e.g. linkedin_outreach_reply, email_reply_real, widget_chat, manual), q (name/company/email search), range (24h|7d|30d|90d|180d|1y|all), limit/offset. Read-only. Great first call for "who replied to me?".

Input parameters:

- `limit` (integer)
- `offset` (integer)
- `q` (string)
- `range` (string)
- `source` (string)
- `stage` (string)

### `crm_get_lead` (~43 tokens)

Get one CRM lead (full detail)

Full lead card: identity, source ("why is this person here"), company enrichment, activities, comments, assignments. Read-only.

Input parameters:

- `id` (string, required)

### `crm_get_conversation` (~44 tokens)

Get lead conversation thread

The full message thread with this lead on their source channel (LinkedIn / email / widget / telegram / phone transcript). Read-only.

Input parameters:

- `id` (string, required)

### `crm_stats` (~24 tokens)

CRM pipeline stats

Counts per stage, new today/this week, stale leads. Read-only.

### `crm_list_stages` (~35 tokens)

List pipeline stages

Ordered kanban columns for this workspace (id, name, color, is_terminal). Read-only. Call before moving leads.

### `crm_create_lead` (~98 tokens)

Create a lead manually

Add a lead card to the New stage. ALL fields optional — provide whatever is known (at least one non-empty). Side-effect: a card appears on the customer board.

Input parameters:

- `company_name` (string)
- `email` (string)
- `first_name` (string)
- `last_name` (string)
- `linkedin_url` (string)
- `phone` (string)
- `title` (string)

### `crm_update_lead` (~101 tokens)

Update lead fields

Patch lead attributes (name, company, title, email, phone, notes, tags, deal_value). Reversible.

Input parameters:

- `company_name` (string)
- `deal_value` (number)
- `email` (string)
- `first_name` (string)
- `id` (string, required)
- `last_name` (string)
- `notes` (string)
- `phone` (string)
- `title` (string)

### `crm_move_lead` (~53 tokens)

Move lead to another stage

Drag-and-drop equivalent: move a lead to a different pipeline stage by stage_id (get ids from crm_list_stages). Reversible.

Input parameters:

- `id` (string, required)
- `stage_id` (string, required)

### `crm_reply_to_lead` (~75 tokens)

Send a reply to a lead (REAL outbound message)

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.

Input parameters:

- `id` (string, required)
- `text` (string, required)

### `crm_add_comment` (~44 tokens)

Add an internal comment on a lead

Internal team note on the lead card (not visible to the lead). Supports @mentions via user ids.

Input parameters:

- `body` (string, required)
- `id` (string, required)

### `crm_enrich_from_linkedin` (~87 tokens)

Enrich a person from a LinkedIn URL

Fetch name / title / current employer / avatar / location for a linkedin.com/in/... URL (same lookup the SDR hunters use). May also suggest an email as an UNVERIFIED pattern guess (email_confidence=pattern_guess). Costs one profile view from the workspace's shared daily LinkedIn budget — do not loop over big lists.

Input parameters:

- `linkedin_url` (string, required)

### `crm_create_stage` (~47 tokens)

Create a pipeline stage

Add a custom kanban column (name, optional hex color). Inserted before the terminal stages (Won/Lost).

Input parameters:

- `color` (string)
- `name` (string, required)

### `crm_update_stage` (~49 tokens)

Rename / recolor a pipeline stage

Rename or recolor a stage. System stages (New, Manager Dialog) cannot be renamed.

Input parameters:

- `color` (string)
- `id` (string, required)
- `name` (string)

### `preview_delete_crm_lead` (~48 tokens)

Preview lead deletion (dry-run)

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.

Input parameters:

- `id` (string, required)

### `delete_crm_lead` (~54 tokens)

Delete a CRM lead (soft)

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.

Input parameters:

- `id` (string, required)

### `preview_delete_crm_stage` (~43 tokens)

Preview stage deletion (dry-run)

Dry-run of deleting a pipeline stage. Deletion is refused downstream if the stage still holds leads or is a system stage.

Input parameters:

- `id` (string, required)

### `delete_crm_stage` (~43 tokens)

Delete a pipeline stage

Delete an EMPTY, non-system pipeline stage. Only call after the user reviewed `preview_delete_crm_stage` and explicitly approved.

Input parameters:

- `id` (string, required)

### `crm_list_workspace_members` (~44 tokens)

List workspace members

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.

### `crm_list_workspace_agents` (~30 tokens)

List agents visible in CRM

List the AI agents in this workspace that CRM leads can be attributed to. Read-only, free.

### `crm_list_linkedin_accounts` (~41 tokens)

List connected LinkedIn accounts

List the LinkedIn accounts connected to this workspace, as shown in the CRM. Useful to see which account owns a conversation. Read-only, free.

### `reassign_crm_lead` (~74 tokens)

Reassign a CRM lead to another owner

Change who owns a lead. Call `crm_list_workspace_members` first to get a valid owner id — passing an unknown id fails. Write operation, no credit cost.

Input parameters:

- `id` (string, required): Lead id
- `owner_id` (string, required): New owner — a member id from crm_list_workspace_members

### `crm_list_calendar_events` (~88 tokens)

List CRM calendar events

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.

Input parameters:

- `from` (string): ISO date, start of range
- `to` (string): ISO date, end of range

### `crm_create_calendar_event` (~85 tokens)

Create a CRM calendar event

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.

Input parameters:

- `all_day` (boolean)
- `ends_at` (string): ISO datetime
- `notes` (string)
- `starts_at` (string, required): ISO datetime
- `title` (string, required)

### `crm_update_calendar_event` (~69 tokens)

Update a CRM calendar event

Edit an existing custom calendar event. Write operation, no credit cost.

Input parameters:

- `all_day` (boolean)
- `ends_at` (string)
- `id` (string, required)
- `notes` (string)
- `starts_at` (string)
- `title` (string)

### `crm_delete_calendar_event` (~46 tokens)

Delete a CRM calendar event

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.

Input parameters:

- `id` (string, required)

### `crm_list_notifications` (~42 tokens)

List CRM notifications

List CRM notifications (new lead, new reply, stage change). Read-only, free.

Input parameters:

- `limit` (number)
- `unread_only` (boolean)

### `crm_mark_notification_read` (~32 tokens)

Mark one notification as read

Mark a single CRM notification as read. Write operation, no credit cost.

Input parameters:

- `id` (string, required)

### `crm_mark_all_notifications_read` (~21 tokens)

Mark all notifications as read

Clear the CRM notification badge by marking everything read.

### `crm_get_settings` (~34 tokens)

Get CRM settings

Read CRM settings, including the notify_* toggles that control which events send an email/notification. Read-only, free.

### `crm_update_settings` (~95 tokens)

Update CRM settings

Change CRM settings — e.g. mute new-lead or new-reply notifications while an integration drives the CRM itself. Write operation, no credit cost. Turning notifications off means the human stops being alerted, so confirm with the user first.

Input parameters:

- `analytics_emails_enabled` (boolean)
- `notify_new_lead` (boolean)
- `notify_new_reply` (boolean)
- `notify_stage_change` (boolean)

### `crm_communication_cards` (~52 tokens)

List communication cards

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). Read-only, free.

### `crm_communication_history` (~114 tokens)

Outbound history for one card

Every outbound touch for one campaign or SDR search, filterable by channel, reply status and date. Use `crm_communication_cards` first to get the id. Read-only, free.

Input parameters:

- `channel` (string)
- `from` (string): ISO date
- `id` (string, required): Campaign id or SDR search id
- `limit` (number)
- `offset` (number)
- `replied` (boolean)
- `to` (string): ISO date
- `type` (string, required)

### `crm_communication_thread` (~77 tokens)

Full message thread for one contact

The complete message thread with one contact inside a card. `key` comes from a `crm_communication_history` row (an email address or LinkedIn chat id). Read-only, free.

Input parameters:

- `id` (string, required)
- `key` (string, required): Thread key from crm_communication_history
- `type` (string, required)

### `sdr_get_person_detail` (~72 tokens)

Why was this person picked?

Full provenance for one person found by SDR: which hunter found them, what query fired, what signal triggered the pick, and the scoring breakdown. Use this to explain to a customer WHY a contact is in their list. Read-only, free.

Input parameters:

- `id` (string, required): Person (persona) id

### `sdr_export_people_csv` (~98 tokens)

Export SDR contacts as CSV

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.

Input parameters:

- `company` (string)
- `min_relevance` (number)
- `role` (string)
- `search_id` (string, required)

### `list_audiences` (~23 tokens)

List saved audiences

List the audiences saved in this workspace. Read-only, free.

### `get_audience` (~32 tokens)

Get one saved audience

Read one saved audience with its filters and contact count. Read-only, free.

Input parameters:

- `id` (string, required)

### `list_audience_sets` (~38 tokens)

Browse the Audience Sets marketplace

Browse pre-built, ready-to-use audiences available for purchase, plus their categories. Browsing is free; buying costs credits. Read-only.

### `get_audience_set` (~60 tokens)

Get one audience set

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.

Input parameters:

- `slug` (string, required): Human-readable slug, not a UUID

### `get_audience_set_contacts` (~58 tokens)

Preview contacts in an audience set

Paginated preview of the contacts inside a marketplace set. Contact details stay masked until the set is purchased. Read-only, free.

Input parameters:

- `limit` (number)
- `offset` (number)
- `slug` (string, required)

### `preview_buy_audience_set` (~60 tokens)

Preview buying an audience set (dry-run)

Dry-run of purchasing an audience set — shows what would be bought and what it costs, WITHOUT spending credits. ALWAYS call this first and show the cost to the human.

Input parameters:

- `id` (string, required): Set id (UUID), not the slug

### `buy_audience_set` (~59 tokens)

Buy an audience set

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.

Input parameters:

- `id` (string, required)

### `preview_launch_audience_set` (~42 tokens)

Preview launching a campaign from a set (dry-run)

Dry-run of buying a set AND starting outreach against it. Shows the cost without spending anything. ALWAYS call this first.

Input parameters:

- `id` (string, required)

### `launch_audience_set` (~69 tokens)

Buy a set and launch outreach

SPENDS CREDITS and STARTS REAL OUTREACH to real people: buys the snapshot, then runs a campaign against it. The most consequential tool in this list. Only call after the user reviewed `preview_launch_audience_set` and explicitly approved.

Input parameters:

- `id` (string, required)

### `sdr_activity_feed` (~53 tokens)

Live activity feed for an SDR search

Recent discovery + outreach events for one SDR search, newest first — the same ticker the dashboard shows. Read-only, free.

Input parameters:

- `limit` (number): Default 40
- `search_id` (string, required)

### `sdr_outreach_summary` (~35 tokens)

Sent/queued counters for an SDR search

Per-channel sent and queued counts for one SDR search. Read-only, free.

Input parameters:

- `search_id` (string, required)

### `list_linkedin_accounts` (~53 tokens)

List connected LinkedIn accounts

List the LinkedIn accounts connected to this workspace and their status. Each healthy account adds roughly 70–80 invites/day of capacity — check here first when asked why invite volume is low. Read-only, free.

### `connect_linkedin_account` (~71 tokens)

Get a link to connect a LinkedIn account

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.

Input parameters:

- `campaign_id` (string): Optionally bind the new account to a campaign

### `preview_reconnect_linkedin_account` (~59 tokens)

Preview reconnecting a LinkedIn account (dry-run)

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.

Input parameters:

- `id` (string, required)

### `reconnect_linkedin_account` (~78 tokens)

Reconnect a LinkedIn account

Re-authenticate a LinkedIn account whose session died. Creates a NEW account id upstream: past outreach stays attached to the old id, so per-account history can look empty afterwards and running campaigns may need re-pointing. Only call after the user reviewed `preview_reconnect_linkedin_account` and approved.

Input parameters:

- `id` (string, required)

### `preview_disconnect_linkedin_account` (~40 tokens)

Preview disconnecting a LinkedIn account (dry-run)

Dry-run of removing a LinkedIn account, showing the capacity that would be lost. ALWAYS call this first.

Input parameters:

- `id` (string, required)

### `disconnect_linkedin_account` (~58 tokens)

Disconnect a LinkedIn account

Remove a LinkedIn account from the workspace. Any campaign or SDR search sending from it stops immediately and daily capacity drops. Only call after the user reviewed `preview_disconnect_linkedin_account` and explicitly approved.

Input parameters:

- `id` (string, required)

### `set_agent_contact_channels` (~122 tokens)

Set the contact channels an agent hands out

Set the meeting link, email, phone, WhatsApp and Telegram that the AI agent gives out when a visitor asks how to get in touch or book a call. Omitted channels are cleared, so always send the full set you want the agent to have. Write operation, no credit cost.

Input parameters:

- `email` (string)
- `id` (string, required): Agent id
- `meeting_url` (string): Booking link, e.g. Calendly
- `phone` (string)
- `telegram` (string)
- `whatsapp` (string)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-vendo-ai-vendo-ai/api#diagnostics

## Score history

- 2026-08-03: 23
- 2026-08-02: 23
- 2026-08-01: 23
- 2026-07-31: 23
- 2026-07-30: 14
- 2026-07-29: 58
- 2026-07-28: 21

## Links

- Remote endpoint: https://api.vendo-ai.com/mcp
- Authorisation metadata: https://api.vendo-ai.com/.well-known/oauth-protected-resource/mcp
- Website: https://vendo-ai.com/api-mcp/
- Changelog RSS feed: https://verifymcp.io/servers/com-vendo-ai-vendo-ai/api/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-vendo-ai-vendo-ai/api/changelog.json
- HTML version of this page: https://verifymcp.io/servers/com-vendo-ai-vendo-ai/api
