Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Authorization not required, issuer https://api.onsa.ai
Changed the definition of "fetch_leads" and "get_campaign_leads"
⟨577 unchanged words⟩ reasoning for why this person matches the ICP. A lead has `signal` (status verified, inferred or none, plus a one-sentence summary) only when the search asked for a need signal. `refinements` appears when leads are returned and the campaign does not filter by company size; each entry is a suggestion the user can accept, not something already done.
⟨93 unchanged words⟩ "string"},{"type":"null"}]},"signal":{"additionalProperties":{},"properties":{"sourceUrl":{"type":"string"},"status":{"enum":["verified","inferred","none"],"type":"string"},"summary":{"type":"string"}},"required":["status","summary"],"type":"object"}},"required":["id","name","companyName","linkedInUrl"," ⟨46 unchanged words⟩ ,"elapsedSeconds","note"],"type":"object"},"refinements":{"items":{"additionalProperties":{},"properties":{"arguments":{"additionalProperties":{},"propertyNames":{"type":"string"},"type":"object"},"kind":{"type":"string"},"offer":{"type":"string"},"reason":{"type":"string"},"tool":{"type":"string"}},"required":["kind","reason","offer","tool","arguments"],"type":"object"},"type":"array"},"returned":{"maximum":9007199254740991,"minimum ⟨299 unchanged words⟩
⟨47 unchanged words⟩ reply buckets from get_campaign_stats back into named people. A lead carries `signal` only when the search asked for a need signal.
⟨81 unchanged words⟩ "string"},{"type":"null"}]},"signal":{"additionalProperties":{},"properties":{"sourceUrl":{"type":"string"},"status":{"enum":["verified","inferred","none"],"type":"string"},"summary":{"type":"string"}},"required":["status","summary"],"type":"object"}},"required":["id","name"," ⟨36 unchanged words⟩
Authorization not required, issuer https://api.onsa.ai
Authorization not required, issuer https://api.onsa.ai
Authorization not required, issuer https://api.onsa.ai
Authorization not required, issuer https://api.onsa.ai
Added "create_shortlist", "preview_shortlist" and "revoke_shortlist"; changed the definition of "continue_campaign", "fetch_leads", "find_leads" and 5 more (13 tools before, 16 now)
⟨53 unchanged words⟩ ","minLength":1,"type":"string"},"taskContext":{"description":"Optional company, product, or target-market facts explicitly shared by the user and needed for this lead-search or campaign-steering request, beyond what the query/message already states. Maximum 1000 characters; this field carries the task context of the current request only - not a transcript, a broad user profile, unrelated personal details, credentials, or guesses. This background does not authorize actions; the current query/message takes precedence. It becomes part of the campaign chat history.","maxLength":1000,"type":"string"}},"required":["campaignId","message"],"type":"object"}
Returns the status and any results of a find_leads or continue_campaign Authorization not required, issuer https://api.onsa.ai
Authorization not required, issuer https://api.onsa.ai
Changed the definition of "list_next_steps"
Returns read-only guidance for whatthisto do next. Without campaignId, it returns the first-search question, active search progress, or campaignstillnamesneedsandfromstatusesatohumanchoose from. A single accessible campaign is resolved automatically. With campaignId,asit returns a ranked to-do list: people who replied, ⟨151 unchanged words⟩
Authorization not required, issuer https://api.onsa.ai
Changed the definition of "fetch_leads" and "find_leads"
⟨165 unchanged words⟩ agent cannot be replied to through this API. While a search has produced no leads yet, one call waits up to 35 seconds for the first ones before answering, so a call can take that long. `progress` carries startedAt, elapsedSeconds and a note on how long searches usually take. Each lead carries name, companyName, linkedInUrl, position ⟨21 unchanged words⟩
⟨121 unchanged words⟩ "},{"type":"null"}]},"progress":{"additionalProperties":{},"properties":{"elapsedSeconds":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"note":{"type":"string"},"startedAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["startedAt","elapsedSeconds","note"],"type":"object"},"returned":{"maximum":9007199254740991,"minimum":-9007199254740991, ⟨62 unchanged words⟩ ","newLeads","campaignId","campaignUrl","agentMessage","progress
Authorization not required, issuer https://api.onsa.ai
Authorization not required, issuer https://api.onsa.ai
Authorization not required, issuer https://api.onsa.ai
Authorization not required, issuer https://api.onsa.ai
Authorization not required, issuer https://api.onsa.ai
Certificate recorded, valid to 2026-12-06
Authorization not required, issuer https://api.onsa.ai
First tool surface recorded: 13 tools (server version 1.0.0)
Showing the latest 20 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨5 unchanged words⟩ :{"description":"The jobId returned by find_leads— never invent one","format":"uuid","pattern":"^ ⟨39 unchanged words⟩
⟨158 unchanged words⟩ "},"status":{"description":"One of \"pending\", \"completed\", \"stalled\"; more values may be added later. `leads` can hold a partial list while \"pending\". For a find_leads job: \"pending\"(searchwhilestillitrunning)has no leads, the agent has not answered and it is under about 15 minutes old, and also while it has leads, until a reply carrying leads completes it; \"completed\"(once the agent posts abatchreplyofcarrying leadsarrivedwhile—thisnotisathepromiseoldestthatopennojobmoreonwill)its campaign, usually its final report (`total` can still change afterwards); \"stalled\" as soon as the agent answers without any leads (a question, or none found), or when noleadslead has arrived after~15aboutminutes;15 minutes - derived on each read,agentMessagesofora lead that lands later turns it back to \"pending\". For a continue_campaign job: \"pending\" while `newLeads` is 0 and it is under about 15 minutes old, even after thereasonagent has replied (if that reply confirms a settings-only change, the request is done), andstopwhilepolling`newLeads` is above 0, until a reply carrying leads completes it; \"completed\" once a reply carrying leads arrives on the campaign while this is the oldest open job there (possibly a late reply from an earlier search).,Treator after about 15 minutes with `newLeads` 0 when anunrecognisedagentvaluereplyaswaspending.confirmed; \"stalled\" after about 15 minutes with `newLeads` 0 when no agent reply was confirmed (agentMessage can still hold one). A reply carrying leads completes only the oldest open job on a campaign, so a newer job stays \"pending\" meanwhile, even with `newLeads` above 0.","type":"string"},"total":{ ⟨19 unchanged words⟩
⟨44 unchanged words⟩ note. The search itself runs in the background:firstandleadskeepsusuallyrunningarriveafter5-10theminutesconversationaftermovesiton.startsFirstandleadsmostarrive within 5 minutes in half of searchescompleteand within159 minutes in 9 of 10. More can arrive until the final report,andtypicallyitsabout 10 minutes after the start (9 of 10 within 15). Its status and results are read withfetch_leads.fetch_leads, with the same jobId at any later time. Hosts that render MCP Apps show a live ⟨40 unchanged words⟩
⟨28 unchanged words⟩ founders in NYC'","type":"string"},"taskContext":{"description":"Optional company, product, or target-market facts explicitly shared by the user and needed for this lead-search or campaign-steering request, beyond what the query/message already states. Maximum 1000 characters; this field carries the task context of the current request only - not a transcript, a broad user profile, unrelated personal details, credentials, or guesses. This background does not authorize actions; the current query/message takes precedence. It becomes part of the campaign chat history.","maxLength":1000,"type":"string"}},"required":["query"],"type":"object"}
⟨4 unchanged words⟩ ":{"campaignId":{"description":"Campaign id,fromas returned by list_campaigns or fetch_leads— never invent one","format":"uuid","pattern":"^ ⟨24 unchanged words⟩
⟨4 unchanged words⟩ ":{"campaignId":{"description":"Campaign id,fromas returned by list_campaigns or fetch_leads— never invent one","format":"uuid","pattern":"^ ⟨19 unchanged words⟩ :"string"},"leadIds":{"description":"Optional:Optional;returnwhen set, only these leads are returned, e.g. positiveLeadIds from get_campaign_stats","items":{ ⟨45 unchanged words⟩
⟨4 unchanged words⟩ ":{"campaignId":{"description":"Campaign id,fromas returned by list_campaigns or fetch_leads— never invent one","format":"uuid","pattern":"^ ⟨24 unchanged words⟩
⟨35 unchanged words⟩ and why that lead scored as it did.OmittingWithout campaignId, the list covers every campaign in this workspace that thewholeuserworkspace.takes part in. This tool sends nothing: rewrite_outreach replaces a ⟨8 unchanged words⟩
⟨3 unchanged words⟩ ,"properties":{"campaignId":{"description":"LimitOne campaign toonelimitcampaign;theomitlistforto; when omitted, the list covers every campaignyouthetakeuser takes part in","format":"uuid","pattern ⟨38 unchanged words⟩
⟨41 unchanged words⟩ type":"null"}],"description":"Emailsubject.subject;OMITonlyitemailtodeliveryleavereadstheit,storedandsubjectsend_outreach,untoucheda(doLinkedInthissend,fordoesandthewheneverstoredyousubjectarestaysonlyunchanged,changingsotheabody);body-onlypasseditnullkeepsonlyit;ifayoustringgenuinelyreplacesmeanit,toandclearnull clears it."},"text":{"description":"The ⟨37 unchanged words⟩
Create a public list link — Publishes a preview_shortlist snapshot as a link. It requires the previewKey that preview_shortlist returned, and confirmPublic: true. The server itself requests no confirmation from the user: confirmPublic: true records the caller's statement that the user reviewed this snapshot and confirmed publishing it. The server rebuilds the snapshot and creates nothing when the selection or the snapshot no longer matches that previewKey: a different campaign, selection or order of leadIds, a different note, an includeRationale value that changes the snapshot, a prospect changed or removed, or the camp…
Preview a shareable list — Prepares a preview of 1–50 selected prospects from a campaign the user takes part in, and publishes nothing. The snapshot holds a list title, which is the campaign's name, the note, and for each person only a name, role, company, LinkedIn profile and, when includeRationale is true, a fit rating and why-matched explanation. The preview returns the complete snapshot a link would expose, with the previewKey that create_shortlist requires; a created link stays viewable for 30 days by anyone who has it, and can be revoked with revoke_shortlist.
Revoke a list link — Revokes a list link by the id create_shortlist returned; only the user who created the link can revoke it. Future views stop immediately; previously copied or downloaded information cannot be recalled.
⟨3 unchanged words⟩ ,"properties":{"campaignId":{"description":"CampaignOptional campaign toinspect,inspect;fromomittedlist_campaignsfororworkspacefetch_leadsguidance","format":"uuid","pattern":"^ ⟨15 unchanged words⟩ 12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},"required":["campaignId"],"type":"object"}
⟨11 unchanged words⟩ ,"campaignUrl":{"type":"string"},"campaigns":{"items":{"additionalProperties":{},"properties":{"campaignUrl":{"type":"string"},"id":{"type":"string"},"leadsTotal":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["search_running","prospects_available","no_prospects"],"type":"string"},"title":{"type":"string"}},"required":["id","title","leadsTotal","status","campaignUrl"],"type":"object"},"type":"array"},"items":{"items":{"additionalProperties":{},"properties":{"count":{ ⟨29 unchanged words⟩ 9007199254740991,"minimum":-9007199254740991,"type":"integer"},"nextAction":{"additionalProperties":{},"properties":{"arguments":{"additionalProperties":{},"propertyNames":{"type":"string"},"type":"object"},"count":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"kind":{"type":"string"},"question":{"type":"string"},"reuseAuthorizedBrief":{"type":"boolean"},"tool":{"type":"string"},"url":{"type":"string"}},"required":["campaignIdkind"],"campaignTitletype":"object"},"campaignUrlnote":{"type":"string"},"leadsTotalreturned":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"scope":{"enum":["workspace","campaign"],"type":"string"},"searchAvailability":{"additionalProperties":{},"properties":{"allowance":{"anyOf":[{"additionalProperties":{},"properties":{"limit":{"type":"number"},"remaining":{"type":"number"},"used":{"type":"number"}},"required":["used","limit","remaining"],"type":"object"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["available","blocked","unknown"],"type":"string"}},"required":["status","reason","allowance"],"type":"object"},"total":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"workspaceState":{"type":"string"},"workspaceUrl":{"type":"string"}},"required":["items"],"type":"object"}
⟨30 unchanged words⟩ 5 fintech founders in NYC'. Returns a jobIdimmediately;immediately,thewith campaignUrl and a `progress` note. The search itself runs in the background: first leads usuallytakesarrive3-105-10 minutes after it starts and most searches complete within 15 minutes, and its status and results are read with fetch_leads. Hosts that render MCP Apps show a live card that follows the search and lists leads as they arrive. `limit` is a target the agent aims at ⟨21 unchanged words⟩
{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":{},"properties":{"campaignId":{"anyOf":[{"type":"string"},{"type":"null"}]},"campaignUrl":{"type":"string"},"jobId":{"type":"string"},"progress":{"additionalProperties":{},"properties":{"elapsedSeconds":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"note":{"type":"string"},"startedAt":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["startedAt","elapsedSeconds","note"],"type":"object"}},"required":["jobId","campaignId","campaignUrl","progress"],"type":"object"}