@agifyai/leadify-mcp 9.8.0 → 9.9.0

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 CHANGED
@@ -581,7 +581,9 @@ Gmail confirmé, sans message Gmail en attente ou inconnu. Les invitations sont
581
581
  comptées séparément. `replies_to_handle` sélectionne les réponses à traiter dans
582
582
  leur propre fil. `filters.signal_filter` accepte `detected_since`,
583
583
  `detected_before`, `levels` (`STRONG`, `GOLDEN`, `CRITICAL`) et `scope`
584
- (`PERSON`, `COMPANY`, `BOTH`). L'absence d'historique connu n'est pas la preuve
584
+ (`PERSON`, `COMPANY`, `BOTH`). `filters.qualified: true` garde les personnes
585
+ dont la qualification est terminée ; `filters.qualification_levels` (`hot`,
586
+ `warm`, `cold`, de une à trois valeurs) filtre la température (PRD-2650). L'absence d'historique connu n'est pas la preuve
585
587
  qu'une personne n'a jamais été contactée.
586
588
 
587
589
  La sélection expire après dix minutes. Passer son `nextCursor` dans `cursor` avec
@@ -91,7 +91,7 @@ export function registerAgentOutreachTools(server, client = getClient()) {
91
91
  }
92
92
  register("list_outreach_programs", "List compact accessible autonomous outreach programs and the server contract version. Pagination: pass nextCursor unchanged as after_id.", z.object({ organization_id: identifier, after_id: identifier.optional(), limit: z.number().int().min(1).max(50).default(25) }).strict(), async (v) => requireOutreachVersion(await client.get("/api/agent-outreach/programs", params(v.organization_id, { afterId: v.after_id, limit: v.limit })), "1.0.0"));
93
93
  register("get_outreach_program_context", "Read one program's rules, authorization revision and permitted sender identities. Cannot authorize, resume, raise caps, grant rights or change senders.", z.object(scope).strict(), async (v) => requireOutreachVersion(await client.get(programPath(v.program_id), params(v.organization_id)), "1.0.0"));
94
- register("query_outreach_prospects", "Select canonical people server-side before pagination. Recipes: followup_due = seven days without pending/unknown/reply; channel_gap = LinkedIn messages >=2 and Gmail=0; replies_to_handle. For 72 hours set filters.last_confirmed_outbound_before.before to an explicit ISO timestamp. Signal filters support detection dates, levels and person/company scope. Keep cursor, filters and limit identical on continuation; selections expire after ten minutes. An incomplete history never proves no previous contact.", querySchema, async (v) => requireOutreachVersion(await client.post(postPath(`${programPath(v.program_id)}/prospects/query`, v.organization_id), queryBody(v)), "1.0.0"));
94
+ register("query_outreach_prospects", "Select canonical people server-side before pagination. Recipes: followup_due = seven days without pending/unknown/reply; channel_gap = LinkedIn messages >=2 and Gmail=0; replies_to_handle. For 72 hours set filters.last_confirmed_outbound_before.before to an explicit ISO timestamp. Signal filters support detection dates, levels and person/company scope. filters.qualified:true keeps the people whose qualification is finished; filters.qualification_levels (hot, warm, cold; 1 to 3 values) filters the temperature. Keep cursor, filters and limit identical on continuation; selections expire after ten minutes. An incomplete history never proves no previous contact.", querySchema, async (v) => requireOutreachVersion(await client.post(postPath(`${programPath(v.program_id)}/prospects/query`, v.organization_id), queryBody(v)), "1.0.0"));
95
95
  const personSchema = z.object({ ...scope, lead_id: identifier }).strict();
96
96
  register("get_outreach_prospect_summary", "Read a selected person's compact identity, contact counts and selection reasons. This is NOT the writing context: use get_outreach_prospect_context before drafting.", personSchema, v => client.get(`${programPath(v.program_id)}/prospects/${encoded(v.lead_id)}`, params(v.organization_id)));
97
97
  register("get_outreach_contact_history", "Read confirmed contact evidence for one person across accessible accounts, including pending, unknown and manual activity. Coverage limits remain explicit.", personSchema, v => client.get(`${programPath(v.program_id)}/contacts/${encoded(v.lead_id)}`, params(v.organization_id)));
@@ -99,6 +99,8 @@ export declare const filters: z.ZodObject<{
99
99
  unknown: z.ZodOptional<z.ZodBoolean>;
100
100
  reply: z.ZodOptional<z.ZodEnum<["TO_HANDLE", "WAITING", "NONE"]>>;
101
101
  excluded: z.ZodOptional<z.ZodBoolean>;
102
+ qualified: z.ZodOptional<z.ZodBoolean>;
103
+ qualification_levels: z.ZodOptional<z.ZodArray<z.ZodEnum<["hot", "warm", "cold"]>, "many">>;
102
104
  }, "strict", z.ZodTypeAny, {
103
105
  group_id?: string | undefined;
104
106
  unknown?: boolean | undefined;
@@ -125,6 +127,8 @@ export declare const filters: z.ZodObject<{
125
127
  pending?: boolean | undefined;
126
128
  reply?: "TO_HANDLE" | "WAITING" | "NONE" | undefined;
127
129
  excluded?: boolean | undefined;
130
+ qualified?: boolean | undefined;
131
+ qualification_levels?: ("hot" | "warm" | "cold")[] | undefined;
128
132
  }, {
129
133
  group_id?: string | undefined;
130
134
  unknown?: boolean | undefined;
@@ -151,6 +155,8 @@ export declare const filters: z.ZodObject<{
151
155
  pending?: boolean | undefined;
152
156
  reply?: "TO_HANDLE" | "WAITING" | "NONE" | undefined;
153
157
  excluded?: boolean | undefined;
158
+ qualified?: boolean | undefined;
159
+ qualification_levels?: ("hot" | "warm" | "cold")[] | undefined;
154
160
  }>;
155
161
  export declare const contextModules: z.ZodObject<{
156
162
  prospect: z.ZodString;
@@ -970,6 +976,8 @@ export declare const querySchema: z.ZodObject<{
970
976
  unknown: z.ZodOptional<z.ZodBoolean>;
971
977
  reply: z.ZodOptional<z.ZodEnum<["TO_HANDLE", "WAITING", "NONE"]>>;
972
978
  excluded: z.ZodOptional<z.ZodBoolean>;
979
+ qualified: z.ZodOptional<z.ZodBoolean>;
980
+ qualification_levels: z.ZodOptional<z.ZodArray<z.ZodEnum<["hot", "warm", "cold"]>, "many">>;
973
981
  }, "strict", z.ZodTypeAny, {
974
982
  group_id?: string | undefined;
975
983
  unknown?: boolean | undefined;
@@ -996,6 +1004,8 @@ export declare const querySchema: z.ZodObject<{
996
1004
  pending?: boolean | undefined;
997
1005
  reply?: "TO_HANDLE" | "WAITING" | "NONE" | undefined;
998
1006
  excluded?: boolean | undefined;
1007
+ qualified?: boolean | undefined;
1008
+ qualification_levels?: ("hot" | "warm" | "cold")[] | undefined;
999
1009
  }, {
1000
1010
  group_id?: string | undefined;
1001
1011
  unknown?: boolean | undefined;
@@ -1022,6 +1032,8 @@ export declare const querySchema: z.ZodObject<{
1022
1032
  pending?: boolean | undefined;
1023
1033
  reply?: "TO_HANDLE" | "WAITING" | "NONE" | undefined;
1024
1034
  excluded?: boolean | undefined;
1035
+ qualified?: boolean | undefined;
1036
+ qualification_levels?: ("hot" | "warm" | "cold")[] | undefined;
1025
1037
  }>>;
1026
1038
  limit: z.ZodDefault<z.ZodNumber>;
1027
1039
  cursor: z.ZodOptional<z.ZodString>;
@@ -1054,6 +1066,8 @@ export declare const querySchema: z.ZodObject<{
1054
1066
  pending?: boolean | undefined;
1055
1067
  reply?: "TO_HANDLE" | "WAITING" | "NONE" | undefined;
1056
1068
  excluded?: boolean | undefined;
1069
+ qualified?: boolean | undefined;
1070
+ qualification_levels?: ("hot" | "warm" | "cold")[] | undefined;
1057
1071
  };
1058
1072
  limit: number;
1059
1073
  organization_id: string;
@@ -1090,6 +1104,8 @@ export declare const querySchema: z.ZodObject<{
1090
1104
  pending?: boolean | undefined;
1091
1105
  reply?: "TO_HANDLE" | "WAITING" | "NONE" | undefined;
1092
1106
  excluded?: boolean | undefined;
1107
+ qualified?: boolean | undefined;
1108
+ qualification_levels?: ("hot" | "warm" | "cold")[] | undefined;
1093
1109
  } | undefined;
1094
1110
  limit?: number | undefined;
1095
1111
  cursor?: string | undefined;
@@ -1761,6 +1777,8 @@ export declare function queryBody(v: z.infer<typeof querySchema>): {
1761
1777
  unknown: boolean | undefined;
1762
1778
  reply: "TO_HANDLE" | "WAITING" | "NONE" | undefined;
1763
1779
  excluded: boolean | undefined;
1780
+ qualified: boolean | undefined;
1781
+ qualificationLevels: ("hot" | "warm" | "cold")[] | undefined;
1764
1782
  };
1765
1783
  };
1766
1784
  export declare function decisionBody(d: z.infer<typeof decision>): {
@@ -21,6 +21,8 @@ export const filters = z.object({
21
21
  last_confirmed_outbound_before: z.object({ channel: z.enum(["any", "GMAIL", "LINKEDIN"]), before: date }).strict().optional(),
22
22
  counts: z.array(count).max(6).optional(), never_on: z.array(target).max(3).optional(),
23
23
  pending: z.boolean().optional(), unknown: z.boolean().optional(), reply: z.enum(["TO_HANDLE", "WAITING", "NONE"]).optional(), excluded: z.boolean().optional(),
24
+ // PRD-2650 (server: PRD-2649): qualification finished, and its temperature.
25
+ qualified: z.boolean().optional(), qualification_levels: z.array(z.enum(["hot", "warm", "cold"])).min(1).max(3).optional(),
24
26
  }).strict();
25
27
  // PRD-2632 : one fingerprint per module, copied from get_outreach_context_summary.decisionContext.modules.
26
28
  export const contextModules = z.object({ prospect: version, company: version, workspace: version, company_brain: version, vertical: version, offers: version,
@@ -89,6 +91,7 @@ export function queryBody(v) {
89
91
  groupId: f.group_id, signalFilter: f.signal_filter && { detectedSince: f.signal_filter.detected_since, detectedBefore: f.signal_filter.detected_before, levels: f.signal_filter.levels, scope: f.signal_filter.scope },
90
92
  lastConfirmedOutboundBefore: f.last_confirmed_outbound_before, counts: f.counts, neverOn: f.never_on,
91
93
  pending: f.pending, unknown: f.unknown, reply: f.reply, excluded: f.excluded,
94
+ qualified: f.qualified, qualificationLevels: f.qualification_levels,
92
95
  } };
93
96
  }
94
97
  export function decisionBody(d) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agifyai/leadify-mcp",
3
- "version": "9.8.0",
3
+ "version": "9.9.0",
4
4
  "description": "MCP server for Leadify lead management API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",