@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 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
- void client.request("POST", "/interactions", [
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
- void client.request("POST", "/interactions", [
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
- void client.request("POST", "/interactions", [
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.0";
31339
+ var VERSION = "0.39.1";
31323
31340
  var HELP = `
31324
31341
  leadbay-mcp ${VERSION} \u2014 Leadbay Model Context Protocol server
31325
31342
 
@@ -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
- void client.request("POST", "/interactions", [
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
- void client.request("POST", "/interactions", [
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
- void client.request("POST", "/interactions", [
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.0" : "0.0.0-dev";
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 = {
@@ -1805,7 +1805,7 @@ var init_installer_gui = __esm({
1805
1805
  init_install_dxt();
1806
1806
  init_install_shared();
1807
1807
  init_oauth();
1808
- VERSION = true ? "0.39.0" : "0.0.0-dev";
1808
+ VERSION = true ? "0.39.1" : "0.0.0-dev";
1809
1809
  MESSAGES = {
1810
1810
  en: {
1811
1811
  installer: {
@@ -1068,7 +1068,7 @@ async function oauthLogin(opts) {
1068
1068
  }
1069
1069
 
1070
1070
  // installer/installer-gui.ts
1071
- var VERSION = true ? "0.39.0" : "0.0.0-dev";
1071
+ var VERSION = true ? "0.39.1" : "0.0.0-dev";
1072
1072
  var MESSAGES = {
1073
1073
  en: {
1074
1074
  installer: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leadbay/mcp",
3
- "version": "0.39.0",
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",