@coldiq/mcp 0.4.0 → 0.4.2
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.
- package/dist/index.js +0 -2
- package/dist/index.js.map +1 -1
- package/dist/provider-availability.d.ts +3 -0
- package/dist/provider-availability.d.ts.map +1 -0
- package/dist/provider-availability.js +25 -0
- package/dist/provider-availability.js.map +1 -0
- package/dist/registry.d.ts +7 -2
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +31 -20
- package/dist/registry.js.map +1 -1
- package/dist/tools/call-endpoint.js +1 -1
- package/dist/tools/call-endpoint.js.map +1 -1
- package/dist/tools/find-email.js +1 -1
- package/dist/tools/find-email.js.map +1 -1
- package/dist/tools/find-emails-bulk.js +1 -1
- package/dist/tools/find-emails-bulk.js.map +1 -1
- package/dist/tools/find-emails.js +1 -1
- package/dist/tools/find-emails.js.map +1 -1
- package/dist/tools/get-endpoint-details.js +2 -2
- package/dist/tools/get-endpoint-details.js.map +1 -1
- package/dist/tools/search-companies.d.ts.map +1 -1
- package/dist/tools/search-companies.js +5 -5
- package/dist/tools/search-companies.js.map +1 -1
- package/dist/utils/provider-resolver.d.ts +1 -0
- package/dist/utils/provider-resolver.d.ts.map +1 -1
- package/dist/utils/provider-resolver.js +3 -1
- package/dist/utils/provider-resolver.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +0 -8
- package/src/provider-availability.ts +27 -0
- package/src/registry.ts +35 -19
- package/src/tools/call-endpoint.ts +1 -1
- package/src/tools/find-email.ts +1 -1
- package/src/tools/find-emails-bulk.ts +1 -1
- package/src/tools/find-emails.ts +1 -1
- package/src/tools/get-endpoint-details.ts +2 -2
- package/src/tools/search-companies.ts +5 -5
- package/src/utils/provider-resolver.ts +4 -1
- package/test-linkupapi-live.ts +1 -1
- package/test-phone-live.ts +1 -1
- package/test-search-live.ts +1 -1
- package/tests/live/companyenrich-hybrid-probe.ts +1 -1
- package/tests/provider-availability.test.ts +83 -0
- package/tests/registry-enrich-person.test.ts +7 -5
- package/tests/registry-find-people.test.ts +2 -2
- package/tests/registry.test.ts +32 -32
- package/tests/tools/call-endpoint.test.ts +4 -4
- package/tests/tools/get-endpoint-details.test.ts +4 -4
- package/tests/tools/search-endpoints.test.ts +2 -2
- package/tests/version.test.ts +2 -1
- package/dist/tools/find-docs.d.ts +0 -28
- package/dist/tools/find-docs.d.ts.map +0 -1
- package/dist/tools/find-docs.js +0 -25
- package/dist/tools/find-docs.js.map +0 -1
- package/src/tools/find-docs.ts +0 -25
- package/tests/tools/find-docs.test.ts +0 -28
|
@@ -8,7 +8,7 @@ export const callEndpointDescription = 'Call any ColdIQ marketplace endpoint dir
|
|
|
8
8
|
'invoke it to perform the action, not to explore.';
|
|
9
9
|
export const callEndpointSchema = {
|
|
10
10
|
api: z.string().describe('Provider key from search_endpoints / get_endpoint_details, e.g. "coldiq".'),
|
|
11
|
-
path: z.string().describe('Endpoint path without the /v1 prefix, e.g. "/
|
|
11
|
+
path: z.string().describe('Endpoint path without the /v1 prefix, e.g. "/limadata/prospect/people/filter".'),
|
|
12
12
|
params: z
|
|
13
13
|
.record(z.unknown())
|
|
14
14
|
.optional()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"call-endpoint.js","sourceRoot":"","sources":["../../src/tools/call-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAA;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAClC,yGAAyG;IACzG,mGAAmG;IACnG,6FAA6F;IAC7F,0GAA0G;IAC1G,kDAAkD,CAAA;AAEpD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;IACrG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"call-endpoint.js","sourceRoot":"","sources":["../../src/tools/call-endpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAA;AAE/C,MAAM,CAAC,MAAM,uBAAuB,GAClC,yGAAyG;IACzG,mGAAmG;IACnG,6FAA6F;IAC7F,0GAA0G;IAC1G,kDAAkD,CAAA;AAEpD,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;IACrG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gFAAgF,CAAC;IAC3G,MAAM,EAAE,CAAC;SACN,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACnB,QAAQ,EAAE;SACV,QAAQ,CAAC,qHAAqH,CAAC;CACnI,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAA8B;IACtE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAA;IAC/G,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACjI,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;AACjF,CAAC"}
|
package/dist/tools/find-email.js
CHANGED
|
@@ -14,7 +14,7 @@ export const findEmailSchema = {
|
|
|
14
14
|
linkedin_url: z.string().optional().describe('LinkedIn profile URL — alternative to name+domain'),
|
|
15
15
|
resolve_current_employer: z.boolean().optional().describe('Opt-in: on a miss with a linkedin_url, enrich the person to resolve their CURRENT employer\'s domain and retry once — recovers stale/acquired input domains (e.g. Atmel→microchip.com). Extra ~1 credit for the enrich hop, disclosed in _meta.employer_resolution. Default false.'),
|
|
16
16
|
use_providers: z.array(z.string()).optional().describe(`Optional ordered list of providers to use. Leave empty to let ColdIQ automatically pick the best tool for your inputs — recommended for most use cases. Available providers: ${getProvidersForCapability('find_email').join(', ')}. Provider names are matched fuzzily, so minor typos are tolerated.`),
|
|
17
|
-
max_credits: z.number().positive().optional().describe('Per-record spend cap: a provider that would find the email but costs more than this is skipped, so you never pay more than N credits for one email (returns not_found if nothing answers in budget). Stops
|
|
17
|
+
max_credits: z.number().positive().optional().describe('Per-record spend cap: a provider that would find the email but costs more than this is skipped, so you never pay more than N credits for one email (returns not_found if nothing answers in budget). Stops a high-cost provider from dominating a large run.'),
|
|
18
18
|
};
|
|
19
19
|
export async function findEmailHandler(input) {
|
|
20
20
|
return callVerb('/email/find', input);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-email.js","sourceRoot":"","sources":["../../src/tools/find-email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAEzE,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAA;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAC/B,mEAAmE;IACnE,mFAAmF;IACnF,4IAA4I;IAC5I,0HAA0H,CAAA;AAE5H,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACtE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAC5E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACpF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IACjG,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oRAAoR,CAAC;IAC/U,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gLAAgL,yBAAyB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,qEAAqE,CAAC;IAC/V,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"find-email.js","sourceRoot":"","sources":["../../src/tools/find-email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAEzE,MAAM,CAAC,MAAM,aAAa,GAAG,YAAY,CAAA;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAC/B,mEAAmE;IACnE,mFAAmF;IACnF,4IAA4I;IAC5I,0HAA0H,CAAA;AAE5H,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACtE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAC5E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACpF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IACjG,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oRAAoR,CAAC;IAC/U,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gLAAgL,yBAAyB,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,qEAAqE,CAAC;IAC/V,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8PAA8P,CAAC;CACvT,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAA8B;IACnE,OAAO,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAA;AACvC,CAAC"}
|
|
@@ -26,7 +26,7 @@ export const findEmailsBulkSchema = {
|
|
|
26
26
|
.describe('People to find emails for (1–5000). Searchable = linkedin_url alone, OR first_name + last_name + (domain or company_name).'),
|
|
27
27
|
resolve_current_employer: z.boolean().optional().describe('Opt-in, applies to every row: when a row misses and has a linkedin_url, enrich the person to resolve their CURRENT employer\'s domain and retry once — recovers stale/acquired input domains (e.g. Atmel→microchip.com). Extra ~1 credit per resolved row. Default false.'),
|
|
28
28
|
webhook_url: z.string().optional().describe('Optional URL POSTed when the whole job completes.'),
|
|
29
|
-
max_credits: z.number().positive().optional().describe('Per-row spend cap: a provider that would find the email but costs more than this is skipped (the row comes back not_found rather than overspending). Caps
|
|
29
|
+
max_credits: z.number().positive().optional().describe('Per-row spend cap: a provider that would find the email but costs more than this is skipped (the row comes back not_found rather than overspending). Caps high-cost providers across the whole list.'),
|
|
30
30
|
};
|
|
31
31
|
export async function findEmailsBulkHandler(input) {
|
|
32
32
|
const res = await callApi('POST', '/email/find/bulk/submit', input);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-emails-bulk.js","sourceRoot":"","sources":["../../src/tools/find-emails-bulk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,yBAAyB,GACpC,kHAAkH;IAClH,mHAAmH;IACnH,oDAAoD;IACpD,yLAAyL;IACzL,qKAAqK;IACrK,mKAAmK;IACnK,mGAAmG;IACnG,wHAAwH;IACxH,0HAA0H;IAC1H,4EAA4E,CAAA;AAE9E,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,CAAC;SACN,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yFAAyF,CAAC;QAC7H,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QACtD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC5E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;QACzG,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;KAC5H,CAAC,CACH;SACA,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CAAC,4HAA4H,CAAC;IACzI,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2QAA2Q,CAAC;IACtU,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IAChG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"find-emails-bulk.js","sourceRoot":"","sources":["../../src/tools/find-emails-bulk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,yBAAyB,GACpC,kHAAkH;IAClH,mHAAmH;IACnH,oDAAoD;IACpD,yLAAyL;IACzL,qKAAqK;IACrK,mKAAmK;IACnK,mGAAmG;IACnG,wHAAwH;IACxH,0HAA0H;IAC1H,4EAA4E,CAAA;AAE9E,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,MAAM,EAAE,CAAC;SACN,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yFAAyF,CAAC;QAC7H,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QACtD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC5E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2DAA2D,CAAC;QACzG,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6EAA6E,CAAC;KAC5H,CAAC,CACH;SACA,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CAAC,4HAA4H,CAAC;IACzI,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2QAA2Q,CAAC;IACtU,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IAChG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sMAAsM,CAAC;CAC/P,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,KAA8B;IACxE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,yBAAyB,EAAE,KAAK,CAAC,CAAA;IACnE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAA;AACnG,CAAC"}
|
|
@@ -26,7 +26,7 @@ export const findEmailsSchema = {
|
|
|
26
26
|
.describe('People to find emails for (max 50)'),
|
|
27
27
|
resolve_current_employer: z.boolean().optional().describe('Opt-in, applies to every person in the batch: on a miss with a linkedin_url, enrich the person to resolve their CURRENT employer\'s domain and retry once — recovers stale/acquired input domains (e.g. Atmel→microchip.com). Extra ~1 credit per resolved person. Default false.'),
|
|
28
28
|
use_providers: z.array(z.string()).optional().describe(`Optional ordered list of providers to use. Leave empty to let ColdIQ automatically run the best waterfall — recommended for most use cases. Available providers: ${FIND_EMAILS_PROVIDERS.join(', ')}. Provider names are matched fuzzily, so minor typos are tolerated.`),
|
|
29
|
-
max_credits: z.number().positive().optional().describe('Per-person spend cap applied to every person in the batch: a provider that would find the email but costs more than this is skipped, so you never pay more than N credits per email. Stops
|
|
29
|
+
max_credits: z.number().positive().optional().describe('Per-person spend cap applied to every person in the batch: a provider that would find the email but costs more than this is skipped, so you never pay more than N credits per email. Stops a high-cost provider from dominating a large run.'),
|
|
30
30
|
};
|
|
31
31
|
// Split large batches into sequential sub-batches so each HTTP call stays well
|
|
32
32
|
// under the server's bulk wall-clock budget (and thus Cloudflare's ~100s edge
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-emails.js","sourceRoot":"","sources":["../../src/tools/find-emails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAA;AAErE,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAA;AAE3C,MAAM,CAAC,MAAM,qBAAqB,GAChC,6DAA6D;IAC7D,mEAAmE;IACnE,0EAA0E;IAC1E,uDAAuD;IACvD,0FAA0F;IAC1F,kHAAkH;IAClH,sGAAsG;IACtG,uGAAuG;IACvG,oGAAoG;IACpG,yDAAyD,CAAA;AAE3D,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE,CAAC;SACN,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;QACjG,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QACtD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC5E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+EAA+E,CAAC;KAC9H,CAAC,CACH;SACA,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,CAAC,oCAAoC,CAAC;IACjD,wBAAwB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mRAAmR,CAAC;IAC9U,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oKAAoK,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,qEAAqE,CAAC;IACjU,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"find-emails.js","sourceRoot":"","sources":["../../src/tools/find-emails.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,8 @@ export const getEndpointDetailsDescription = 'Get the real request schema, param
|
|
|
5
5
|
'(from search_endpoints). Read the example before calling — it shows the exact provider-native params ' +
|
|
6
6
|
'call_endpoint expects. FREE.';
|
|
7
7
|
export const getEndpointDetailsSchema = {
|
|
8
|
-
api: z.string().describe('Provider key from search_endpoints, e.g. "coldiq" (Lima Data), "apollo", or "
|
|
9
|
-
path: z.string().describe('Endpoint path without the /v1 prefix, e.g. "/
|
|
8
|
+
api: z.string().describe('Provider key from search_endpoints, e.g. "coldiq" (Lima Data), "apollo", or "exa".'),
|
|
9
|
+
path: z.string().describe('Endpoint path without the /v1 prefix, e.g. "/limadata/prospect/people/filter".'),
|
|
10
10
|
};
|
|
11
11
|
export async function getEndpointDetailsHandler(input) {
|
|
12
12
|
const res = await callApi('POST', '/endpoints/details', { api: input.api, path: input.path });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-endpoint-details.js","sourceRoot":"","sources":["../../src/tools/get-endpoint-details.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,CAAA;AAE5D,MAAM,CAAC,MAAM,6BAA6B,GACxC,6GAA6G;IAC7G,uGAAuG;IACvG,8BAA8B,CAAA;AAEhC,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;IAC9G,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"get-endpoint-details.js","sourceRoot":"","sources":["../../src/tools/get-endpoint-details.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,CAAA;AAE5D,MAAM,CAAC,MAAM,6BAA6B,GACxC,6GAA6G;IAC7G,uGAAuG;IACvG,8BAA8B,CAAA;AAEhC,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oFAAoF,CAAC;IAC9G,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gFAAgF,CAAC;CAC5G,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,KAA8B;IAC5E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,oBAAoB,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;IAC7F,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,2CAA2C,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACtJ,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;AACjF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-companies.d.ts","sourceRoot":"","sources":["../../src/tools/search-companies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,mBAAmB,qBAAqB,CAAA;AAErD,eAAO,MAAM,0BAA0B,
|
|
1
|
+
{"version":3,"file":"search-companies.d.ts","sourceRoot":"","sources":["../../src/tools/search-companies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAIvB,eAAO,MAAM,mBAAmB,qBAAqB,CAAA;AAErD,eAAO,MAAM,0BAA0B,QAEmiB,CAAA;AAE1kB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BjC,CAAA;AAuCD,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;GAgB1E"}
|
|
@@ -3,7 +3,7 @@ import { callVerb } from '../verb-client.js';
|
|
|
3
3
|
import { getProvidersForCapability } from '../utils/provider-resolver.js';
|
|
4
4
|
export const searchCompaniesName = 'search_companies';
|
|
5
5
|
export const searchCompaniesDescription = 'Search B2B companies by industry, size, geography, founding year, tech stack, funding, revenue, exclusion lists, and hiring signals. To build a lookalike TAM from example accounts, pass `similar_to_domains` (seed company domains) — the request routes to DiscoLike\'s lookalike discovery over 70M companies, optionally narrowed by keywords/geo/size. Routing is otherwise automatic: strict firmographic filters (revenue, employee bands, exclusion lists) get high-precision providers first; tech-stack and funding-stage filters route to specialized providers; loose keyword/geo searches fall back to broad providers; a LinkedIn Sales Navigator search URL enables URL-based discovery as a final fallback. For buying-intent topic discovery (find companies associated with intent keywords like "sales automation" or "lead generation"), pass `keywords` with `use_providers: ["theirstack"]` — this routes to TheirStack\'s intent-keyword index instead of the default full-text match. For "fast-growing" companies there is no exact workforce-growth % filter anywhere — pass min_workforce_growth_pct (and/or is_hiring / a recent-funding filter) and ColdIQ routes to active-hiring and recently-funded providers, the practical proxies for growth. ColdIQ automatically picks the best provider — pass use_providers only if you need a specific tool. Default limit: 25. ' +
|
|
6
|
-
'Response is compact by default (name, domain, website, linkedin_url, employees, revenue, industry, country, city, founded_year, categories) — everything needed to act on a company or feed it into find_people. Set fields="verbose" only when you specifically need the full firmographic record (funding history, technologies, keywords, NAICS codes, all socials, descriptions).';
|
|
6
|
+
'Employee and revenue bounds are exact when the selected provider returns exact values. Bucket-only providers widen non-aligned bounds to overlapping buckets and disclose that in `_meta.filter_approximations`. Response is compact by default (name, domain, website, linkedin_url, employees, revenue, industry, country, city, founded_year, categories) — everything needed to act on a company or feed it into find_people. Set fields="verbose" only when you specifically need the full firmographic record (funding history, technologies, keywords, NAICS codes, all socials, descriptions).';
|
|
7
7
|
export const searchCompaniesSchema = {
|
|
8
8
|
keywords: z.array(z.string()).optional().describe('Free-text topics, business models, or themes — e.g. ["SaaS", "fintech", "cybersecurity"]. Best for most discovery: matched broadly across company name, description, and tags. Prefer this over `industries` for terms like "SaaS" that are business models rather than formal industry categories.'),
|
|
9
9
|
similar_to_domains: z.array(z.string()).max(10).optional().describe('Seed company domains to find lookalikes of (up to 10) — e.g. ["stripe.com", "lemlist.com"]. Routes to DiscoLike\'s lookalike discovery over 70M companies; the best way to build a net-new TAM from example accounts. Optionally narrow with keywords / industries / countries / employee range. Not compatible with tech-stack, funding, revenue, founded-year, or hiring/growth filters.'),
|
|
@@ -11,8 +11,8 @@ export const searchCompaniesSchema = {
|
|
|
11
11
|
locations: z.array(z.string()).optional().describe('City/region filters as free-text strings (e.g. ["Paris, France", "San Francisco, California"]). Narrows results beyond country-level.'),
|
|
12
12
|
industries: z.array(z.string()).optional().describe('Formal industry-taxonomy categories — e.g. ["Financial Services", "Hospitals and Health Care"]. Use only for strict industry classification; for business models or themes like "SaaS" or "fintech", use `keywords` instead. Both fields are searched together when set.'),
|
|
13
13
|
technologies: z.array(z.string()).optional().describe('Tech stack filters — routes to tech-aware providers. Pass technology names or slugs e.g. ["Salesforce", "HubSpot"].'),
|
|
14
|
-
min_employees: z.number().optional().describe('Minimum employee count'),
|
|
15
|
-
max_employees: z.number().optional().describe('Maximum employee count'),
|
|
14
|
+
min_employees: z.number().optional().describe('Minimum employee count. Bucket-only providers may widen non-aligned bounds; see _meta.filter_approximations.'),
|
|
15
|
+
max_employees: z.number().optional().describe('Maximum employee count. Bucket-only providers may widen non-aligned bounds; see _meta.filter_approximations.'),
|
|
16
16
|
min_founded_year: z.number().optional().describe('Earliest founding year'),
|
|
17
17
|
max_founded_year: z.number().optional().describe('Latest founding year'),
|
|
18
18
|
funding_stages: z.array(z.string()).optional().describe('Funding stage filters e.g. ["seed", "series_a", "series_b"]. Exact stage IDs vary by provider.'),
|
|
@@ -20,8 +20,8 @@ export const searchCompaniesSchema = {
|
|
|
20
20
|
max_funding_amount: z.number().optional().describe('Maximum total funding raised (USD)'),
|
|
21
21
|
min_funding_year: z.number().optional().describe('Earliest year of last funding round'),
|
|
22
22
|
max_funding_year: z.number().optional().describe('Latest year of last funding round'),
|
|
23
|
-
min_revenue: z.number().optional().describe('Minimum estimated annual revenue (USD)'),
|
|
24
|
-
max_revenue: z.number().optional().describe('Maximum estimated annual revenue (USD)'),
|
|
23
|
+
min_revenue: z.number().optional().describe('Minimum estimated annual revenue (USD). Bucket-only providers may widen non-aligned bounds; see _meta.filter_approximations.'),
|
|
24
|
+
max_revenue: z.number().optional().describe('Maximum estimated annual revenue (USD). Bucket-only providers may widen non-aligned bounds; see _meta.filter_approximations.'),
|
|
25
25
|
exclude_domains: z.array(z.string()).optional().describe('Company domains to exclude from results'),
|
|
26
26
|
exclude_industries: z.array(z.string()).optional().describe('Industry names to exclude from results'),
|
|
27
27
|
exclude_countries: z.array(z.string()).optional().describe('2-letter ISO country codes to exclude from results'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-companies.js","sourceRoot":"","sources":["../../src/tools/search-companies.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAA;AAEzE,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAA;AAErD,MAAM,CAAC,MAAM,0BAA0B,GACrC,20CAA20C;IAC30C,
|
|
1
|
+
{"version":3,"file":"search-companies.js","sourceRoot":"","sources":["../../src/tools/search-companies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Capability } from '../registry.js';
|
|
2
|
+
export declare const CONFIGURED_FIND_EMAILS_PROVIDERS: string[];
|
|
2
3
|
export declare const FIND_EMAILS_PROVIDERS: string[];
|
|
3
4
|
export declare function getProvidersForCapability(capability: Capability | 'find_emails'): string[];
|
|
4
5
|
export interface ToolErrorPayload {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/provider-resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"provider-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/provider-resolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAQhD,eAAO,MAAM,gCAAgC,UAY5C,CAAA;AAED,eAAO,MAAM,qBAAqB,UAA6D,CAAA;AAE/F,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,GAAG,MAAM,EAAE,CAG1F;AAMD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,mBAAmB,EAAE,MAAM,EAAE,CAAA;CAC9B;AAKD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,UAAU,GAAG,aAAa,EACtC,SAAS,EAAE,MAAM,EAAE,GAClB,gBAAgB,CAKlB;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,UAAU,GAAG,aAAa,EACtC,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,gBAAgB,CAoBlB;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,UAAU,GAAG,aAAa,EACtC,SAAS,EAAE,MAAM,EAAE,GAClB,gBAAgB,CASlB;AAMD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,IAAI,CAAA;IACR,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACrC;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,KAAK,CAAA;IACT,KAAK,EAAE,gBAAgB,CAAA;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,YAAY,CAAA;AAEpD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,UAAU,GAAG,aAAa,EACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,YAAY,EAAE,OAAO,GACpB,aAAa,CAkDf;AAaD,UAAU,QAAQ;IAChB,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAAA;IACtC,MAAM,EAAE,MAAM,CAAA;CACf"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { listCapabilityProviderIds, getProviderApplicabilityGuard } from '../registry.js';
|
|
2
|
+
import { isProviderEnabled } from '../provider-availability.js';
|
|
2
3
|
import { fuzzyMatch } from './fuzzy.js';
|
|
3
4
|
// find_emails uses a custom waterfall — its providers are not in the registry.
|
|
4
5
|
// Exported so find-emails.ts stays in sync without a second hardcoded list.
|
|
5
6
|
// Order = auto-route execution order: bulk providers first (Steps 1-3), then
|
|
6
7
|
// the single-find_email fallback providers used for stragglers (Step 4).
|
|
7
|
-
export const
|
|
8
|
+
export const CONFIGURED_FIND_EMAILS_PROVIDERS = [
|
|
8
9
|
'limadata-work-email',
|
|
9
10
|
'leadmagic',
|
|
10
11
|
'prospeo',
|
|
@@ -17,6 +18,7 @@ export const FIND_EMAILS_PROVIDERS = [
|
|
|
17
18
|
'linkupapi',
|
|
18
19
|
'icypeas',
|
|
19
20
|
];
|
|
21
|
+
export const FIND_EMAILS_PROVIDERS = CONFIGURED_FIND_EMAILS_PROVIDERS.filter(isProviderEnabled);
|
|
20
22
|
export function getProvidersForCapability(capability) {
|
|
21
23
|
if (capability === 'find_emails')
|
|
22
24
|
return FIND_EMAILS_PROVIDERS;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-resolver.js","sourceRoot":"","sources":["../../src/utils/provider-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAA;AAEzF,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,+EAA+E;AAC/E,4EAA4E;AAC5E,6EAA6E;AAC7E,yEAAyE;AACzE,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"provider-resolver.js","sourceRoot":"","sources":["../../src/utils/provider-resolver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -183,13 +183,6 @@ import {
|
|
|
183
183
|
loadSkillHandler,
|
|
184
184
|
} from './tools/load-skill.js'
|
|
185
185
|
|
|
186
|
-
import {
|
|
187
|
-
findDocsName,
|
|
188
|
-
findDocsDescription,
|
|
189
|
-
findDocsSchema,
|
|
190
|
-
findDocsHandler,
|
|
191
|
-
} from './tools/find-docs.js'
|
|
192
|
-
|
|
193
186
|
// Initialize HTTP client (reads env vars). A missing/empty COLDIQ_API_KEY is a
|
|
194
187
|
// user-config error, not a bug — print the message without a stack trace.
|
|
195
188
|
try {
|
|
@@ -249,7 +242,6 @@ server.tool(getSessionUsageName, getSessionUsageDescription, getSessionUsageSche
|
|
|
249
242
|
server.tool(listDataSourcesName, listDataSourcesDescription, listDataSourcesSchema, listDataSourcesHandler)
|
|
250
243
|
server.tool(listSkillsName, listSkillsDescription, listSkillsSchema, listSkillsHandler)
|
|
251
244
|
server.tool(loadSkillName, loadSkillDescription, loadSkillSchema, loadSkillHandler)
|
|
252
|
-
server.tool(findDocsName, findDocsDescription, findDocsSchema, findDocsHandler)
|
|
253
245
|
server.tool(extractPostEngagementName, extractPostEngagementDescription, extractPostEngagementSchema, extractPostEngagementHandler)
|
|
254
246
|
server.tool(getPlaceReviewsName, getPlaceReviewsDescription, getPlaceReviewsSchema, getPlaceReviewsHandler)
|
|
255
247
|
// Generic endpoint discovery + invoke: reach any integrated provider without a dedicated tool.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code-owned provider kill switch for the standalone MCP package.
|
|
3
|
+
*
|
|
4
|
+
* This package is built and published separately from the Worker, so it keeps a
|
|
5
|
+
* small mirror of the Worker availability policy. Provider implementations stay
|
|
6
|
+
* configured and testable while public routing and tool schemas omit them.
|
|
7
|
+
*/
|
|
8
|
+
const DISABLED_PROVIDERS = new Set([
|
|
9
|
+
'people-data-labs',
|
|
10
|
+
])
|
|
11
|
+
|
|
12
|
+
const PROVIDER_ALIASES: Record<string, string> = {
|
|
13
|
+
pdl: 'people-data-labs',
|
|
14
|
+
'pdl-person-enrich': 'people-data-labs',
|
|
15
|
+
'pdl-person-identify': 'people-data-labs',
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function normalizeProviderKey(provider: string): string {
|
|
19
|
+
return provider.trim().toLowerCase().replace(/[\s_]+/g, '-')
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Returns false for a disabled provider, including its waterfall aliases. */
|
|
23
|
+
export function isProviderEnabled(provider: string): boolean {
|
|
24
|
+
const normalized = normalizeProviderKey(provider)
|
|
25
|
+
const canonical = PROVIDER_ALIASES[normalized] ?? normalized
|
|
26
|
+
return !DISABLED_PROVIDERS.has(canonical)
|
|
27
|
+
}
|
package/src/registry.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
// Provider Registry — maps capabilities to ordered provider lists
|
|
3
3
|
// ---------------------------------------------------------------------------
|
|
4
4
|
|
|
5
|
+
import { isProviderEnabled } from './provider-availability.js'
|
|
6
|
+
|
|
5
7
|
export interface AsyncConfig {
|
|
6
8
|
/** Build the poll endpoint path from the ID returned by the create call */
|
|
7
9
|
pollEndpoint: (id: string) => string
|
|
@@ -294,7 +296,7 @@ function applyStrictFilters(
|
|
|
294
296
|
// search_companies
|
|
295
297
|
// ---------------------------------------------------------------------------
|
|
296
298
|
|
|
297
|
-
//
|
|
299
|
+
// Lima Data company_headcount uses letter buckets: A=1-10, B=11-50, C=51-200,
|
|
298
300
|
// D=201-500, E=501-1000, F=1001-5000, G=5001-10000, H=10001+
|
|
299
301
|
function mapEmployeesToLimaDataHeadcount(min?: number, max?: number): string[] {
|
|
300
302
|
const buckets: Array<{ code: string; min: number; max: number }> = [
|
|
@@ -583,7 +585,7 @@ const searchCompaniesProviders: ProviderEntry[] = [
|
|
|
583
585
|
priority: 6,
|
|
584
586
|
isApplicable: (input) => {
|
|
585
587
|
// Skip for filter types SignalBase cannot apply — let specialized providers (TheirStack, Wiza,
|
|
586
|
-
//
|
|
588
|
+
// Lima Data) handle these, and fall further down the waterfall when they fail.
|
|
587
589
|
if (isNonEmptyArray(input.technologies)) return false
|
|
588
590
|
if (isNonEmptyArray(input.funding_stages)) return false
|
|
589
591
|
if (typeof input.min_funding_amount === 'number' || typeof input.max_funding_amount === 'number') return false
|
|
@@ -660,7 +662,7 @@ const searchCompaniesProviders: ProviderEntry[] = [
|
|
|
660
662
|
},
|
|
661
663
|
isApplicable: (input) => {
|
|
662
664
|
// Skip when advanced filters are set that BlitzAPI cannot apply — specialized providers
|
|
663
|
-
// (TheirStack, Wiza,
|
|
665
|
+
// (TheirStack, Wiza, Lima Data) handle these and must run without BlitzAPI intercepting first.
|
|
664
666
|
if (isNonEmptyArray(input.technologies)) return false
|
|
665
667
|
if (isNonEmptyArray(input.funding_stages)) return false
|
|
666
668
|
if (typeof input.min_funding_amount === 'number' || typeof input.max_funding_amount === 'number') return false
|
|
@@ -694,7 +696,7 @@ const searchCompaniesProviders: ProviderEntry[] = [
|
|
|
694
696
|
},
|
|
695
697
|
{
|
|
696
698
|
id: 'limadata',
|
|
697
|
-
endpoint: '/
|
|
699
|
+
endpoint: '/limadata/search/companies',
|
|
698
700
|
method: 'POST',
|
|
699
701
|
priority: 9,
|
|
700
702
|
mapParams: (input) => {
|
|
@@ -839,11 +841,11 @@ const searchCompaniesProviders: ProviderEntry[] = [
|
|
|
839
841
|
},
|
|
840
842
|
{
|
|
841
843
|
id: 'limadata-prospect-filter',
|
|
842
|
-
endpoint: '/
|
|
844
|
+
endpoint: '/limadata/prospect/companies/filter',
|
|
843
845
|
method: 'POST',
|
|
844
846
|
priority: 12,
|
|
845
847
|
mapParams: (input) => {
|
|
846
|
-
//
|
|
848
|
+
// Lima Data prospect filter uses [{filter_type, values}]. We can only reliably
|
|
847
849
|
// map company_headcount (size buckets); industries/locations need LinkedIn IDs.
|
|
848
850
|
const filters: Array<{ filter_type: string; values: string[] }> = []
|
|
849
851
|
const sizeBuckets = mapEmployeesToLimaDataHeadcount(
|
|
@@ -871,7 +873,7 @@ const searchCompaniesProviders: ProviderEntry[] = [
|
|
|
871
873
|
},
|
|
872
874
|
{
|
|
873
875
|
id: 'limadata-prospect-url',
|
|
874
|
-
endpoint: '/
|
|
876
|
+
endpoint: '/limadata/prospect/companies/search-url',
|
|
875
877
|
method: 'POST',
|
|
876
878
|
priority: 13,
|
|
877
879
|
mapParams: (input) => ({
|
|
@@ -1605,7 +1607,7 @@ const findEmailProviders: ProviderEntry[] = [
|
|
|
1605
1607
|
},
|
|
1606
1608
|
{
|
|
1607
1609
|
id: 'limadata-work-email',
|
|
1608
|
-
endpoint: '/
|
|
1610
|
+
endpoint: '/limadata/find/work-email',
|
|
1609
1611
|
method: 'POST',
|
|
1610
1612
|
priority: 1,
|
|
1611
1613
|
mapParams: (input) => {
|
|
@@ -1713,7 +1715,7 @@ const findEmailProviders: ProviderEntry[] = [
|
|
|
1713
1715
|
},
|
|
1714
1716
|
{
|
|
1715
1717
|
id: 'limadata-work-email-linkedin',
|
|
1716
|
-
endpoint: '/
|
|
1718
|
+
endpoint: '/limadata/find/work-email-linkedin',
|
|
1717
1719
|
method: 'POST',
|
|
1718
1720
|
priority: 5,
|
|
1719
1721
|
mapParams: (input) => ({
|
|
@@ -1940,7 +1942,7 @@ const findPhoneProviders: ProviderEntry[] = [
|
|
|
1940
1942
|
},
|
|
1941
1943
|
{
|
|
1942
1944
|
id: 'limadata',
|
|
1943
|
-
endpoint: '/
|
|
1945
|
+
endpoint: '/limadata/find/phone',
|
|
1944
1946
|
method: 'POST',
|
|
1945
1947
|
priority: 3,
|
|
1946
1948
|
isApplicable: (input) => {
|
|
@@ -2113,7 +2115,7 @@ const enrichCompanyProviders: ProviderEntry[] = [
|
|
|
2113
2115
|
},
|
|
2114
2116
|
{
|
|
2115
2117
|
id: 'limadata',
|
|
2116
|
-
endpoint: '/
|
|
2118
|
+
endpoint: '/limadata/enrich/company',
|
|
2117
2119
|
method: 'POST',
|
|
2118
2120
|
priority: 4,
|
|
2119
2121
|
isApplicable: (input) => !!(input.domain || input.linkedin_url),
|
|
@@ -2295,7 +2297,7 @@ const searchWebProviders: ProviderEntry[] = [
|
|
|
2295
2297
|
},
|
|
2296
2298
|
{
|
|
2297
2299
|
id: 'limadata',
|
|
2298
|
-
endpoint: '/
|
|
2300
|
+
endpoint: '/limadata/search/web',
|
|
2299
2301
|
method: 'POST',
|
|
2300
2302
|
priority: 2,
|
|
2301
2303
|
mapParams: (input) => ({
|
|
@@ -3719,23 +3721,37 @@ export function getProviderApplicabilityGuard(
|
|
|
3719
3721
|
capability: Capability,
|
|
3720
3722
|
providerId: string,
|
|
3721
3723
|
): ((input: Record<string, unknown>) => boolean) | undefined {
|
|
3722
|
-
|
|
3723
|
-
if (!providers) return undefined
|
|
3724
|
-
return providers.find((p) => p.id === providerId)?.isApplicable
|
|
3724
|
+
return getProviders(capability).find((p) => p.id === providerId)?.isApplicable
|
|
3725
3725
|
}
|
|
3726
3726
|
|
|
3727
|
+
const _configuredProvidersCache = new Map<Capability, ProviderEntry[]>()
|
|
3727
3728
|
const _providersCache = new Map<Capability, ProviderEntry[]>()
|
|
3728
3729
|
|
|
3729
3730
|
/**
|
|
3730
|
-
* Get
|
|
3731
|
-
*
|
|
3731
|
+
* Get every configured provider, including disabled definitions retained for
|
|
3732
|
+
* reversibility and regression coverage.
|
|
3732
3733
|
*/
|
|
3733
|
-
export function
|
|
3734
|
-
let cached =
|
|
3734
|
+
export function getConfiguredProviders(capability: Capability): ProviderEntry[] {
|
|
3735
|
+
let cached = _configuredProvidersCache.get(capability)
|
|
3735
3736
|
if (!cached) {
|
|
3736
3737
|
const providers = registry[capability]
|
|
3737
3738
|
if (!providers) throw new Error(`Unknown capability: ${capability}`)
|
|
3738
3739
|
cached = Object.freeze([...providers].sort((a, b) => a.priority - b.priority)) as ProviderEntry[]
|
|
3740
|
+
_configuredProvidersCache.set(capability, cached)
|
|
3741
|
+
}
|
|
3742
|
+
return cached
|
|
3743
|
+
}
|
|
3744
|
+
|
|
3745
|
+
/**
|
|
3746
|
+
* Get the ordered, enabled provider list for a capability.
|
|
3747
|
+
* Returns a frozen filtered copy — cached after the first call (registry is static).
|
|
3748
|
+
*/
|
|
3749
|
+
export function getProviders(capability: Capability): ProviderEntry[] {
|
|
3750
|
+
let cached = _providersCache.get(capability)
|
|
3751
|
+
if (!cached) {
|
|
3752
|
+
cached = Object.freeze(
|
|
3753
|
+
getConfiguredProviders(capability).filter((provider) => isProviderEnabled(provider.id)),
|
|
3754
|
+
) as ProviderEntry[]
|
|
3739
3755
|
_providersCache.set(capability, cached)
|
|
3740
3756
|
}
|
|
3741
3757
|
return cached
|
|
@@ -12,7 +12,7 @@ export const callEndpointDescription =
|
|
|
12
12
|
|
|
13
13
|
export const callEndpointSchema = {
|
|
14
14
|
api: z.string().describe('Provider key from search_endpoints / get_endpoint_details, e.g. "coldiq".'),
|
|
15
|
-
path: z.string().describe('Endpoint path without the /v1 prefix, e.g. "/
|
|
15
|
+
path: z.string().describe('Endpoint path without the /v1 prefix, e.g. "/limadata/prospect/people/filter".'),
|
|
16
16
|
params: z
|
|
17
17
|
.record(z.unknown())
|
|
18
18
|
.optional()
|
package/src/tools/find-email.ts
CHANGED
|
@@ -18,7 +18,7 @@ export const findEmailSchema = {
|
|
|
18
18
|
linkedin_url: z.string().optional().describe('LinkedIn profile URL — alternative to name+domain'),
|
|
19
19
|
resolve_current_employer: z.boolean().optional().describe('Opt-in: on a miss with a linkedin_url, enrich the person to resolve their CURRENT employer\'s domain and retry once — recovers stale/acquired input domains (e.g. Atmel→microchip.com). Extra ~1 credit for the enrich hop, disclosed in _meta.employer_resolution. Default false.'),
|
|
20
20
|
use_providers: z.array(z.string()).optional().describe(`Optional ordered list of providers to use. Leave empty to let ColdIQ automatically pick the best tool for your inputs — recommended for most use cases. Available providers: ${getProvidersForCapability('find_email').join(', ')}. Provider names are matched fuzzily, so minor typos are tolerated.`),
|
|
21
|
-
max_credits: z.number().positive().optional().describe('Per-record spend cap: a provider that would find the email but costs more than this is skipped, so you never pay more than N credits for one email (returns not_found if nothing answers in budget). Stops
|
|
21
|
+
max_credits: z.number().positive().optional().describe('Per-record spend cap: a provider that would find the email but costs more than this is skipped, so you never pay more than N credits for one email (returns not_found if nothing answers in budget). Stops a high-cost provider from dominating a large run.'),
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export async function findEmailHandler(input: Record<string, unknown>) {
|
|
@@ -32,7 +32,7 @@ export const findEmailsBulkSchema = {
|
|
|
32
32
|
.describe('People to find emails for (1–5000). Searchable = linkedin_url alone, OR first_name + last_name + (domain or company_name).'),
|
|
33
33
|
resolve_current_employer: z.boolean().optional().describe('Opt-in, applies to every row: when a row misses and has a linkedin_url, enrich the person to resolve their CURRENT employer\'s domain and retry once — recovers stale/acquired input domains (e.g. Atmel→microchip.com). Extra ~1 credit per resolved row. Default false.'),
|
|
34
34
|
webhook_url: z.string().optional().describe('Optional URL POSTed when the whole job completes.'),
|
|
35
|
-
max_credits: z.number().positive().optional().describe('Per-row spend cap: a provider that would find the email but costs more than this is skipped (the row comes back not_found rather than overspending). Caps
|
|
35
|
+
max_credits: z.number().positive().optional().describe('Per-row spend cap: a provider that would find the email but costs more than this is skipped (the row comes back not_found rather than overspending). Caps high-cost providers across the whole list.'),
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
export async function findEmailsBulkHandler(input: Record<string, unknown>) {
|
package/src/tools/find-emails.ts
CHANGED
|
@@ -32,7 +32,7 @@ export const findEmailsSchema = {
|
|
|
32
32
|
.describe('People to find emails for (max 50)'),
|
|
33
33
|
resolve_current_employer: z.boolean().optional().describe('Opt-in, applies to every person in the batch: on a miss with a linkedin_url, enrich the person to resolve their CURRENT employer\'s domain and retry once — recovers stale/acquired input domains (e.g. Atmel→microchip.com). Extra ~1 credit per resolved person. Default false.'),
|
|
34
34
|
use_providers: z.array(z.string()).optional().describe(`Optional ordered list of providers to use. Leave empty to let ColdIQ automatically run the best waterfall — recommended for most use cases. Available providers: ${FIND_EMAILS_PROVIDERS.join(', ')}. Provider names are matched fuzzily, so minor typos are tolerated.`),
|
|
35
|
-
max_credits: z.number().positive().optional().describe('Per-person spend cap applied to every person in the batch: a provider that would find the email but costs more than this is skipped, so you never pay more than N credits per email. Stops
|
|
35
|
+
max_credits: z.number().positive().optional().describe('Per-person spend cap applied to every person in the batch: a provider that would find the email but costs more than this is skipped, so you never pay more than N credits per email. Stops a high-cost provider from dominating a large run.'),
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
// Split large batches into sequential sub-batches so each HTTP call stays well
|
|
@@ -9,8 +9,8 @@ export const getEndpointDetailsDescription =
|
|
|
9
9
|
'call_endpoint expects. FREE.'
|
|
10
10
|
|
|
11
11
|
export const getEndpointDetailsSchema = {
|
|
12
|
-
api: z.string().describe('Provider key from search_endpoints, e.g. "coldiq" (Lima Data), "apollo", or "
|
|
13
|
-
path: z.string().describe('Endpoint path without the /v1 prefix, e.g. "/
|
|
12
|
+
api: z.string().describe('Provider key from search_endpoints, e.g. "coldiq" (Lima Data), "apollo", or "exa".'),
|
|
13
|
+
path: z.string().describe('Endpoint path without the /v1 prefix, e.g. "/limadata/prospect/people/filter".'),
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
export async function getEndpointDetailsHandler(input: Record<string, unknown>) {
|
|
@@ -6,7 +6,7 @@ export const searchCompaniesName = 'search_companies'
|
|
|
6
6
|
|
|
7
7
|
export const searchCompaniesDescription =
|
|
8
8
|
'Search B2B companies by industry, size, geography, founding year, tech stack, funding, revenue, exclusion lists, and hiring signals. To build a lookalike TAM from example accounts, pass `similar_to_domains` (seed company domains) — the request routes to DiscoLike\'s lookalike discovery over 70M companies, optionally narrowed by keywords/geo/size. Routing is otherwise automatic: strict firmographic filters (revenue, employee bands, exclusion lists) get high-precision providers first; tech-stack and funding-stage filters route to specialized providers; loose keyword/geo searches fall back to broad providers; a LinkedIn Sales Navigator search URL enables URL-based discovery as a final fallback. For buying-intent topic discovery (find companies associated with intent keywords like "sales automation" or "lead generation"), pass `keywords` with `use_providers: ["theirstack"]` — this routes to TheirStack\'s intent-keyword index instead of the default full-text match. For "fast-growing" companies there is no exact workforce-growth % filter anywhere — pass min_workforce_growth_pct (and/or is_hiring / a recent-funding filter) and ColdIQ routes to active-hiring and recently-funded providers, the practical proxies for growth. ColdIQ automatically picks the best provider — pass use_providers only if you need a specific tool. Default limit: 25. ' +
|
|
9
|
-
'Response is compact by default (name, domain, website, linkedin_url, employees, revenue, industry, country, city, founded_year, categories) — everything needed to act on a company or feed it into find_people. Set fields="verbose" only when you specifically need the full firmographic record (funding history, technologies, keywords, NAICS codes, all socials, descriptions).'
|
|
9
|
+
'Employee and revenue bounds are exact when the selected provider returns exact values. Bucket-only providers widen non-aligned bounds to overlapping buckets and disclose that in `_meta.filter_approximations`. Response is compact by default (name, domain, website, linkedin_url, employees, revenue, industry, country, city, founded_year, categories) — everything needed to act on a company or feed it into find_people. Set fields="verbose" only when you specifically need the full firmographic record (funding history, technologies, keywords, NAICS codes, all socials, descriptions).'
|
|
10
10
|
|
|
11
11
|
export const searchCompaniesSchema = {
|
|
12
12
|
keywords: z.array(z.string()).optional().describe('Free-text topics, business models, or themes — e.g. ["SaaS", "fintech", "cybersecurity"]. Best for most discovery: matched broadly across company name, description, and tags. Prefer this over `industries` for terms like "SaaS" that are business models rather than formal industry categories.'),
|
|
@@ -15,8 +15,8 @@ export const searchCompaniesSchema = {
|
|
|
15
15
|
locations: z.array(z.string()).optional().describe('City/region filters as free-text strings (e.g. ["Paris, France", "San Francisco, California"]). Narrows results beyond country-level.'),
|
|
16
16
|
industries: z.array(z.string()).optional().describe('Formal industry-taxonomy categories — e.g. ["Financial Services", "Hospitals and Health Care"]. Use only for strict industry classification; for business models or themes like "SaaS" or "fintech", use `keywords` instead. Both fields are searched together when set.'),
|
|
17
17
|
technologies: z.array(z.string()).optional().describe('Tech stack filters — routes to tech-aware providers. Pass technology names or slugs e.g. ["Salesforce", "HubSpot"].'),
|
|
18
|
-
min_employees: z.number().optional().describe('Minimum employee count'),
|
|
19
|
-
max_employees: z.number().optional().describe('Maximum employee count'),
|
|
18
|
+
min_employees: z.number().optional().describe('Minimum employee count. Bucket-only providers may widen non-aligned bounds; see _meta.filter_approximations.'),
|
|
19
|
+
max_employees: z.number().optional().describe('Maximum employee count. Bucket-only providers may widen non-aligned bounds; see _meta.filter_approximations.'),
|
|
20
20
|
min_founded_year: z.number().optional().describe('Earliest founding year'),
|
|
21
21
|
max_founded_year: z.number().optional().describe('Latest founding year'),
|
|
22
22
|
funding_stages: z.array(z.string()).optional().describe('Funding stage filters e.g. ["seed", "series_a", "series_b"]. Exact stage IDs vary by provider.'),
|
|
@@ -24,8 +24,8 @@ export const searchCompaniesSchema = {
|
|
|
24
24
|
max_funding_amount: z.number().optional().describe('Maximum total funding raised (USD)'),
|
|
25
25
|
min_funding_year: z.number().optional().describe('Earliest year of last funding round'),
|
|
26
26
|
max_funding_year: z.number().optional().describe('Latest year of last funding round'),
|
|
27
|
-
min_revenue: z.number().optional().describe('Minimum estimated annual revenue (USD)'),
|
|
28
|
-
max_revenue: z.number().optional().describe('Maximum estimated annual revenue (USD)'),
|
|
27
|
+
min_revenue: z.number().optional().describe('Minimum estimated annual revenue (USD). Bucket-only providers may widen non-aligned bounds; see _meta.filter_approximations.'),
|
|
28
|
+
max_revenue: z.number().optional().describe('Maximum estimated annual revenue (USD). Bucket-only providers may widen non-aligned bounds; see _meta.filter_approximations.'),
|
|
29
29
|
exclude_domains: z.array(z.string()).optional().describe('Company domains to exclude from results'),
|
|
30
30
|
exclude_industries: z.array(z.string()).optional().describe('Industry names to exclude from results'),
|
|
31
31
|
exclude_countries: z.array(z.string()).optional().describe('2-letter ISO country codes to exclude from results'),
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { listCapabilityProviderIds, getProviderApplicabilityGuard } from '../registry.js'
|
|
2
2
|
import type { Capability } from '../registry.js'
|
|
3
|
+
import { isProviderEnabled } from '../provider-availability.js'
|
|
3
4
|
import { fuzzyMatch } from './fuzzy.js'
|
|
4
5
|
|
|
5
6
|
// find_emails uses a custom waterfall — its providers are not in the registry.
|
|
6
7
|
// Exported so find-emails.ts stays in sync without a second hardcoded list.
|
|
7
8
|
// Order = auto-route execution order: bulk providers first (Steps 1-3), then
|
|
8
9
|
// the single-find_email fallback providers used for stragglers (Step 4).
|
|
9
|
-
export const
|
|
10
|
+
export const CONFIGURED_FIND_EMAILS_PROVIDERS = [
|
|
10
11
|
'limadata-work-email',
|
|
11
12
|
'leadmagic',
|
|
12
13
|
'prospeo',
|
|
@@ -20,6 +21,8 @@ export const FIND_EMAILS_PROVIDERS = [
|
|
|
20
21
|
'icypeas',
|
|
21
22
|
]
|
|
22
23
|
|
|
24
|
+
export const FIND_EMAILS_PROVIDERS = CONFIGURED_FIND_EMAILS_PROVIDERS.filter(isProviderEnabled)
|
|
25
|
+
|
|
23
26
|
export function getProvidersForCapability(capability: Capability | 'find_emails'): string[] {
|
|
24
27
|
if (capability === 'find_emails') return FIND_EMAILS_PROVIDERS
|
|
25
28
|
return listCapabilityProviderIds(capability as Capability)
|