@coldiq/mcp 0.1.0 → 0.1.6
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/README.md +114 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -1
- package/dist/client.js.map +1 -1
- package/dist/executor.d.ts +1 -2
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +45 -17
- package/dist/executor.js.map +1 -1
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +4 -82
- package/dist/registry.js.map +1 -1
- package/dist/tools/find-email.d.ts.map +1 -1
- package/dist/tools/find-email.js +30 -2
- package/dist/tools/find-email.js.map +1 -1
- package/dist/tools/find-emails.d.ts.map +1 -1
- package/dist/tools/find-emails.js +4 -3
- package/dist/tools/find-emails.js.map +1 -1
- package/dist/tools/find-signals.js +1 -1
- package/dist/tools/find-signals.js.map +1 -1
- package/package.json +5 -2
- package/src/client.ts +4 -1
- package/src/executor.ts +46 -24
- package/src/registry.ts +7 -74
- package/src/tools/find-email.ts +32 -2
- package/src/tools/find-emails.ts +4 -3
- package/src/tools/find-signals.ts +1 -1
- package/test-ads-live.ts +3 -2
- package/test-company-live.ts +3 -2
- package/test-email-live.ts +13 -12
- package/test-influencers-live.ts +3 -2
- package/test-jobs-live.ts +3 -2
- package/test-linkupapi-live.ts +3 -2
- package/test-phone-live.ts +3 -2
- package/test-places-live.ts +3 -2
- package/test-reddit-live.ts +3 -2
- package/test-search-live.ts +3 -2
- package/test-seo-live.ts +3 -2
- package/test-web-live.ts +3 -2
- package/tests/client.test.ts +1 -1
- package/tests/executor.test.ts +227 -0
- package/tests/registry.test.ts +1 -77
- package/tests/tools/{enrich-email.test.ts → find-email.test.ts} +5 -5
- package/tests/tools/{enrich-emails.test.ts → find-emails.test.ts} +16 -15
- package/tests/tools/find-people.test.ts +12 -12
- package/tests/tools/search-places.test.ts +4 -4
- package/tests/tools/search-reddit.test.ts +6 -6
- package/dist/tools/enrich-email.d.ts +0 -24
- package/dist/tools/enrich-email.d.ts.map +0 -1
- package/dist/tools/enrich-email.js +0 -19
- package/dist/tools/enrich-email.js.map +0 -1
- package/dist/tools/enrich-emails.d.ts +0 -31
- package/dist/tools/enrich-emails.d.ts.map +0 -1
- package/dist/tools/enrich-emails.js +0 -146
- package/dist/tools/enrich-emails.js.map +0 -1
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { executeWaterfall, isExecutionError } from '../executor.js';
|
|
3
|
-
export const enrichEmailName = 'enrich_email';
|
|
4
|
-
export const enrichEmailDescription = "Find a person's professional email given their name and company. Tries multiple providers in sequence until an email is found (waterfall). Returns the email and which provider found it.";
|
|
5
|
-
export const enrichEmailSchema = {
|
|
6
|
-
first_name: z.string().optional().describe('First name of the person'),
|
|
7
|
-
last_name: z.string().optional().describe('Last name of the person'),
|
|
8
|
-
domain: z.string().optional().describe('Company domain (e.g. "stripe.com")'),
|
|
9
|
-
company_name: z.string().optional().describe('Company name — alternative to domain'),
|
|
10
|
-
linkedin_url: z.string().optional().describe('LinkedIn profile URL — alternative to name+domain'),
|
|
11
|
-
};
|
|
12
|
-
export async function enrichEmailHandler(input) {
|
|
13
|
-
const result = await executeWaterfall('enrich_email', input);
|
|
14
|
-
if (isExecutionError(result)) {
|
|
15
|
-
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }], isError: true };
|
|
16
|
-
}
|
|
17
|
-
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=enrich-email.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enrich-email.js","sourceRoot":"","sources":["../../src/tools/enrich-email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEnE,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAA;AAE7C,MAAM,CAAC,MAAM,sBAAsB,GACjC,2LAA2L,CAAA;AAE7L,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,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;CAClG,CAAA;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,KAA8B;IACrE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;IAC5D,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACvG,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAA;AACxF,CAAC"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export declare const enrichEmailsName = "enrich_emails";
|
|
3
|
-
export declare const enrichEmailsDescription: string;
|
|
4
|
-
export declare const enrichEmailsSchema: {
|
|
5
|
-
people: z.ZodArray<z.ZodObject<{
|
|
6
|
-
id: 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;
|
|
13
|
-
first_name?: string | undefined;
|
|
14
|
-
last_name?: string | undefined;
|
|
15
|
-
domain?: string | undefined;
|
|
16
|
-
linkedin_url?: string | undefined;
|
|
17
|
-
}, {
|
|
18
|
-
id: string;
|
|
19
|
-
first_name?: string | undefined;
|
|
20
|
-
last_name?: string | undefined;
|
|
21
|
-
domain?: string | undefined;
|
|
22
|
-
linkedin_url?: string | undefined;
|
|
23
|
-
}>, "many">;
|
|
24
|
-
};
|
|
25
|
-
export declare function enrichEmailsHandler(input: Record<string, unknown>): Promise<{
|
|
26
|
-
content: {
|
|
27
|
-
type: "text";
|
|
28
|
-
text: string;
|
|
29
|
-
}[];
|
|
30
|
-
}>;
|
|
31
|
-
//# sourceMappingURL=enrich-emails.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enrich-emails.d.ts","sourceRoot":"","sources":["../../src/tools/enrich-emails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,gBAAgB,kBAAkB,CAAA;AAE/C,eAAO,MAAM,uBAAuB,QAO+E,CAAA;AAEnH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;CAc9B,CAAA;AAwBD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;GAyIvE"}
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { callApi } from '../client.js';
|
|
3
|
-
export const enrichEmailsName = 'enrich_emails';
|
|
4
|
-
export const enrichEmailsDescription = 'Find professional emails for multiple people in one batch. ' +
|
|
5
|
-
'Uses Prospeo bulk enrichment first, then FullEnrich for misses, then ' +
|
|
6
|
-
'FindyMail and IcyPeas in parallel for any remaining misses. ' +
|
|
7
|
-
'Much faster than calling enrich_email one-by-one. Max 50 people per call. ' +
|
|
8
|
-
'Each person needs a unique id to match results back. ' +
|
|
9
|
-
'Always pass first_name, last_name, and domain — they are the primary enrichment signal. ' +
|
|
10
|
-
'Also pass linkedin_url when available, but never rely on it alone as some providers cannot resolve vanity URLs.';
|
|
11
|
-
export const enrichEmailsSchema = {
|
|
12
|
-
people: z
|
|
13
|
-
.array(z.object({
|
|
14
|
-
id: z.string().describe("Unique identifier to match results back (e.g. person's name or a slug)"),
|
|
15
|
-
first_name: z.string().optional().describe('First name'),
|
|
16
|
-
last_name: z.string().optional().describe('Last name'),
|
|
17
|
-
domain: z.string().optional().describe('Company domain (e.g. "stripe.com")'),
|
|
18
|
-
linkedin_url: z.string().optional().describe('LinkedIn profile URL — pass when available but always include name+domain too'),
|
|
19
|
-
}))
|
|
20
|
-
.min(1)
|
|
21
|
-
.max(50)
|
|
22
|
-
.describe('People to enrich (max 50)'),
|
|
23
|
-
};
|
|
24
|
-
function sleep(ms) {
|
|
25
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
26
|
-
}
|
|
27
|
-
function missesOf(people, results) {
|
|
28
|
-
return people.filter((p) => !results.find((r) => r.id === p.id)?.email);
|
|
29
|
-
}
|
|
30
|
-
export async function enrichEmailsHandler(input) {
|
|
31
|
-
const people = input.people;
|
|
32
|
-
const results = people.map((p) => ({ id: p.id, email: null, provider: null }));
|
|
33
|
-
// Step 1: Prospeo bulk — 1 call for all people
|
|
34
|
-
const bulkBody = {
|
|
35
|
-
data: people.map((p) => p.linkedin_url
|
|
36
|
-
? { identifier: p.id, linkedin_url: p.linkedin_url }
|
|
37
|
-
: { identifier: p.id, first_name: p.first_name, last_name: p.last_name, company_name: p.domain }),
|
|
38
|
-
};
|
|
39
|
-
const bulkRes = await callApi('POST', '/prospeo/bulk-enrich-person', bulkBody);
|
|
40
|
-
if (bulkRes.ok) {
|
|
41
|
-
const data = bulkRes.data;
|
|
42
|
-
for (const item of data.results ?? []) {
|
|
43
|
-
const email = item.person?.email?.email;
|
|
44
|
-
if (typeof email === 'string' && email.includes('@')) {
|
|
45
|
-
const hit = results.find((r) => r.id === item.identifier);
|
|
46
|
-
if (hit) {
|
|
47
|
-
hit.email = email;
|
|
48
|
-
hit.provider = 'prospeo';
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
// Step 2: FullEnrich batch for Prospeo misses (async, better European coverage)
|
|
54
|
-
const afterProspeo = missesOf(people, results);
|
|
55
|
-
if (afterProspeo.length > 0) {
|
|
56
|
-
const feBody = {
|
|
57
|
-
name: 'mcp-enrich-batch',
|
|
58
|
-
data: afterProspeo.map((p) => ({
|
|
59
|
-
first_name: p.first_name,
|
|
60
|
-
last_name: p.last_name,
|
|
61
|
-
domain: p.domain,
|
|
62
|
-
...(p.linkedin_url ? { linkedin_url: p.linkedin_url } : {}),
|
|
63
|
-
enrich_fields: ['contact.emails'],
|
|
64
|
-
})),
|
|
65
|
-
};
|
|
66
|
-
const feCreateRes = await callApi('POST', '/fullenrich/contact/enrich/bulk', feBody);
|
|
67
|
-
if (feCreateRes.ok) {
|
|
68
|
-
const enrichmentId = feCreateRes.data.enrichment_id;
|
|
69
|
-
if (enrichmentId) {
|
|
70
|
-
const deadline = Date.now() + 90_000;
|
|
71
|
-
while (Date.now() < deadline) {
|
|
72
|
-
await sleep(5000);
|
|
73
|
-
const pollRes = await callApi('GET', `/fullenrich/contact/enrich/bulk/${enrichmentId}`);
|
|
74
|
-
if (!pollRes.ok)
|
|
75
|
-
continue;
|
|
76
|
-
const pd = pollRes.data;
|
|
77
|
-
const status = pd.status;
|
|
78
|
-
if (status === 'DONE' || status === 'FAILED') {
|
|
79
|
-
if (status === 'DONE') {
|
|
80
|
-
const feItems = pd.data;
|
|
81
|
-
if (Array.isArray(feItems)) {
|
|
82
|
-
feItems.forEach((item, idx) => {
|
|
83
|
-
const person = afterProspeo[idx];
|
|
84
|
-
const hit = results.find((r) => r.id === person?.id);
|
|
85
|
-
if (!hit || hit.email)
|
|
86
|
-
return;
|
|
87
|
-
const emails = item.emails;
|
|
88
|
-
if (Array.isArray(emails) && emails.length > 0 && typeof emails[0] === 'string' && emails[0].includes('@')) {
|
|
89
|
-
hit.email = emails[0];
|
|
90
|
-
hit.provider = 'fullenrich';
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
// Step 3: parallel fallback for remaining misses — FindyMail then IcyPeas per person
|
|
102
|
-
const afterFullEnrich = missesOf(people, results);
|
|
103
|
-
await Promise.all(afterFullEnrich.map(async (person) => {
|
|
104
|
-
const hit = results.find((r) => r.id === person.id);
|
|
105
|
-
const fullName = [person.first_name, person.last_name].filter(Boolean).join(' ');
|
|
106
|
-
const fmRes = await callApi('POST', '/findymail/search/name', {
|
|
107
|
-
name: fullName,
|
|
108
|
-
domain: person.domain,
|
|
109
|
-
});
|
|
110
|
-
if (fmRes.ok) {
|
|
111
|
-
const d = fmRes.data;
|
|
112
|
-
if (typeof d.email === 'string' && d.email.includes('@')) {
|
|
113
|
-
hit.email = d.email;
|
|
114
|
-
hit.provider = 'findymail';
|
|
115
|
-
return;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
const icyRes = await callApi('POST', '/icypeas/email-search', {
|
|
119
|
-
firstname: person.first_name,
|
|
120
|
-
lastname: person.last_name,
|
|
121
|
-
domainOrCompany: person.domain,
|
|
122
|
-
});
|
|
123
|
-
if (icyRes.ok) {
|
|
124
|
-
const d = icyRes.data;
|
|
125
|
-
const email = typeof d.email === 'string' && d.email.includes('@')
|
|
126
|
-
? d.email
|
|
127
|
-
: Array.isArray(d.emails) && typeof d.emails[0] === 'string' && d.emails[0].includes('@')
|
|
128
|
-
? d.emails[0]
|
|
129
|
-
: null;
|
|
130
|
-
if (email) {
|
|
131
|
-
hit.email = email;
|
|
132
|
-
hit.provider = 'icypeas';
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}));
|
|
136
|
-
const found = results.filter((r) => r.email !== null).length;
|
|
137
|
-
return {
|
|
138
|
-
content: [
|
|
139
|
-
{
|
|
140
|
-
type: 'text',
|
|
141
|
-
text: JSON.stringify({ data: { results, found, total: people.length } }, null, 2),
|
|
142
|
-
},
|
|
143
|
-
],
|
|
144
|
-
};
|
|
145
|
-
}
|
|
146
|
-
//# sourceMappingURL=enrich-emails.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"enrich-emails.js","sourceRoot":"","sources":["../../src/tools/enrich-emails.ts"],"names":[],"mappings":"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"}
|