@sellable/mcp 0.1.229 → 0.1.231

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2422,11 +2422,12 @@ function normalizeProspeoCompanySearchInputForMcp(input) {
2422
2422
  removeEmptyObjectFilter(filters, "company_lookalike");
2423
2423
  }
2424
2424
  }
2425
+ relaxMcpSeedMatchAll(filters, seedDomains.length + seedCompanies.length);
2425
2426
  normalizeMcpCompanyKeywords(filters);
2426
2427
  normalizeMcpCompanyWebsiteSearch(filters);
2427
2428
  normalizeMcpCompanyIcp(filters);
2428
2429
  stripMcpDuplicateCompanyIndustry(filters);
2429
- stripMcpSeededLookalikeRiskyRefinements(filters, hasSeeds);
2430
+ stripMcpSeededLookalikeRiskyRefinements(filters, hasSeeds || hasMcpCompanyLookalikeOids(filters));
2430
2431
  stripMcpKeyCustomerCompanionFilters(filters);
2431
2432
  return {
2432
2433
  ...input,
@@ -2567,6 +2568,20 @@ function stripMcpDuplicateCompanyIndustry(filters) {
2567
2568
  delete filters.company_industry;
2568
2569
  }
2569
2570
  }
2571
+ function relaxMcpSeedMatchAll(filters, seedCount) {
2572
+ if (seedCount <= 1 || !isPlainObject(filters.company_lookalike)) {
2573
+ return;
2574
+ }
2575
+ if (filters.company_lookalike.match_all === true) {
2576
+ delete filters.company_lookalike.match_all;
2577
+ }
2578
+ }
2579
+ function hasMcpCompanyLookalikeOids(filters) {
2580
+ const lookalike = filters.company_lookalike;
2581
+ return (isPlainObject(lookalike) &&
2582
+ Array.isArray(lookalike.company_oids) &&
2583
+ lookalike.company_oids.some((oid) => typeof oid === "string" && oid.length > 0));
2584
+ }
2570
2585
  function stripMcpSeededLookalikeRiskyRefinements(filters, hasSeeds) {
2571
2586
  if (!hasSeeds || !isPlainObject(filters.company_lookalike)) {
2572
2587
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.229",
3
+ "version": "0.1.231",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -257,8 +257,8 @@ company/domain plus `company_lookalike.minimum_tier` and simple confirmed
257
257
  attributes, headcount, or industry. Do not add `company_website_search`,
258
258
  `company_keywords`, or `company_icp` until the account sample proves the seed
259
259
  works. Do not send placeholder seed names like `another approved best-customer seed`,
260
- and only use concrete companies or domains you actually resolved. Prefer `seedDomains`
261
- over `seedCompanies`; do not mix both in one seeded lookalike call. Do not combine `has_api` and `has_sso` in the first seeded lookalike call; start with `has_api`
260
+ and only use concrete companies or domains you actually resolved. If another approved seed is referenced but not named, ask for it or run one seed without `match_all`; do not invent a second seed from examples, competitors, or exclusions. Prefer `seedDomains`
261
+ for single-seed lookalikes. For multi-seed `match_all` lookalikes, use concrete company names unless you already know the exact canonical Prospeo domains; do not mix both in one seeded lookalike call. Do not combine `has_api` and `has_sso` in the first seeded lookalike call; start with `has_api`
262
262
  and refine after a valid account sample if SSO still matters. Do not send `company_website_search.exclude_keywords` without a positive website include signal.
263
263
  Do not use `AI`, `API`, `GTM`, or `SaaS` as company keyword terms.
264
264
  Do not combine `company_key_customers` with ICP, website-search, keyword,
@@ -432,8 +432,8 @@ Use first for broad persona expansion, ABM/domain targeting, hiring-led targetin
432
432
  attributes, headcount, or industry. Do not add `company_website_search`,
433
433
  `company_keywords`, or `company_icp` until the account sample proves the seed
434
434
  works. Do not send placeholder seed names like `another approved best-customer seed`,
435
- and only use concrete companies or domains you actually resolved. Prefer `seedDomains`
436
- over `seedCompanies`; do not mix both in one seeded lookalike call. Do not combine `has_api` and `has_sso` in the first seeded lookalike call; start with
435
+ and only use concrete companies or domains you actually resolved. If another approved seed is referenced but not named, ask for it or run one seed without `match_all`; do not invent a second seed from examples, competitors, or exclusions. Prefer `seedDomains`
436
+ for single-seed lookalikes. For multi-seed `match_all` lookalikes, use concrete company names unless you already know the exact canonical Prospeo domains; do not mix both in one seeded lookalike call. Do not combine `has_api` and `has_sso` in the first seeded lookalike call; start with
437
437
  `has_api` and refine after a valid account sample if SSO still matters. Do not send `company_website_search.exclude_keywords` without a positive website include signal.
438
438
  - Do not use `company_intent`. Do not invent unsupported support-channel filters
439
439
  or AI Attribute guesses like phone/email/chat/ticket/social.
@@ -109,7 +109,13 @@ Avoidable-400 guardrails:
109
109
  - For seeded company lookalikes, keep the first call simple: seed company/domain + `company_lookalike.minimum_tier` + confirmed attributes, headcount, or industry. Do not add `company_website_search`, `company_keywords`, or `company_icp` until the account sample proves the seed works.
110
110
  - For seeded company lookalikes, do not combine `has_api` and `has_sso` in the first call; start with `has_api` and refine after a valid account sample if SSO still matters.
111
111
  - Do not send placeholder seed names such as `another approved best-customer seed`; use only concrete company names or domains you have actually resolved.
112
- - Prefer seed domains over seed company names. Do not mix `seedDomains` and `seedCompanies` in the same lookalike call; use concrete domains when available.
112
+ - If the user references another approved seed but does not name it, ask for the
113
+ seed or run a one-seed lookalike without `match_all`; do not invent a second
114
+ seed from examples, competitors, or exclusions.
115
+ - Prefer seed domains for single-seed lookalikes. For multi-seed `match_all`
116
+ lookalikes, use concrete company names unless you already know the exact
117
+ canonical Prospeo domains; guessed product or marketing domains can 400 with
118
+ `match_all`. Do not mix `seedDomains` and `seedCompanies` in the same call.
113
119
  - Do not send `company_website_search.exclude_keywords` without a positive website include signal.
114
120
  - For post-confirm people search, prefer `person_job_title.boolean_search` for long role synonym lists instead of many `person_job_title.include` values plus broad department/seniority filters.
115
121
 
@@ -256,7 +262,11 @@ Preference rules:
256
262
  - Run `company_key_customers` as a standalone first-pass filter. Do not combine `company_key_customers` with ICP, website-search, keyword, attribute, industry, or headcount filters until the standalone pass proves useful.
257
263
  - For seeded lookalikes, avoid first-call `company_website_search`, `company_keywords`, and `company_icp`; use resolved seeds plus lookalike tier and simple attributes/headcount/industry first.
258
264
  - For seeded lookalikes, avoid first-call `has_api` + `has_sso`; use one confirmed attribute first, then refine.
259
- - Prefer `seedDomains` over `seedCompanies`; do not mix both in one seeded lookalike call.
265
+ - Do not invent missing approved seeds. If a second seed is not named, ask for it
266
+ or run one seed without `match_all`.
267
+ - Prefer `seedDomains` for single-seed lookalikes. For multi-seed `match_all`
268
+ lookalikes, use concrete company names unless you know the exact canonical
269
+ Prospeo domains; do not mix both in one seeded lookalike call.
260
270
 
261
271
  ### Person Filters
262
272