← Registry

Marketing

onsa.ai

Facilitates B2B lead generation and campaign management by searching for and scoring leads against ideal-customer profiles.

1 endpoint13 known toolsFirst detected September 8, 2026Last detected September 8, 2026

ENDPOINT 1

https://api.onsa.ai/api/mcp

No auth detected

MCP server metadata

Name
ONSA
Version
1.0.0
Capabilities
tools.listChanged
Server instructions

Onsa finds real, scored B2B sales leads (actual people with LinkedIn profiles) for your workspace, and keeps every search as a "campaign" you can come back to. RUNNING A SEARCH: `find_leads` starts a live search and returns a `jobId` IMMEDIATELY — the search runs in the background and usually takes 3–10 minutes. Poll `fetch_leads` with that `jobId` roughly every 20s. IMPORTANT: `status` flips to "completed" when the agent delivers its FIRST batch of leads, not necessarily its last — if `total` is still rising, keep polling. A search that never delivers leads (the agent asked a question, or failed) reports `status: "stalled"` after about 15 minutes: STOP polling, read `agentMessage` for the reason, tell the user, and either re-run `find_leads` with the answer folded into the query or send them to campaignUrl. `limit` is a target the search agent aims at, not a cap — it often returns more. JUDGING A COHORT: every lead carries `score` (1–5) and `scoreExplanation` — the agent's written reasoning for why this person matches. Use those, not just names, when you assess whether a search found the right people. WRITING OUTREACH THAT IS NOT MAIL-MERGE: `list_pending_outreach` shows drafts awaiting a human. Before improving one, call `get_lead_memo` — Onsa has usually already researched that person, and the memo is far richer than scoreExplanation. Rewrite around ONE specific, checkable fact from it via `rewrite_outreach`, show the user the result, and only then `send_outreach` with their explicit go-ahead. Never invent a fact about a person; if there is no memo, say so and keep the message honest. GROWING OR STEERING A COHORT: use `continue_campaign`, not `find_leads`. "More like these", "try the Gulf instead", "drop the wrong-shaped ones" all belong in the campaign that already exists — `find_leads` would fork a separate campaign with its own ICP and split the funnel. READING WHAT PROSPECTS ACTUALLY SAID: `get_campaign_stats` counts replies and labels them; `list_replies` returns THE REPLY TEXT. Never diagnose a cohort from counts alone — read the replies before you conclude anything about why an ICP is or is not landing. The stored `sentiment` label is written once per lead and unscored replies are missing from the funnel counts entirely, so `list_replies` is both richer and more complete than the stats. RANKING COHORTS: rank on positivePct, never on replyPct. A rejection is a reply, so a cohort that provokes people scores high on replyPct while producing nothing, and a high replyPct beside a high negativePct means the copy is annoying its audience rather than engaging it. Because every rate counts only the replies Onsa has scored, quote them as "of the replies Onsa scored" and use `list_replies` when the question is how many people actually answered. When counts and the Overview page disagree, say why: these count leads, the widget counts actions. DECIDING WHAT TO DO NEXT: when the user asks how a campaign is doing, what is happening with it, or what they should do about it — anything shaped like "analyse my campaigns and recommend something" — call `list_next_steps` for that campaign. It returns the ranked to-do list: people who replied, invites accepted but never messaged, drafts waiting for approval, leads found but never contacted, missing setup. `get_campaign_stats` gives you the funnel and `list_replies` the words, but neither tells you what to DO. An unworked cohort is almost always worth more than another search. COMPARING COHORTS: `list_campaigns` shows every past search, `get_campaign` returns one campaign's ICP and outreach template, `get_campaign_leads` returns its leads (use this rather than fetch_leads for a campaign you did not start in this session), and `get_campaign_stats` returns its outreach funnel (invites sent and accepted, messages sent, positive/negative/other responses). Together these let you compare which ICP actually produced replies and propose a better one. Show each lead's name as a link to its linkedInUrl. Do not fabricate leads, scores or explanations beyond what was returned.

Known tools 13

find_leads

Starts a live B2B lead search with Onsa's agent, matching real people (with LinkedIn profiles) against the workspace's ICP.

Inferred read-only
fetch_leads

Returns the status and any results of a find_leads job, by jobId.

Inferred read-only
list_campaigns

Lists the campaigns (past lead searches) in this workspace that the user takes part in, newest first.

Inferred read-only
get_campaign

Returns one campaign's ICP - the ideal-customer profile the agent derived and scores leads against - plus its outreach template and settings.

Inferred read-only
get_campaign_leads

Returns the leads of any campaign by campaignId, with the same fields as fetch_leads, including score and scoreExplanation.

Inferred read-only
continue_campaign

Sends an instruction to the agent inside an existing campaign and returns a jobId to read with fetch_leads.

Inferred read-only
list_pending_outreach

Lists outreach messages the agent has drafted that are waiting for a human to approve - the 'a message for X is ready' queue.

Potential side effects
get_lead_memo

Returns the research memo Onsa's agent wrote about one lead: role history, company size and stage, what they have said publicly, and the angle on them.

Inferred read-only
rewrite_outreach

Replaces the text of an outreach draft that is waiting for approval.

Inferred read-only
send_outreach

Queues one already-approved outreach draft for delivery to a real person on LinkedIn.

Inferred read-only
list_replies

Returns the text of what prospects replied, for every lead in the campaign that answered, paired with the outbound message it answers.

Potential side effects
list_next_steps

Returns what this campaign still needs from a human, as a ranked to-do list: people who replied, people who accepted an invite but were never messaged, drafts waiting for approval, leads found but never contacted, and setup that is missing.

Inferred read-only
get_campaign_stats

Returns the outreach funnel for one campaign: invites sent, invites accepted, messages sent, and replies split into positive / negative / other by sentiment.

Inferred read-only

CONNECT WITH APPROVAL

Client installation

Review this server and its permissions before adding it. Secret placeholders must be set locally.

Codex

~/.codex/config.toml

[mcp_servers.onsa]
url = "https://api.onsa.ai/api/mcp"
enabled = true
Claude Code

.mcp.json

{
  "mcpServers": {
    "onsa": {
      "type": "http",
      "url": "https://api.onsa.ai/api/mcp"
    }
  }
}
Claude Desktop

Settings → Connectors → Add custom connector

Name: onsa
Remote MCP URL: https://api.onsa.ai/api/mcp

Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.

Cursor

.cursor/mcp.json

{
  "mcpServers": {
    "onsa": {
      "url": "https://api.onsa.ai/api/mcp"
    }
  }
}
Visual Studio Code

.vscode/mcp.json

Add to Visual Studio Code
{
  "servers": {
    "onsa": {
      "type": "http",
      "url": "https://api.onsa.ai/api/mcp"
    }
  }
}
Generic MCP

Client-specific MCP configuration

{
  "name": "onsa",
  "transport": "streamable-http",
  "url": "https://api.onsa.ai/api/mcp"
}
MCP Inspector

Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.

TRUST AND VERIFICATION EVIDENCE

Loading Trust v2 evidence…

Checking the associated registrable domain. The BuiltWith key remains server-side.

Indexed

Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.