Prosp
Find B2B companies that fit your buyer, with their contacts and register IDs, and write outreach.
| Endpoint | https://api.prosp.cc/mcp-rpc (streamable-http) |
|---|---|
| Registry version | 1.0.2 |
| Now | 23 tools · grade D (57) · pin ts_55ed81a5d27678c1da187a04608d7662 · protocol 2025-06-18 |
| First / last listed | 2026-11-08 12:04 UTC / 2026-11-08 12:04 UTC |
| Grade over time | 2026-11-08: D (57), 23 tools |
Is this your server? Own a server? ToolFit hosted watch re-checks it every 24 h ($0.25 per 30 days) or 6 h ($0.60) and sends you an HMAC-signed webhook when its tools or grade change: POST https://api.youraitools.co/toolfit/v1/watch. To opt out, see About & opt-out.
Tools: find_prospects get_discovery_status get_discovery_results search_prospects get_prospect cancel_discovery acknowledge_prospects list_icps save_icp run_icp get_credit_balance get_credit_ledger list_circular_opportunities run_circular_opportunity set_odoo_credentials get_crm_connection disconnect_crm generate_message get_message_generation cancel_message_generation get_seller_profile set_seller_profile delete_seller_profile
find_prospects | Start a B2B prospect-discovery job. Debits 100 credits and returns a jobId immediately; the job runs asynchronously (~5-25 min). Poll get_discovery_status with the jobId, then call get_discovery_results when it reaches a terminal state. params: criteria* |
get_discovery_status | Poll a discovery job by its jobId. Returns the lifecycle state (queued, processing, completed, failed, exhausted), `total_prospects` (the canonical count of validated prospects delivered so far — the SAME field name get_discovery_results carries, so you can group/count across both; `prospectsFound` is a deprecated alias of it) and `target` counts, and `found`: the prospect DOMAINS discovered so fa params: job_id*, cursor |
get_discovery_results | Fetch the result summary + discovered companies (with verified contacts) for a jobId. Call once get_discovery_status reports a terminal state. params: job_id* |
search_prospects | Semantic free-text search over the companies you have already discovered. Does not run a new discovery and does not cost credits. Returns LEAN prospect SUMMARIES (domain, name, industry, size, location, employee_count, logo, a short description and a semantic_score) — not the full record. To get every field for one company (contacts, emails, registry data, social profiles, ...), call get_prospect( params: query*, limit, cursor |
get_prospect | Fetch the FULL record for one already-discovered company by its `domain` — the detail behind a `search_prospects` summary or a `found[]` domain. Returns every field (contacts, personal + company emails, registry data, address, social profiles, scores, description), not the lean summary. Does not run a new discovery and does not cost credits. A domain you have not discovered comes back as a structu params: domain* |
cancel_discovery | Cancel a running discovery job by its jobId, freeing its slot so a new find_prospects can start. Credits are refunded ONLY when the run had delivered zero prospects at cancel time; if prospects were already delivered you keep them and are not refunded (they stay retrievable via get_discovery_results). Only the job's owner may cancel; cancelling an already-finished job is a harmless no-op that retu params: job_id* |
acknowledge_prospects | Mark one or more company domains as delivered so they are not returned again in future discoveries or searches. Pass the `domains` list. Job-blind: each domain is acknowledged across ALL your discoveries. Idempotent — an unknown or already-acknowledged domain is a harmless no-op that contributes 0 to the returned count. Does not cost credits. params: domains* |
list_icps | List your saved ICPs (Ideal Customer Profiles) — reusable discovery criteria you can re-run by id. Each entry carries its `icpId`, optional `name`, and stored `criteria`. Pass an `icpId` to run_icp to start a discovery from it. Does not cost credits. params: none |
save_icp | Save a reusable ICP (Ideal Customer Profile) from an optional display `name` plus discovery `criteria` (same shape as find_prospects). Returns the stored ICP with a server-assigned `icpId` you can later pass to run_icp. Saving does NOT run a discovery and does not cost credits. params: icp* |
run_icp | Start a discovery from a saved ICP by its `icpId` (get one from list_icps or save_icp). Debits 100 credits and returns a jobId immediately; the job runs asynchronously (~5-25 min) — poll get_discovery_status, then get_discovery_results, exactly as for find_prospects. An unknown icpId is rejected and the debit is refunded. params: icp_id* |
get_credit_balance | Return your remaining credit balance and the per-job cost (100 credits). params: none |
get_credit_ledger | Show your credit transaction history: every debit and refund behind the current balance, most recent first. Each entry has a `type` ('debit' or 'refund'), the `job_id` it belongs to, the `amount`, a `reason` and a `timestamp`. Use this to explain WHY the balance is what it is — e.g. a job that debited 100 credits and was then refunded on exhaustion/failure shows up as a matching debit + refund pai params: limit |
list_circular_opportunities | List circular-economy opportunities inferred from the customer's OWN stored business profile: for each, the flow, asset, spare capacity or capability it rests on and the kind of company that completes it. Does not run a discovery and does not cost credits. The list is dated by `computed_at` — when it was DERIVED, not when you asked — and is never padded, so an empty list means nothing is well-grou params: none |
run_circular_opportunity | Start a counterpart search for one circular opportunity, by the `handle` from list_circular_opportunities. Debits credits and returns a jobId immediately; poll get_discovery_status then get_discovery_results exactly as for find_prospects. What is searched for is derived server-side from the graded opportunity — you pass a handle, not criteria.
When the entry has `requires_resource_confirmation: t params: handle*, confirmed_resource |
set_odoo_credentials | Connect your own Odoo CRM so your discovered prospects sync into it. Provide your Odoo URL, database name, API-user id and API key (generate one under Preferences -> Account Security -> New API Key). The connection is validated live against your Odoo before it is saved; your API key is stored encrypted and is NEVER shown back — present a masked confirmation (e.g. odoo_api_key: ****) to the user. C params: credentials* |
get_crm_connection | Show your currently configured Odoo CRM connection (Odoo URL, database, user id and status). Never shows the API key. Returns a 'not connected' error if you have not called set_odoo_credentials yet. params: none |
disconnect_crm | Disconnect your Odoo CRM. Future discovered prospects will no longer sync to it. Idempotent — safe to call even if nothing is connected. params: none |
generate_message | Registers one message generation and returns immediately with `202 Accepted`. Poll the
status resource named in `Location` (or honour `Retry-After`) until `status` is terminal;
the finished message is embedded in that resource. The API composes text; it does **not**
send it, and it does not replace the recipient's WhatsApp opt-in.
## What the message may say
Every candidate fact about the recipie params: recipient*, sender, channel*, objective*, constraints, callback_url |
get_message_generation | Always `200` for a known id owned by the caller; a non-terminal state is a status, not an
error. An unknown id, or one owned by another tenant, is `404`. While `status` is
non-terminal the response carries `Retry-After`. When `succeeded`, `result` is embedded
in this response (there is no redirect to a second resource). When `failed`, `error` is
the surface's `Error` shape with a snake_case code. params: id* |
cancel_message_generation | Moves a `queued`, `enriching` or `composing`
generation to the terminal state `canceled` with `canceled_reason` = `caller_request`.
**Refund rule:** the debit is returned if composition has not started (`status` is
`queued` or `enriching`); once `composing` has started the cancel is accepted but the
credits are not returned. Canceling an already `canceled` generation is idempotent and
returns it u params: id* |
get_seller_profile | The one seller profile the caller keeps: the business description and website used to ground
outreach messages. **No credit cost.** `derivation_status` says whether an offering was derived
from the website (`derived`), is still being derived (`pending`), or there is no website (`none`).
`404 not_found` when no profile is set.
params: none |
set_seller_profile | Replaces the whole profile with the body. **No credit cost.** Send at least one of
`description` or `website`. A `description` longer than 1500 characters is truncated to
1500 characters, the same cap the `/profile` bot command applies, so both surfaces store the
same record. A `website` is a URL or a bare domain; the site is crawled into the shared
knowledge base in the background, and `derived_o params: description, website |
delete_seller_profile | Removes the profile. Idempotent: deleting when no profile is set also returns `204`.
**No credit cost.**
params: none |
Entries describe changes in tool definitions. They are not statements about a server, its quality or its author. The grade measures how the tool definitions fit model providers (token cost, schema compatibility, confusable names) as scored by the ToolFit engine at the time of the listing. JSON: append .json. Opt-out: how or hello@youraitools.co.