@sellable/mcp 0.1.222 → 0.1.224

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.
@@ -1246,12 +1246,14 @@ export declare const leadToolDefinitions: ({
1246
1246
  type: string;
1247
1247
  items: {
1248
1248
  type: string;
1249
+ minLength: number;
1249
1250
  };
1250
1251
  };
1251
1252
  exclude: {
1252
1253
  type: string;
1253
1254
  items: {
1254
1255
  type: string;
1256
+ minLength: number;
1255
1257
  };
1256
1258
  };
1257
1259
  include_all: {
@@ -1613,6 +1615,7 @@ export declare const leadToolDefinitions: ({
1613
1615
  type: string;
1614
1616
  items: {
1615
1617
  type: string;
1618
+ enum: string[];
1616
1619
  };
1617
1620
  };
1618
1621
  other: {
@@ -1648,6 +1651,7 @@ export declare const leadToolDefinitions: ({
1648
1651
  };
1649
1652
  geographic_scope: {
1650
1653
  type: string;
1654
+ enum: string[];
1651
1655
  };
1652
1656
  };
1653
1657
  };
@@ -2384,12 +2388,14 @@ export declare const leadToolDefinitions: ({
2384
2388
  type: string;
2385
2389
  items: {
2386
2390
  type: string;
2391
+ minLength: number;
2387
2392
  };
2388
2393
  };
2389
2394
  exclude: {
2390
2395
  type: string;
2391
2396
  items: {
2392
2397
  type: string;
2398
+ minLength: number;
2393
2399
  };
2394
2400
  };
2395
2401
  include_all: {
@@ -2751,6 +2757,7 @@ export declare const leadToolDefinitions: ({
2751
2757
  type: string;
2752
2758
  items: {
2753
2759
  type: string;
2760
+ enum: string[];
2754
2761
  };
2755
2762
  };
2756
2763
  other: {
@@ -2786,6 +2793,7 @@ export declare const leadToolDefinitions: ({
2786
2793
  };
2787
2794
  geographic_scope: {
2788
2795
  type: string;
2796
+ enum: string[];
2789
2797
  };
2790
2798
  };
2791
2799
  };
@@ -177,10 +177,10 @@ const prospeoFundingFilterSchema = {
177
177
  };
178
178
  const prospeoCompanyKeywordsSchema = {
179
179
  type: "object",
180
- description: "Company keyword search",
180
+ description: 'Company keyword search. Prospeo requires keyword values to be at least 3 characters; use "artificial intelligence" instead of "AI".',
181
181
  properties: {
182
- include: { type: "array", items: { type: "string" } },
183
- exclude: { type: "array", items: { type: "string" } },
182
+ include: { type: "array", items: { type: "string", minLength: 3 } },
183
+ exclude: { type: "array", items: { type: "string", minLength: 3 } },
184
184
  include_all: { type: "boolean" },
185
185
  include_company_description: { type: "boolean" },
186
186
  include_company_description_seo: { type: "boolean" },
@@ -375,14 +375,36 @@ const prospeoCompanyHeadcountByLocationSchema = {
375
375
  };
376
376
  const prospeoCompanyIcpSchema = {
377
377
  type: "object",
378
- description: "Structured company ICP filter.",
378
+ description: "Structured company ICP filter. Product is not a company_icp.departments value; use titles_include for product roles. geographic_scope only accepts single_country or multi_country.",
379
379
  properties: {
380
380
  titles_include: { type: "array", items: { type: "string" } },
381
381
  titles_exclude: { type: "array", items: { type: "string" } },
382
382
  departments: {
383
383
  type: "object",
384
384
  properties: {
385
- include: { type: "array", items: { type: "string" } },
385
+ include: {
386
+ type: "array",
387
+ items: {
388
+ type: "string",
389
+ enum: [
390
+ "Consumers",
391
+ "Customer Success",
392
+ "Data",
393
+ "Design",
394
+ "Engineering",
395
+ "Finance",
396
+ "HR",
397
+ "IT",
398
+ "Legal",
399
+ "Marketing",
400
+ "Operations",
401
+ "Procurement",
402
+ "SMB Owners",
403
+ "Sales",
404
+ "Security",
405
+ ],
406
+ },
407
+ },
386
408
  other: { type: "array", items: { type: "string" } },
387
409
  match_mode: { type: "string", enum: ["ANY", "ALL"] },
388
410
  },
@@ -396,7 +418,10 @@ const prospeoCompanyIcpSchema = {
396
418
  },
397
419
  industries: { type: "array", items: { type: "string" } },
398
420
  geographic_markets: { type: "array", items: { type: "string" } },
399
- geographic_scope: { type: "string" },
421
+ geographic_scope: {
422
+ type: "string",
423
+ enum: ["single_country", "multi_country"],
424
+ },
400
425
  },
401
426
  };
402
427
  const prospeoCompanyWebsiteTrafficSchema = {
@@ -405,7 +430,10 @@ const prospeoCompanyWebsiteTrafficSchema = {
405
430
  properties: {
406
431
  min_monthly_visits: { type: "number" },
407
432
  max_monthly_visits: { type: "number" },
408
- visit_change: { type: "string", enum: ["increased", "decreased", "stable"] },
433
+ visit_change: {
434
+ type: "string",
435
+ enum: ["increased", "decreased", "stable"],
436
+ },
409
437
  top_countries: { type: "array", items: { type: "string" } },
410
438
  min_country_percentage: { type: "number" },
411
439
  max_country_percentage: { type: "number" },
@@ -439,7 +467,7 @@ const prospeoCompanyAccountWorkflowGuidance = `Company account workflow: search_
439
467
  search_prospeo_companies({
440
468
  "seedDomains": ["tryredrover.com"],
441
469
  "filters": {
442
- "company_lookalike": { "company_oids": ["cmp_red_rover"], "minimum_tier": "T1" },
470
+ "company_lookalike": { "minimum_tier": "T1" },
443
471
  "company_attributes": { "uses_ai": true, "has_api": true, "pricing": true },
444
472
  "company_website_search": {
445
473
  "include_keywords": ["pricing"],
@@ -448,12 +476,13 @@ search_prospeo_companies({
448
476
  }
449
477
  }
450
478
  })
479
+ Do not invent company_oids. When seedCompanies or seedDomains are present, omit company_oids and let the backend resolve real Prospeo company IDs.
451
480
  For accounts in the news: { "company_news": { "categories": ["Funding & Investment"], "timeframe_days": 90 } }.
452
481
  For awards: { "company_awards": { "include": ["G2"], "match_mode": "CONTAINS" } }.
453
482
  For website traffic: { "company_website_traffic": { "min_monthly_visits": 50000 } }.
454
483
  For products/services, integrations, key customers, and Google discovery use "company_products_services", "company_integrations", "company_key_customers", and "company_google_discovery".
455
484
  For headcount by location: { "company_headcount_by_location": { "entries": [{ "country": "United States", "city": "Austin", "min_headcount": 10 }] } }.
456
- For structured ICP: { "company_icp": { "titles_include": ["Head of RevOps"], "company_sizes": ["midmarket"], "departments": { "include": ["Sales"], "match_mode": "ANY" } }, "company_headcount_range": ["101-200", "201-500", "501-1000"] }. Pair company_icp.company_sizes with company_headcount_range or rely on MCP normalization that derives the range; inspect the account sample for size drift.
485
+ For structured ICP: { "company_icp": { "titles_include": ["Head of RevOps"], "company_sizes": ["midmarket"], "departments": { "include": ["Sales"], "match_mode": "ANY" }, "geographic_scope": "multi_country", "geographic_markets": ["United States", "Canada"] }, "company_headcount_range": ["101-200", "201-500", "501-1000"] }. Pair company_icp.company_sizes with company_headcount_range or rely on MCP normalization that derives the range; inspect the account sample for size drift. Product is not a company_icp.departments value; use titles_include for product roles. geographic_scope only accepts single_country or multi_country.
457
486
  company_intent is unsupported; support-channel AI Attribute guesses like phone/email/chat/ticket/social are not exposed. public API rows do not include lookalike tier/score/reason.`;
458
487
  function loadSignalDiscoveryConfig() {
459
488
  if (!existsSync(signalProviderConfigPath)) {
@@ -1421,7 +1450,7 @@ export const leadToolDefinitions = [
1421
1450
  },
1422
1451
  {
1423
1452
  name: "search_prospeo_companies",
1424
- description: 'Search Prospeo for company/account results through the public /search-company lane. Requires get_provider_prompt({ provider: "prospeo" }) first. Use this first for company lookalike/account asks such as "find companies like Red Rover that use AI and have an API", "find founders at companies like our best customers", or "find accounts in the news about funding or partnerships". Results are accounts, not finished people leads. Review the returned accounts with the user, then call confirm_prospeo_company_accounts with the companySearchToken to create a domainFilterId before using search_prospeo for people at those accounts. Supports company lookalike, confirmed AI Attributes including pricing, company news, awards, website search, products/services, integrations, key customers, operating languages, Google discovery, headcount by location, structured company ICP, and experimental website traffic/key executive filters. company_intent and support-channel guesses like phone/email/chat/ticket/social are unsupported. Public API rows do not include lookalike tier/score/reason. ' +
1453
+ description: 'Search Prospeo for company/account results through the public /search-company lane. Requires get_provider_prompt({ provider: "prospeo" }) first. Use this first for company lookalike/account asks such as "find companies like Red Rover that use AI and have an API", "find founders at companies like our best customers", or "find accounts in the news about funding or partnerships". Results are accounts, not finished people leads. Review the returned accounts with the user, then call confirm_prospeo_company_accounts with the companySearchToken to create a domainFilterId before using search_prospeo for people at those accounts. Supports company lookalike, confirmed AI Attributes including pricing, company news, awards, website search, products/services, integrations, key customers, operating languages, Google discovery, headcount by location, structured company ICP, and experimental website traffic/key executive filters. Do not invent company_oids; when seedCompanies or seedDomains are present, omit company_oids and let the backend resolve real Prospeo IDs. company_intent and support-channel guesses like phone/email/chat/ticket/social are unsupported. Public API rows do not include lookalike tier/score/reason. ' +
1425
1454
  prospeoCompanyAccountWorkflowGuidance,
1426
1455
  inputSchema: {
1427
1456
  type: "object",
@@ -1442,11 +1471,14 @@ export const leadToolDefinitions = [
1442
1471
  },
1443
1472
  filters: {
1444
1473
  type: "object",
1445
- description: 'Company/account filters. For lookalikes, use company_lookalike.company_oids when you already have Prospeo IDs; otherwise pass seedCompanies/seedDomains and the backend resolves IDs. minimum_tier must be "T1", "T2", or "T3". Do not use company_intent.',
1474
+ description: 'Company/account filters. For lookalikes, use company_lookalike.company_oids only when you already have real Prospeo IDs; otherwise pass seedCompanies/seedDomains and omit company_oids so the backend resolves IDs. minimum_tier must be "T1", "T2", or "T3". Do not invent company_oids. Do not use company_intent.',
1446
1475
  properties: {
1447
1476
  company_industry: prospeoFilterValueSchema,
1448
1477
  company_technology: prospeoFilterValueSchema,
1449
- company_email_provider: { type: "array", items: { type: "string" } },
1478
+ company_email_provider: {
1479
+ type: "array",
1480
+ items: { type: "string" },
1481
+ },
1450
1482
  company_naics: prospeoFilterValueSchema,
1451
1483
  company_sics: prospeoFilterValueSchema,
1452
1484
  company_headcount_range: {
@@ -2585,12 +2585,14 @@ export declare const allTools: ({
2585
2585
  type: string;
2586
2586
  items: {
2587
2587
  type: string;
2588
+ minLength: number;
2588
2589
  };
2589
2590
  };
2590
2591
  exclude: {
2591
2592
  type: string;
2592
2593
  items: {
2593
2594
  type: string;
2595
+ minLength: number;
2594
2596
  };
2595
2597
  };
2596
2598
  include_all: {
@@ -2952,6 +2954,7 @@ export declare const allTools: ({
2952
2954
  type: string;
2953
2955
  items: {
2954
2956
  type: string;
2957
+ enum: string[];
2955
2958
  };
2956
2959
  };
2957
2960
  other: {
@@ -2987,6 +2990,7 @@ export declare const allTools: ({
2987
2990
  };
2988
2991
  geographic_scope: {
2989
2992
  type: string;
2993
+ enum: string[];
2990
2994
  };
2991
2995
  };
2992
2996
  };
@@ -3723,12 +3727,14 @@ export declare const allTools: ({
3723
3727
  type: string;
3724
3728
  items: {
3725
3729
  type: string;
3730
+ minLength: number;
3726
3731
  };
3727
3732
  };
3728
3733
  exclude: {
3729
3734
  type: string;
3730
3735
  items: {
3731
3736
  type: string;
3737
+ minLength: number;
3732
3738
  };
3733
3739
  };
3734
3740
  include_all: {
@@ -4090,6 +4096,7 @@ export declare const allTools: ({
4090
4096
  type: string;
4091
4097
  items: {
4092
4098
  type: string;
4099
+ enum: string[];
4093
4100
  };
4094
4101
  };
4095
4102
  other: {
@@ -4125,6 +4132,7 @@ export declare const allTools: ({
4125
4132
  };
4126
4133
  geographic_scope: {
4127
4134
  type: string;
4135
+ enum: string[];
4128
4136
  };
4129
4137
  };
4130
4138
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sellable/mcp",
3
- "version": "0.1.222",
3
+ "version": "0.1.224",
4
4
  "type": "module",
5
5
  "description": "Sellable MCP server for Claude Code and Codex campaign workflows",
6
6
  "main": "dist/index.js",
@@ -226,9 +226,18 @@ website traffic (`company_website_traffic`), confirmed AI Attributes including
226
226
  integrations, key customers, Google discovery, location headcount, or
227
227
  structured ICP. When using `company_icp.company_sizes` for micro/SMB/midmarket
228
228
  or enterprise sizing, pair it with `company_headcount_range` or rely on the MCP
229
- normalization that derives the range; inspect the sample for size drift. Do not
230
- use `company_intent`, and do not invent unsupported support-channel filters or
231
- AI Attribute guesses like phone/email/chat/ticket/social.
229
+ normalization that derives the range; inspect the sample for size drift. For
230
+ lookalike seeds passed as `seedCompanies` or `seedDomains`, omit `company_oids`;
231
+ the MCP backend resolves real Prospeo company IDs. Do not invent company_oids.
232
+ For company ICP geography, `geographic_scope` only accepts `single_country` or
233
+ `multi_country`; put North America style regions in `geographic_markets` as
234
+ specific markets such as United States and Canada. Product is not a
235
+ company_icp.departments value; use `titles_include` for product roles.
236
+ `company_keywords.include/exclude` values must be at least 3 characters; use
237
+ `artificial intelligence` instead of `AI`, or use confirmed attributes such as
238
+ `uses_ai` when that is the actual signal. Do not use `company_intent`, and do
239
+ not invent unsupported support-channel filters or AI Attribute guesses like
240
+ phone/email/chat/ticket/social.
232
241
 
233
242
  After scouting, ask for a second approval on Start Import. For
234
243
  LinkedIn engagement (`signal-discovery` internally), name how many
@@ -401,6 +401,19 @@ Use first for broad persona expansion, ABM/domain targeting, hiring-led targetin
401
401
  sizing, pair it with `company_headcount_range` or rely on MCP normalization
402
402
  that derives the range; inspect the account sample for size drift before
403
403
  approving accounts.
404
+ - For lookalike seeds passed as `seedCompanies` or `seedDomains`, omit
405
+ `company_oids`; the MCP backend resolves real Prospeo company IDs. Do not
406
+ invent company_oids.
407
+ - For company ICP geography, `geographic_scope` only accepts `single_country`
408
+ or `multi_country`; put North America style regions in `geographic_markets`
409
+ as specific markets such as United States and Canada.
410
+ - Product is not a company_icp.departments value; use `titles_include` for
411
+ product roles. Allowed company ICP departments include Consumers, Customer
412
+ Success, Data, Design, Engineering, Finance, HR, IT, Legal, Marketing,
413
+ Operations, Procurement, SMB Owners, Sales, and Security.
414
+ - `company_keywords.include/exclude` values must be at least 3 characters; use
415
+ `artificial intelligence` instead of `AI`, or use confirmed attributes such
416
+ as `uses_ai` when that is the actual signal.
404
417
  - Do not use `company_intent`. Do not invent unsupported support-channel filters
405
418
  or AI Attribute guesses like phone/email/chat/ticket/social.
406
419
  - Company/account search returns an account sample only; account rows are not people leads yet. Ask the user to approve the account sample.
@@ -25,7 +25,7 @@ Example account discovery:
25
25
  search_prospeo_companies({
26
26
  "seedDomains": ["tryredrover.com"],
27
27
  "filters": {
28
- "company_lookalike": { "company_oids": ["cmp_red_rover"], "minimum_tier": "T1" },
28
+ "company_lookalike": { "minimum_tier": "T1" },
29
29
  "company_attributes": {
30
30
  "uses_ai": true,
31
31
  "has_api": true,
@@ -56,7 +56,9 @@ search_prospeo_companies({
56
56
  "company_icp": {
57
57
  "titles_include": ["Head of RevOps"],
58
58
  "company_sizes": ["midmarket"],
59
- "departments": { "include": ["Sales"], "match_mode": "ANY" }
59
+ "departments": { "include": ["Sales"], "match_mode": "ANY" },
60
+ "geographic_scope": "multi_country",
61
+ "geographic_markets": ["United States", "Canada"]
60
62
  },
61
63
  "company_headcount_range": ["101-200", "201-500", "501-1000"],
62
64
  "company_website_traffic": { "min_monthly_visits": 50000 },
@@ -80,11 +82,23 @@ confirm_prospeo_company_accounts({
80
82
 
81
83
  Use the returned `domainFilterId` in `search_prospeo` with people filters. Do not reconstruct raw account rows or domains manually as Prospeo-sourced provenance.
82
84
 
85
+ When `seedDomains` or `seedCompanies` are present, omit `company_oids`; the MCP
86
+ backend resolves real Prospeo company IDs. Do not invent company_oids such as
87
+ placeholder IDs from examples. Only send `company_lookalike.company_oids` when
88
+ they are real Prospeo company IDs returned by a prior tool/search.
89
+
83
90
  For structured ICP sizing, pair `company_icp.company_sizes` with
84
91
  `company_headcount_range` when possible. The MCP normalizer derives headcount
85
92
  ranges for `micro`, `smb`, `midmarket`, `enterprise`, and `large_enterprise`
86
93
  when no explicit headcount range is supplied, but the sample should still be
87
94
  checked for size drift before accounts are approved.
95
+ For company ICP geography, `geographic_scope` only accepts `single_country` or
96
+ `multi_country`; put "North America" style regions in `geographic_markets` as
97
+ specific markets such as `United States` and `Canada`. Product is not a
98
+ company_icp.departments value; use `titles_include` for product roles. Allowed
99
+ company ICP departments include Consumers, Customer Success, Data, Design,
100
+ Engineering, Finance, HR, IT, Legal, Marketing, Operations, Procurement, SMB
101
+ Owners, Sales, and Security.
88
102
 
89
103
  Unsupported/caveats:
90
104
 
@@ -223,6 +237,7 @@ Preference rules:
223
237
  - In security, AppSec, SOC, RevOps, Demand Gen, and similar function-specific lanes, do not rely on bare `Head` / `Director` / `VP` widening by itself. Pair seniority with explicit function keywords in `person_job_title` and verify the sample for off-function titles like `Head of Social Media`.
224
238
  - Prefer `company_headcount_range` for most sizing; use `company_headcount_custom` for precise numeric bounds.
225
239
  - Prefer `company_industry` before `company_keywords`; use keywords for refinement, not first-pass targeting.
240
+ - `company_keywords.include/exclude` values must be at least 3 characters; use `artificial intelligence` instead of `AI`, or use confirmed attributes such as `uses_ai` when that is the real signal.
226
241
 
227
242
  ### Person Filters
228
243