mcp-icp-fit-scorer
Score companies against an ideal customer profile (ICP) and inspect available scoring templates.
Score a company domain with
score_icp_fit, returningicp_score(0–100),icp_tier(A–D),lead_tag, per-signal breakdown, and optional explanation.Define the ICP using a prebuilt template, custom JSON
scoring_config, or plain-Englishicp_descriptionwith an LLM key/provider.Optionally fetch hiring and tech-stack signals before scoring.
Provide enrichment/signal inputs such as headcount, industry, revenue, funding, social presence, jobs/keywords, CRM/sequencing tool usage, and tech stack.
Tune scoring with tier thresholds, funding recency, minimum score output, previous score comparison, and max spend cap.
List the six available prebuilt ICP templates with
list_icp_templateslocally, without an Apify run or charge.Calls are read-only/idempotent but require
APIFY_TOKENand consume Apify credits.
Allows using OpenAI's API (e.g., GPT models) to interpret plain-English Ideal Customer Profile descriptions and convert them into scoring configurations.
ICP Fit Scorer MCP Server
An MCP server that scores a company against your ideal customer profile. It wraps the Mamba Labs ICP Fit Scorer actor on Apify and returns a Clay-ready flat JSON row to any MCP client.
What's Inside
Related MCP server: Company Firmographic Enricher MCP Server
What it does
Give it a company domain and a definition of your ICP, and it scores the company on weighted signals, returning a 0 to 100 score, an A to D tier, and a per-signal breakdown. Define your ICP three ways: a prebuilt template, a JSON scoring config, or a plain-English description (which uses your own LLM key). Turn on fetch_signals and the actor will gather hiring and tech-stack signals for you before scoring. One flat row, ready for Clay, a CRM, or an AI agent workflow. All of the scoring runs on Apify. This package is a thin client that calls the actor and hands back the result.
Quick start
You need Node.js 18 or newer and an Apify account with an API token.
Add this to your Claude Desktop config:
{
"mcpServers": {
"mamba-icp-scorer": {
"command": "npx",
"args": ["-y", "@mambalabsdev/mcp-icp-fit-scorer"],
"env": {
"APIFY_TOKEN": "your-apify-token"
}
}
}
}Get your token at https://console.apify.com/account/integrations, paste it in, and restart Claude Desktop. The score_icp_fit and list_icp_templates tools will be available.
Prerequisites
Node.js 18 or newer
An Apify account with an API token
Example prompts
"Score clay.com against the b2b_saas template and fetch its signals."
"How well does stripe.com fit an ICP of mid-market fintech companies? Explain the score."
"Score figma.com with my scoring config and include the per-signal breakdown."
"Rate openai.com against this ICP description: enterprise AI teams hiring for go-to-market."
Inputs
Every input the tool accepts, generated from the server's own tool list.
score_icp_fit
Input | Type | Required | Description |
| string | yes | The primary domain of the company to score. Example: clay.com |
| string | no | Optional display name of the company. |
| one of | no | Name of a prebuilt scoring config, one of the six the actor ships: full_signal, saas_outbound, b2b_services, fintech, smb_local, enterprise. Alternative to scoring_config or icp_description. Call list_icp_templates to see them. |
| object | no | JSON object of scoring weights. Alternative to template or icp_description. |
| string | no | Plain-English description of your target ICP. Requires llm_api_key. Alternative to template or scoring_config. |
| string | no | Your OpenAI or Anthropic API key. Required only when using icp_description. |
| one of | no | LLM provider to use with icp_description: openai or anthropic. |
| boolean | no | If true, the actor fetches hiring and tech-stack signals for the company automatically before scoring. |
| boolean | no | If true, adds a score_explanation string to the output describing how the score was derived. |
| object | no | Optional. Minimum score for each tier as { "tier_a": number, "tier_b": number, "tier_c": number }. Scores at or above tier_a are A, tier_b are B, tier_c are C, else D. Defaults to 80 / 60 / 40. |
| integer | no | Optional. How recent a funding round must be to count for the recently_funded signal, in days. Defaults to 540 (18 months). |
| integer | no | If set, rows scoring below this threshold are skipped from output (not pushed to dataset). Skipped rows are logged only. |
| integer | no | Previous ICP score for this company. If provided, output includes score_change and score_trend fields. |
| string | no | Whether the company is actively hiring for GTM/sales roles. Accepts a boolean-like string ("true"/"false"). Sent as a string for Clay compatibility and coerced to boolean at runtime. |
| string | no | Number of open GTM/sales roles. Scores via the gtm_role_count_strong signal when at or above min_gtm_roles (default 2). Accepts a numeric string (e.g. "8"). Sent as a string for Clay compatibility and coerced to integer at runtime. |
| string | no | Whether the company uses HubSpot. Accepts a boolean-like string ("true"/"false"). Sent as a string for Clay compatibility and coerced to boolean at runtime. |
| string | no | Whether the company uses Salesforce. Accepts a boolean-like string ("true"/"false"). Sent as a string for Clay compatibility and coerced to boolean at runtime. |
| string | no | Whether the company uses Clay. Accepts a boolean-like string ("true"/"false"). Sent as a string for Clay compatibility and coerced to boolean at runtime. |
| string | no | Whether any CRM was detected. Accepts a boolean-like string ("true"/"false") or any non-empty CRM name (e.g. "Salesforce"). Sent as a string for Clay compatibility and coerced to boolean at runtime. Auto-derived from uses_hubspot/uses_salesforce if not set. |
| string | no | Whether a sales sequencing tool (Outreach, SalesLoft, Apollo, Lemlist) was detected. Accepts a boolean-like string ("true"/"false") or any non-empty tool name (e.g. "Outreach"). Sent as a string for Clay compatibility and coerced to boolean at runtime. |
| string | no | Comma-separated list of technologies. Used to auto-detect CRM/sequencing tools if booleans are not set. |
| string | no | Current employee headcount. Accepts a numeric string (e.g. "3000"). Sent as a string for Clay compatibility and coerced to integer at runtime. |
| integer | no | Minimum headcount for the headcount_in_range signal. |
| integer | no | Maximum headcount for the headcount_in_range signal. |
| boolean | no | Override: whether headcount is in your target range. |
| string | no | Firmographic employee band from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g), e.g. "201-500". Scores via employee_band_match when it is in target_employee_bands. |
| string | no | Estimated annual revenue in dollars from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Scores via revenue_in_range. Accepts a numeric string (e.g. "50000000"). Coerced to integer at runtime. |
| string | no | Headquarters location from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Carried for reference; not currently scored. |
| string | no | Year the company was founded, from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Carried for reference; not currently scored. Accepts a numeric string (e.g. "2015"). |
| boolean | no | Override: whether the company was recently funded (within funded_within_days, default 540). |
| string | no | ISO date of last funding round (legacy field; latest_funding_date is preferred). Used to auto-detect recently_funded if the boolean is not set. |
| string | no | ISO date of the latest funding round (from C1 Funding & Press Signal Scanner when it ships). Drives recently_funded against funded_within_days. |
| string | no | Dollar amount of the latest funding round (from C1 when it ships). Scores via well_funded when at or above min_funding_amount (default 1000000). Accepts a numeric string (e.g. "50000000"). |
| string | no | Funding stage (e.g. seed, series_a, series_b, growth). Used to infer recently_funded. |
| string | no | The company's industry (from the Company Firmographic Enricher, Actor ID YlUtLWjfPpqykmB8g). |
| boolean | no | Override: whether the company's industry matches your target list. |
| string | no | Comma-separated list of target industries for the industry_match signal. |
| string | no | Number of official social platforms found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Scores via social_presence when at or above min_social_platforms (default 2). Accepts a numeric string. |
| string | no | Total social followers across platforms, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Scores via strong_social_following when at or above min_total_followers (default 1000). Accepts a numeric string. |
| string | no | Whether a company LinkedIn page was found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h) or the Domain to LinkedIn URL Resolver (Actor ID 3HtnSaqPHOg1Qg5gx). Contributes to social_presence. Accepts a boolean-like string. |
| string | no | Whether a company X/Twitter profile was found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Contributes to social_presence. Accepts a boolean-like string. |
| string | no | Number of open jobs found, from the Job Board Keyword Signal Scanner (Actor ID 4DvqpvhMR74NLcDDY). Scores via active_hiring_volume when at or above min_job_count (default 3). Accepts a numeric string. |
| string | no | Number of target-keyword matches found, from the Job Board Keyword Signal Scanner (Actor ID 4DvqpvhMR74NLcDDY). Scores via keyword_signal_match when at or above min_keyword_matches (default 1). Accepts a numeric string. |
| number | no | Optional spending cap for this call, in USD. The actor stops before any charge that would take the run past this amount and keeps every row already charged. |
list_icp_templates
No inputs. Returns the six prebuilt template names score_icp_fit accepts, with the actor's note on how they differ. It answers locally: no Apify run, no token, and no charge.
Define your ICP with exactly one of template, scoring_config, or icp_description.
This server exposes the single-company scoring path. The actor also supports batch inputs (a dataset or CSV of companies) and a results webhook. For those, run the actor directly on Apify.
Output
The tool returns the actor's flat JSON row for the scored company, including icp_score (0 to 100), icp_tier (A to D), the per-signal breakdown, and an optional explanation. See the Apify Store page for the full output schema.
Example output
{
"company_domain": "ramp.com",
"icp_score": 87,
"icp_tier": "A",
"lead_tag": "priority",
"score_hiring": 25,
"score_tech_stack": 22,
"score_headcount": 20,
"score_funding": 20,
"score_industry": 0,
"run_date": "2026-05-28"
}Features
User-defined JSON scoring config with custom weights
Returns icp_score (0 to 100), icp_tier (A to D), and lead_tag
Per-signal point breakdown: hiring, tech stack, headcount, funding, industry
Replaces 6+ manual formula columns in Clay
Pricing
You pay per event on Apify, billed to your own Apify account. Prices from the live pricing record, read 2026-10-16:
Event | Price per event (USD) | Fires when |
| $0.05 on the Free plan, down to $0.0425 on higher Apify plans | Single result in the default dataset. |
| $0.00005 | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
The actor's Apify page carries the current prices. Running this server consumes Apify credits.
How each call runs
Each call starts the actor run, polls it until it finishes, then reads the dataset. The run is allowed 1,800 seconds. If the run is still going when this call stops waiting, the call returns the run id and a console link instead of a timeout, so the result is never lost.
Full actor documentation
This server is a thin client and holds no scoring logic. For the complete input and output reference, pricing, and run history, see the Apify Store page:
https://apify.com/mambalabs/icp-account-lead-scoring-fit-scorer-0-100-for-clay
Mamba Labs GTM Suite
This server is one of 58 Mamba Labs MCP servers, each backed by a dedicated Apify actor and published under @mambalabsdev on npm. The ones closest to this server:
Actor | Immutable Actor ID |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
To get twenty one of them in one install, use @mambalabsdev/mcp-gtm-suite.
Built by Mamba Labs | npm | Apify Store
License
MIT
Built by Mamba Labs. https://apify.com/mambalabs
Available Tools
2 toolslist_icp_templatesList ICP TemplatesARead-onlyIdempotent
List the prebuilt ICP scoring templates score_icp_fit accepts in its template input, with the actor's own note on how they differ. Answers locally from the server: no Apify run, no token needed, and no charge. Use it before score_icp_fit when you have no scoring_config or icp_description of your own.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld=false, so the safety profile is covered. The description goes further with cost/auth/latency facts the annotations cannot convey: 'answers locally from the server: no Apify run, no token needed, and no charge.' That is genuine added context, though return shape/ordering is left implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what it returns and then the decision rule for using it. Every clause earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only helper with no output schema, the description covers what is returned (templates plus the actor's note on how they differ) and when to call it. It stops short of describing result format or size, a minor gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is no parameter semantics to document. The description correctly implies the call is argument-free by framing it as a local lookup.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list prebuilt ICP scoring templates) and immediately ties the resource to the sibling that consumes it (score_icp_fit's template input). An agent can distinguish this from score_icp_fit without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger condition: 'Use it before score_icp_fit when you have no scoring_config or icp_description of your own.' It names the alternative tool and the exact circumstance that selects this one, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
score_icp_fitScore ICP FitARead-onlyIdempotent
Score a company against your ideal customer profile (ICP) using weighted signals. Returns a 0 to 100 icp_score, an A to D icp_tier, and a per-signal breakdown as a flat, Clay-ready JSON row. Define your ICP with a prebuilt template, a JSON scoring_config, or a plain-English icp_description (which requires llm_api_key). Read-only; requires an APIFY_TOKEN and consumes Apify credits per call.
| Name | Required | Description | Default |
|---|---|---|---|
| industry | No | The company's industry (from the Company Firmographic Enricher, Actor ID YlUtLWjfPpqykmB8g). | |
| template | No | Name of a prebuilt scoring config, one of the six the actor ships: full_signal, saas_outbound, b2b_services, fintech, smb_local, enterprise. Alternative to scoring_config or icp_description. Call list_icp_templates to see them. | |
| headcount | No | Current employee headcount. Accepts a numeric string (e.g. "3000"). Sent as a string for Clay compatibility and coerced to integer at runtime. | |
| job_count | No | Number of open jobs found, from the Job Board Keyword Signal Scanner (Actor ID 4DvqpvhMR74NLcDDY). Scores via active_hiring_volume when at or above min_job_count (default 3). Accepts a numeric string. | |
| uses_clay | No | Whether the company uses Clay. Accepts a boolean-like string ("true"/"false"). Sent as a string for Clay compatibility and coerced to boolean at runtime. | |
| tech_stack | No | Comma-separated list of technologies. Used to auto-detect CRM/sequencing tools if booleans are not set. | |
| has_twitter | No | Whether a company X/Twitter profile was found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Contributes to social_presence. Accepts a boolean-like string. | |
| hq_location | No | Headquarters location from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Carried for reference; not currently scored. | |
| llm_api_key | No | Your OpenAI or Anthropic API key. Required only when using icp_description. | |
| company_name | No | Optional display name of the company. | |
| crm_detected | No | Whether any CRM was detected. Accepts a boolean-like string ("true"/"false") or any non-empty CRM name (e.g. "Salesforce"). Sent as a string for Clay compatibility and coerced to boolean at runtime. Auto-derived from uses_hubspot/uses_salesforce if not set. | |
| founded_year | No | Year the company was founded, from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Carried for reference; not currently scored. Accepts a numeric string (e.g. "2015"). | |
| has_linkedin | No | Whether a company LinkedIn page was found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h) or the Domain to LinkedIn URL Resolver (Actor ID 3HtnSaqPHOg1Qg5gx). Contributes to social_presence. Accepts a boolean-like string. | |
| llm_provider | No | LLM provider to use with icp_description: openai or anthropic. | |
| uses_hubspot | No | Whether the company uses HubSpot. Accepts a boolean-like string ("true"/"false"). Sent as a string for Clay compatibility and coerced to boolean at runtime. | |
| employee_band | No | Firmographic employee band from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g), e.g. "201-500". Scores via employee_band_match when it is in target_employee_bands. | |
| fetch_signals | No | If true, the actor fetches hiring and tech-stack signals for the company automatically before scoring. | |
| funding_stage | No | Funding stage (e.g. seed, series_a, series_b, growth). Used to infer recently_funded. | |
| headcount_max | No | Maximum headcount for the headcount_in_range signal. | |
| headcount_min | No | Minimum headcount for the headcount_in_range signal. | |
| company_domain | Yes | The primary domain of the company to score. Example: clay.com | |
| gtm_role_count | No | Number of open GTM/sales roles. Scores via the gtm_role_count_strong signal when at or above min_gtm_roles (default 2). Accepts a numeric string (e.g. "8"). Sent as a string for Clay compatibility and coerced to integer at runtime. | |
| industry_match | No | Override: whether the company's industry matches your target list. | |
| previous_score | No | Previous ICP score for this company. If provided, output includes score_change and score_trend fields. | |
| scoring_config | No | JSON object of scoring weights. Alternative to template or icp_description. | |
| icp_description | No | Plain-English description of your target ICP. Requires llm_api_key. Alternative to template or scoring_config. | |
| recently_funded | No | Override: whether the company was recently funded (within funded_within_days, default 540). | |
| tier_thresholds | No | Optional. Minimum score for each tier as { "tier_a": number, "tier_b": number, "tier_c": number }. Scores at or above tier_a are A, tier_b are B, tier_c are C, else D. Defaults to 80 / 60 / 40. | |
| total_followers | No | Total social followers across platforms, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Scores via strong_social_following when at or above min_total_followers (default 1000). Accepts a numeric string. | |
| uses_salesforce | No | Whether the company uses Salesforce. Accepts a boolean-like string ("true"/"false"). Sent as a string for Clay compatibility and coerced to boolean at runtime. | |
| revenue_estimate | No | Estimated annual revenue in dollars from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Scores via revenue_in_range. Accepts a numeric string (e.g. "50000000"). Coerced to integer at runtime. | |
| gtm_hiring_signal | No | Whether the company is actively hiring for GTM/sales roles. Accepts a boolean-like string ("true"/"false"). Sent as a string for Clay compatibility and coerced to boolean at runtime. | |
| last_funding_date | No | ISO date of last funding round (legacy field; latest_funding_date is preferred). Used to auto-detect recently_funded if the boolean is not set. | |
| seq_tool_detected | No | Whether a sales sequencing tool (Outreach, SalesLoft, Apollo, Lemlist) was detected. Accepts a boolean-like string ("true"/"false") or any non-empty tool name (e.g. "Outreach"). Sent as a string for Clay compatibility and coerced to boolean at runtime. | |
| target_industries | No | Comma-separated list of target industries for the industry_match signal. | |
| funded_within_days | No | Optional. How recent a funding round must be to count for the recently_funded signal, in days. Defaults to 540 (18 months). | |
| headcount_in_range | No | Override: whether headcount is in your target range. | |
| include_explanation | No | If true, adds a score_explanation string to the output describing how the score was derived. | |
| keyword_match_count | No | Number of target-keyword matches found, from the Job Board Keyword Signal Scanner (Actor ID 4DvqpvhMR74NLcDDY). Scores via keyword_signal_match when at or above min_keyword_matches (default 1). Accepts a numeric string. | |
| latest_funding_date | No | ISO date of the latest funding round (from C1 Funding & Press Signal Scanner when it ships). Drives recently_funded against funded_within_days. | |
| min_score_to_output | No | If set, rows scoring below this threshold are skipped from output (not pushed to dataset). Skipped rows are logged only. | |
| latest_funding_amount | No | Dollar amount of the latest funding round (from C1 when it ships). Scores via well_funded when at or above min_funding_amount (default 1000000). Accepts a numeric string (e.g. "50000000"). | |
| social_platforms_found | No | Number of official social platforms found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Scores via social_presence when at or above min_social_platforms (default 2). Accepts a numeric string. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so safety is covered. The description adds real context beyond them: it requires an APIFY_TOKEN, consumes Apify credits per call, and makes llm_api_key mandatory only for icp_description. It does not discuss failure modes or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with purpose then outputs then configuration modes then operational cost. Every sentence carries information; no padding. Slightly dense rather than perfectly optimized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 43-parameter tool with no output schema, the description does the essential work: it names the return shape (0-100 score, A-D tier, per-signal flat row) and the three config paths. It omits anything about how weighted signals combine or default thresholds, which it could have sketched, but nothing critical for invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all 43 parameters are already documented in the schema, including the 'Alternative to...' relationships between template, scoring_config, and icp_description. The description restates that mutual exclusivity but adds no syntax or coercion detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Score a company against your ideal customer profile') and immediately names the concrete outputs (icp_score, icp_tier, per-signal breakdown). An agent can distinguish this from the sibling list_icp_templates, which only enumerates configs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for the three mutually exclusive ways to define an ICP (prebuilt template, JSON scoring_config, or plain-English icp_description), plus the conditional llm_api_key requirement for the last one. It stops short of explicitly routing the agent to list_icp_templates for discovery, so it is not quite a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.0.6- Added
list_icp_templates - Changed
score_icp_fit37 fields changed- added
Input schema / properties / crm_detectedAdded value: +{ + "description": "Whether any CRM was detected. Accepts a boolean-like string (\"true\"/\"false\") or any non-empty CRM name (e.g. \"Salesforce\"). Sent as a string for Clay compatibility and coerced to boolean at runtime. Auto-derived from uses_hubspot/uses_salesforce if not set.", + "type": "string" +} - added
Input schema / properties / employee_bandAdded value: +{ + "description": "Firmographic employee band from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g), e.g. \"201-500\". Scores via employee_band_match when it is in target_employee_bands.", + "type": "string" +} - added
Input schema / properties / founded_yearAdded value: +{ + "description": "Year the company was founded, from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Carried for reference; not currently scored. Accepts a numeric string (e.g. \"2015\").", + "type": "string" +} - added
Input schema / properties / funded_within_daysAdded value: +{ + "description": "Optional. How recent a funding round must be to count for the recently_funded signal, in days. Defaults to 540 (18 months).", + "type": "integer" +} - added
Input schema / properties / funding_stageAdded value: +{ + "description": "Funding stage (e.g. seed, series_a, series_b, growth). Used to infer recently_funded.", + "type": "string" +} - added
Input schema / properties / gtm_hiring_signalAdded value: +{ + "description": "Whether the company is actively hiring for GTM/sales roles. Accepts a boolean-like string (\"true\"/\"false\"). Sent as a string for Clay compatibility and coerced to boolean at runtime.", + "type": "string" +} - added
Input schema / properties / gtm_role_countAdded value: +{ + "description": "Number of open GTM/sales roles. Scores via the gtm_role_count_strong signal when at or above min_gtm_roles (default 2). Accepts a numeric string (e.g. \"8\"). Sent as a string for Clay compatibility and coerced to integer at runtime.", + "type": "string" +} - added
Input schema / properties / has_linkedinAdded value: +{ + "description": "Whether a company LinkedIn page was found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h) or the Domain to LinkedIn URL Resolver (Actor ID 3HtnSaqPHOg1Qg5gx). Contributes to social_presence. Accepts a boolean-like string.", + "type": "string" +} - added
Input schema / properties / has_twitterAdded value: +{ + "description": "Whether a company X/Twitter profile was found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Contributes to social_presence. Accepts a boolean-like string.", + "type": "string" +} - added
Input schema / properties / headcountAdded value: +{ + "description": "Current employee headcount. Accepts a numeric string (e.g. \"3000\"). Sent as a string for Clay compatibility and coerced to integer at runtime.", + "type": "string" +} - added
Input schema / properties / headcount_in_rangeAdded value: +{ + "description": "Override: whether headcount is in your target range.", + "type": "boolean" +} - added
Input schema / properties / headcount_maxAdded value: +{ + "description": "Maximum headcount for the headcount_in_range signal.", + "type": "integer" +} - added
Input schema / properties / headcount_minAdded value: +{ + "description": "Minimum headcount for the headcount_in_range signal.", + "type": "integer" +} - added
Input schema / properties / hq_locationAdded value: +{ + "description": "Headquarters location from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Carried for reference; not currently scored.", + "type": "string" +} - added
Input schema / properties / industryAdded value: +{ + "description": "The company's industry (from the Company Firmographic Enricher, Actor ID YlUtLWjfPpqykmB8g).", + "type": "string" +} - added
Input schema / properties / industry_matchAdded value: +{ + "description": "Override: whether the company's industry matches your target list.", + "type": "boolean" +} - added
Input schema / properties / job_countAdded value: +{ + "description": "Number of open jobs found, from the Job Board Keyword Signal Scanner (Actor ID 4DvqpvhMR74NLcDDY). Scores via active_hiring_volume when at or above min_job_count (default 3). Accepts a numeric string.", + "type": "string" +} - added
Input schema / properties / keyword_match_countAdded value: +{ + "description": "Number of target-keyword matches found, from the Job Board Keyword Signal Scanner (Actor ID 4DvqpvhMR74NLcDDY). Scores via keyword_signal_match when at or above min_keyword_matches (default 1). Accepts a numeric string.", + "type": "string" +} - added
Input schema / properties / last_funding_dateAdded value: +{ + "description": "ISO date of last funding round (legacy field; latest_funding_date is preferred). Used to auto-detect recently_funded if the boolean is not set.", + "type": "string" +} - added
Input schema / properties / latest_funding_amountAdded value: +{ + "description": "Dollar amount of the latest funding round (from C1 when it ships). Scores via well_funded when at or above min_funding_amount (default 1000000). Accepts a numeric string (e.g. \"50000000\").", + "type": "string" +} - added
Input schema / properties / latest_funding_dateAdded value: +{ + "description": "ISO date of the latest funding round (from C1 Funding & Press Signal Scanner when it ships). Drives recently_funded against funded_within_days.", + "type": "string" +} - added
Input schema / properties / llm_provider / enumAdded value: +[ + "openai", + "anthropic" +] - added
Input schema / properties / min_score_to_outputAdded value: +{ + "description": "If set, rows scoring below this threshold are skipped from output (not pushed to dataset). Skipped rows are logged only.", + "type": "integer" +} - added
Input schema / properties / previous_scoreAdded value: +{ + "description": "Previous ICP score for this company. If provided, output includes score_change and score_trend fields.", + "type": "integer" +} - added
Input schema / properties / recently_fundedAdded value: +{ + "description": "Override: whether the company was recently funded (within funded_within_days, default 540).", + "type": "boolean" +} - added
Input schema / properties / revenue_estimateAdded value: +{ + "description": "Estimated annual revenue in dollars from the Company Firmographic Enricher (Actor ID YlUtLWjfPpqykmB8g). Scores via revenue_in_range. Accepts a numeric string (e.g. \"50000000\"). Coerced to integer at runtime.", + "type": "string" +} - added
Input schema / properties / seq_tool_detectedAdded value: +{ + "description": "Whether a sales sequencing tool (Outreach, SalesLoft, Apollo, Lemlist) was detected. Accepts a boolean-like string (\"true\"/\"false\") or any non-empty tool name (e.g. \"Outreach\"). Sent as a string for Clay compatibility and coerced to boolean at runtime.", + "type": "string" +} - added
Input schema / properties / social_platforms_foundAdded value: +{ + "description": "Number of official social platforms found, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Scores via social_presence when at or above min_social_platforms (default 2). Accepts a numeric string.", + "type": "string" +} - added
Input schema / properties / target_industriesAdded value: +{ + "description": "Comma-separated list of target industries for the industry_match signal.", + "type": "string" +} - added
Input schema / properties / tech_stackAdded value: +{ + "description": "Comma-separated list of technologies. Used to auto-detect CRM/sequencing tools if booleans are not set.", + "type": "string" +} - changed
Input schema / properties / template / descriptionPrevious value: -"Name of a prebuilt scoring config. Alternative to scoring_config or icp_description."New value: +"Name of a prebuilt scoring config, one of the six the actor ships: full_signal, saas_outbound, b2b_services, fintech, smb_local, enterprise. Alternative to scoring_config or icp_description. Call list_icp_templates to see them." - added
Input schema / properties / template / enumAdded value: +[ + "full_signal", + "saas_outbound", + "b2b_services", + "fintech", + "smb_local", + "enterprise" +] - added
Input schema / properties / tier_thresholdsAdded value: +{ + "additionalProperties": {}, + "description": "Optional. Minimum score for each tier as { \"tier_a\": number, \"tier_b\": number, \"tier_c\": number }. Scores at or above tier_a are A, tier_b are B, tier_c are C, else D. Defaults to 80 / 60 / 40.", + "type": "object" +} - added
Input schema / properties / total_followersAdded value: +{ + "description": "Total social followers across platforms, from the Company Social Presence Mapper (Actor ID 4k6CCemkgBDz18m2h). Scores via strong_social_following when at or above min_total_followers (default 1000). Accepts a numeric string.", + "type": "string" +} - added
Input schema / properties / uses_clayAdded value: +{ + "description": "Whether the company uses Clay. Accepts a boolean-like string (\"true\"/\"false\"). Sent as a string for Clay compatibility and coerced to boolean at runtime.", + "type": "string" +} - added
Input schema / properties / uses_hubspotAdded value: +{ + "description": "Whether the company uses HubSpot. Accepts a boolean-like string (\"true\"/\"false\"). Sent as a string for Clay compatibility and coerced to boolean at runtime.", + "type": "string" +} - added
Input schema / properties / uses_salesforceAdded value: +{ + "description": "Whether the company uses Salesforce. Accepts a boolean-like string (\"true\"/\"false\"). Sent as a string for Clay compatibility and coerced to boolean at runtime.", + "type": "string" +}
1 tool update
v1.0.3- First observed
score_icp_fit
TDQS
Scored across 2 tools
The two tools have clearly distinct purposes: list_icp_templates is a local, free discovery helper while score_icp_fit performs the actual scoring. There is no overlap in function or confusion about when to use each.
Both names follow a consistent verb_noun snake_case pattern (list_icp_templates, score_icp_fit). The convention is predictable and readable throughout.
With only two tools, the surface is thin: one is essentially a metadata helper for the other, leaving a single real operation. It is well-scoped for a narrow purpose but feels minimal rather than complete.
The core scoring workflow is covered, including three ways to define an ICP (template, JSON config, or plain-English description). However, there is no batch scoring, no custom template creation/management, and no way to save or retrieve past scores, which are notable gaps for a scoring service.
Maintenance
Related MCP Connectors
Enrich any domain into a full company profile with firmographics and buying signals.
Sales intelligence for B2B SMEs — lead scoring, ICP fit, CRM enrichment & writeback.
Score, rank and prioritize an existing Italian B2B lead list into explained JSON decisions.
Score an IP, email, phone, domain or device for fraud in one call, with the signals behind it.
Related MCP Servers
- AlicenseAqualityAmaintenanceDetects a company's technology stack from its public web presence. Returns structured tech signals for sales targeting and competitive analysis.1251 npm1MIT
- AlicenseAqualityAmaintenanceEnables enriching company domains into structured firmographics including employee band, industry, HQ, founded year, revenue estimate, logo, and description, with source provenance and data completeness scoring.1226 npm1MIT
- AlicenseAqualityAmaintenanceResolves any combination of company name, domain, or LinkedIn URL into the canonical company identity (name, domain, LinkedIn URL) with confidence scores and match method.1123 npmMIT
- AlicenseAqualityCmaintenanceEnables enrichment of company domains with verified firmographic signals including tech stack, hiring activity, email infrastructure, and SOC 2 compliance, returning compact typed JSON for AI agents.31 npmMIT