@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.
Files changed (54) hide show
  1. package/README.md +114 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +4 -1
  4. package/dist/client.js.map +1 -1
  5. package/dist/executor.d.ts +1 -2
  6. package/dist/executor.d.ts.map +1 -1
  7. package/dist/executor.js +45 -17
  8. package/dist/executor.js.map +1 -1
  9. package/dist/registry.d.ts.map +1 -1
  10. package/dist/registry.js +4 -82
  11. package/dist/registry.js.map +1 -1
  12. package/dist/tools/find-email.d.ts.map +1 -1
  13. package/dist/tools/find-email.js +30 -2
  14. package/dist/tools/find-email.js.map +1 -1
  15. package/dist/tools/find-emails.d.ts.map +1 -1
  16. package/dist/tools/find-emails.js +4 -3
  17. package/dist/tools/find-emails.js.map +1 -1
  18. package/dist/tools/find-signals.js +1 -1
  19. package/dist/tools/find-signals.js.map +1 -1
  20. package/package.json +5 -2
  21. package/src/client.ts +4 -1
  22. package/src/executor.ts +46 -24
  23. package/src/registry.ts +7 -74
  24. package/src/tools/find-email.ts +32 -2
  25. package/src/tools/find-emails.ts +4 -3
  26. package/src/tools/find-signals.ts +1 -1
  27. package/test-ads-live.ts +3 -2
  28. package/test-company-live.ts +3 -2
  29. package/test-email-live.ts +13 -12
  30. package/test-influencers-live.ts +3 -2
  31. package/test-jobs-live.ts +3 -2
  32. package/test-linkupapi-live.ts +3 -2
  33. package/test-phone-live.ts +3 -2
  34. package/test-places-live.ts +3 -2
  35. package/test-reddit-live.ts +3 -2
  36. package/test-search-live.ts +3 -2
  37. package/test-seo-live.ts +3 -2
  38. package/test-web-live.ts +3 -2
  39. package/tests/client.test.ts +1 -1
  40. package/tests/executor.test.ts +227 -0
  41. package/tests/registry.test.ts +1 -77
  42. package/tests/tools/{enrich-email.test.ts → find-email.test.ts} +5 -5
  43. package/tests/tools/{enrich-emails.test.ts → find-emails.test.ts} +16 -15
  44. package/tests/tools/find-people.test.ts +12 -12
  45. package/tests/tools/search-places.test.ts +4 -4
  46. package/tests/tools/search-reddit.test.ts +6 -6
  47. package/dist/tools/enrich-email.d.ts +0 -24
  48. package/dist/tools/enrich-email.d.ts.map +0 -1
  49. package/dist/tools/enrich-email.js +0 -19
  50. package/dist/tools/enrich-email.js.map +0 -1
  51. package/dist/tools/enrich-emails.d.ts +0 -31
  52. package/dist/tools/enrich-emails.d.ts.map +0 -1
  53. package/dist/tools/enrich-emails.js +0 -146
  54. package/dist/tools/enrich-emails.js.map +0 -1
@@ -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,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CAAA;AAE3C,MAAM,CAAC,MAAM,qBAAqB,GAChC,6DAA6D;IAC7D,yEAAyE;IACzE,iEAAiE;IACjE,0EAA0E;IAC1E,uDAAuD;IACvD,0FAA0F;IAC1F,iHAAiH,CAAA;AAEnH,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;CAClD,CAAA;AAgBD,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC;AAED,SAAS,QAAQ,CAAC,MAAqB,EAAE,OAAsB;IAC7D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAA8B;IACpE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAuB,CAAA;IAC5C,MAAM,OAAO,GAAkB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;IAE7F,+CAA+C;IAC/C,MAAM,QAAQ,GAAG;QACf,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,CAAC,CAAC,YAAY;YACZ,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE;YACpD,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CACnG;KACF,CAAA;IAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,6BAA6B,EAAE,QAAQ,CAAC,CAAA;IAE9E,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,OAAO,CAAC,IAKpB,CAAA;QACD,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAA;YACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,UAAU,CAAC,CAAA;gBACzD,IAAI,GAAG,EAAE,CAAC;oBACR,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;oBACjB,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAA;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,gFAAgF;IAChF,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE9C,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG;YACb,IAAI,EAAE,kBAAkB;YACxB,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7B,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,SAAS,EAAE,CAAC,CAAC,SAAS;gBACtB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3D,aAAa,EAAE,CAAC,gBAAgB,CAAC;aAClC,CAAC,CAAC;SACJ,CAAA;QAED,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,iCAAiC,EAAE,MAAM,CAAC,CAAA;QAEpF,IAAI,WAAW,CAAC,EAAE,EAAE,CAAC;YACnB,MAAM,YAAY,GAAI,WAAW,CAAC,IAAgC,CAAC,aAAmC,CAAA;YAEtG,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAA;gBACpC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;oBAC7B,MAAM,KAAK,CAAC,IAAI,CAAC,CAAA;oBACjB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,mCAAmC,YAAY,EAAE,CAAC,CAAA;oBACvF,IAAI,CAAC,OAAO,CAAC,EAAE;wBAAE,SAAQ;oBAEzB,MAAM,EAAE,GAAG,OAAO,CAAC,IAA+B,CAAA;oBAClD,MAAM,MAAM,GAAG,EAAE,CAAC,MAA4B,CAAA;oBAC9C,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;wBAC7C,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;4BACtB,MAAM,OAAO,GAAG,EAAE,CAAC,IAAkD,CAAA;4BACrE,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gCAC3B,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;oCAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;oCAChC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,EAAE,EAAE,CAAC,CAAA;oCACpD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK;wCAAE,OAAM;oCAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAA8B,CAAA;oCAClD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wCAC3G,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;wCACrB,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAA;oCAC7B,CAAC;gCACH,CAAC,CAAC,CAAA;4BACJ,CAAC;wBACH,CAAC;wBACD,MAAK;oBACP,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,qFAAqF;IACrF,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAEjD,MAAM,OAAO,CAAC,GAAG,CACf,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAE,CAAA;QACpD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEhF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,wBAAwB,EAAE;YAC5D,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,MAAM,CAAC,MAAM;SACtB,CAAC,CAAA;QACF,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,KAAK,CAAC,IAA+B,CAAA;YAC/C,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAA;gBACnB,GAAG,CAAC,QAAQ,GAAG,WAAW,CAAA;gBAC1B,OAAM;YACR,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,uBAAuB,EAAE;YAC5D,SAAS,EAAE,MAAM,CAAC,UAAU;YAC5B,QAAQ,EAAE,MAAM,CAAC,SAAS;YAC1B,eAAe,EAAE,MAAM,CAAC,MAAM;SAC/B,CAAC,CAAA;QACF,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,MAAM,CAAC,IAA+B,CAAA;YAChD,MAAM,KAAK,GACT,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAClD,CAAC,CAAC,CAAC,CAAC,KAAK;gBACT,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;oBACvF,CAAC,CAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAY;oBACzB,CAAC,CAAC,IAAI,CAAA;YACZ,IAAI,KAAK,EAAE,CAAC;gBACV,GAAG,CAAC,KAAK,GAAG,KAAK,CAAA;gBACjB,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAA;YAC1B,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CACH,CAAA;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,MAAM,CAAA;IAC5D,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;aAClF;SACF;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"find-emails.js","sourceRoot":"","sources":["../../src/tools/find-emails.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ export const findSignalsSchema = {
17
17
  companies: z
18
18
  .array(z.string())
19
19
  .optional()
20
- .describe('Company names to filter signals for (e.g. ["ColdIQ", "HubSpot"]). Only used by company-targeted signal types: funding, acquisition, hiring, job_change, intent. Rejected for news and startup_post.'),
20
+ .describe('Company names to filter signals for (e.g. ["ColdIQ", "HubSpot"]). Only used by company-targeted signal types: funding, acquisition, hiring, job_change, intent. Rejected for news and startup_post. Currently only the first entry is forwarded to the upstream provider; pass the most important company first or call the tool once per company.'),
21
21
  domains: z
22
22
  .array(z.string())
23
23
  .optional()
@@ -1 +1 @@
1
- {"version":3,"file":"find-signals.js","sourceRoot":"","sources":["../../src/tools/find-signals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"find-signals.js","sourceRoot":"","sources":["../../src/tools/find-signals.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coldiq/mcp",
3
- "version": "0.1.0",
3
+ "version": "0.1.6",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -12,7 +12,9 @@
12
12
  "test": "vitest run",
13
13
  "test:watch": "vitest",
14
14
  "test:gtm": "LIVE_TESTS=1 vitest run tests/gtm",
15
- "test:gtm:one": "LIVE_TESTS=1 vitest run"
15
+ "test:gtm:one": "LIVE_TESTS=1 vitest run",
16
+ "version": "git add package.json package-lock.json",
17
+ "postversion": "git commit -m \"chore(mcp): release $npm_package_version\" && git tag mcp-v$npm_package_version && git push && git push --tags"
16
18
  },
17
19
  "dependencies": {
18
20
  "@modelcontextprotocol/sdk": "^1.12.1",
@@ -20,6 +22,7 @@
20
22
  },
21
23
  "devDependencies": {
22
24
  "@anthropic-ai/sdk": "^0.52.0",
25
+ "@types/node": "^22.0.0",
23
26
  "tsx": "^4.19.3",
24
27
  "typescript": "^5.8.2",
25
28
  "vitest": "^3.1.3",
package/src/client.ts CHANGED
@@ -51,10 +51,13 @@ export async function callApi(
51
51
  }
52
52
  return { ok: res.ok, status: res.status, data }
53
53
  } catch (err) {
54
+ if (process.env.COLDIQ_DEBUG) {
55
+ console.error(`[coldiq:debug] network error: ${err instanceof Error ? err.message : String(err)}`)
56
+ }
54
57
  return {
55
58
  ok: false,
56
59
  status: 0,
57
- data: { error: err instanceof Error ? err.message : String(err) },
60
+ data: { error: 'Network error' },
58
61
  }
59
62
  }
60
63
  }
package/src/executor.ts CHANGED
@@ -12,7 +12,7 @@ export interface ExecutionResult {
12
12
 
13
13
  export interface ExecutionError {
14
14
  error: string
15
- providers_tried: Array<{ id: string; status: number; error: string }>
15
+ providers_tried: Array<{ provider: string; status: number; error: string }>
16
16
  }
17
17
 
18
18
  function isExecutionError(result: ExecutionResult | ExecutionError): result is ExecutionError {
@@ -102,9 +102,17 @@ async function executeSingle(
102
102
  input: Record<string, unknown>,
103
103
  ): Promise<{ ok: boolean; status: number; data: unknown; latencyMs: number }> {
104
104
  const start = Date.now()
105
- const payload = provider.mapParams(input)
106
105
 
107
- debug(`${provider.id}: payload = ${JSON.stringify(payload)}`)
106
+ let payload: ReturnType<ProviderEntry['mapParams']>
107
+ try {
108
+ payload = provider.mapParams(input)
109
+ } catch (err) {
110
+ const msg = err instanceof Error ? err.message : String(err)
111
+ debug(`${provider.id}: mapParams threw — ${msg}`)
112
+ return { ok: false, status: 0, data: { error: `mapParams_threw: ${msg}` }, latencyMs: Date.now() - start }
113
+ }
114
+
115
+ debug(`${provider.id}: payload_keys = ${Object.keys(payload?.body ?? {}).join(',')}`)
108
116
 
109
117
  let result: { ok: boolean; status: number; data: unknown }
110
118
 
@@ -131,21 +139,43 @@ export async function executeWithFallback(
131
139
  ? getSearchWebProviders(input.search_type === 'neural')
132
140
  : getProviders(capability)
133
141
 
134
- const errors: ExecutionError['providers_tried'] = []
142
+ const errors: Array<{ id: string; status: number; error: string }> = []
135
143
 
136
144
  for (const provider of providers) {
137
- if (provider.isApplicable && !provider.isApplicable(input)) {
138
- debug(`${capability} skipping ${provider.id} (input not applicable)`)
139
- continue
145
+ if (provider.isApplicable) {
146
+ let applicable: boolean
147
+ try {
148
+ applicable = provider.isApplicable(input)
149
+ } catch (err) {
150
+ debug(`${capability} → ${provider.id}: isApplicable threw — ${err instanceof Error ? err.message : String(err)}, skipping`)
151
+ continue
152
+ }
153
+ if (!applicable) {
154
+ debug(`${capability} → skipping ${provider.id} (input not applicable)`)
155
+ continue
156
+ }
140
157
  }
141
158
  log(`${capability} → trying ${provider.id}`)
142
159
  const result = await executeSingle(provider, input)
143
160
 
144
161
  let payload = result.data
145
162
  if (result.ok && provider.postFilter) {
146
- payload = provider.postFilter(payload, input)
163
+ try {
164
+ payload = provider.postFilter(payload, input)
165
+ } catch (err) {
166
+ debug(`${provider.id}: postFilter threw — ${err instanceof Error ? err.message : String(err)}, using raw payload`)
167
+ }
147
168
  }
148
- if (result.ok && provider.hasResult(payload)) {
169
+
170
+ let hasResult: boolean
171
+ try {
172
+ hasResult = result.ok && provider.hasResult(payload)
173
+ } catch (err) {
174
+ debug(`${provider.id}: hasResult threw — ${err instanceof Error ? err.message : String(err)}, treating as no result`)
175
+ hasResult = false
176
+ }
177
+
178
+ if (hasResult) {
149
179
  log(`${capability} → ${provider.id} ✓ (${result.latencyMs}ms)`)
150
180
  return { data: payload, _meta: { provider: provider.id, latencyMs: result.latencyMs } }
151
181
  }
@@ -161,22 +191,14 @@ export async function executeWithFallback(
161
191
  errors.push({ id: provider.id, status: result.status, error: errMsg })
162
192
  }
163
193
 
194
+ debug(`${capability}: all ${errors.length} providers failed — ${JSON.stringify(errors)}`)
195
+ const sanitized = errors.map((e, i) => ({
196
+ provider: `provider_${i + 1}`,
197
+ status: e.status,
198
+ error: e.error.slice(0, 120),
199
+ }))
164
200
  return {
165
201
  error: `All ${errors.length} providers failed for ${capability}`,
166
- providers_tried: errors,
202
+ providers_tried: sanitized,
167
203
  }
168
204
  }
169
-
170
- // ---------------------------------------------------------------------------
171
- // Waterfall execution — try providers until one returns a result
172
- // Used for enrich_email: stop on first provider that finds an email
173
- // ---------------------------------------------------------------------------
174
-
175
- export async function executeWaterfall(
176
- capability: Capability,
177
- input: Record<string, unknown>,
178
- ): Promise<ExecutionResult | ExecutionError> {
179
- // Waterfall is functionally the same as fallback — try each until one succeeds
180
- // The distinction is semantic: waterfall means "I expect most to fail, stop on first hit"
181
- return executeWithFallback(capability, input)
182
- }
package/src/registry.ts CHANGED
@@ -648,79 +648,6 @@ const searchCompaniesProviders: ProviderEntry[] = [
648
648
  isNonEmptyArray(input.industries) ||
649
649
  isNonEmptyArray(input.technologies),
650
650
  },
651
- {
652
- id: 'wiza',
653
- endpoint: '/wiza/prospects/create-prospect-list',
654
- method: 'POST',
655
- priority: 5,
656
- isApplicable: (input) =>
657
- typeof input.min_founded_year === 'number' ||
658
- typeof input.max_founded_year === 'number' ||
659
- isNonEmptyArray(input.funding_stages) ||
660
- typeof input.min_funding_amount === 'number' ||
661
- typeof input.max_funding_amount === 'number',
662
- mapParams: (input) => {
663
- // Wiza filters use [{v: 'value'}] shape. Wiza's prospect endpoints return *people*,
664
- // but create-prospect-list also returns the company set indirectly via its filters.
665
- // For a search_companies waterfall, we treat a non-empty `stats.people` as proof
666
- // that the requested filter set matched at least one company.
667
- const wrap = (vals?: string[]) => (Array.isArray(vals) && vals.length > 0 ? vals.map((v) => ({ v })) : undefined)
668
- const filters: Record<string, unknown> = {}
669
- const industries = [
670
- ...((input.industries as string[] | undefined) ?? []),
671
- ...((input.keywords as string[] | undefined) ?? []),
672
- ]
673
- // Wiza company_location accepts free-text English names — translate ISO codes.
674
- const locations = [
675
- ...((input.locations as string[] | undefined) ?? []),
676
- ...((input.countries as string[] | undefined) ?? []).map(isoCountryToName),
677
- ]
678
- if (industries.length > 0) filters.company_industry = wrap(industries)
679
- if (locations.length > 0) filters.company_location = wrap(locations)
680
- if (typeof input.min_founded_year === 'number') filters.year_founded_start = wrap([String(input.min_founded_year)])
681
- if (typeof input.max_founded_year === 'number') filters.year_founded_end = wrap([String(input.max_founded_year)])
682
- if (isNonEmptyArray(input.funding_stages)) filters.funding_stage = wrap(input.funding_stages as string[])
683
- if (typeof input.min_funding_amount === 'number') filters.funding_min = wrap([String(input.min_funding_amount)])
684
- if (typeof input.max_funding_amount === 'number') filters.funding_max = wrap([String(input.max_funding_amount)])
685
- const limit = Math.min((input.limit as number) ?? 25, 500)
686
- return {
687
- body: {
688
- list: { name: 'mcp-search-companies', max_profiles: limit },
689
- filters,
690
- enrichment_level: 'none',
691
- },
692
- }
693
- },
694
- hasResult: (data) => {
695
- // Final poll response: { status, type, data: { id, status: 'finished', stats: { people } } }
696
- const d = data as Record<string, unknown>
697
- const inner = d.data as Record<string, unknown> | undefined
698
- const stats = inner?.stats as Record<string, unknown> | undefined
699
- const people = stats?.people as number | undefined
700
- return typeof people === 'number' && people > 0
701
- },
702
- async: {
703
- extractId: (response) => {
704
- const r = response as Record<string, unknown>
705
- const inner = r.data as Record<string, unknown> | undefined
706
- const id = inner?.id
707
- if (typeof id === 'number') return String(id)
708
- if (typeof id === 'string' && id.length > 0) return id
709
- throw new Error('Wiza response has no list id')
710
- },
711
- pollEndpoint: (id) => `/wiza/lists/${id}`,
712
- pollIntervalMs: 10_000,
713
- timeoutMs: 300_000, // 5 min
714
- isComplete: (data) => {
715
- // Wiza uses different status strings across endpoints — accept all known terminal
716
- // states (`finished` for individual reveals, `completed` for lists, plus failures).
717
- const d = data as Record<string, unknown>
718
- const inner = d.data as Record<string, unknown> | undefined
719
- const status = inner?.status as string | undefined
720
- return status === 'finished' || status === 'completed' || status === 'failed'
721
- },
722
- },
723
- },
724
651
  {
725
652
  id: 'limadata-prospect-filter',
726
653
  endpoint: '/coldiq/prospect/companies/filter',
@@ -1297,9 +1224,15 @@ const findEmailProviders: ProviderEntry[] = [
1297
1224
  endpoint: '/findymail/search/name',
1298
1225
  method: 'POST',
1299
1226
  priority: 1,
1227
+ isApplicable: (input) =>
1228
+ typeof input.first_name === 'string' && (input.first_name as string).length > 0 &&
1229
+ (
1230
+ (typeof input.domain === 'string' && (input.domain as string).length > 0) ||
1231
+ (typeof input.company_name === 'string' && (input.company_name as string).length > 0)
1232
+ ),
1300
1233
  mapParams: (input) => ({
1301
1234
  body: {
1302
- name: `${input.first_name} ${input.last_name}`,
1235
+ name: [input.first_name, input.last_name].filter(Boolean).join(' '),
1303
1236
  domain: input.domain,
1304
1237
  },
1305
1238
  }),
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod'
2
- import { executeWaterfall, isExecutionError } from '../executor.js'
2
+ import { executeWithFallback, isExecutionError } from '../executor.js'
3
3
 
4
4
  export const findEmailName = 'find_email'
5
5
 
@@ -14,8 +14,38 @@ export const findEmailSchema = {
14
14
  linkedin_url: z.string().optional().describe('LinkedIn profile URL — alternative to name+domain'),
15
15
  }
16
16
 
17
+ const inputSchema = z
18
+ .object({
19
+ first_name: z.string().optional(),
20
+ last_name: z.string().optional(),
21
+ domain: z.string().optional(),
22
+ company_name: z.string().optional(),
23
+ linkedin_url: z.string().optional(),
24
+ })
25
+ .superRefine((val, ctx) => {
26
+ const hasLinkedIn = typeof val.linkedin_url === 'string' && val.linkedin_url.length > 0
27
+ const hasName = typeof val.first_name === 'string' && val.first_name.length > 0
28
+ const hasDomain =
29
+ (typeof val.domain === 'string' && val.domain.length > 0) ||
30
+ (typeof val.company_name === 'string' && val.company_name.length > 0)
31
+ if (!hasLinkedIn && !(hasName && hasDomain)) {
32
+ ctx.addIssue({
33
+ code: 'custom',
34
+ message: 'Provide either linkedin_url or both first_name and domain/company_name',
35
+ })
36
+ }
37
+ })
38
+
17
39
  export async function findEmailHandler(input: Record<string, unknown>) {
18
- const result = await executeWaterfall('find_email', input)
40
+ const validation = inputSchema.safeParse(input)
41
+ if (!validation.success) {
42
+ const msg = validation.error.issues.map((i) => i.message).join('; ')
43
+ return {
44
+ content: [{ type: 'text' as const, text: JSON.stringify({ error: msg }, null, 2) }],
45
+ isError: true,
46
+ }
47
+ }
48
+ const result = await executeWithFallback('find_email', input)
19
49
  if (isExecutionError(result)) {
20
50
  return { content: [{ type: 'text' as const, text: JSON.stringify(result, null, 2) }], isError: true }
21
51
  }
@@ -91,6 +91,7 @@ export async function findEmailsHandler(input: Record<string, unknown>) {
91
91
  const feBody = {
92
92
  name: 'mcp-enrich-batch',
93
93
  data: afterProspeo.map((p) => ({
94
+ custom_id: p.id,
94
95
  first_name: p.first_name,
95
96
  last_name: p.last_name,
96
97
  domain: p.domain,
@@ -117,9 +118,9 @@ export async function findEmailsHandler(input: Record<string, unknown>) {
117
118
  if (status === 'DONE') {
118
119
  const feItems = pd.data as Array<Record<string, unknown>> | undefined
119
120
  if (Array.isArray(feItems)) {
120
- feItems.forEach((item, idx) => {
121
- const person = afterProspeo[idx]
122
- const hit = results.find((r) => r.id === person?.id)
121
+ feItems.forEach((item) => {
122
+ const personId = item.custom_id as string | undefined
123
+ const hit = personId ? results.find((r) => r.id === personId) : undefined
123
124
  if (!hit || hit.email) return
124
125
  const emails = item.emails as string[] | undefined
125
126
  if (Array.isArray(emails) && emails.length > 0 && typeof emails[0] === 'string' && emails[0].includes('@')) {
@@ -23,7 +23,7 @@ export const findSignalsSchema = {
23
23
  companies: z
24
24
  .array(z.string())
25
25
  .optional()
26
- .describe('Company names to filter signals for (e.g. ["ColdIQ", "HubSpot"]). Only used by company-targeted signal types: funding, acquisition, hiring, job_change, intent. Rejected for news and startup_post.'),
26
+ .describe('Company names to filter signals for (e.g. ["ColdIQ", "HubSpot"]). Only used by company-targeted signal types: funding, acquisition, hiring, job_change, intent. Rejected for news and startup_post. Currently only the first entry is forwarded to the upstream provider; pass the most important company first or call the tool once per company.'),
27
27
  domains: z
28
28
  .array(z.string())
29
29
  .optional()
package/test-ads-live.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { initClient } from './src/client.js'
2
2
  import { searchAdsHandler } from './src/tools/search-ads.js'
3
3
 
4
- const API_URL = 'https://api.coldiq.com'
5
- const API_KEY = 'ciq_test_3797d4ddc5542ceb'
4
+ const API_URL = process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com'
5
+ const API_KEY = process.env.COLDIQ_API_KEY
6
+ if (!API_KEY) { console.error('COLDIQ_API_KEY env var is required'); process.exit(1) }
6
7
 
7
8
  initClient(API_URL, API_KEY)
8
9
 
@@ -1,8 +1,9 @@
1
1
  import { initClient } from './src/client.js'
2
2
  import { enrichCompanyHandler } from './src/tools/enrich-company.js'
3
3
 
4
- const API_URL = 'https://api.coldiq.com'
5
- const API_KEY = 'ciq_test_3797d4ddc5542ceb'
4
+ const API_URL = process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com'
5
+ const API_KEY = process.env.COLDIQ_API_KEY
6
+ if (!API_KEY) { console.error('COLDIQ_API_KEY env var is required'); process.exit(1) }
6
7
 
7
8
  initClient(API_URL, API_KEY)
8
9
 
@@ -1,10 +1,11 @@
1
1
  import { initClient } from './src/client.js'
2
- import { enrichEmailHandler } from './src/tools/enrich-email.js'
3
- import { enrichEmailsHandler } from './src/tools/enrich-emails.js'
2
+ import { findEmailHandler } from './src/tools/find-email.js'
3
+ import { findEmailsHandler } from './src/tools/find-emails.js'
4
4
  import { verifyEmailHandler } from './src/tools/verify-email.js'
5
5
 
6
- const API_URL = 'https://api.coldiq.com'
7
- const API_KEY = 'ciq_test_3797d4ddc5542ceb'
6
+ const API_URL = process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com'
7
+ const API_KEY = process.env.COLDIQ_API_KEY
8
+ if (!API_KEY) { console.error('COLDIQ_API_KEY env var is required'); process.exit(1) }
8
9
 
9
10
  initClient(API_URL, API_KEY)
10
11
 
@@ -41,7 +42,7 @@ async function run(label: string, handler: Handler, input: Record<string, unknow
41
42
  if (Array.isArray(parsed.providers_tried)) {
42
43
  console.log(`PROVIDERS TRIED (${parsed.providers_tried.length}):`)
43
44
  for (const p of parsed.providers_tried) {
44
- console.log(` • ${p.id}: status=${p.status ?? '?'} error=${p.error ?? '-'}`)
45
+ console.log(` • ${p.provider}: status=${p.status ?? '?'} error=${p.error ?? '-'}`)
45
46
  }
46
47
  }
47
48
  return
@@ -73,7 +74,7 @@ async function main() {
73
74
 
74
75
  // Test 1: Happy path — name + domain
75
76
  // Expected: findymail (priority 1) wins. blitzapi + limadata-work-email-linkedin skipped (no linkedin_url).
76
- await run('enrich_email — happy path (name + domain)', enrichEmailHandler, {
77
+ await run('enrich_email — happy path (name + domain)', findEmailHandler, {
77
78
  first_name: 'Michel',
78
79
  last_name: 'Lieben',
79
80
  domain: 'coldiq.com',
@@ -81,7 +82,7 @@ async function main() {
81
82
 
82
83
  // Test 2: Name + company_name, no domain
83
84
  // Expected: limadata-work-email skipped (requires domain). icypeas (priority 2) likely wins via company_name.
84
- await run('enrich_email — name + company_name, no domain (Satya Nadella / Microsoft)', enrichEmailHandler, {
85
+ await run('enrich_email — name + company_name, no domain (Satya Nadella / Microsoft)', findEmailHandler, {
85
86
  first_name: 'Satya',
86
87
  last_name: 'Nadella',
87
88
  company_name: 'Microsoft',
@@ -90,7 +91,7 @@ async function main() {
90
91
  // Test 3: LinkedIn URL + name, no domain
91
92
  // Expected: limadata-work-email skipped (no domain). prospeo (priority 4) likely wins via linkedin_url.
92
93
  // blitzapi + limadata-work-email-linkedin are now eligible (have linkedin_url).
93
- await run('enrich_email — linkedin_url + name, no domain', enrichEmailHandler, {
94
+ await run('enrich_email — linkedin_url + name, no domain', findEmailHandler, {
94
95
  first_name: 'Michel',
95
96
  last_name: 'Lieben',
96
97
  linkedin_url: 'https://www.linkedin.com/in/michel-lieben',
@@ -98,7 +99,7 @@ async function main() {
98
99
 
99
100
  // Test 4: Full input — all 8 providers eligible
100
101
  // Expected: findymail wins. Debug trace shows 0 skips.
101
- await run('enrich_email — full input (all 8 providers eligible)', enrichEmailHandler, {
102
+ await run('enrich_email — full input (all 8 providers eligible)', findEmailHandler, {
102
103
  first_name: 'Michel',
103
104
  last_name: 'Lieben',
104
105
  domain: 'coldiq.com',
@@ -109,7 +110,7 @@ async function main() {
109
110
  // Test 5: Forced fallthrough — fake name at real domain
110
111
  // Expected: providers 1-3 miss (no such person), waterfall marches to prospeo/fullenrich/linkupapi.
111
112
  // Most important scenario for confirming priority order. fullenrich may add 5-10s (async poll).
112
- await run('enrich_email — forced fallthrough (fake name at coldiq.com)', enrichEmailHandler, {
113
+ await run('enrich_email — forced fallthrough (fake name at coldiq.com)', findEmailHandler, {
113
114
  first_name: 'Zerphus',
114
115
  last_name: 'Mclaren',
115
116
  domain: 'coldiq.com',
@@ -117,7 +118,7 @@ async function main() {
117
118
 
118
119
  // Test 6: Total failure — fabricated person + nonexistent domain
119
120
  // Expected: isError=true, providers_tried.length === 6 (skips blitzapi + limadata-work-email-linkedin).
120
- await run('enrich_email — total failure (fake person + nonexistent domain)', enrichEmailHandler, {
121
+ await run('enrich_email — total failure (fake person + nonexistent domain)', findEmailHandler, {
121
122
  first_name: 'Zerphus',
122
123
  last_name: 'Mclaren',
123
124
  domain: 'this-domain-does-not-exist-zxcv.io',
@@ -129,7 +130,7 @@ async function main() {
129
130
  // michel: Prospeo stage 1 via linkedin_url (most likely)
130
131
  // satya: FullEnrich stage 2 or FindyMail stage 3 (no linkedin_url)
131
132
  // fake-person: provider=null expected
132
- await run('enrich_emails — mixed batch (Prospeo → FullEnrich → FindyMail/IcyPeas)', enrichEmailsHandler, {
133
+ await run('enrich_emails — mixed batch (Prospeo → FullEnrich → FindyMail/IcyPeas)', findEmailsHandler, {
133
134
  people: [
134
135
  {
135
136
  id: 'michel',
@@ -1,8 +1,9 @@
1
1
  import { initClient } from './src/client.js'
2
2
  import { findInfluencersHandler } from './src/tools/find-influencers.js'
3
3
 
4
- const API_URL = 'https://api.coldiq.com'
5
- const API_KEY = 'ciq_test_3797d4ddc5542ceb'
4
+ const API_URL = process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com'
5
+ const API_KEY = process.env.COLDIQ_API_KEY
6
+ if (!API_KEY) { console.error('COLDIQ_API_KEY env var is required'); process.exit(1) }
6
7
 
7
8
  initClient(API_URL, API_KEY)
8
9
 
package/test-jobs-live.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { initClient } from './src/client.js'
2
2
  import { searchJobsHandler } from './src/tools/search-jobs.js'
3
3
 
4
- const API_URL = 'https://api.coldiq.com'
5
- const API_KEY = 'ciq_test_3797d4ddc5542ceb'
4
+ const API_URL = process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com'
5
+ const API_KEY = process.env.COLDIQ_API_KEY
6
+ if (!API_KEY) { console.error('COLDIQ_API_KEY env var is required'); process.exit(1) }
6
7
 
7
8
  initClient(API_URL, API_KEY)
8
9
 
@@ -17,8 +17,9 @@ import { enrichCompanyHandler } from './src/tools/enrich-company.js'
17
17
  import { findPeopleHandler } from './src/tools/find-people.js'
18
18
  import { searchCompaniesHandler } from './src/tools/search-companies.js'
19
19
 
20
- const API_URL = 'https://api.coldiq.com'
21
- const API_KEY = 'ciq_test_3797d4ddc5542ceb'
20
+ const API_URL = process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com'
21
+ const API_KEY = process.env.COLDIQ_API_KEY
22
+ if (!API_KEY) { console.error('COLDIQ_API_KEY env var is required'); process.exit(1) }
22
23
 
23
24
  initClient(API_URL, API_KEY)
24
25
 
@@ -1,8 +1,9 @@
1
1
  import { initClient } from './src/client.js'
2
2
  import { findPhoneHandler } from './src/tools/find-phone.js'
3
3
 
4
- const API_URL = 'https://api.coldiq.com'
5
- const API_KEY = 'ciq_test_3797d4ddc5542ceb'
4
+ const API_URL = process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com'
5
+ const API_KEY = process.env.COLDIQ_API_KEY
6
+ if (!API_KEY) { console.error('COLDIQ_API_KEY env var is required'); process.exit(1) }
6
7
 
7
8
  initClient(API_URL, API_KEY)
8
9
 
@@ -1,8 +1,9 @@
1
1
  import { initClient } from './src/client.js'
2
2
  import { searchPlacesHandler } from './src/tools/search-places.js'
3
3
 
4
- const API_URL = 'https://api.coldiq.com'
5
- const API_KEY = 'ciq_test_3797d4ddc5542ceb'
4
+ const API_URL = process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com'
5
+ const API_KEY = process.env.COLDIQ_API_KEY
6
+ if (!API_KEY) { console.error('COLDIQ_API_KEY env var is required'); process.exit(1) }
6
7
 
7
8
  initClient(API_URL, API_KEY)
8
9
 
@@ -1,8 +1,9 @@
1
1
  import { initClient } from './src/client.js'
2
2
  import { searchRedditHandler } from './src/tools/search-reddit.js'
3
3
 
4
- const API_URL = 'https://api.coldiq.com'
5
- const API_KEY = 'ciq_test_3797d4ddc5542ceb'
4
+ const API_URL = process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com'
5
+ const API_KEY = process.env.COLDIQ_API_KEY
6
+ if (!API_KEY) { console.error('COLDIQ_API_KEY env var is required'); process.exit(1) }
6
7
 
7
8
  initClient(API_URL, API_KEY)
8
9
 
@@ -1,8 +1,9 @@
1
1
  import { initClient } from './src/client.js'
2
2
  import { searchCompaniesHandler } from './src/tools/search-companies.js'
3
3
 
4
- const API_URL = 'https://api.coldiq.com'
5
- const API_KEY = 'ciq_test_3797d4ddc5542ceb'
4
+ const API_URL = process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com'
5
+ const API_KEY = process.env.COLDIQ_API_KEY
6
+ if (!API_KEY) { console.error('COLDIQ_API_KEY env var is required'); process.exit(1) }
6
7
 
7
8
  initClient(API_URL, API_KEY)
8
9
 
package/test-seo-live.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { initClient } from './src/client.js'
2
2
  import { searchSeoHandler } from './src/tools/search-seo.js'
3
3
 
4
- const API_URL = 'https://api.coldiq.com'
5
- const API_KEY = 'ciq_test_3797d4ddc5542ceb'
4
+ const API_URL = process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com'
5
+ const API_KEY = process.env.COLDIQ_API_KEY
6
+ if (!API_KEY) { console.error('COLDIQ_API_KEY env var is required'); process.exit(1) }
6
7
 
7
8
  initClient(API_URL, API_KEY)
8
9
 
package/test-web-live.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { initClient } from './src/client.js'
2
2
  import { searchWebHandler } from './src/tools/search-web.js'
3
3
 
4
- const API_URL = 'https://api.coldiq.com'
5
- const API_KEY = 'ciq_test_3797d4ddc5542ceb'
4
+ const API_URL = process.env.COLDIQ_API_URL ?? 'https://api.coldiq.com'
5
+ const API_KEY = process.env.COLDIQ_API_KEY
6
+ if (!API_KEY) { console.error('COLDIQ_API_KEY env var is required'); process.exit(1) }
6
7
 
7
8
  initClient(API_URL, API_KEY)
8
9
 
@@ -62,7 +62,7 @@ describe('client', () => {
62
62
 
63
63
  expect(result.ok).toBe(false)
64
64
  expect(result.status).toBe(0)
65
- expect((result.data as Record<string, unknown>).error).toBe('Network timeout')
65
+ expect((result.data as Record<string, unknown>).error).toBe('Network error')
66
66
  })
67
67
 
68
68
  it('returns parsed JSON on success', async () => {