@coldiq/mcp 0.3.20 → 0.3.22
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 +10 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/enrich-company-bulk.d.ts +27 -0
- package/dist/tools/enrich-company-bulk.d.ts.map +1 -0
- package/dist/tools/enrich-company-bulk.js +24 -0
- package/dist/tools/enrich-company-bulk.js.map +1 -0
- package/dist/tools/enrich-person-bulk.d.ts +36 -0
- package/dist/tools/enrich-person-bulk.d.ts.map +1 -0
- package/dist/tools/enrich-person-bulk.js +27 -0
- package/dist/tools/enrich-person-bulk.js.map +1 -0
- package/dist/tools/find-emails-bulk.d.ts +33 -0
- package/dist/tools/find-emails-bulk.d.ts.map +1 -0
- package/dist/tools/find-emails-bulk.js +26 -0
- package/dist/tools/find-emails-bulk.js.map +1 -0
- package/dist/tools/find-emails.js +4 -4
- package/dist/tools/find-emails.js.map +1 -1
- package/dist/tools/get-bulk-job.d.ts +16 -0
- package/dist/tools/get-bulk-job.d.ts.map +1 -0
- package/dist/tools/get-bulk-job.js +17 -0
- package/dist/tools/get-bulk-job.js.map +1 -0
- package/dist/tools/verify-emails-bulk.d.ts +15 -0
- package/dist/tools/verify-emails-bulk.d.ts.map +1 -0
- package/dist/tools/verify-emails-bulk.js +16 -0
- package/dist/tools/verify-emails-bulk.js.map +1 -0
- package/package.json +1 -1
- package/src/index.ts +11 -0
- package/src/tools/enrich-company-bulk.ts +30 -0
- package/src/tools/enrich-person-bulk.ts +33 -0
- package/src/tools/find-emails-bulk.ts +32 -0
- package/src/tools/find-emails.ts +4 -4
- package/src/tools/get-bulk-job.ts +21 -0
- package/src/tools/verify-emails-bulk.ts +20 -0
- package/tests/bulk-tools.test.ts +48 -0
- package/tests/enrich-bulk-tools.test.ts +54 -0
- package/tests/tools/find-emails.test.ts +14 -14
package/dist/index.js
CHANGED
|
@@ -8,6 +8,11 @@ import { findEmailName, findEmailDescription, findEmailSchema, findEmailHandler,
|
|
|
8
8
|
import { enrichPersonName, enrichPersonDescription, enrichPersonSchema, enrichPersonHandler, } from './tools/enrich-person.js';
|
|
9
9
|
import { findEmailsName, findEmailsDescription, findEmailsSchema, findEmailsHandler, } from './tools/find-emails.js';
|
|
10
10
|
import { verifyEmailName, verifyEmailDescription, verifyEmailSchema, verifyEmailHandler, } from './tools/verify-email.js';
|
|
11
|
+
import { verifyEmailsBulkName, verifyEmailsBulkDescription, verifyEmailsBulkSchema, verifyEmailsBulkHandler } from './tools/verify-emails-bulk.js';
|
|
12
|
+
import { findEmailsBulkName, findEmailsBulkDescription, findEmailsBulkSchema, findEmailsBulkHandler } from './tools/find-emails-bulk.js';
|
|
13
|
+
import { enrichPersonBulkName, enrichPersonBulkDescription, enrichPersonBulkSchema, enrichPersonBulkHandler } from './tools/enrich-person-bulk.js';
|
|
14
|
+
import { enrichCompanyBulkName, enrichCompanyBulkDescription, enrichCompanyBulkSchema, enrichCompanyBulkHandler } from './tools/enrich-company-bulk.js';
|
|
15
|
+
import { getBulkJobName, getBulkJobDescription, getBulkJobSchema, getBulkJobHandler } from './tools/get-bulk-job.js';
|
|
11
16
|
import { findPhoneName, findPhoneDescription, findPhoneSchema, findPhoneHandler, } from './tools/find-phone.js';
|
|
12
17
|
import { enrichCompanyName, enrichCompanyDescription, enrichCompanySchema, enrichCompanyHandler, } from './tools/enrich-company.js';
|
|
13
18
|
import { searchWebName, searchWebDescription, searchWebSchema, searchWebHandler, } from './tools/search-web.js';
|
|
@@ -50,6 +55,11 @@ server.tool(findEmailName, findEmailDescription, findEmailSchema, findEmailHandl
|
|
|
50
55
|
server.tool(enrichPersonName, enrichPersonDescription, enrichPersonSchema, enrichPersonHandler);
|
|
51
56
|
server.tool(findEmailsName, findEmailsDescription, findEmailsSchema, findEmailsHandler);
|
|
52
57
|
server.tool(verifyEmailName, verifyEmailDescription, verifyEmailSchema, verifyEmailHandler);
|
|
58
|
+
server.tool(verifyEmailsBulkName, verifyEmailsBulkDescription, verifyEmailsBulkSchema, verifyEmailsBulkHandler);
|
|
59
|
+
server.tool(findEmailsBulkName, findEmailsBulkDescription, findEmailsBulkSchema, findEmailsBulkHandler);
|
|
60
|
+
server.tool(enrichPersonBulkName, enrichPersonBulkDescription, enrichPersonBulkSchema, enrichPersonBulkHandler);
|
|
61
|
+
server.tool(enrichCompanyBulkName, enrichCompanyBulkDescription, enrichCompanyBulkSchema, enrichCompanyBulkHandler);
|
|
62
|
+
server.tool(getBulkJobName, getBulkJobDescription, getBulkJobSchema, getBulkJobHandler);
|
|
53
63
|
server.tool(findPhoneName, findPhoneDescription, findPhoneSchema, findPhoneHandler);
|
|
54
64
|
server.tool(enrichCompanyName, enrichCompanyDescription, enrichCompanySchema, enrichCompanyHandler);
|
|
55
65
|
server.tool(searchWebName, searchWebDescription, searchWebSchema, searchWebHandler);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const enrichCompanyBulkName = "enrich_company_bulk";
|
|
3
|
+
export declare const enrichCompanyBulkDescription: string;
|
|
4
|
+
export declare const enrichCompanyBulkSchema: {
|
|
5
|
+
inputs: z.ZodArray<z.ZodObject<{
|
|
6
|
+
domain: z.ZodOptional<z.ZodString>;
|
|
7
|
+
linkedin_url: z.ZodOptional<z.ZodString>;
|
|
8
|
+
name: z.ZodOptional<z.ZodString>;
|
|
9
|
+
}, "strip", z.ZodTypeAny, {
|
|
10
|
+
linkedin_url?: string | undefined;
|
|
11
|
+
domain?: string | undefined;
|
|
12
|
+
name?: string | undefined;
|
|
13
|
+
}, {
|
|
14
|
+
linkedin_url?: string | undefined;
|
|
15
|
+
domain?: string | undefined;
|
|
16
|
+
name?: string | undefined;
|
|
17
|
+
}>, "many">;
|
|
18
|
+
webhook_url: z.ZodOptional<z.ZodString>;
|
|
19
|
+
};
|
|
20
|
+
export declare function enrichCompanyBulkHandler(input: Record<string, unknown>): Promise<{
|
|
21
|
+
content: {
|
|
22
|
+
type: "text";
|
|
23
|
+
text: string;
|
|
24
|
+
}[];
|
|
25
|
+
isError: boolean;
|
|
26
|
+
}>;
|
|
27
|
+
//# sourceMappingURL=enrich-company-bulk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich-company-bulk.d.ts","sourceRoot":"","sources":["../../src/tools/enrich-company-bulk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,qBAAqB,wBAAwB,CAAA;AAE1D,eAAO,MAAM,4BAA4B,QAIwE,CAAA;AAEjH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;CAanC,CAAA;AAED,wBAAsB,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;GAG5E"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { callApi } from '../client.js';
|
|
3
|
+
export const enrichCompanyBulkName = 'enrich_company_bulk';
|
|
4
|
+
export const enrichCompanyBulkDescription = 'Enrich up to 5,000 companies (size, industry, funding, technologies, social profiles) in one ASYNC job. Returns a job_id immediately — this does NOT return firmographics inline. ' +
|
|
5
|
+
'Poll get_bulk_job(job_id) until status is "done" (drains over a few minutes), then page through rows. ' +
|
|
6
|
+
'Each row runs the same managed waterfall as enrich_company; provide at least one of domain, linkedin_url, or name per company. ' +
|
|
7
|
+
'Charged only per row a provider enriches (misses are free). For a single company, use enrich_company instead.';
|
|
8
|
+
export const enrichCompanyBulkSchema = {
|
|
9
|
+
inputs: z
|
|
10
|
+
.array(z.object({
|
|
11
|
+
domain: z.string().optional().describe('Company domain (e.g. "coldiq.com").'),
|
|
12
|
+
linkedin_url: z.string().optional().describe('Company LinkedIn URL.'),
|
|
13
|
+
name: z.string().optional().describe('Company name (e.g. "ColdIQ").'),
|
|
14
|
+
}))
|
|
15
|
+
.min(1)
|
|
16
|
+
.max(5000)
|
|
17
|
+
.describe('Companies to enrich (1–5000). Each needs at least one of domain, linkedin_url, or name.'),
|
|
18
|
+
webhook_url: z.string().optional().describe('Optional URL POSTed when the whole job completes.'),
|
|
19
|
+
};
|
|
20
|
+
export async function enrichCompanyBulkHandler(input) {
|
|
21
|
+
const res = await callApi('POST', '/company/enrich/bulk/submit', input);
|
|
22
|
+
return { content: [{ type: 'text', text: JSON.stringify(res.data) }], isError: !res.ok };
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=enrich-company-bulk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich-company-bulk.js","sourceRoot":"","sources":["../../src/tools/enrich-company-bulk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,qBAAqB,GAAG,qBAAqB,CAAA;AAE1D,MAAM,CAAC,MAAM,4BAA4B,GACvC,oLAAoL;IACpL,wGAAwG;IACxG,iIAAiI;IACjI,+GAA+G,CAAA;AAEjH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,MAAM,EAAE,CAAC;SACN,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;QAC7E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACrE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KACtE,CAAC,CACH;SACA,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CAAC,yFAAyF,CAAC;IACtG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CACjG,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,KAA8B;IAC3E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,6BAA6B,EAAE,KAAK,CAAC,CAAA;IACvE,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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const enrichPersonBulkName = "enrich_person_bulk";
|
|
3
|
+
export declare const enrichPersonBulkDescription: string;
|
|
4
|
+
export declare const enrichPersonBulkSchema: {
|
|
5
|
+
inputs: z.ZodArray<z.ZodObject<{
|
|
6
|
+
email: z.ZodOptional<z.ZodString>;
|
|
7
|
+
linkedin_url: z.ZodOptional<z.ZodString>;
|
|
8
|
+
first_name: z.ZodOptional<z.ZodString>;
|
|
9
|
+
last_name: z.ZodOptional<z.ZodString>;
|
|
10
|
+
company_name: z.ZodOptional<z.ZodString>;
|
|
11
|
+
domain: z.ZodOptional<z.ZodString>;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
linkedin_url?: string | undefined;
|
|
14
|
+
domain?: string | undefined;
|
|
15
|
+
first_name?: string | undefined;
|
|
16
|
+
company_name?: string | undefined;
|
|
17
|
+
last_name?: string | undefined;
|
|
18
|
+
email?: string | undefined;
|
|
19
|
+
}, {
|
|
20
|
+
linkedin_url?: string | undefined;
|
|
21
|
+
domain?: string | undefined;
|
|
22
|
+
first_name?: string | undefined;
|
|
23
|
+
company_name?: string | undefined;
|
|
24
|
+
last_name?: string | undefined;
|
|
25
|
+
email?: string | undefined;
|
|
26
|
+
}>, "many">;
|
|
27
|
+
webhook_url: z.ZodOptional<z.ZodString>;
|
|
28
|
+
};
|
|
29
|
+
export declare function enrichPersonBulkHandler(input: Record<string, unknown>): Promise<{
|
|
30
|
+
content: {
|
|
31
|
+
type: "text";
|
|
32
|
+
text: string;
|
|
33
|
+
}[];
|
|
34
|
+
isError: boolean;
|
|
35
|
+
}>;
|
|
36
|
+
//# sourceMappingURL=enrich-person-bulk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich-person-bulk.d.ts","sourceRoot":"","sources":["../../src/tools/enrich-person-bulk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,oBAAoB,uBAAuB,CAAA;AAExD,eAAO,MAAM,2BAA2B,QAIuE,CAAA;AAE/G,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;CAgBlC,CAAA;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;GAG3E"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { callApi } from '../client.js';
|
|
3
|
+
export const enrichPersonBulkName = 'enrich_person_bulk';
|
|
4
|
+
export const enrichPersonBulkDescription = 'Enrich up to 5,000 people (LinkedIn profile + professional details) in one ASYNC job. Returns a job_id immediately — this does NOT return profiles inline. ' +
|
|
5
|
+
'Poll get_bulk_job(job_id) until status is "done" (drains over a few minutes), then page through rows. ' +
|
|
6
|
+
'Each row runs the same managed waterfall as enrich_person; provide an email, a linkedin_url, or name + company/domain per person. ' +
|
|
7
|
+
'Charged only per row a provider enriches (misses are free). For a single person, use enrich_person instead.';
|
|
8
|
+
export const enrichPersonBulkSchema = {
|
|
9
|
+
inputs: z
|
|
10
|
+
.array(z.object({
|
|
11
|
+
email: z.string().optional().describe('Work email — strongest identifier.'),
|
|
12
|
+
linkedin_url: z.string().optional().describe('LinkedIn profile URL.'),
|
|
13
|
+
first_name: z.string().optional().describe('First name (use with last_name + company/domain).'),
|
|
14
|
+
last_name: z.string().optional().describe('Last name.'),
|
|
15
|
+
company_name: z.string().optional().describe('Company name — alternative to domain.'),
|
|
16
|
+
domain: z.string().optional().describe('Company domain (e.g. "coldiq.com").'),
|
|
17
|
+
}))
|
|
18
|
+
.min(1)
|
|
19
|
+
.max(5000)
|
|
20
|
+
.describe('People to enrich (1–5000). Each needs an email, a linkedin_url, or name + company/domain.'),
|
|
21
|
+
webhook_url: z.string().optional().describe('Optional URL POSTed when the whole job completes.'),
|
|
22
|
+
};
|
|
23
|
+
export async function enrichPersonBulkHandler(input) {
|
|
24
|
+
const res = await callApi('POST', '/person/enrich/bulk/submit', input);
|
|
25
|
+
return { content: [{ type: 'text', text: JSON.stringify(res.data) }], isError: !res.ok };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=enrich-person-bulk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich-person-bulk.js","sourceRoot":"","sources":["../../src/tools/enrich-person-bulk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,oBAAoB,GAAG,oBAAoB,CAAA;AAExD,MAAM,CAAC,MAAM,2BAA2B,GACtC,6JAA6J;IAC7J,wGAAwG;IACxG,oIAAoI;IACpI,6GAA6G,CAAA;AAE/G,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM,EAAE,CAAC;SACN,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;QAC3E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACrE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;QAC/F,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;QACvD,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;QACrF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;KAC9E,CAAC,CACH;SACA,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CAAC,2FAA2F,CAAC;IACxG,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CACjG,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAA8B;IAC1E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,4BAA4B,EAAE,KAAK,CAAC,CAAA;IACtE,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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const findEmailsBulkName = "find_emails_bulk";
|
|
3
|
+
export declare const findEmailsBulkDescription: string;
|
|
4
|
+
export declare const findEmailsBulkSchema: {
|
|
5
|
+
people: z.ZodArray<z.ZodObject<{
|
|
6
|
+
id: z.ZodOptional<z.ZodString>;
|
|
7
|
+
first_name: z.ZodOptional<z.ZodString>;
|
|
8
|
+
last_name: z.ZodOptional<z.ZodString>;
|
|
9
|
+
domain: z.ZodOptional<z.ZodString>;
|
|
10
|
+
linkedin_url: z.ZodOptional<z.ZodString>;
|
|
11
|
+
}, "strip", z.ZodTypeAny, {
|
|
12
|
+
id?: string | undefined;
|
|
13
|
+
linkedin_url?: string | undefined;
|
|
14
|
+
domain?: string | undefined;
|
|
15
|
+
first_name?: string | undefined;
|
|
16
|
+
last_name?: string | undefined;
|
|
17
|
+
}, {
|
|
18
|
+
id?: string | undefined;
|
|
19
|
+
linkedin_url?: string | undefined;
|
|
20
|
+
domain?: string | undefined;
|
|
21
|
+
first_name?: string | undefined;
|
|
22
|
+
last_name?: string | undefined;
|
|
23
|
+
}>, "many">;
|
|
24
|
+
webhook_url: z.ZodOptional<z.ZodString>;
|
|
25
|
+
};
|
|
26
|
+
export declare function findEmailsBulkHandler(input: Record<string, unknown>): Promise<{
|
|
27
|
+
content: {
|
|
28
|
+
type: "text";
|
|
29
|
+
text: string;
|
|
30
|
+
}[];
|
|
31
|
+
isError: boolean;
|
|
32
|
+
}>;
|
|
33
|
+
//# sourceMappingURL=find-emails-bulk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find-emails-bulk.d.ts","sourceRoot":"","sources":["../../src/tools/find-emails-bulk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,kBAAkB,qBAAqB,CAAA;AAEpD,eAAO,MAAM,yBAAyB,QAIsE,CAAA;AAE5G,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;CAehC,CAAA;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;GAGzE"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { callApi } from '../client.js';
|
|
3
|
+
export const findEmailsBulkName = 'find_emails_bulk';
|
|
4
|
+
export const findEmailsBulkDescription = 'Find professional emails for up to 5,000 people in one ASYNC job. Returns a job_id immediately — this does NOT return emails inline. ' +
|
|
5
|
+
'Poll get_bulk_job(job_id) until status is "done" (usually minutes), then read the found/not_found summary and page through rows. ' +
|
|
6
|
+
'Each person should have first_name + last_name + domain (people missing those come back as not_found and are not charged). ' +
|
|
7
|
+
'Charged only per found email. For 50 or fewer people that you want back inline, use find_emails instead.';
|
|
8
|
+
export const findEmailsBulkSchema = {
|
|
9
|
+
people: z
|
|
10
|
+
.array(z.object({
|
|
11
|
+
id: z.string().optional().describe('Your correlation id (results echo back by row order; an id is convenient but optional).'),
|
|
12
|
+
first_name: z.string().optional().describe('First name'),
|
|
13
|
+
last_name: z.string().optional().describe('Last name'),
|
|
14
|
+
domain: z.string().optional().describe('Company domain (e.g. "stripe.com")'),
|
|
15
|
+
linkedin_url: z.string().optional().describe('LinkedIn profile URL (optional)'),
|
|
16
|
+
}))
|
|
17
|
+
.min(1)
|
|
18
|
+
.max(5000)
|
|
19
|
+
.describe('People to find emails for (1–5000). Each needs first_name + last_name + domain to be searched.'),
|
|
20
|
+
webhook_url: z.string().optional().describe('Optional URL POSTed when the whole job completes.'),
|
|
21
|
+
};
|
|
22
|
+
export async function findEmailsBulkHandler(input) {
|
|
23
|
+
const res = await callApi('POST', '/email/find/bulk/submit', input);
|
|
24
|
+
return { content: [{ type: 'text', text: JSON.stringify(res.data) }], isError: !res.ok };
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=find-emails-bulk.js.map
|
|
@@ -0,0 +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,uIAAuI;IACvI,mIAAmI;IACnI,6HAA6H;IAC7H,0GAA0G,CAAA;AAE5G,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,iCAAiC,CAAC;KAChF,CAAC,CACH;SACA,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,IAAI,CAAC;SACT,QAAQ,CAAC,gGAAgG,CAAC;IAC7G,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CACjG,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"}
|
|
@@ -25,10 +25,10 @@ export const findEmailsSchema = {
|
|
|
25
25
|
};
|
|
26
26
|
// Split large batches into sequential sub-batches so each HTTP call stays well
|
|
27
27
|
// under the server's bulk wall-clock budget (and thus Cloudflare's ~100s edge
|
|
28
|
-
// cutoff).
|
|
29
|
-
//
|
|
30
|
-
//
|
|
31
|
-
const FIND_EMAILS_CHUNK_SIZE =
|
|
28
|
+
// cutoff). Field feedback measured batches of 25 collapsing to ~10–16% success
|
|
29
|
+
// under upstream concurrency, while batches of 10 land 80–90% — so chunk at 10.
|
|
30
|
+
// For lists beyond ~50, use the async find_emails_bulk tool (handles up to 5,000).
|
|
31
|
+
const FIND_EMAILS_CHUNK_SIZE = 10;
|
|
32
32
|
function toolResult(payload, isError) {
|
|
33
33
|
return { content: [{ type: 'text', text: JSON.stringify(payload) }], isError };
|
|
34
34
|
}
|
|
@@ -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,qGAAqG,CAAA;AAEvG,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,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;CAClU,CAAA;AAED,+EAA+E;AAC/E,8EAA8E;AAC9E
|
|
1
|
+
{"version":3,"file":"find-emails.js","sourceRoot":"","sources":["../../src/tools/find-emails.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getBulkJobName = "get_bulk_job";
|
|
3
|
+
export declare const getBulkJobDescription: string;
|
|
4
|
+
export declare const getBulkJobSchema: {
|
|
5
|
+
job_id: z.ZodNumber;
|
|
6
|
+
cursor: z.ZodOptional<z.ZodNumber>;
|
|
7
|
+
limit: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
};
|
|
9
|
+
export declare function getBulkJobHandler(input: Record<string, unknown>): Promise<{
|
|
10
|
+
content: {
|
|
11
|
+
type: "text";
|
|
12
|
+
text: string;
|
|
13
|
+
}[];
|
|
14
|
+
isError: boolean;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=get-bulk-job.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-bulk-job.d.ts","sourceRoot":"","sources":["../../src/tools/get-bulk-job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,cAAc,iBAAiB,CAAA;AAE5C,eAAO,MAAM,qBAAqB,QAG2F,CAAA;AAE7H,eAAO,MAAM,gBAAgB;;;;CAI5B,CAAA;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;GAIrE"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { callApi } from '../client.js';
|
|
3
|
+
export const getBulkJobName = 'get_bulk_job';
|
|
4
|
+
export const getBulkJobDescription = 'Poll an async bulk job (from verify_emails_bulk or find_emails_bulk). Returns { status, items_total, items_processed, summary, page }. ' +
|
|
5
|
+
'Poll until status is "done" (or "timed_out"). Use the `summary` per-verdict counts for totals — do NOT expect all rows inline: ' +
|
|
6
|
+
'rows come one page at a time (default 100). To page, call again with cursor = page.next_cursor until next_cursor is null.';
|
|
7
|
+
export const getBulkJobSchema = {
|
|
8
|
+
job_id: z.number().int().describe('The job_id returned by verify_emails_bulk / find_emails_bulk.'),
|
|
9
|
+
cursor: z.number().int().optional().describe('Pagination cursor (row index) from the previous page.next_cursor.'),
|
|
10
|
+
limit: z.number().int().min(1).max(1000).optional().describe('Rows per page (default 100, max 1000).'),
|
|
11
|
+
};
|
|
12
|
+
export async function getBulkJobHandler(input) {
|
|
13
|
+
const { job_id, ...body } = input;
|
|
14
|
+
const res = await callApi('POST', `/jobs/${job_id}/results`, body);
|
|
15
|
+
return { content: [{ type: 'text', text: JSON.stringify(res.data) }], isError: !res.ok };
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=get-bulk-job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-bulk-job.js","sourceRoot":"","sources":["../../src/tools/get-bulk-job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAA;AAE5C,MAAM,CAAC,MAAM,qBAAqB,GAChC,yIAAyI;IACzI,iIAAiI;IACjI,2HAA2H,CAAA;AAE7H,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,+DAA+D,CAAC;IAClG,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;IACjH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CACvG,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAA8B;IACpE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAA;IACjC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,SAAS,MAAM,UAAU,EAAE,IAAI,CAAC,CAAA;IAClE,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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const verifyEmailsBulkName = "verify_emails_bulk";
|
|
3
|
+
export declare const verifyEmailsBulkDescription: string;
|
|
4
|
+
export declare const verifyEmailsBulkSchema: {
|
|
5
|
+
emails: z.ZodArray<z.ZodString, "many">;
|
|
6
|
+
webhook_url: z.ZodOptional<z.ZodString>;
|
|
7
|
+
};
|
|
8
|
+
export declare function verifyEmailsBulkHandler(input: Record<string, unknown>): Promise<{
|
|
9
|
+
content: {
|
|
10
|
+
type: "text";
|
|
11
|
+
text: string;
|
|
12
|
+
}[];
|
|
13
|
+
isError: boolean;
|
|
14
|
+
}>;
|
|
15
|
+
//# sourceMappingURL=verify-emails-bulk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-emails-bulk.d.ts","sourceRoot":"","sources":["../../src/tools/verify-emails-bulk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,oBAAoB,uBAAuB,CAAA;AAExD,eAAO,MAAM,2BAA2B,QAIQ,CAAA;AAEhD,eAAO,MAAM,sBAAsB;;;CAGlC,CAAA;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;GAG3E"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { callApi } from '../client.js';
|
|
3
|
+
export const verifyEmailsBulkName = 'verify_emails_bulk';
|
|
4
|
+
export const verifyEmailsBulkDescription = 'Verify up to 5,000 emails in one ASYNC job. Returns a job_id immediately — this does NOT return verdicts inline. ' +
|
|
5
|
+
'Poll get_bulk_job(job_id) until status is "done" (usually minutes), then read the per-verdict summary counts and page through rows. ' +
|
|
6
|
+
'Charged only per conclusively-verified email (deliverable/catch-all addresses are sendable; unverifiable rows are free). ' +
|
|
7
|
+
'For a single email use verify_email instead.';
|
|
8
|
+
export const verifyEmailsBulkSchema = {
|
|
9
|
+
emails: z.array(z.string()).min(1).max(5000).describe('Emails to verify (1–5000). Invalid/duplicate entries are dropped server-side.'),
|
|
10
|
+
webhook_url: z.string().optional().describe('Optional URL POSTed when the whole job completes.'),
|
|
11
|
+
};
|
|
12
|
+
export async function verifyEmailsBulkHandler(input) {
|
|
13
|
+
const res = await callApi('POST', '/email/verify/bulk/submit', input);
|
|
14
|
+
return { content: [{ type: 'text', text: JSON.stringify(res.data) }], isError: !res.ok };
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=verify-emails-bulk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-emails-bulk.js","sourceRoot":"","sources":["../../src/tools/verify-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,oBAAoB,GAAG,oBAAoB,CAAA;AAExD,MAAM,CAAC,MAAM,2BAA2B,GACtC,mHAAmH;IACnH,sIAAsI;IACtI,2HAA2H;IAC3H,8CAA8C,CAAA;AAEhD,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,+EAA+E,CAAC;IACtI,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;CACjG,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,KAA8B;IAC1E,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,2BAA2B,EAAE,KAAK,CAAC,CAAA;IACrE,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"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -46,6 +46,12 @@ import {
|
|
|
46
46
|
verifyEmailHandler,
|
|
47
47
|
} from './tools/verify-email.js'
|
|
48
48
|
|
|
49
|
+
import { verifyEmailsBulkName, verifyEmailsBulkDescription, verifyEmailsBulkSchema, verifyEmailsBulkHandler } from './tools/verify-emails-bulk.js'
|
|
50
|
+
import { findEmailsBulkName, findEmailsBulkDescription, findEmailsBulkSchema, findEmailsBulkHandler } from './tools/find-emails-bulk.js'
|
|
51
|
+
import { enrichPersonBulkName, enrichPersonBulkDescription, enrichPersonBulkSchema, enrichPersonBulkHandler } from './tools/enrich-person-bulk.js'
|
|
52
|
+
import { enrichCompanyBulkName, enrichCompanyBulkDescription, enrichCompanyBulkSchema, enrichCompanyBulkHandler } from './tools/enrich-company-bulk.js'
|
|
53
|
+
import { getBulkJobName, getBulkJobDescription, getBulkJobSchema, getBulkJobHandler } from './tools/get-bulk-job.js'
|
|
54
|
+
|
|
49
55
|
import {
|
|
50
56
|
findPhoneName,
|
|
51
57
|
findPhoneDescription,
|
|
@@ -201,6 +207,11 @@ server.tool(findEmailName, findEmailDescription, findEmailSchema, findEmailHandl
|
|
|
201
207
|
server.tool(enrichPersonName, enrichPersonDescription, enrichPersonSchema, enrichPersonHandler)
|
|
202
208
|
server.tool(findEmailsName, findEmailsDescription, findEmailsSchema, findEmailsHandler)
|
|
203
209
|
server.tool(verifyEmailName, verifyEmailDescription, verifyEmailSchema, verifyEmailHandler)
|
|
210
|
+
server.tool(verifyEmailsBulkName, verifyEmailsBulkDescription, verifyEmailsBulkSchema, verifyEmailsBulkHandler)
|
|
211
|
+
server.tool(findEmailsBulkName, findEmailsBulkDescription, findEmailsBulkSchema, findEmailsBulkHandler)
|
|
212
|
+
server.tool(enrichPersonBulkName, enrichPersonBulkDescription, enrichPersonBulkSchema, enrichPersonBulkHandler)
|
|
213
|
+
server.tool(enrichCompanyBulkName, enrichCompanyBulkDescription, enrichCompanyBulkSchema, enrichCompanyBulkHandler)
|
|
214
|
+
server.tool(getBulkJobName, getBulkJobDescription, getBulkJobSchema, getBulkJobHandler)
|
|
204
215
|
server.tool(findPhoneName, findPhoneDescription, findPhoneSchema, findPhoneHandler)
|
|
205
216
|
server.tool(enrichCompanyName, enrichCompanyDescription, enrichCompanySchema, enrichCompanyHandler)
|
|
206
217
|
server.tool(searchWebName, searchWebDescription, searchWebSchema, searchWebHandler)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { callApi } from '../client.js'
|
|
3
|
+
|
|
4
|
+
export const enrichCompanyBulkName = 'enrich_company_bulk'
|
|
5
|
+
|
|
6
|
+
export const enrichCompanyBulkDescription =
|
|
7
|
+
'Enrich up to 5,000 companies (size, industry, funding, technologies, social profiles) in one ASYNC job. Returns a job_id immediately — this does NOT return firmographics inline. ' +
|
|
8
|
+
'Poll get_bulk_job(job_id) until status is "done" (drains over a few minutes), then page through rows. ' +
|
|
9
|
+
'Each row runs the same managed waterfall as enrich_company; provide at least one of domain, linkedin_url, or name per company. ' +
|
|
10
|
+
'Charged only per row a provider enriches (misses are free). For a single company, use enrich_company instead.'
|
|
11
|
+
|
|
12
|
+
export const enrichCompanyBulkSchema = {
|
|
13
|
+
inputs: z
|
|
14
|
+
.array(
|
|
15
|
+
z.object({
|
|
16
|
+
domain: z.string().optional().describe('Company domain (e.g. "coldiq.com").'),
|
|
17
|
+
linkedin_url: z.string().optional().describe('Company LinkedIn URL.'),
|
|
18
|
+
name: z.string().optional().describe('Company name (e.g. "ColdIQ").'),
|
|
19
|
+
}),
|
|
20
|
+
)
|
|
21
|
+
.min(1)
|
|
22
|
+
.max(5000)
|
|
23
|
+
.describe('Companies to enrich (1–5000). Each needs at least one of domain, linkedin_url, or name.'),
|
|
24
|
+
webhook_url: z.string().optional().describe('Optional URL POSTed when the whole job completes.'),
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export async function enrichCompanyBulkHandler(input: Record<string, unknown>) {
|
|
28
|
+
const res = await callApi('POST', '/company/enrich/bulk/submit', input)
|
|
29
|
+
return { content: [{ type: 'text' as const, text: JSON.stringify(res.data) }], isError: !res.ok }
|
|
30
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { callApi } from '../client.js'
|
|
3
|
+
|
|
4
|
+
export const enrichPersonBulkName = 'enrich_person_bulk'
|
|
5
|
+
|
|
6
|
+
export const enrichPersonBulkDescription =
|
|
7
|
+
'Enrich up to 5,000 people (LinkedIn profile + professional details) in one ASYNC job. Returns a job_id immediately — this does NOT return profiles inline. ' +
|
|
8
|
+
'Poll get_bulk_job(job_id) until status is "done" (drains over a few minutes), then page through rows. ' +
|
|
9
|
+
'Each row runs the same managed waterfall as enrich_person; provide an email, a linkedin_url, or name + company/domain per person. ' +
|
|
10
|
+
'Charged only per row a provider enriches (misses are free). For a single person, use enrich_person instead.'
|
|
11
|
+
|
|
12
|
+
export const enrichPersonBulkSchema = {
|
|
13
|
+
inputs: z
|
|
14
|
+
.array(
|
|
15
|
+
z.object({
|
|
16
|
+
email: z.string().optional().describe('Work email — strongest identifier.'),
|
|
17
|
+
linkedin_url: z.string().optional().describe('LinkedIn profile URL.'),
|
|
18
|
+
first_name: z.string().optional().describe('First name (use with last_name + company/domain).'),
|
|
19
|
+
last_name: z.string().optional().describe('Last name.'),
|
|
20
|
+
company_name: z.string().optional().describe('Company name — alternative to domain.'),
|
|
21
|
+
domain: z.string().optional().describe('Company domain (e.g. "coldiq.com").'),
|
|
22
|
+
}),
|
|
23
|
+
)
|
|
24
|
+
.min(1)
|
|
25
|
+
.max(5000)
|
|
26
|
+
.describe('People to enrich (1–5000). Each needs an email, a linkedin_url, or name + company/domain.'),
|
|
27
|
+
webhook_url: z.string().optional().describe('Optional URL POSTed when the whole job completes.'),
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export async function enrichPersonBulkHandler(input: Record<string, unknown>) {
|
|
31
|
+
const res = await callApi('POST', '/person/enrich/bulk/submit', input)
|
|
32
|
+
return { content: [{ type: 'text' as const, text: JSON.stringify(res.data) }], isError: !res.ok }
|
|
33
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { callApi } from '../client.js'
|
|
3
|
+
|
|
4
|
+
export const findEmailsBulkName = 'find_emails_bulk'
|
|
5
|
+
|
|
6
|
+
export const findEmailsBulkDescription =
|
|
7
|
+
'Find professional emails for up to 5,000 people in one ASYNC job. Returns a job_id immediately — this does NOT return emails inline. ' +
|
|
8
|
+
'Poll get_bulk_job(job_id) until status is "done" (usually minutes), then read the found/not_found summary and page through rows. ' +
|
|
9
|
+
'Each person should have first_name + last_name + domain (people missing those come back as not_found and are not charged). ' +
|
|
10
|
+
'Charged only per found email. For 50 or fewer people that you want back inline, use find_emails instead.'
|
|
11
|
+
|
|
12
|
+
export const findEmailsBulkSchema = {
|
|
13
|
+
people: z
|
|
14
|
+
.array(
|
|
15
|
+
z.object({
|
|
16
|
+
id: z.string().optional().describe('Your correlation id (results echo back by row order; an id is convenient but optional).'),
|
|
17
|
+
first_name: z.string().optional().describe('First name'),
|
|
18
|
+
last_name: z.string().optional().describe('Last name'),
|
|
19
|
+
domain: z.string().optional().describe('Company domain (e.g. "stripe.com")'),
|
|
20
|
+
linkedin_url: z.string().optional().describe('LinkedIn profile URL (optional)'),
|
|
21
|
+
}),
|
|
22
|
+
)
|
|
23
|
+
.min(1)
|
|
24
|
+
.max(5000)
|
|
25
|
+
.describe('People to find emails for (1–5000). Each needs first_name + last_name + domain to be searched.'),
|
|
26
|
+
webhook_url: z.string().optional().describe('Optional URL POSTed when the whole job completes.'),
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export async function findEmailsBulkHandler(input: Record<string, unknown>) {
|
|
30
|
+
const res = await callApi('POST', '/email/find/bulk/submit', input)
|
|
31
|
+
return { content: [{ type: 'text' as const, text: JSON.stringify(res.data) }], isError: !res.ok }
|
|
32
|
+
}
|
package/src/tools/find-emails.ts
CHANGED
|
@@ -32,10 +32,10 @@ export const findEmailsSchema = {
|
|
|
32
32
|
|
|
33
33
|
// Split large batches into sequential sub-batches so each HTTP call stays well
|
|
34
34
|
// under the server's bulk wall-clock budget (and thus Cloudflare's ~100s edge
|
|
35
|
-
// cutoff).
|
|
36
|
-
//
|
|
37
|
-
//
|
|
38
|
-
const FIND_EMAILS_CHUNK_SIZE =
|
|
35
|
+
// cutoff). Field feedback measured batches of 25 collapsing to ~10–16% success
|
|
36
|
+
// under upstream concurrency, while batches of 10 land 80–90% — so chunk at 10.
|
|
37
|
+
// For lists beyond ~50, use the async find_emails_bulk tool (handles up to 5,000).
|
|
38
|
+
const FIND_EMAILS_CHUNK_SIZE = 10
|
|
39
39
|
|
|
40
40
|
type ToolResult = { content: [{ type: 'text'; text: string }]; isError?: boolean }
|
|
41
41
|
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { callApi } from '../client.js'
|
|
3
|
+
|
|
4
|
+
export const getBulkJobName = 'get_bulk_job'
|
|
5
|
+
|
|
6
|
+
export const getBulkJobDescription =
|
|
7
|
+
'Poll an async bulk job (from verify_emails_bulk or find_emails_bulk). Returns { status, items_total, items_processed, summary, page }. ' +
|
|
8
|
+
'Poll until status is "done" (or "timed_out"). Use the `summary` per-verdict counts for totals — do NOT expect all rows inline: ' +
|
|
9
|
+
'rows come one page at a time (default 100). To page, call again with cursor = page.next_cursor until next_cursor is null.'
|
|
10
|
+
|
|
11
|
+
export const getBulkJobSchema = {
|
|
12
|
+
job_id: z.number().int().describe('The job_id returned by verify_emails_bulk / find_emails_bulk.'),
|
|
13
|
+
cursor: z.number().int().optional().describe('Pagination cursor (row index) from the previous page.next_cursor.'),
|
|
14
|
+
limit: z.number().int().min(1).max(1000).optional().describe('Rows per page (default 100, max 1000).'),
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export async function getBulkJobHandler(input: Record<string, unknown>) {
|
|
18
|
+
const { job_id, ...body } = input
|
|
19
|
+
const res = await callApi('POST', `/jobs/${job_id}/results`, body)
|
|
20
|
+
return { content: [{ type: 'text' as const, text: JSON.stringify(res.data) }], isError: !res.ok }
|
|
21
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod'
|
|
2
|
+
import { callApi } from '../client.js'
|
|
3
|
+
|
|
4
|
+
export const verifyEmailsBulkName = 'verify_emails_bulk'
|
|
5
|
+
|
|
6
|
+
export const verifyEmailsBulkDescription =
|
|
7
|
+
'Verify up to 5,000 emails in one ASYNC job. Returns a job_id immediately — this does NOT return verdicts inline. ' +
|
|
8
|
+
'Poll get_bulk_job(job_id) until status is "done" (usually minutes), then read the per-verdict summary counts and page through rows. ' +
|
|
9
|
+
'Charged only per conclusively-verified email (deliverable/catch-all addresses are sendable; unverifiable rows are free). ' +
|
|
10
|
+
'For a single email use verify_email instead.'
|
|
11
|
+
|
|
12
|
+
export const verifyEmailsBulkSchema = {
|
|
13
|
+
emails: z.array(z.string()).min(1).max(5000).describe('Emails to verify (1–5000). Invalid/duplicate entries are dropped server-side.'),
|
|
14
|
+
webhook_url: z.string().optional().describe('Optional URL POSTed when the whole job completes.'),
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export async function verifyEmailsBulkHandler(input: Record<string, unknown>) {
|
|
18
|
+
const res = await callApi('POST', '/email/verify/bulk/submit', input)
|
|
19
|
+
return { content: [{ type: 'text' as const, text: JSON.stringify(res.data) }], isError: !res.ok }
|
|
20
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
2
|
+
|
|
3
|
+
const callApiMock = vi.fn()
|
|
4
|
+
vi.mock('../src/client.js', () => ({
|
|
5
|
+
callApi: (...args: unknown[]) => callApiMock(...args),
|
|
6
|
+
}))
|
|
7
|
+
|
|
8
|
+
import { verifyEmailsBulkHandler } from '../src/tools/verify-emails-bulk.js'
|
|
9
|
+
import { findEmailsBulkHandler } from '../src/tools/find-emails-bulk.js'
|
|
10
|
+
import { getBulkJobHandler } from '../src/tools/get-bulk-job.js'
|
|
11
|
+
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
callApiMock.mockReset()
|
|
14
|
+
callApiMock.mockResolvedValue({ ok: true, status: 202, data: { job_id: 7, status: 'processing', items_total: 2 }, headers: {} })
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
describe('bulk MCP tools', () => {
|
|
18
|
+
it('verify_emails_bulk POSTs the RAW body (not a verb envelope) to the submit path', async () => {
|
|
19
|
+
const res = await verifyEmailsBulkHandler({ emails: ['a@x.com', 'b@x.com'] })
|
|
20
|
+
const [method, path, body] = callApiMock.mock.calls[0]
|
|
21
|
+
expect(method).toBe('POST')
|
|
22
|
+
expect(path).toBe('/email/verify/bulk/submit')
|
|
23
|
+
expect(body).toEqual({ emails: ['a@x.com', 'b@x.com'] }) // no { input: ... } wrapping
|
|
24
|
+
expect(res.isError).toBe(false)
|
|
25
|
+
expect(JSON.parse(res.content[0].text)).toEqual({ job_id: 7, status: 'processing', items_total: 2 })
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
it('find_emails_bulk POSTs the raw people body to the find submit path', async () => {
|
|
29
|
+
await findEmailsBulkHandler({ people: [{ id: 'm', first_name: 'Michel', last_name: 'Lieben', domain: 'coldiq.com' }] })
|
|
30
|
+
const [, path, body] = callApiMock.mock.calls[0]
|
|
31
|
+
expect(path).toBe('/email/find/bulk/submit')
|
|
32
|
+
expect(body).toEqual({ people: [{ id: 'm', first_name: 'Michel', last_name: 'Lieben', domain: 'coldiq.com' }] })
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('get_bulk_job puts job_id in the path and pagination in the body', async () => {
|
|
36
|
+
callApiMock.mockResolvedValue({ ok: true, status: 200, data: { status: 'done' }, headers: {} })
|
|
37
|
+
await getBulkJobHandler({ job_id: 42, cursor: 100, limit: 200 })
|
|
38
|
+
const [, path, body] = callApiMock.mock.calls[0]
|
|
39
|
+
expect(path).toBe('/jobs/42/results')
|
|
40
|
+
expect(body).toEqual({ cursor: 100, limit: 200 }) // job_id stripped into the path
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
it('surfaces isError when the submit fails', async () => {
|
|
44
|
+
callApiMock.mockResolvedValue({ ok: false, status: 402, data: { error: 'Insufficient credits' }, headers: {} })
|
|
45
|
+
const res = await verifyEmailsBulkHandler({ emails: ['a@x.com'] })
|
|
46
|
+
expect(res.isError).toBe(true)
|
|
47
|
+
})
|
|
48
|
+
})
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest'
|
|
2
|
+
import { z } from 'zod'
|
|
3
|
+
|
|
4
|
+
const callApiMock = vi.fn()
|
|
5
|
+
vi.mock('../src/client.js', () => ({
|
|
6
|
+
callApi: (...args: unknown[]) => callApiMock(...args),
|
|
7
|
+
}))
|
|
8
|
+
|
|
9
|
+
import { enrichPersonBulkHandler, enrichPersonBulkSchema } from '../src/tools/enrich-person-bulk.js'
|
|
10
|
+
import { enrichCompanyBulkHandler, enrichCompanyBulkSchema } from '../src/tools/enrich-company-bulk.js'
|
|
11
|
+
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
callApiMock.mockReset()
|
|
14
|
+
callApiMock.mockResolvedValue({ ok: true, status: 202, data: { job_id: 9, status: 'processing', items_total: 1 }, headers: {} })
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
describe('enrich bulk MCP tools', () => {
|
|
18
|
+
it('enrich_person_bulk POSTs the raw inputs body to the person submit path', async () => {
|
|
19
|
+
const res = await enrichPersonBulkHandler({ inputs: [{ first_name: 'Michel', last_name: 'Lieben', domain: 'coldiq.com' }] })
|
|
20
|
+
const [method, path, body] = callApiMock.mock.calls[0]
|
|
21
|
+
expect(method).toBe('POST')
|
|
22
|
+
expect(path).toBe('/person/enrich/bulk/submit')
|
|
23
|
+
expect(body).toEqual({ inputs: [{ first_name: 'Michel', last_name: 'Lieben', domain: 'coldiq.com' }] }) // no verb-envelope wrapping
|
|
24
|
+
expect(res.isError).toBe(false)
|
|
25
|
+
expect(JSON.parse(res.content[0].text)).toEqual({ job_id: 9, status: 'processing', items_total: 1 })
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
it('enrich_company_bulk POSTs the raw inputs body to the company submit path', async () => {
|
|
29
|
+
await enrichCompanyBulkHandler({ inputs: [{ domain: 'coldiq.com' }] })
|
|
30
|
+
const [, path, body] = callApiMock.mock.calls[0]
|
|
31
|
+
expect(path).toBe('/company/enrich/bulk/submit')
|
|
32
|
+
expect(body).toEqual({ inputs: [{ domain: 'coldiq.com' }] })
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('surfaces isError when the submit fails', async () => {
|
|
36
|
+
callApiMock.mockResolvedValue({ ok: false, status: 502, data: { error: 'Provider unavailable' }, headers: {} })
|
|
37
|
+
const res = await enrichPersonBulkHandler({ inputs: [{ email: 'michel@coldiq.com' }] })
|
|
38
|
+
expect(res.isError).toBe(true)
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('person schema accepts 1–5000 inputs and rejects an empty or oversize list', () => {
|
|
42
|
+
const schema = z.object(enrichPersonBulkSchema)
|
|
43
|
+
expect(schema.safeParse({ inputs: [{ email: 'michel@coldiq.com' }] }).success).toBe(true)
|
|
44
|
+
expect(schema.safeParse({ inputs: [] }).success).toBe(false)
|
|
45
|
+
expect(schema.safeParse({ inputs: Array.from({ length: 5001 }, () => ({ domain: 'x.com' })) }).success).toBe(false)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
it('company schema accepts 1–5000 inputs and rejects an empty or oversize list', () => {
|
|
49
|
+
const schema = z.object(enrichCompanyBulkSchema)
|
|
50
|
+
expect(schema.safeParse({ inputs: [{ domain: 'coldiq.com' }] }).success).toBe(true)
|
|
51
|
+
expect(schema.safeParse({ inputs: [] }).success).toBe(false)
|
|
52
|
+
expect(schema.safeParse({ inputs: Array.from({ length: 5001 }, () => ({ domain: 'x.com' })) }).success).toBe(false)
|
|
53
|
+
})
|
|
54
|
+
})
|
|
@@ -27,30 +27,30 @@ beforeEach(() => {
|
|
|
27
27
|
})
|
|
28
28
|
|
|
29
29
|
describe('find_emails auto-chunking', () => {
|
|
30
|
-
it('≤
|
|
31
|
-
await findEmailsHandler({ people: peopleOf(
|
|
30
|
+
it('≤10 people → a single passthrough call', async () => {
|
|
31
|
+
await findEmailsHandler({ people: peopleOf(10) })
|
|
32
32
|
expect(callVerbMock).toHaveBeenCalledTimes(1)
|
|
33
|
-
expect((callVerbMock.mock.calls[0][1] as { people: Person[] }).people).toHaveLength(
|
|
33
|
+
expect((callVerbMock.mock.calls[0][1] as { people: Person[] }).people).toHaveLength(10)
|
|
34
34
|
})
|
|
35
35
|
|
|
36
|
-
it('>
|
|
37
|
-
const res = await findEmailsHandler({ people: peopleOf(
|
|
36
|
+
it('>10 people → sequential chunks of ≤10, merged in order', async () => {
|
|
37
|
+
const res = await findEmailsHandler({ people: peopleOf(25) })
|
|
38
38
|
|
|
39
|
-
//
|
|
39
|
+
// 25 → 10 + 10 + 5
|
|
40
40
|
expect(callVerbMock).toHaveBeenCalledTimes(3)
|
|
41
|
-
expect((callVerbMock.mock.calls[0][1] as { people: Person[] }).people).toHaveLength(
|
|
42
|
-
expect((callVerbMock.mock.calls[1][1] as { people: Person[] }).people).toHaveLength(
|
|
43
|
-
expect((callVerbMock.mock.calls[2][1] as { people: Person[] }).people).toHaveLength(
|
|
41
|
+
expect((callVerbMock.mock.calls[0][1] as { people: Person[] }).people).toHaveLength(10)
|
|
42
|
+
expect((callVerbMock.mock.calls[1][1] as { people: Person[] }).people).toHaveLength(10)
|
|
43
|
+
expect((callVerbMock.mock.calls[2][1] as { people: Person[] }).people).toHaveLength(5)
|
|
44
44
|
|
|
45
45
|
const data = JSON.parse(res.content[0].text)
|
|
46
|
-
expect(data.results).toHaveLength(
|
|
46
|
+
expect(data.results).toHaveLength(25)
|
|
47
47
|
// Order preserved across chunks.
|
|
48
|
-
expect(data.results.map((r: { id: string }) => r.id)).toEqual(peopleOf(
|
|
48
|
+
expect(data.results.map((r: { id: string }) => r.id)).toEqual(peopleOf(25).map((p) => p.id))
|
|
49
49
|
expect(res.isError).toBe(false)
|
|
50
50
|
})
|
|
51
51
|
|
|
52
52
|
it('forwards use_providers to every chunk', async () => {
|
|
53
|
-
await findEmailsHandler({ people: peopleOf(
|
|
53
|
+
await findEmailsHandler({ people: peopleOf(20), use_providers: ['limadata-work-email'] })
|
|
54
54
|
expect(callVerbMock).toHaveBeenCalledTimes(2)
|
|
55
55
|
for (const call of callVerbMock.mock.calls) {
|
|
56
56
|
expect((call[1] as { use_providers: string[] }).use_providers).toEqual(['limadata-work-email'])
|
|
@@ -63,10 +63,10 @@ describe('find_emails auto-chunking', () => {
|
|
|
63
63
|
.mockImplementationOnce((_p: string, input: Record<string, unknown>) => Promise.resolve(chunkResult(input, { isError: true })))
|
|
64
64
|
const res = await findEmailsHandler({ people: peopleOf(60) })
|
|
65
65
|
|
|
66
|
-
// 1st chunk ok, 2nd
|
|
66
|
+
// 1st chunk ok (10), 2nd chunk's partial results are merged then we stop on its error.
|
|
67
67
|
expect(callVerbMock).toHaveBeenCalledTimes(2)
|
|
68
68
|
expect(res.isError).toBe(true)
|
|
69
69
|
const data = JSON.parse(res.content[0].text)
|
|
70
|
-
expect(data.results).toHaveLength(
|
|
70
|
+
expect(data.results).toHaveLength(20) // chunk1 (10) + chunk2 (10), remaining chunks never sent
|
|
71
71
|
})
|
|
72
72
|
})
|