SalesMap
Server Details
Checked buying signals and ranked lead lists for your agent. Never contacts anyone.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- solozerolabs/salesmap-plugin
- GitHub Stars
- 0
TDQS
Score is being calculated.
Available Tools
17 toolsai_adoptionCheck AI adoptionRead-onlyInspect
Price: free.
AI-adoption signals for one company, with dates: MCP servers under its domain in the official MCP registry, AI or LLM lines in its HackerOne or Bugcrowd scope and policy, and its Hugging Face org's plan and member count.
Use when: "is acme.com building with AI", "do they ship an MCP server", "are they serious about LLMs", "AI adoption signals for ".
Skip when: the question is about the general tool stack rather than AI, or about people.
reached lists each source and whether it was read; a source that was not reached is unknown, not "none". Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| domain | Yes | The company domain, e.g. acme.com (no path) |
Output Schema
| Name | Required | Description |
|---|---|---|
| hf | Yes | |
| mcp | Yes | |
| cost | No | |
| bounty | Yes | |
| domain | Yes | |
| reached | Yes | |
| observedAt | Yes |
discoverFind accounts to sell toRead-onlyInspect
Price: $2.50 per ready-now company returned; $0 if none. Never more than max_usd.
From a seller's website to companies ready to buy now, and how to reach them: drafts the seller's ICP from its site (or takes one), finds candidate companies from free sources (the seller's competitors' customer pages, live or from Common Crawl; web search; Hacker News, YC, press wires, ATS boards and SEC Form D), reads each one's own job board, news, tools and AI-adoption signals and checks every signal against its source, screens fit, rates intent from the signals and access from the user's own network (a LinkedIn Connections export, champions, connectors), and ranks: high intent and warm first, then high intent and cold. Also returns accounts to keep warm, ones with only early signals (coming up), companies above the seller's size band (partner or later), existing customers and what was dropped and why, each list's top five with its count. Takes minutes per company; steps are cached, so a rerun is fast.
Use when: "who should sell to right now", "find accounts for getklira.com", "which accounts are in market", "who in my network can introduce me to a buyer".
Skip when: the user brings their own list of companies or a CSV to order, the question is one fact about one company, or the user wants anyone contacted: this never sends anything.
Free sources only by default: a paid API (TheirStack for more candidates, treg or Monid for signals) runs only when paid names it and the free sources came up short, under its budget; paid in the result is what it cost and each account's foundBy says which source found it.
A repeat for the same seller skips companies an earlier discover returned unless one has a signal it wasn't shown with (then shownBefore); skipped ones are under dropped as 'returned before, no new signal'. Each still costs its (cached) research, not a fit screen. When the usual sources find only those, it searches wider once (more web results, four weeks of feeds, more ATS boards); repeat says so, repeat.nothingNew means nothing new qualified, and repeat.costUsd (hosted) is what finding that out cost. includeShown returns the earlier companies too.
Names from the user's network stay local and never reach a model. Every signal was checked against its page. Each account shows its three strongest signals; full is the file with every signal, path and field. used lists which of the user's own facts shaped the list, apart from the checked signals.
context takes the user's own facts about their company; the saved seller profile fills fields left out. With the ICP or buyer roles still unknown, the server asks the user for them (MCP elicitation) or returns the questions without running.
Charged per result returned from the user's credits, never for a miss (the paid APIs it runs only when paid names them, TheirStack and Monid, are our cost): at most max_usd (default: the quote tool's figure) and within their monthly limit, reserved before it runs. If the next step would pass its budget, it stops and returns what it has, with stopped: "budget", charged only for that; budget says what was reserved and charged. A call quoted over max_usd is refused. A call quoted over the user's confirm amount (default $1) asks the user first through the client (MCP elicitation); a client without that gets a confirm result with the cost and a one-use token, and a repeat call with the same arguments and confirm_token runs it.
On this server callerSearch is on by default: rounds that return work are free, and the last is charged $1.00 per ready-now company instead of $2.50; $0.50 when the calling agent's model also judged (judgedBy: "caller": while ours is unavailable, or with callerJudge). With callerSearch: false the server searches (when its own models are available). Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| icp | No | ||
| days | No | ||
| paid | No | ||
| limit | No | ||
| seller | No | ||
| context | No | The user's own facts about their company: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fields left out come from the saved seller profile. These are the user's inputs, not findings. | |
| max_usd | No | Most this call may spend, in USD; default its quote. A call quoted over it is refused. | |
| vendors | No | ||
| searches | No | With callerSearch: each `work` id → the JSON its prompt returned, including every earlier round's answers | |
| champions | No | ||
| companies | No | ||
| customers | No | ||
| openDeals | No | ||
| connectors | No | ||
| evaluators | No | ||
| callerJudge | No | With callerSearch: the calling agent's model also makes the judgments (fit screen and ranking text, job-post extraction, competitor site checks; a playbook's write-up and claim check), returned as `work` like the searches. What it judged is labelled `judgedBy: "caller"`; every signal is still checked against its page by our code. Hosted, this happens on its own while our models are unavailable; locally it is always so | |
| connections | No | ||
| callerSearch | No | The calling agent does the searches (the seller's offer and ICP draft, competitors, tool list, candidate companies, each company's news, the events search), where the server offers it; on the hosted server it is the default. A call returns `work` (search prompts with ids) until every search has an answer; a repeat call with the same input and `searches` carries the answers. Our code still checks every page, quote and date | |
| doNotContact | No | ||
| includeShown | No | ||
| confirm_token | No | The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments. | |
| priorContacts | No | ||
| previousConnections | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| icp | No | |
| cost | No | |
| full | Yes | The full result on disk: every signal, path and field |
| next | No | |
| paid | No | |
| work | No | |
| since | Yes | |
| today | Yes | |
| budget | No | |
| repeat | No | |
| dropped | Yes | |
| profile | No | |
| sources | No | |
| stopped | No | |
| accounts | Yes | |
| comingUp | Yes | |
| judgedBy | No | |
| keepWarm | Yes | |
| needsCredit | No | |
| partnerOrLater | Yes | |
| existingCustomers | Yes |
eventsFind events buyers attendRead-onlyInspect
Price: $0.60 per checked event returned; $0 if none. Never more than max_usd.
Upcoming events near the user that the seller's ICP and buyer roles will attend (meetups, dinners, summits, conferences, trade shows) in the next 90 days by default: found by web search over Luma, Eventbrite, Meetup and conference sites, each event's own page read and checked (the date is on it and upcoming). Per event: name, date, city or online, URL, who it is for and why the buyers will be there, and the companies the page names as sponsors, speakers, hosts or exhibitors, each checked against the page. Ranked by ICP fit, target companies tied in and distance. Free sources only unless the user opts into paid search (paid).
Use when: "what events should I go to", "where will my buyers be next month", "conferences my ICP attends near me", "meetups for CISOs in San Francisco", "which sponsors are at events near me".
Skip when: the user wants accounts to sell to without events, news about named companies, or says "RSVP me", "register me", "sign me up" or wants anyone messaged: this never RSVPs, registers or contacts anyone, and attendee lists behind a login are out.
A company tie that failed its check is not a fact about that company. Takes a few minutes.
context takes the user's own facts about their company; the saved seller profile fills fields left out. With the ICP or buyer roles still unknown, the server asks the user for them (MCP elicitation) or returns the questions without running.
Charged per result returned from the user's credits, never for a miss (the paid APIs it runs only when paid names them, TheirStack and Monid, are our cost): at most max_usd (default: the quote tool's figure) and within their monthly limit, reserved before it runs. If the next step would pass its budget, it stops and returns what it has, with stopped: "budget", charged only for that; budget says what was reserved and charged. A call quoted over max_usd is refused. A call quoted over the user's confirm amount (default $1) asks the user first through the client (MCP elicitation); a client without that gets a confirm result with the cost and a one-use token, and a repeat call with the same arguments and confirm_token runs it. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Where the user is, e.g. San Francisco; default the profile's first region | |
| days | No | How far ahead to look, default 90 days | |
| paid | No | Paid sources the user opted into; used only when free search finds fewer than 5 checked events | |
| online | No | Also online events; with no city, only online ones | |
| seller | No | The user's own company site, e.g. getklira.com | |
| context | No | The user's own facts about their company: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fields left out come from the saved seller profile. These are the user's inputs, not findings. | |
| max_usd | No | Most this call may spend, in USD; default its quote. A call quoted over it is refused. | |
| anywhere | No | Events anywhere, in person or online, ignoring city (for company ties in discover and signals) | |
| radiusKm | No | How far from the city, default 50 km | |
| budgetUsd | No | Cap on paid spend in USD, default 0.05 | |
| confirm_token | No | The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| city | Yes | |
| cost | No | |
| paid | Yes | |
| today | Yes | |
| until | Yes | |
| budget | No | |
| events | Yes | |
| online | Yes | |
| dropped | Yes | |
| stopped | No | |
| radiusKm | Yes | |
| shapedBy | Yes | |
| directories | Yes | |
| moreDropped | Yes | |
| needsCredit | No |
jobGet a background jobRead-onlyInspect
Free. The status (queued, running, done or failed) and, once done, the result of a background job: rank over 10+ companies or verify over 25+ rows.
Use when: a call returned job, "is my ranking done", "is the check finished", "status of my job".
Skip when: no call has returned a job id. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The job id rank or verify returned |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| cost | No | |
| tool | Yes | |
| error | Yes | |
| result | Yes | |
| status | Yes | |
| createdAt | Yes | |
| finishedAt | Yes |
playbookBuild a sales playbookRead-onlyInspect
Price: $7.50 on a discover for the same seller from the last 7 days, $25.00 when it has to run its own sweep. Never more than max_usd.
A Markdown sales playbook for a seller's top three accounts right now: runs discover, then per company why now (the signals that passed their check, with links and dates), who to reach (a warm path from the user's network, else the buyer roles), the angle and a first-email draft. The write-up is checked claim by claim against the signals and the seller's offer; any sentence that fails is cut. Saves the playbook to a file and returns its path with a short summary. Takes minutes; discover's research is cached, so a rerun is fast.
Use when: "write me a playbook for getklira.com", "give me a sales playbook for ", "top 3 accounts with openers", "who should I email this week and what do I say", "draft outreach for my best accounts".
Skip when: the user wants a ranked list without write-ups, one fact about one company, a draft of their own checked, or anything sent or written into a CRM (Salesforce, HubSpot) as leads: this never contacts anyone or writes anywhere but its own file.
Observed (checked signals), Inferred (angle, roles) and drafts are labelled apart in the file. Openers are drafts for the user to edit, not facts about the people.
context takes the user's own facts about their company; the saved seller profile fills fields left out. With the ICP or buyer roles still unknown, the server asks the user for them (MCP elicitation) or returns the questions without running.
Charged per result returned from the user's credits, never for a miss: at most max_usd (default: the quote tool's figure) and within their monthly limit, reserved before it runs. If the next step would pass its budget, it stops and returns what it has, with stopped: "budget", charged only for that; budget says what was reserved and charged. A call quoted over max_usd is refused. A call quoted over the user's confirm amount (default $1) asks the user first through the client (MCP elicitation); a client without that gets a confirm result with the cost and a one-use token, and a repeat call with the same arguments and confirm_token runs it.
On this server callerSearch is on by default: rounds that return work are free, and the playbook is charged $5.00 instead of $25.00; while our models are unavailable (or with callerJudge) the calling agent's model also writes and checks it, labelled judgedBy: "caller". Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| seller | Yes | The seller's site, e.g. getklira.com | |
| context | No | The user's own facts about their company: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fields left out come from the saved seller profile. These are the user's inputs, not findings. | |
| max_usd | No | Most this call may spend, in USD; default its quote. A call quoted over it is refused. | |
| searches | No | With callerSearch: each `work` id → the JSON its prompt returned, including every earlier round's answers | |
| companies | No | Rate these companies instead of searching the market | |
| callerJudge | No | With callerSearch: the calling agent's model also makes the judgments (fit screen and ranking text, job-post extraction, competitor site checks; a playbook's write-up and claim check), returned as `work` like the searches. What it judged is labelled `judgedBy: "caller"`; every signal is still checked against its page by our code. Hosted, this happens on its own while our models are unavailable; locally it is always so | |
| connections | No | A LinkedIn Connections.csv, for warm paths; names stay local. Locally, ~/.salesmap/Connections.csv when omitted | |
| callerSearch | No | The calling agent does the searches (the seller's offer and ICP draft, competitors, tool list, candidate companies, each company's news, the events search), where the server offers it; on the hosted server it is the default. A call returns `work` (search prompts with ids) until every search has an answer; a repeat call with the same input and `searches` carries the answers. Our code still checks every page, quote and date | |
| confirm_token | No | The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | No | |
| next | No | |
| note | No | |
| path | Yes | |
| work | No | |
| today | Yes | |
| budget | No | |
| seller | Yes | |
| stopped | No | |
| judgedBy | No | |
| companies | Yes | |
| needsCredit | No | |
| reusedDiscover | Yes |
quoteQuote a call's priceRead-onlyInspect
Free. What a call to a SalesMap tool is expected to cost, before running it, against what the workspace can spend now (credits and limits); and whether it runs as a job (rank over 10+ companies, verify over 25+ rows). Not a charge: the most the call can charge, which it reserves (or its max_usd); it is charged per result returned (rank: its model cost), never more. Use when: before a batch, "how much will this cost", "can I afford to rank these 20 accounts", "what would discover cost". Skip when: the user wants their balance or limits without a call in mind. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | The tool to quote, e.g. rank | |
| input | No | That tool's arguments, as in a call to it |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | Yes | |
| cost | No | |
| fits | Yes | |
| tool | Yes | |
| quoteUsd | Yes | |
| canSpendUsd | Yes |
rankRank your accountsRead-onlyInspect
Price: its model cost, about $0.30 per company plus $0.30. Never more than max_usd.
Ranks the user's own list of companies for the seller: takes domains or a CSV export (Apollo, Clay, a CRM) and the seller (its site or an ICP), collects each company's checked buying signals, screens fit, rates intent from the signals and access from the user's own network (a LinkedIn Connections export, champions, connectors), and orders them: high intent and warm first, then high intent and cold, then keep warm and coming up. Every company comes back somewhere: ranked with its reason, or in another list (keep warm, coming up, partner or later, customer, dropped) with why; each list shows its top five and its count. Up to 25 companies; takes minutes per company.
Use when: "rank these accounts for ", "which of my accounts should I work first", "prioritize this list", "score my Apollo export", "who on my target list is in market".
Skip when: the user has no list and wants the market searched, wants one fact about one company, or wants anyone contacted: this never sends anything.
Names from the user's network stay local and never reach a model. Every signal was checked against its page. Each account shows its three strongest signals; full is the file with every signal, path and field. used lists which of the user's own facts shaped the order, apart from the checked signals.
context takes the user's own facts about their company; the saved seller profile fills fields left out. With the ICP or buyer roles still unknown, the server asks the user for them (MCP elicitation) or returns the questions without running.
Charged its model cost from the user's credits (the paid APIs it runs only when paid names them, TheirStack and Monid, are our cost): at most max_usd (default: the quote tool's figure) and within their monthly limit, reserved before it runs. If the next step would pass its budget, it stops and returns what it has, with stopped: "budget", charged only for that; budget says what was reserved and charged. A call quoted over max_usd is refused. A call quoted over the user's confirm amount (default $1) asks the user first through the client (MCP elicitation); a client without that gets a confirm result with the cost and a one-use token, and a repeat call with the same arguments and confirm_token runs it.
On the hosted server, rank over 10+ companies and verify over 25+ rows run as a job: the result is job, its id and status. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| csv | No | A CSV export as text (Apollo, Clay, a CRM); its domain, website or work-email column gives the companies | |
| icp | No | ||
| days | No | ||
| paid | No | ||
| seller | No | ||
| context | No | The user's own facts about their company: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fields left out come from the saved seller profile. These are the user's inputs, not findings. | |
| max_usd | No | Most this call may spend, in USD; default its quote. A call quoted over it is refused. | |
| vendors | No | ||
| champions | No | ||
| companies | No | The domains to rank, e.g. ["acme.com", "globex.com"] | |
| customers | No | ||
| openDeals | No | ||
| connectors | No | ||
| evaluators | No | ||
| connections | No | ||
| doNotContact | No | ||
| includeShown | No | ||
| confirm_token | No | The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments. | |
| priorContacts | No | ||
| previousConnections | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| icp | No | |
| job | No | |
| cost | No | |
| full | No | The full result on disk: every signal, path and field |
| next | No | |
| paid | No | |
| work | No | |
| since | No | |
| today | No | |
| budget | No | |
| repeat | No | |
| dropped | No | |
| profile | No | |
| sources | No | |
| stopped | No | |
| accounts | No | |
| comingUp | No | |
| judgedBy | No | |
| keepWarm | No | |
| needsCredit | No | |
| partnerOrLater | No | |
| existingCustomers | No |
seller_profileSave seller profileInspect
Price: free. Saves and reads the user's facts about their own company, kept in the user's SalesMap workspace (one entry per seller site, seen by that workspace only): who they are, company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions, do-not-contact. Every seller tool on this server starts from it. Returns the saved profile, the key fields still missing (ICP, buyer roles) and a question for each. Use when: "remember that we sell to …", "save or update my ICP / buyer roles / customers", "our competitors are …", "don't target these accounts", "what do you know about my company / my profile", before the first list for a seller. Skip when: the question is about a prospect company, not the user's own. The saved fields are the user's inputs, not findings. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| seller | Yes | The user's own company site, e.g. getklira.com | |
| context | No | Fields to save, merged into the saved profile field by field. Omit to read. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | No | |
| path | Yes | |
| saved | Yes | |
| seller | Yes | |
| missing | Yes | |
| profile | Yes | |
| questions | Yes |
set_limitsSet spending limitsInspect
Free. Sets the user's own monthly spending limit for SalesMap in USD (rolling 30 days); null removes it. Until set: $250 once the workspace has topped up, else $100. There is no daily or weekly limit. No call ever spends past the limit or the credit balance. Also the confirm amount: a paid call quoted over it asks the user first (default $1; 0 asks every time; null never asks). Returns the limits with what's spent and left. Use when: "set a monthly budget", "cap my spend at $50 a month", "raise my limit", "remove the limit", "stop asking me before each call". Skip when: the user only wants to see their limits, not change them. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| confirmUsd | No | USD; paid calls quoted over it need the user's yes first; 0 means every call; null means none; omitted, it is kept | |
| monthlyUsd | No | USD; null removes this limit; omit to keep it |
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | No | |
| frozen | Yes | |
| windows | Yes | |
| confirmUsd | Yes | |
| creditsUsd | Yes | |
| canSpendUsd | Yes |
signalsGet buying signalsRead-onlyInspect
Price: $0.15 per checked signal returned ($0.10 with callerSearch); a company with none is free. Never more than max_usd.
Checked buying signals for companies the user names (up to 5): each company's hiring, funding, leadership moves, tools, AI adoption and news in the window, newest first, each with rating, source, URL, day, whether it passed verification, and match, the evidence it is about that company (the source is on its domain or links it, its canonical link, its own job board, a record keyed by its domain). Namesakes, subsidiaries and parents are dropped with a reason. A name is resolved to a domain only when that site's own title is the name; otherwise ask for the domain.
Use when: "what's new at acme.com", "any buying signals for these 3 companies", "signals for acme.com and example.com", "is acme.com hiring or raising", "recent news at ", "only funding and leadership signals for ".
Skip when: the user has no companies yet and wants a list of who to sell to, wants only the tool stack, or wants one given signal confirmed against its source; never contacts anyone or writes to a CRM.
Dropped items are not facts about the company. Takes a few minutes per company; steps are cached.
With callerSearch: true the news search is done by the calling agent: the first call returns work, one search prompt per company, and a second call with the same companies and news (the items each search found) completes it. Each item is verified by our code; refused ones come back in dropped with the failed rule.
context takes the user's own facts about their company; the saved seller profile fills fields left out. With the ICP or buyer roles still unknown, the server asks the user for them (MCP elicitation) or returns the questions without running.
Charged per result returned from the user's credits, never for a miss (the paid APIs it runs only when paid names them, TheirStack and Monid, are our cost): at most max_usd (default: the quote tool's figure) and within their monthly limit, reserved before it runs. If the next step would pass its budget, it stops and returns what it has, with stopped: "budget", charged only for that; budget says what was reserved and charged. A call quoted over max_usd is refused. A call quoted over the user's confirm amount (default $1) asks the user first through the client (MCP elicitation); a client without that gets a confirm result with the cost and a one-use token, and a repeat call with the same arguments and confirm_token runs it.
With callerSearch the first call (work) is free, and the second is charged $0.10 per verified signal instead of model cost ($0.08 with events from eventsWork too); refused items and unverified signals are free. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Window in days, at most and by default 90 | |
| news | No | With callerSearch: each company's domain → the `items` its `work` prompt returned | |
| only | No | Signal families to keep: hiring, funding, corporate, tools, ai, leadership, product, competitor, intent, or a catalog family or id | |
| paid | No | Paid sources to add (Monid for LinkedIn posts by people at the company, treg for classified news and headcount), each under its budget. Default none | |
| events | No | With callerSearch: the `items` the `eventsWork` prompt returned (event pages the calling agent read). Omit it and we search events ourselves | |
| seller | No | The seller's site: hiring and tools are then read for its buyers and products; omit for every signal | |
| context | No | The user's own facts about their company: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fields left out come from the saved seller profile. These are the user's inputs, not findings. | |
| max_usd | No | Most this call may spend, in USD; default its quote. A call quoted over it is refused. | |
| companies | Yes | Up to 5 companies: domains (acme.com), or names, resolved to a domain only when its home page calls itself that name | |
| callerSearch | No | The calling agent does the news web search, where the server offers it. The first call returns `work` (one search prompt per company); a second call with `news` carries the items found. Every item is still checked against its page by our code | |
| confirm_token | No | The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | No | |
| work | No | |
| since | Yes | |
| today | Yes | |
| budget | No | |
| stopped | No | |
| shapedBy | Yes | |
| companies | Yes | |
| eventsWork | No | |
| needsCredit | No |
tech_scanScan a company's toolsRead-onlyInspect
Price: free.
Which tools a company runs, from its DNS records, certificate-transparency logs, home page and its own job posts. Each finding names the trace it came from and the earliest dated evidence (firstSeen).
Use when: "what stack does acme.com use", "do they use Okta / Salesforce / OpenAI", "what tools does this company run", "did they just start cold outbound" (outbound: true).
Skip when: the user wants people, emails or phone numbers, or wants the company contacted; this tool only reads public records.
reached lists each source and whether it was read; a source that was not reached is unknown, not "none".
Job findings include a reading: in_use, considering, migration or named. Only in_use supports usage; considering, migration and named are mentions, not proof the company runs the tool. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| only | No | Products or categories to look for; a category also matches as a prefix ("ai_" is the whole AI stack). Omit for every detector. | |
| domain | Yes | The company domain, e.g. acme.com (no path) | |
| outbound | No | Also look for lookalike sending domains (getacme.com) that redirect to the site: three or more in one week means cold outbound just started. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | No | |
| domain | Yes | |
| reached | Yes | |
| findings | Yes | |
| observedAt | Yes |
verifyFact-check claimsRead-onlyInspect
Price: $0.08 per claim confirmed or contradicted; unverifiable claims are free. Never more than max_usd.
Checks claims about companies field by field against public sources: a list of claims, a draft (an email, a post or an agent answer about one company, split into its claims), or an Apollo, Clay or CRM CSV export. Each field comes back confirmed, contradicted (with the source found), unverifiable or insufficient identity, with source URL, quote and confidence; each CSV row gets one action (keep, recheck, review, drop) and its cost. sample: N checks N random rows and reports per-field error rates with 95% intervals and the cost of checking the whole file. Free primary records settle what they can: a raise against SEC Form D filings, hiring against the company's own careers board, a public company's HQ, listing and revenue against EDGAR; a dead cited link is re-read where it moved (sitemap, then the Wayback Machine).
Use when: "is this true about acme.com", "fact-check this email before I send it", "how accurate is my Apollo export", "check these rows", "which of these contacts are stale".
Skip when: the user asks whether an email address is deliverable, for a phone number, for a LinkedIn profile pulled, or for anything sent to a prospect or written to a CRM: none of that is checking, and this tool does none of it.
Unverifiable means no source settled the field either way: it is neither confirmed nor contradicted.
Charged per result returned from the user's credits, never for a miss: at most max_usd (default: the quote tool's figure) and within their monthly limit, reserved before it runs. If the next step would pass its budget, it stops and returns what it has, with stopped: "budget", charged only for that; budget says what was reserved and charged. A call quoted over max_usd is refused. A call quoted over the user's confirm amount (default $1) asks the user first through the client (MCP elicitation); a client without that gets a confirm result with the cost and a one-use token, and a repeat call with the same arguments and confirm_token runs it.
On the hosted server, rank over 10+ companies and verify over 25+ rows run as a job: the result is job, its id and status. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| csv | No | An Apollo, Clay or CRM CSV export, as text | |
| draft | No | An email, a post or an agent answer about one company; each claim in it is checked | |
| claims | No | ||
| sample | No | Check only N random rows and report per-field error rates with 95% Wilson intervals | |
| mapping | No | CSV header → import field; omitted, the Apollo preset or a best guess | |
| max_usd | No | Most this call may spend, in USD; default its quote. A call quoted over it is refused. | |
| confirm_token | No | The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| job | No | |
| cost | No | |
| rows | No | |
| budget | No | |
| fields | No | |
| sample | No | |
| costUsd | No | |
| stopped | No | |
| needsCredit | No |
verify_signalVerify a buying signalRead-onlyInspect
Price: free. Checks one buying signal against its source page: the quote must be on the page, the page must be about the company, and the event date must be printed near the quote (or be the page's own date) and fall within the last 90 days. Returns pass with the date and source tier (primary, wire, major, derivative), or the rule it failed (date, stale, fetch, quote, company). Use when: "is this signal real", "confirm the quote is on the page", "check this claim about acme.com", "verify this news / job post / funding round", before putting a signal in front of a seller. Skip when: there is no source URL and verbatim quote to check. A signal that fails is not confirmed by its page; the result names the rule it failed. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The page the signal comes from | |
| date | Yes | The event date as printed on the page, or YYYY-MM-DD | |
| kind | No | The signal-catalog id, e.g. funding_round, job_posting_buyer_role; only upcoming kinds (event_sponsorship, regulation_deadline…) may date in the future | |
| quote | Yes | Verbatim text from that page | |
| domain | Yes | The company domain, e.g. acme.com (no path) | |
| windowDays | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| url | No | |
| cost | No | |
| date | No | |
| pass | Yes | |
| rule | No | |
| tier | No | |
| detail | No | |
| publishedAt | No |
warm_pathsFind warm pathsRead-onlyInspect
Price: $1.50 per company with at least one checked contact; matches from the user's own Connections.csv are free. Never more than max_usd.
How the user can reach a buyer at up to 5 named companies, without automating LinkedIn: per company and buyer role, a LinkedIn people-search URL for the user to open (filtered to that company, the role's title, and 1st- and 2nd-degree network, where LinkedIn shows the mutual connections), first-degree paths from the user's own Connections.csv, and people that public pages (the company's team or leadership page, press releases, job posts naming the hiring manager) name in the role (plus Founder / CEO unless the company is known to have over 1,000 people), each marked inferred with its source URL and a quote checked on that page. Also lists paths the user confirmed earlier (the seller profile's warmPaths).
Use when: "go into my LinkedIn and find mutuals", "who do I know at acme.com", "warm intro to the Head of Ops at ", "find mutual connections at these accounts", "who is the buyer at acme.com and how do I get introduced", "2nd-degree connections at ".
Skip when: the user wants a ranked list of who to sell to, or wants a profile pulled, a connection request, a message, an email or phone number: this never opens, reads or acts on LinkedIn; the user clicks the links.
The search links are for the user to open in their own browser; this tool never fetches them. First-degree names come from the user's own export and stay local. Inferred people are leads to confirm, not facts about who holds the role; no email addresses are returned.
context takes the user's own facts about their company; the saved seller profile fills fields left out. With the ICP or buyer roles still unknown, the server asks the user for them (MCP elicitation) or returns the questions without running.
Charged per result returned from the user's credits, never for a miss: at most max_usd (default: the quote tool's figure) and within their monthly limit, reserved before it runs. If the next step would pass its budget, it stops and returns what it has, with stopped: "budget", charged only for that; budget says what was reserved and charged. A call quoted over max_usd is refused. A call quoted over the user's confirm amount (default $1) asks the user first through the client (MCP elicitation); a client without that gets a confirm result with the cost and a one-use token, and a repeat call with the same arguments and confirm_token runs it. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| roles | No | Buyer roles to search for; default the seller’s buyerRoles | |
| seller | No | The user's own company site, for its saved buyer roles | |
| context | No | The user's own facts about their company: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fields left out come from the saved seller profile. These are the user's inputs, not findings. | |
| max_usd | No | Most this call may spend, in USD; default its quote. A call quoted over it is refused. | |
| inferred | No | Look for named people in public pages (default true); false gives links and first-degree paths only, with no model or search | |
| companies | Yes | Company domains, e.g. ["acme.com", "example.com"] | |
| connections | No | The user's LinkedIn Connections.csv (LinkedIn's data export, under Settings → Data privacy), for first-degree paths; names stay on this machine. Locally, ~/.salesmap/Connections.csv when omitted | |
| confirm_token | No | The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | No | |
| roles | Yes | |
| today | Yes | |
| budget | No | |
| stopped | No | |
| shapedBy | Yes | |
| companies | Yes | |
| needsCredit | No |
watchManage past-lead watchlistDestructiveInspect
Price: adding, listing and removing are free; a check is $3.00 per alert with a checked signal, quiet re-checks free.
A watchlist of the user's past leads (closed-lost, no decision, stalled, churned, prior contact), kept in the user's SalesMap workspace (seen by that workspace only): add, list or remove accounts with the outcome, date and lost reason (budget, timing, competitor, no_champion, no_decision, other), or import a Salesforce, HubSpot or Pipedrive export of lost opportunities. check re-checks every account now: its checked signals in the last 90 days and what changed in its tool stack, and alerts when a signal answers the lost reason (budget: funding or buyer-team hiring; timing: the revisit date passed, a fiscal-year or renewal window; competitor: that competitor leaves the stack, its renewal or complaints; no_champion: a new leader in the buyer role or a past champion moved in), or when the account scoring would now rate it high intent. An account is never alerted twice for the same signal.
Use when: "watch these lost deals", "tell me when acme.com is worth another try", "import my closed-lost opportunities", "which past leads are ready again", "re-check my watchlist", "check my lost deals weekly".
Skip when: the user wants new accounts, signals for companies they're not watching, or anyone contacted: this never emails, messages or writes to a CRM.
Recurring checks are off by default: schedule with every weekly or daily turns them on. check with due (for a cron line) runs only when on and due. Outcomes and reasons are the user's own deal history.
Hosted: check queues one run on SalesMap's server and returns at once, its alerts listed later with the watchlist's alerts; it is charged $3.00 per alert with a checked signal, within the user's limits and credits, and quiet checks are free. schedule with email: true sends the weekly alert email to the signed-in user only. csv and connections are text, never a path. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| csv | No | import: a CRM export as CSV text or a path to the file | |
| due | No | check: run only when a schedule is on and due (for cron) | |
| date | No | add / import default: when it was lost or last touched (YYYY-MM-DD); today if omitted | |
| note | No | ||
| No | schedule: the weekly alert email (hosted list only) | ||
| every | No | schedule: off (default), weekly or daily | |
| action | No | list | |
| reason | No | add / import default: why it was lost | |
| seller | No | The user's own site: signals read hiring and tools for its buyers | |
| domains | No | add / remove: company domains | |
| outcome | No | add / import default: how it ended | |
| budgetUsd | No | check: the most this sweep may spend on models; it stops before an account that would go over and returns what it found, the rest first next time | |
| buyerRole | No | add: the role that was missing (no_champion) | |
| champions | No | schedule: LinkedIn profile URLs of the seller's past champions | |
| revisitOn | No | add: the day they said to come back (timing) | |
| competitor | No | add: the competitor they chose (name or domain) | |
| connections | No | check: the user's current LinkedIn Connections.csv (path or text), diffed against the last one for champion moves; stays local |
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | No | |
| path | Yes | |
| count | Yes | |
| Yes | ||
| every | Yes | |
| alerts | No | |
| queued | No | |
| seller | No | |
| checked | No | |
| skipped | No | |
| accounts | Yes | |
| billable | No | |
| imported | No | |
| unchecked | No |
watch_changesGet watchlist alertsInspect
Price: free.
The watchlist's alerts: past leads where a checked signal now answers why the deal was lost, or that the account scoring would now rate high intent, newest first, each with its signals, sources and dates. By default only alerts not pulled before, then marked seen.
Use when: "any of my lost deals ready again", "what changed on my watchlist", "watchlist alerts this week", "which past leads should I revisit".
Skip when: the user wants to add or re-check accounts, or new accounts. Never contacts anyone.
An empty list means a quiet week, not an error. Alerts stay kept after they are pulled; since or all lists them again.
Hosted: notice says why a scheduled check didn't run (a spending limit or the credits). Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Every alert kept, seen or not | |
| since | No | Every alert on or after this day, seen or not |
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | No | |
| path | Yes | |
| every | Yes | |
| alerts | Yes | |
| notice | No | |
| lastRun | No |
whoamiShow account and creditRead-onlyInspect
Free. Which SalesMap workspace and API key this server is using; the credit balance; and the user's monthly spending limit (rolling 30 days; null = no limit) with what's spent in it and what's left. canSpendUsd is the most one call can spend now.
Use when: "how much budget do I have left", "what are my limits", "which account is this", before a large paid call.
Skip when: the user wants the price of one specific call. Quoted page text is normalized; a quote that reads like an instruction keeps its text and is flagged in Flags with the attack family.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| cost | No | |
| frozen | Yes | |
| windows | Yes | |
| keyPrefix | Yes | |
| confirmUsd | Yes | |
| creditsUsd | Yes | |
| canSpendUsd | Yes | |
| workspaceId | Yes |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
- Changed
tech_scan1 field changed- added
Output schema / properties / findings / items / properties / readingAdded value: +{ + "enum": [ + "in_use", + "considering", + "migration", + "named" + ], + "type": "string" +}
7 tool updates
- Changed
discover1 field changed- added
Output schema / properties / needsCreditAdded value: +{ + "type": "string" +}
- Changed
events1 field changed- added
Output schema / properties / needsCreditAdded value: +{ + "type": "string" +}
- Changed
playbook1 field changed- added
Output schema / properties / needsCreditAdded value: +{ + "type": "string" +}
- Changed
rank1 field changed- added
Output schema / properties / needsCreditAdded value: +{ + "type": "string" +}
- Changed
signals1 field changed- added
Output schema / properties / needsCreditAdded value: +{ + "type": "string" +}
- Changed
verify1 field changed- added
Output schema / properties / needsCreditAdded value: +{ + "type": "string" +}
- Changed
warm_paths1 field changed- added
Output schema / properties / needsCreditAdded value: +{ + "type": "string" +}
10 tool updates
- Changed
discover5 fields changed- changed
Input schema / properties / callerJudge / descriptionPrevious value: -"With callerSearch: your own model also makes the judgments (fit screen and ranking text, job-post extraction, competitor site checks; a playbook's write-up and claim check), returned as `work` like the searches. What it judged is labelled `judgedBy: \"caller\"`; every signal is still checked against its page by our code. Hosted, this happens on its own while our models are unavailable; locally it is always so"New value: +"With callerSearch: the calling agent's model also makes the judgments (fit screen and ranking text, job-post extraction, competitor site checks; a playbook's write-up and claim check), returned as `work` like the searches. What it judged is labelled `judgedBy: \"caller\"`; every signal is still checked against its page by our code. Hosted, this happens on its own while our models are unavailable; locally it is always so" - changed
Input schema / properties / callerSearch / descriptionPrevious value: -"Your own agent runs the searches (the seller's offer and ICP draft, competitors, tool list, candidate companies, each company's news, the events search), where the server offers it; on the hosted server it is the default. A call returns `work` until every search has an answer: run each prompt with your web search, then call again with the same input and `searches`. Our code still checks every page, quote and date"New value: +"The calling agent does the searches (the seller's offer and ICP draft, competitors, tool list, candidate companies, each company's news, the events search), where the server offers it; on the hosted server it is the default. A call returns `work` (search prompts with ids) until every search has an answer; a repeat call with the same input and `searches` carries the answers. Our code still checks every page, quote and date" - changed
Input schema / properties / confirm_token / descriptionPrevious value: -"The token a previous call returned in `confirm`, sent only after the user agreed to that cost; one use, same arguments."New value: +"The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments." - changed
Input schema / properties / context / descriptionPrevious value: -"What you already know about the user and their company, from your memory, CLAUDE.md and this conversation: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fill every field you know before calling; leave out what you don't, never invent it. The saved profile (seller_profile) fills the rest. These are the user's inputs, not findings."New value: +"The user's own facts about their company: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fields left out come from the saved seller profile. These are the user's inputs, not findings." - changed
Input schema / properties / context / properties / warmPaths / descriptionPrevious value: -"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". Saving replaces the list: pass the whole list. Stays local; never sent to a model"New value: +"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model"
- Changed
events3 fields changed- changed
Input schema / properties / confirm_token / descriptionPrevious value: -"The token a previous call returned in `confirm`, sent only after the user agreed to that cost; one use, same arguments."New value: +"The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments." - changed
Input schema / properties / context / descriptionPrevious value: -"What you already know about the user and their company, from your memory, CLAUDE.md and this conversation: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fill every field you know before calling; leave out what you don't, never invent it. The saved profile (seller_profile) fills the rest. These are the user's inputs, not findings."New value: +"The user's own facts about their company: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fields left out come from the saved seller profile. These are the user's inputs, not findings." - changed
Input schema / properties / context / properties / warmPaths / descriptionPrevious value: -"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". Saving replaces the list: pass the whole list. Stays local; never sent to a model"New value: +"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model"
- Changed
playbook6 fields changed- changed
Input schema / properties / callerJudge / descriptionPrevious value: -"With callerSearch: your own model also makes the judgments (fit screen and ranking text, job-post extraction, competitor site checks; a playbook's write-up and claim check), returned as `work` like the searches. What it judged is labelled `judgedBy: \"caller\"`; every signal is still checked against its page by our code. Hosted, this happens on its own while our models are unavailable; locally it is always so"New value: +"With callerSearch: the calling agent's model also makes the judgments (fit screen and ranking text, job-post extraction, competitor site checks; a playbook's write-up and claim check), returned as `work` like the searches. What it judged is labelled `judgedBy: \"caller\"`; every signal is still checked against its page by our code. Hosted, this happens on its own while our models are unavailable; locally it is always so" - changed
Input schema / properties / callerSearch / descriptionPrevious value: -"Your own agent runs the searches (the seller's offer and ICP draft, competitors, tool list, candidate companies, each company's news, the events search), where the server offers it; on the hosted server it is the default. A call returns `work` until every search has an answer: run each prompt with your web search, then call again with the same input and `searches`. Our code still checks every page, quote and date"New value: +"The calling agent does the searches (the seller's offer and ICP draft, competitors, tool list, candidate companies, each company's news, the events search), where the server offers it; on the hosted server it is the default. A call returns `work` (search prompts with ids) until every search has an answer; a repeat call with the same input and `searches` carries the answers. Our code still checks every page, quote and date" - changed
Input schema / properties / confirm_token / descriptionPrevious value: -"The token a previous call returned in `confirm`, sent only after the user agreed to that cost; one use, same arguments."New value: +"The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments." - changed
Input schema / properties / connections / descriptionPrevious value: -"A LinkedIn Connections.csv, for warm paths; names stay local"New value: +"A LinkedIn Connections.csv, for warm paths; names stay local. Locally, ~/.salesmap/Connections.csv when omitted" - changed
Input schema / properties / context / descriptionPrevious value: -"What you already know about the user and their company, from your memory, CLAUDE.md and this conversation: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fill every field you know before calling; leave out what you don't, never invent it. The saved profile (seller_profile) fills the rest. These are the user's inputs, not findings."New value: +"The user's own facts about their company: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fields left out come from the saved seller profile. These are the user's inputs, not findings." - changed
Input schema / properties / context / properties / warmPaths / descriptionPrevious value: -"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". Saving replaces the list: pass the whole list. Stays local; never sent to a model"New value: +"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model"
- Changed
quote1 field changed- changed
Input schema / properties / input / descriptionPrevious value: -"That tool's arguments, as you would call it"New value: +"That tool's arguments, as in a call to it"
- Changed
rank3 fields changed- changed
Input schema / properties / confirm_token / descriptionPrevious value: -"The token a previous call returned in `confirm`, sent only after the user agreed to that cost; one use, same arguments."New value: +"The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments." - changed
Input schema / properties / context / descriptionPrevious value: -"What you already know about the user and their company, from your memory, CLAUDE.md and this conversation: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fill every field you know before calling; leave out what you don't, never invent it. The saved profile (seller_profile) fills the rest. These are the user's inputs, not findings."New value: +"The user's own facts about their company: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fields left out come from the saved seller profile. These are the user's inputs, not findings." - changed
Input schema / properties / context / properties / warmPaths / descriptionPrevious value: -"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". Saving replaces the list: pass the whole list. Stays local; never sent to a model"New value: +"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model"
- Changed
seller_profile2 fields changed- changed
Input schema / properties / context / properties / warmPaths / descriptionPrevious value: -"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". Saving replaces the list: pass the whole list. Stays local; never sent to a model"New value: +"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model" - changed
Output schema / properties / profile / anyOfPrevious value: -[ - { - "additionalProperties": false, - "properties": { - "buyerRoles": { - "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"", - "items": { - "maxLength": 200, - "minLength": 1, - "type": "string" - }, - "maxItems": 500, - "type": "array" - }, - "company": { - "description": "The seller company's name", - "maxLength": 200, - "type": "string" - }, - "competitors": { - "description": "Competitors, as domains or names: never targeted", - "items": { - "maxLength": 200, - "minLength": 1, - "type": "string" - }, - "maxItems": 500, - "type": "array" - }, - "customers": { - "description": "Current customers, as domains (acme.com) or names: never targeted", - "items": { - "maxLength": 200, - "minLength": 1, - "type": "string" - }, - "maxItems": 500, - "type": "array" - }, - "doNotContact": { - "description": "Companies the user said never to contact (domains)", - "items": { - "maxLength": 200, - "minLength": 1, - "type": "string" - }, - "maxItems": 500, - "type": "array" - }, - "employees": { - "additionalProperties": false, - "description": "Headcount band the seller can close, when the user has said", - "properties": { - "max": { - "maximum": 9007199254740991, - "minimum": 2, - "type": "integer" - }, - "min": { - "maximum": 9007199254740991, - "minimum": 1, - "type": "integer" - } - }, - "type": "object" - }, - "exclusions": { - "description": "Companies or kinds of company to leave out", - "items": { - "maxLength": 200, - "minLength": 1, - "type": "string" - }, - "maxItems": 500, - "type": "array" - }, - "icp": { - "description": "Who the ideal customer is: company type, industry, size, stage, region", - "maxLength": 1000, - "type": "string" - }, - "lost": { - "description": "Deals lost or churned (domains or names), with why if known", - "items": { - "maxLength": 200, - "minLength": 1, - "type": "string" - }, - "maxItems": 500, - "type": "array" - }, - "notes": { - "description": "Anything else the user said that should shape the list", - "maxLength": 2000, - "type": "string" - }, - "openDeals": { - "description": "Companies in an open deal (domains): left out", - "items": { - "maxLength": 200, - "minLength": 1, - "type": "string" - }, - "maxItems": 500, - "type": "array" - }, - "product": { - "description": "What the seller sells, in a sentence or two", - "maxLength": 1000, - "type": "string" - }, - "regions": { - "description": "Regions or countries the seller sells into", - "items": { - "maxLength": 200, - "minLength": 1, - "type": "string" - }, - "maxItems": 500, - "type": "array" - }, - "segments": { - "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"", - "items": { - "maxLength": 200, - "minLength": 1, - "type": "string" - }, - "maxItems": 500, - "type": "array" - }, - "user": { - "additionalProperties": false, - "description": "Who the user is: their name and role at the seller", - "properties": { - "name": { - "maxLength": 120, - "type": "string" - }, - "role": { - "maxLength": 120, - "type": "string" - } - }, - "type": "object" - }, - "warmPaths": { - "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". Saving replaces the list: pass the whole list. Stays local; never sent to a model", - "items": { - "additionalProperties": false, - "properties": { - "company": { - "maxLength": 200, - "minLength": 3, - "type": "string" - }, - "confirmedAt": { - "format": "date", - "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", - "type": "string" - }, - "path": { - "maxLength": 300, - "minLength": 1, - "type": "string" - } - }, - "required": [ - "company", - "path" - ], - "type": "object" - }, - "maxItems": 500, - "type": "array" - }, - "won": { - "description": "Deals won (domains or names): the pattern to find more of", - "items": { - "maxLength": 200, - "minLength": 1, - "type": "string" - }, - "maxItems": 500, - "type": "array" - } - }, - "type": "object" - }, - { - "type": "null" - } -]New value: +[ + { + "additionalProperties": false, + "properties": { + "buyerRoles": { + "description": "Roles that buy or own the problem, e.g. \"Head of RevOps\", \"CISO\"", + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 500, + "type": "array" + }, + "company": { + "description": "The seller company's name", + "maxLength": 200, + "type": "string" + }, + "competitors": { + "description": "Competitors, as domains or names: never targeted", + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 500, + "type": "array" + }, + "customers": { + "description": "Current customers, as domains (acme.com) or names: never targeted", + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 500, + "type": "array" + }, + "doNotContact": { + "description": "Companies the user said never to contact (domains)", + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 500, + "type": "array" + }, + "employees": { + "additionalProperties": false, + "description": "Headcount band the seller can close, when the user has said", + "properties": { + "max": { + "maximum": 9007199254740991, + "minimum": 2, + "type": "integer" + }, + "min": { + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" + } + }, + "type": "object" + }, + "exclusions": { + "description": "Companies or kinds of company to leave out", + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 500, + "type": "array" + }, + "icp": { + "description": "Who the ideal customer is: company type, industry, size, stage, region", + "maxLength": 1000, + "type": "string" + }, + "lost": { + "description": "Deals lost or churned (domains or names), with why if known", + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 500, + "type": "array" + }, + "notes": { + "description": "Anything else the user said that should shape the list", + "maxLength": 2000, + "type": "string" + }, + "openDeals": { + "description": "Companies in an open deal (domains): left out", + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 500, + "type": "array" + }, + "product": { + "description": "What the seller sells, in a sentence or two", + "maxLength": 1000, + "type": "string" + }, + "regions": { + "description": "Regions or countries the seller sells into", + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 500, + "type": "array" + }, + "segments": { + "description": "Kinds of company the seller sells to, e.g. \"Marketing agencies\", \"B2B SaaS\"", + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 500, + "type": "array" + }, + "user": { + "additionalProperties": false, + "description": "Who the user is: their name and role at the seller", + "properties": { + "name": { + "maxLength": 120, + "type": "string" + }, + "role": { + "maxLength": 120, + "type": "string" + } + }, + "type": "object" + }, + "warmPaths": { + "description": "Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model", + "items": { + "additionalProperties": false, + "properties": { + "company": { + "maxLength": 200, + "minLength": 3, + "type": "string" + }, + "confirmedAt": { + "format": "date", + "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$", + "type": "string" + }, + "path": { + "maxLength": 300, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "company", + "path" + ], + "type": "object" + }, + "maxItems": 500, + "type": "array" + }, + "won": { + "description": "Deals won (domains or names): the pattern to find more of", + "items": { + "maxLength": 200, + "minLength": 1, + "type": "string" + }, + "maxItems": 500, + "type": "array" + } + }, + "type": "object" + }, + { + "type": "null" + } +]
- Changed
set_limits1 field changed- changed
Input schema / properties / confirmUsd / descriptionPrevious value: -"USD; paid calls quoted over it ask the user first; 0 asks every time; null never asks; omit to keep it"New value: +"USD; paid calls quoted over it need the user's yes first; 0 means every call; null means none; omitted, it is kept"
- Changed
signals6 fields changed- changed
Input schema / properties / callerSearch / descriptionPrevious value: -"Your own agent runs the news web search, where the server offers it. The first call returns `work` (one prompt per company); run each with your web search and call again with `news`. Every item is still checked against its page by our code"New value: +"The calling agent does the news web search, where the server offers it. The first call returns `work` (one search prompt per company); a second call with `news` carries the items found. Every item is still checked against its page by our code" - changed
Input schema / properties / confirm_token / descriptionPrevious value: -"The token a previous call returned in `confirm`, sent only after the user agreed to that cost; one use, same arguments."New value: +"The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments." - changed
Input schema / properties / context / descriptionPrevious value: -"What you already know about the user and their company, from your memory, CLAUDE.md and this conversation: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fill every field you know before calling; leave out what you don't, never invent it. The saved profile (seller_profile) fills the rest. These are the user's inputs, not findings."New value: +"The user's own facts about their company: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fields left out come from the saved seller profile. These are the user's inputs, not findings." - changed
Input schema / properties / context / properties / warmPaths / descriptionPrevious value: -"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". Saving replaces the list: pass the whole list. Stays local; never sent to a model"New value: +"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model" - changed
Input schema / properties / events / descriptionPrevious value: -"With callerSearch: the `items` the `eventsWork` prompt returned (event pages your agent read). Omit it and we search events ourselves"New value: +"With callerSearch: the `items` the `eventsWork` prompt returned (event pages the calling agent read). Omit it and we search events ourselves" - changed
Input schema / properties / paid / descriptionPrevious value: -"Paid sources to add (Monid for LinkedIn posts by people at the company, treg for classified news and headcount), each under its budget. Default none; pass only when the user asked to spend on it"New value: +"Paid sources to add (Monid for LinkedIn posts by people at the company, treg for classified news and headcount), each under its budget. Default none"
- Changed
verify1 field changed- changed
Input schema / properties / confirm_token / descriptionPrevious value: -"The token a previous call returned in `confirm`, sent only after the user agreed to that cost; one use, same arguments."New value: +"The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments."
- Changed
warm_paths4 fields changed- changed
Input schema / properties / confirm_token / descriptionPrevious value: -"The token a previous call returned in `confirm`, sent only after the user agreed to that cost; one use, same arguments."New value: +"The token a previous call returned in `confirm`, standing for the user's agreement to that cost; one use, same arguments." - changed
Input schema / properties / connections / descriptionPrevious value: -"The user's LinkedIn Connections.csv (Settings → Data privacy → Get a copy of your data), for first-degree paths; names stay on this machine"New value: +"The user's LinkedIn Connections.csv (LinkedIn's data export, under Settings → Data privacy), for first-degree paths; names stay on this machine. Locally, ~/.salesmap/Connections.csv when omitted" - changed
Input schema / properties / context / descriptionPrevious value: -"What you already know about the user and their company, from your memory, CLAUDE.md and this conversation: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fill every field you know before calling; leave out what you don't, never invent it. The saved profile (seller_profile) fills the rest. These are the user's inputs, not findings."New value: +"The user's own facts about their company: who they are, the company, product, ICP, buyer roles, customers, competitors, deals won and lost, regions, exclusions. Fields left out come from the saved seller profile. These are the user's inputs, not findings." - changed
Input schema / properties / context / properties / warmPaths / descriptionPrevious value: -"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". Saving replaces the list: pass the whole list. Stays local; never sent to a model"New value: +"Warm paths the user confirmed (s48): company domain and who or how, e.g. \"Jane Doe (VP Ops), via Sam Lee\". A save replaces the whole list. Stays local; never sent to a model"
17 tool updates
- First observed
ai_adoption - First observed
discover - First observed
events - First observed
job - First observed
playbook - First observed
quote - First observed
rank - First observed
seller_profile - First observed
set_limits - First observed
signals - First observed
tech_scan - First observed
verify - First observed
verify_signal - First observed
warm_paths - First observed
watch - First observed
watch_changes - First observed
whoami
Related MCP Connectors
AI lead-finder for agents: pull scored leads, draft replies in your voice, work the pipeline.
GTM data for agents. Build and enrich lead lists, and watch for signals like job changes and hiring.
Audited SEC catalyst signals for agents — ranked filing intel with a public track record.
Decision-maker leads for one vertical (real estate or clinics).
Related MCP Servers
AlicenseNot gradedqualityBmaintenanceEnables AI agents to find intent-signaling buyers and run LinkedIn, email, and X outreach from connected accounts while respecting platform limits. Every reply is handed back to a human for approval or decision.3MIT- AlicenseNot gradedqualityCmaintenanceEnables AI agents to discover companies showing buying signals, enrich them with public homepage data, score them against custom rules, and draft review-ready briefs.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables agents to find leads, read buying signals, write and send email and LinkedIn outreach, handle replies, and report results, with built-in safety gates, approvals, limits, and compliance controls.5Apache 2.0
- FlicenseNot gradedqualityFmaintenanceFrench real estate data platform for AI agents. Identifies property owners likely to sell and tracks behavioral signals on active listings. Coverage: metropolitan France.-
Glama MCP Gateway
Add one secure layer between your agents and this server.