cc.prosp/prosp

Prosp

Find B2B companies that fit your buyer, with their contacts and register IDs, and write outreach.

Endpointhttps://api.prosp.cc/mcp-rpc (streamable-http)
Registry version1.0.2
Now23 tools · grade D (57) · pin ts_55ed81a5d27678c1da187a04608d7662 · protocol 2025-06-18
First / last listed2026-11-08 12:04 UTC / 2026-11-08 12:04 UTC
Grade over time2026-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.

Timeline

First listing · 2026-11-08 12:04 UTC
23 tools, grade D (57)

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

Current tools (23)

find_prospectsStart 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_statusPoll 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_resultsFetch the result summary + discovered companies (with verified contacts) for a jobId. Call once get_discovery_status reports a terminal state.
params: job_id*
search_prospectsSemantic 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_prospectFetch 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_discoveryCancel 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_prospectsMark 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_icpsList 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_icpSave 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_icpStart 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_balanceReturn your remaining credit balance and the per-job cost (100 credits).
params: none
get_credit_ledgerShow 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_opportunitiesList 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_opportunityStart 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_credentialsConnect 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_connectionShow 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_crmDisconnect your Odoo CRM. Future discovered prospects will no longer sync to it. Idempotent — safe to call even if nothing is connected.
params: none
generate_messageRegisters 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_generationAlways `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_generationMoves 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_profileThe 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_profileReplaces 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_profileRemoves 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.