@leadbay/mcp 0.39.0 → 0.39.1
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/bin.js +36 -19
- package/dist/http-server.js +25 -19
- package/dist/installer-electron.js +1 -1
- package/dist/installer-gui.js +1 -1
- package/package.json +1 -1
package/dist/bin.js
CHANGED
|
@@ -7718,12 +7718,28 @@ var init_list_lenses = __esm({
|
|
|
7718
7718
|
}
|
|
7719
7719
|
});
|
|
7720
7720
|
|
|
7721
|
+
// ../core/dist/interactions.js
|
|
7722
|
+
function reportLeadInteractions(client, lensId, leadIds, types, logger) {
|
|
7723
|
+
if (leadIds.length === 0 || types.length === 0)
|
|
7724
|
+
return;
|
|
7725
|
+
const events = leadIds.flatMap((leadId) => types.map((type) => ({ type, lead_id: leadId, lens_id: String(lensId) })));
|
|
7726
|
+
void client.request("POST", "/interactions", events).catch((err) => {
|
|
7727
|
+
logger?.warn?.(`interactions: ${types.join("+")} for ${leadIds.length} lead(s) not recorded: ${err?.message ?? err?.code ?? err}`);
|
|
7728
|
+
});
|
|
7729
|
+
}
|
|
7730
|
+
var init_interactions = __esm({
|
|
7731
|
+
"../core/dist/interactions.js"() {
|
|
7732
|
+
"use strict";
|
|
7733
|
+
}
|
|
7734
|
+
});
|
|
7735
|
+
|
|
7721
7736
|
// ../core/dist/tools/discover-leads.js
|
|
7722
7737
|
var discoverLeads;
|
|
7723
7738
|
var init_discover_leads = __esm({
|
|
7724
7739
|
"../core/dist/tools/discover-leads.js"() {
|
|
7725
7740
|
"use strict";
|
|
7726
7741
|
init_tool_descriptions_generated();
|
|
7742
|
+
init_interactions();
|
|
7727
7743
|
discoverLeads = {
|
|
7728
7744
|
name: "leadbay_discover_leads",
|
|
7729
7745
|
annotations: {
|
|
@@ -7752,11 +7768,12 @@ var init_discover_leads = __esm({
|
|
|
7752
7768
|
},
|
|
7753
7769
|
additionalProperties: false
|
|
7754
7770
|
},
|
|
7755
|
-
execute: async (client, params) => {
|
|
7771
|
+
execute: async (client, params, ctx) => {
|
|
7756
7772
|
const lensId = params.lensId ?? await client.resolveDefaultLens();
|
|
7757
7773
|
const page = params.page ?? 0;
|
|
7758
7774
|
const count = Math.min(params.count ?? 20, 50);
|
|
7759
7775
|
const res = await client.request("GET", `/lenses/${lensId}/leads/wishlist?count=${count}&page=${page}&contacts=true`);
|
|
7776
|
+
reportLeadInteractions(client, lensId, res.items.map((lead) => lead.id), ["LEAD_SEEN"], ctx?.logger);
|
|
7760
7777
|
const totalPages = res.pagination?.pages ?? 0;
|
|
7761
7778
|
const currentPage = res.pagination?.page ?? page;
|
|
7762
7779
|
const hasMore = currentPage < totalPages - 1;
|
|
@@ -7805,6 +7822,7 @@ var init_get_lead_profile = __esm({
|
|
|
7805
7822
|
"../core/dist/tools/get-lead-profile.js"() {
|
|
7806
7823
|
"use strict";
|
|
7807
7824
|
init_tool_descriptions_generated();
|
|
7825
|
+
init_interactions();
|
|
7808
7826
|
getLeadProfile = {
|
|
7809
7827
|
name: "leadbay_get_lead_profile",
|
|
7810
7828
|
annotations: {
|
|
@@ -7852,13 +7870,9 @@ var init_get_lead_profile = __esm({
|
|
|
7852
7870
|
},
|
|
7853
7871
|
required: ["lead", "contacts"]
|
|
7854
7872
|
},
|
|
7855
|
-
execute: async (client, params) => {
|
|
7873
|
+
execute: async (client, params, ctx) => {
|
|
7856
7874
|
const lensId = params.lensId ?? await client.resolveDefaultLens();
|
|
7857
|
-
|
|
7858
|
-
{ type: "LEAD_SEEN", leadId: params.leadId, lensId: String(lensId) },
|
|
7859
|
-
{ type: "LEAD_CLICKED", leadId: params.leadId, lensId: String(lensId) }
|
|
7860
|
-
]).catch(() => {
|
|
7861
|
-
});
|
|
7875
|
+
reportLeadInteractions(client, lensId, [params.leadId], ["LEAD_SEEN", "LEAD_CLICKED"], ctx?.logger);
|
|
7862
7876
|
const [leadResult, qualResult, contactsResult, paidContactsResult, webFetchResult] = await Promise.allSettled([
|
|
7863
7877
|
client.request("GET", `/lenses/${lensId}/leads/${params.leadId}`),
|
|
7864
7878
|
client.request("GET", `/leads/${params.leadId}/ai_agent_responses`),
|
|
@@ -14291,6 +14305,7 @@ var init_pull_leads = __esm({
|
|
|
14291
14305
|
"../core/dist/composite/pull-leads.js"() {
|
|
14292
14306
|
"use strict";
|
|
14293
14307
|
init_lead_order();
|
|
14308
|
+
init_interactions();
|
|
14294
14309
|
init_empty_lens_reason();
|
|
14295
14310
|
init_tool_descriptions_generated();
|
|
14296
14311
|
pullLeads = {
|
|
@@ -14429,6 +14444,9 @@ var init_pull_leads = __esm({
|
|
|
14429
14444
|
return resolvedOrder.error;
|
|
14430
14445
|
const orderQs = resolvedOrder.order ? `&order=${encodeURIComponent(resolvedOrder.order)}` : "";
|
|
14431
14446
|
const res = await client.request("GET", `/lenses/${lensId}/leads/wishlist?count=${count}&page=${page}&contacts=true${orderQs}`);
|
|
14447
|
+
if (params._reportSeen !== false) {
|
|
14448
|
+
reportLeadInteractions(client, lensId, res.items.map((lead) => lead.id), ["LEAD_SEEN"], ctx?.logger);
|
|
14449
|
+
}
|
|
14432
14450
|
const summaries = await Promise.all(res.items.map(async (lead) => {
|
|
14433
14451
|
try {
|
|
14434
14452
|
const r = await client.request("GET", `/leads/${lead.id}/ai_agent_responses`);
|
|
@@ -15006,6 +15024,7 @@ var init_tour_plan = __esm({
|
|
|
15006
15024
|
"use strict";
|
|
15007
15025
|
init_pull_followups();
|
|
15008
15026
|
init_pull_leads();
|
|
15027
|
+
init_interactions();
|
|
15009
15028
|
init_country_guard();
|
|
15010
15029
|
init_tool_descriptions_generated();
|
|
15011
15030
|
DEFAULT_FOLLOWUPS_COUNT = 6;
|
|
@@ -15141,7 +15160,7 @@ var init_tour_plan = __esm({
|
|
|
15141
15160
|
city_id: params.city_id,
|
|
15142
15161
|
count: followupsCount
|
|
15143
15162
|
}, ctx),
|
|
15144
|
-
pullLeads.execute(client, { count: DISCOVER_OVER_PULL }, ctx)
|
|
15163
|
+
pullLeads.execute(client, { count: DISCOVER_OVER_PULL, _reportSeen: false }, ctx)
|
|
15145
15164
|
]);
|
|
15146
15165
|
if (followupsResult.status === "fulfilled") {
|
|
15147
15166
|
const r = followupsResult.value;
|
|
@@ -15177,6 +15196,10 @@ var init_tour_plan = __esm({
|
|
|
15177
15196
|
}
|
|
15178
15197
|
const filtered = rawDiscover.filter((l) => cityMatches(l, params.city));
|
|
15179
15198
|
const discoverLeads2 = filtered.slice(0, discoverCount);
|
|
15199
|
+
const pulledLensId = leadsResult.status === "fulfilled" ? leadsResult.value?.lens?.id : null;
|
|
15200
|
+
if (pulledLensId != null) {
|
|
15201
|
+
reportLeadInteractions(client, pulledLensId, discoverLeads2.map((l) => l.id), ["LEAD_SEEN"], ctx?.logger);
|
|
15202
|
+
}
|
|
15180
15203
|
const filterNote = params.city ? `Matched ${filtered.length}/${rawDiscover.length} Discover leads to '${params.city}'; returning top ${discoverLeads2.length}.` : `No city filter applied; returning top ${discoverLeads2.length} Discover leads.`;
|
|
15181
15204
|
return {
|
|
15182
15205
|
city: params.city ?? null,
|
|
@@ -15943,6 +15966,7 @@ var init_research_lead_by_id = __esm({
|
|
|
15943
15966
|
"../core/dist/composite/research-lead-by-id.js"() {
|
|
15944
15967
|
"use strict";
|
|
15945
15968
|
init_web_fetch_helpers();
|
|
15969
|
+
init_interactions();
|
|
15946
15970
|
init_tool_descriptions_generated();
|
|
15947
15971
|
researchLeadById = {
|
|
15948
15972
|
name: "leadbay_research_lead_by_id",
|
|
@@ -16187,11 +16211,7 @@ var init_research_lead_by_id = __esm({
|
|
|
16187
16211
|
}
|
|
16188
16212
|
const lensId = params.lensId ?? await client.resolveDefaultLens();
|
|
16189
16213
|
const leadId = params.leadId;
|
|
16190
|
-
|
|
16191
|
-
{ type: "LEAD_SEEN", leadId, lensId: String(lensId) },
|
|
16192
|
-
{ type: "LEAD_CLICKED", leadId, lensId: String(lensId) }
|
|
16193
|
-
]).catch(() => {
|
|
16194
|
-
});
|
|
16214
|
+
reportLeadInteractions(client, lensId, [leadId], ["LEAD_SEEN", "LEAD_CLICKED"], _ctx?.logger);
|
|
16195
16215
|
const [profileR, qualR, contactsR, webFetchR, activitiesR, orgContactsR] = await Promise.allSettled([
|
|
16196
16216
|
client.request("GET", `/lenses/${lensId}/leads/${leadId}`),
|
|
16197
16217
|
client.request("GET", `/leads/${leadId}/ai_agent_responses`),
|
|
@@ -17234,6 +17254,7 @@ var init_get_lead_custom_fields = __esm({
|
|
|
17234
17254
|
"../core/dist/composite/get-lead-custom-fields.js"() {
|
|
17235
17255
|
"use strict";
|
|
17236
17256
|
init_tool_descriptions_generated();
|
|
17257
|
+
init_interactions();
|
|
17237
17258
|
getLeadCustomFields = {
|
|
17238
17259
|
name: "leadbay_get_lead_custom_fields",
|
|
17239
17260
|
annotations: {
|
|
@@ -17277,11 +17298,7 @@ var init_get_lead_custom_fields = __esm({
|
|
|
17277
17298
|
},
|
|
17278
17299
|
execute: async (client, params, ctx) => {
|
|
17279
17300
|
const lensId = params.lensId ?? await client.resolveDefaultLens();
|
|
17280
|
-
|
|
17281
|
-
{ type: "LEAD_SEEN", leadId: params.leadId, lensId: String(lensId) },
|
|
17282
|
-
{ type: "LEAD_CLICKED", leadId: params.leadId, lensId: String(lensId) }
|
|
17283
|
-
]).catch(() => {
|
|
17284
|
-
});
|
|
17301
|
+
reportLeadInteractions(client, lensId, [params.leadId], ["LEAD_SEEN", "LEAD_CLICKED"], ctx?.logger);
|
|
17285
17302
|
const lead = await client.request("GET", `/lenses/${lensId}/leads/${params.leadId}`);
|
|
17286
17303
|
const entries = lead.custom_fields ?? [];
|
|
17287
17304
|
const needsCatalog = entries.some((e) => !e?.field?.name);
|
|
@@ -31319,7 +31336,7 @@ var OAUTH_BASE_URLS = {
|
|
|
31319
31336
|
fr: "https://staging.api.leadbay.app"
|
|
31320
31337
|
}
|
|
31321
31338
|
};
|
|
31322
|
-
var VERSION = "0.39.
|
|
31339
|
+
var VERSION = "0.39.1";
|
|
31323
31340
|
var HELP = `
|
|
31324
31341
|
leadbay-mcp ${VERSION} \u2014 Leadbay Model Context Protocol server
|
|
31325
31342
|
|
package/dist/http-server.js
CHANGED
|
@@ -10649,6 +10649,16 @@ var listLenses = {
|
|
|
10649
10649
|
}
|
|
10650
10650
|
};
|
|
10651
10651
|
|
|
10652
|
+
// ../core/dist/interactions.js
|
|
10653
|
+
function reportLeadInteractions(client, lensId, leadIds, types, logger2) {
|
|
10654
|
+
if (leadIds.length === 0 || types.length === 0)
|
|
10655
|
+
return;
|
|
10656
|
+
const events = leadIds.flatMap((leadId) => types.map((type) => ({ type, lead_id: leadId, lens_id: String(lensId) })));
|
|
10657
|
+
void client.request("POST", "/interactions", events).catch((err) => {
|
|
10658
|
+
logger2?.warn?.(`interactions: ${types.join("+")} for ${leadIds.length} lead(s) not recorded: ${err?.message ?? err?.code ?? err}`);
|
|
10659
|
+
});
|
|
10660
|
+
}
|
|
10661
|
+
|
|
10652
10662
|
// ../core/dist/tools/discover-leads.js
|
|
10653
10663
|
var discoverLeads = {
|
|
10654
10664
|
name: "leadbay_discover_leads",
|
|
@@ -10678,11 +10688,12 @@ var discoverLeads = {
|
|
|
10678
10688
|
},
|
|
10679
10689
|
additionalProperties: false
|
|
10680
10690
|
},
|
|
10681
|
-
execute: async (client, params) => {
|
|
10691
|
+
execute: async (client, params, ctx) => {
|
|
10682
10692
|
const lensId = params.lensId ?? await client.resolveDefaultLens();
|
|
10683
10693
|
const page = params.page ?? 0;
|
|
10684
10694
|
const count = Math.min(params.count ?? 20, 50);
|
|
10685
10695
|
const res = await client.request("GET", `/lenses/${lensId}/leads/wishlist?count=${count}&page=${page}&contacts=true`);
|
|
10696
|
+
reportLeadInteractions(client, lensId, res.items.map((lead) => lead.id), ["LEAD_SEEN"], ctx?.logger);
|
|
10686
10697
|
const totalPages = res.pagination?.pages ?? 0;
|
|
10687
10698
|
const currentPage = res.pagination?.page ?? page;
|
|
10688
10699
|
const hasMore = currentPage < totalPages - 1;
|
|
@@ -10771,13 +10782,9 @@ var getLeadProfile = {
|
|
|
10771
10782
|
},
|
|
10772
10783
|
required: ["lead", "contacts"]
|
|
10773
10784
|
},
|
|
10774
|
-
execute: async (client, params) => {
|
|
10785
|
+
execute: async (client, params, ctx) => {
|
|
10775
10786
|
const lensId = params.lensId ?? await client.resolveDefaultLens();
|
|
10776
|
-
|
|
10777
|
-
{ type: "LEAD_SEEN", leadId: params.leadId, lensId: String(lensId) },
|
|
10778
|
-
{ type: "LEAD_CLICKED", leadId: params.leadId, lensId: String(lensId) }
|
|
10779
|
-
]).catch(() => {
|
|
10780
|
-
});
|
|
10787
|
+
reportLeadInteractions(client, lensId, [params.leadId], ["LEAD_SEEN", "LEAD_CLICKED"], ctx?.logger);
|
|
10781
10788
|
const [leadResult, qualResult, contactsResult, paidContactsResult, webFetchResult] = await Promise.allSettled([
|
|
10782
10789
|
client.request("GET", `/lenses/${lensId}/leads/${params.leadId}`),
|
|
10783
10790
|
client.request("GET", `/leads/${params.leadId}/ai_agent_responses`),
|
|
@@ -16871,6 +16878,9 @@ var pullLeads = {
|
|
|
16871
16878
|
return resolvedOrder.error;
|
|
16872
16879
|
const orderQs = resolvedOrder.order ? `&order=${encodeURIComponent(resolvedOrder.order)}` : "";
|
|
16873
16880
|
const res = await client.request("GET", `/lenses/${lensId}/leads/wishlist?count=${count}&page=${page}&contacts=true${orderQs}`);
|
|
16881
|
+
if (params._reportSeen !== false) {
|
|
16882
|
+
reportLeadInteractions(client, lensId, res.items.map((lead) => lead.id), ["LEAD_SEEN"], ctx?.logger);
|
|
16883
|
+
}
|
|
16874
16884
|
const summaries = await Promise.all(res.items.map(async (lead) => {
|
|
16875
16885
|
try {
|
|
16876
16886
|
const r = await client.request("GET", `/leads/${lead.id}/ai_agent_responses`);
|
|
@@ -17549,7 +17559,7 @@ var tourPlan = {
|
|
|
17549
17559
|
city_id: params.city_id,
|
|
17550
17560
|
count: followupsCount
|
|
17551
17561
|
}, ctx),
|
|
17552
|
-
pullLeads.execute(client, { count: DISCOVER_OVER_PULL }, ctx)
|
|
17562
|
+
pullLeads.execute(client, { count: DISCOVER_OVER_PULL, _reportSeen: false }, ctx)
|
|
17553
17563
|
]);
|
|
17554
17564
|
if (followupsResult.status === "fulfilled") {
|
|
17555
17565
|
const r = followupsResult.value;
|
|
@@ -17585,6 +17595,10 @@ var tourPlan = {
|
|
|
17585
17595
|
}
|
|
17586
17596
|
const filtered = rawDiscover.filter((l) => cityMatches(l, params.city));
|
|
17587
17597
|
const discoverLeads2 = filtered.slice(0, discoverCount);
|
|
17598
|
+
const pulledLensId = leadsResult.status === "fulfilled" ? leadsResult.value?.lens?.id : null;
|
|
17599
|
+
if (pulledLensId != null) {
|
|
17600
|
+
reportLeadInteractions(client, pulledLensId, discoverLeads2.map((l) => l.id), ["LEAD_SEEN"], ctx?.logger);
|
|
17601
|
+
}
|
|
17588
17602
|
const filterNote = params.city ? `Matched ${filtered.length}/${rawDiscover.length} Discover leads to '${params.city}'; returning top ${discoverLeads2.length}.` : `No city filter applied; returning top ${discoverLeads2.length} Discover leads.`;
|
|
17589
17603
|
return {
|
|
17590
17604
|
city: params.city ?? null,
|
|
@@ -18539,11 +18553,7 @@ var researchLeadById = {
|
|
|
18539
18553
|
}
|
|
18540
18554
|
const lensId = params.lensId ?? await client.resolveDefaultLens();
|
|
18541
18555
|
const leadId = params.leadId;
|
|
18542
|
-
|
|
18543
|
-
{ type: "LEAD_SEEN", leadId, lensId: String(lensId) },
|
|
18544
|
-
{ type: "LEAD_CLICKED", leadId, lensId: String(lensId) }
|
|
18545
|
-
]).catch(() => {
|
|
18546
|
-
});
|
|
18556
|
+
reportLeadInteractions(client, lensId, [leadId], ["LEAD_SEEN", "LEAD_CLICKED"], _ctx?.logger);
|
|
18547
18557
|
const [profileR, qualR, contactsR, webFetchR, activitiesR, orgContactsR] = await Promise.allSettled([
|
|
18548
18558
|
client.request("GET", `/lenses/${lensId}/leads/${leadId}`),
|
|
18549
18559
|
client.request("GET", `/leads/${leadId}/ai_agent_responses`),
|
|
@@ -19585,11 +19595,7 @@ var getLeadCustomFields = {
|
|
|
19585
19595
|
},
|
|
19586
19596
|
execute: async (client, params, ctx) => {
|
|
19587
19597
|
const lensId = params.lensId ?? await client.resolveDefaultLens();
|
|
19588
|
-
|
|
19589
|
-
{ type: "LEAD_SEEN", leadId: params.leadId, lensId: String(lensId) },
|
|
19590
|
-
{ type: "LEAD_CLICKED", leadId: params.leadId, lensId: String(lensId) }
|
|
19591
|
-
]).catch(() => {
|
|
19592
|
-
});
|
|
19598
|
+
reportLeadInteractions(client, lensId, [params.leadId], ["LEAD_SEEN", "LEAD_CLICKED"], ctx?.logger);
|
|
19593
19599
|
const lead = await client.request("GET", `/lenses/${lensId}/leads/${params.leadId}`);
|
|
19594
19600
|
const entries = lead.custom_fields ?? [];
|
|
19595
19601
|
const needsCatalog = entries.some((e) => !e?.field?.name);
|
|
@@ -28613,7 +28619,7 @@ function parseWriteEnv(env = process.env) {
|
|
|
28613
28619
|
}
|
|
28614
28620
|
|
|
28615
28621
|
// src/http-server.ts
|
|
28616
|
-
var VERSION = true ? "0.39.
|
|
28622
|
+
var VERSION = true ? "0.39.1" : "0.0.0-dev";
|
|
28617
28623
|
var PORT = Number(process.env.PORT ?? 8080);
|
|
28618
28624
|
var HOST = process.env.HOST ?? "0.0.0.0";
|
|
28619
28625
|
var logger = {
|
package/dist/installer-gui.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leadbay/mcp",
|
|
3
|
-
"version": "0.39.
|
|
3
|
+
"version": "0.39.1",
|
|
4
4
|
"mcpName": "io.github.leadbay/leadbay-mcp",
|
|
5
5
|
"description": "Model Context Protocol (MCP) server for Leadbay — AI lead discovery, qualification, and enrichment for Claude Desktop, Cursor, and Claude Code.",
|
|
6
6
|
"type": "module",
|