@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
package/README.md ADDED
@@ -0,0 +1,114 @@
1
+ # ColdIQ MCP Server
2
+
3
+ An [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server that exposes ColdIQ's B2B data marketplace to AI assistants. Connect it to Claude or any MCP-compatible client to search companies, find and enrich contacts, verify emails, track sales signals, and more — all powered by ColdIQ's unified API.
4
+
5
+ ## Prerequisites
6
+
7
+ - Node.js 18+
8
+ - A [ColdIQ API key](https://marketplace.coldiq.com)
9
+
10
+ ## Configuration
11
+
12
+ | Variable | Required | Default | Description |
13
+ |---|---|---|---|
14
+ | `COLDIQ_API_KEY` | Yes | — | Your ColdIQ API key |
15
+ | `COLDIQ_API_URL` | No | `https://api.coldiq.com` | Override the API base URL |
16
+ | `COLDIQ_DEBUG` | No | — | Set to `1` to enable debug logging |
17
+
18
+ ## Connecting to Claude
19
+
20
+ ### Claude Desktop
21
+
22
+ Add the following to your `claude_desktop_config.json`:
23
+
24
+ ```json
25
+ {
26
+ "mcpServers": {
27
+ "coldiq": {
28
+ "command": "npx",
29
+ "args": ["-y", "@coldiq/mcp@latest"],
30
+ "env": {
31
+ "COLDIQ_API_KEY": "your_api_key_here"
32
+ }
33
+ }
34
+ }
35
+ }
36
+ ```
37
+
38
+ ### Claude Code
39
+
40
+ ```bash
41
+ claude mcp add coldiq -e COLDIQ_API_KEY=<your-key> -- npx -y @coldiq/mcp@latest
42
+ ```
43
+
44
+ ### Running directly
45
+
46
+ ```bash
47
+ COLDIQ_API_KEY=your_key npx @coldiq/mcp@latest
48
+ ```
49
+
50
+ ## Available Tools
51
+
52
+ ### Prospecting
53
+
54
+ | Tool | Description |
55
+ |---|---|
56
+ | `search_companies` | Search B2B companies by firmographics, tech stack, funding, headcount, or hiring signals |
57
+ | `find_people` | Find people at companies filtered by job title or department |
58
+ | `find_influencers` | Discover LinkedIn or Twitter influencers in a niche |
59
+
60
+ ### Contact Data
61
+
62
+ | Tool | Description |
63
+ |---|---|
64
+ | `find_email` | Find a professional email from a name and domain (waterfall across providers) |
65
+ | `verify_email` | Check if an email address is deliverable |
66
+ | `find_phone` | Find a phone number for a contact |
67
+
68
+ ### Enrichment
69
+
70
+ | Tool | Description |
71
+ |---|---|
72
+ | `enrich_person` | Enrich a person's profile from a LinkedIn URL, name, or domain |
73
+ | `enrich_company` | Enrich a company's profile from its domain, LinkedIn URL, or name |
74
+
75
+ ### Intelligence & Research
76
+
77
+ | Tool | Description |
78
+ |---|---|
79
+ | `find_signals` | Surface sales signals: funding rounds, acquisitions, job changes, hiring intent, buying intent, news |
80
+ | `search_jobs` | Search live job postings; routes to ATS career sites or LinkedIn based on filters |
81
+ | `search_ads` | Discover active LinkedIn ads from a company |
82
+ | `search_seo` | SERP rankings, traffic data, and technology stack analysis |
83
+ | `search_reddit` | Search Reddit posts and discussions |
84
+
85
+ ### Web & Local
86
+
87
+ | Tool | Description |
88
+ |---|---|
89
+ | `search_web` | General web search (Google or neural/Exa) |
90
+ | `search_places` | Find local businesses and places |
91
+ | `fetch_page_content` | Extract text content or a summary from any URL |
92
+
93
+ ## Development
94
+
95
+ ```bash
96
+ # Run unit tests
97
+ npm test
98
+
99
+ # Watch mode
100
+ npm run test:watch
101
+
102
+ # Live integration tests (consumes credits)
103
+ LIVE_TESTS=1 npm run test:gtm
104
+ ```
105
+
106
+ Tests live in `tests/`, mirroring the `src/` structure. See `tests/gtm-scenarios.md` for realistic end-to-end usage scenarios.
107
+
108
+ ## Architecture
109
+
110
+ The server is built on three layers:
111
+
112
+ - **Tools** (`src/tools/`) — MCP tool definitions with Zod input schemas and descriptions
113
+ - **Executor** (`src/executor.ts`) — Waterfall/fallback engine that tries providers in priority order
114
+ - **Registry** (`src/registry.ts`) — Maps each capability to an ordered list of providers with parameter translation, applicability gates, and response normalization
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAKD,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAQjE;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,KAAK,GAAG,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,WAAW,CAAC,CAmCtB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAKD,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAQjE;AAED,wBAAsB,OAAO,CAC3B,MAAM,EAAE,KAAK,GAAG,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,OAAO,EACd,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,WAAW,CAAC,CAsCtB"}
package/dist/client.js CHANGED
@@ -37,10 +37,13 @@ export async function callApi(method, path, body, queryParams) {
37
37
  return { ok: res.ok, status: res.status, data };
38
38
  }
39
39
  catch (err) {
40
+ if (process.env.COLDIQ_DEBUG) {
41
+ console.error(`[coldiq:debug] network error: ${err instanceof Error ? err.message : String(err)}`);
42
+ }
40
43
  return {
41
44
  ok: false,
42
45
  status: 0,
43
- data: { error: err instanceof Error ? err.message : String(err) },
46
+ data: { error: 'Network error' },
44
47
  };
45
48
  }
46
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,IAAI,OAAe,CAAA;AACnB,IAAI,OAAe,CAAA;AAEnB,MAAM,UAAU,UAAU,CAAC,MAAe,EAAE,MAAe;IACzD,OAAO,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,wBAAwB,CAAA;IAC1E,OAAO,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAA;IACpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAA;IACvG,CAAC;IACD,uBAAuB;IACvB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,MAAsB,EACtB,IAAY,EACZ,IAAc,EACd,WAAoC;IAEpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,MAAM,IAAI,EAAE,CAAC,CAAA;IAC3C,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7D,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,aAAa,EAAE,UAAU,OAAO,EAAE;KACnC,CAAA;IAED,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;IAE7C,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAA;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAA;QAC7C,IAAI,IAAa,CAAA;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAA;QAChD,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAA;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;SAClE,CAAA;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,IAAI,OAAe,CAAA;AACnB,IAAI,OAAe,CAAA;AAEnB,MAAM,UAAU,UAAU,CAAC,MAAe,EAAE,MAAe;IACzD,OAAO,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,wBAAwB,CAAA;IAC1E,OAAO,GAAG,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAA;IACpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAA;IACvG,CAAC;IACD,uBAAuB;IACvB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,MAAsB,EACtB,IAAY,EACZ,IAAc,EACd,WAAoC;IAEpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,MAAM,IAAI,EAAE,CAAC,CAAA;IAC3C,IAAI,WAAW,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACjD,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7D,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,aAAa,EAAE,UAAU,OAAO,EAAE;KACnC,CAAA;IAED,MAAM,IAAI,GAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;IAE7C,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5C,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAA;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,CAAA;QAC7C,IAAI,IAAa,CAAA;QACjB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAA;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAA;QAChD,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAA;IACjD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,iCAAiC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACpG,CAAC;QACD,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;SACjC,CAAA;IACH,CAAC;AACH,CAAC"}
@@ -9,7 +9,7 @@ export interface ExecutionResult {
9
9
  export interface ExecutionError {
10
10
  error: string;
11
11
  providers_tried: Array<{
12
- id: string;
12
+ provider: string;
13
13
  status: number;
14
14
  error: string;
15
15
  }>;
@@ -17,5 +17,4 @@ export interface ExecutionError {
17
17
  declare function isExecutionError(result: ExecutionResult | ExecutionError): result is ExecutionError;
18
18
  export { isExecutionError };
19
19
  export declare function executeWithFallback(capability: Capability, input: Record<string, unknown>): Promise<ExecutionResult | ExecutionError>;
20
- export declare function executeWaterfall(capability: Capability, input: Record<string, unknown>): Promise<ExecutionResult | ExecutionError>;
21
20
  //# sourceMappingURL=executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,eAAe,CAAA;AAE9D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACtE;AAED,iBAAS,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,GAAG,MAAM,IAAI,cAAc,CAE5F;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAuG3B,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,eAAe,GAAG,cAAc,CAAC,CAwC3C;AAOD,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,eAAe,GAAG,cAAc,CAAC,CAI3C"}
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,eAAe,CAAA;AAE9D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAA;QAChB,SAAS,EAAE,MAAM,CAAA;KAClB,CAAA;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC5E;AAED,iBAAS,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,cAAc,GAAG,MAAM,IAAI,cAAc,CAE5F;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAA;AA+G3B,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,eAAe,GAAG,cAAc,CAAC,CAoE3C"}
package/dist/executor.js CHANGED
@@ -68,8 +68,16 @@ function sleep(ms) {
68
68
  // ---------------------------------------------------------------------------
69
69
  async function executeSingle(provider, input) {
70
70
  const start = Date.now();
71
- const payload = provider.mapParams(input);
72
- debug(`${provider.id}: payload = ${JSON.stringify(payload)}`);
71
+ let payload;
72
+ try {
73
+ payload = provider.mapParams(input);
74
+ }
75
+ catch (err) {
76
+ const msg = err instanceof Error ? err.message : String(err);
77
+ debug(`${provider.id}: mapParams threw — ${msg}`);
78
+ return { ok: false, status: 0, data: { error: `mapParams_threw: ${msg}` }, latencyMs: Date.now() - start };
79
+ }
80
+ debug(`${provider.id}: payload_keys = ${Object.keys(payload?.body ?? {}).join(',')}`);
73
81
  let result;
74
82
  if (provider.async) {
75
83
  const asyncResult = await executeAsync(provider, payload);
@@ -89,17 +97,40 @@ export async function executeWithFallback(capability, input) {
89
97
  : getProviders(capability);
90
98
  const errors = [];
91
99
  for (const provider of providers) {
92
- if (provider.isApplicable && !provider.isApplicable(input)) {
93
- debug(`${capability} → skipping ${provider.id} (input not applicable)`);
94
- continue;
100
+ if (provider.isApplicable) {
101
+ let applicable;
102
+ try {
103
+ applicable = provider.isApplicable(input);
104
+ }
105
+ catch (err) {
106
+ debug(`${capability} → ${provider.id}: isApplicable threw — ${err instanceof Error ? err.message : String(err)}, skipping`);
107
+ continue;
108
+ }
109
+ if (!applicable) {
110
+ debug(`${capability} → skipping ${provider.id} (input not applicable)`);
111
+ continue;
112
+ }
95
113
  }
96
114
  log(`${capability} → trying ${provider.id}`);
97
115
  const result = await executeSingle(provider, input);
98
116
  let payload = result.data;
99
117
  if (result.ok && provider.postFilter) {
100
- payload = provider.postFilter(payload, input);
118
+ try {
119
+ payload = provider.postFilter(payload, input);
120
+ }
121
+ catch (err) {
122
+ debug(`${provider.id}: postFilter threw — ${err instanceof Error ? err.message : String(err)}, using raw payload`);
123
+ }
124
+ }
125
+ let hasResult;
126
+ try {
127
+ hasResult = result.ok && provider.hasResult(payload);
101
128
  }
102
- if (result.ok && provider.hasResult(payload)) {
129
+ catch (err) {
130
+ debug(`${provider.id}: hasResult threw — ${err instanceof Error ? err.message : String(err)}, treating as no result`);
131
+ hasResult = false;
132
+ }
133
+ if (hasResult) {
103
134
  log(`${capability} → ${provider.id} ✓ (${result.latencyMs}ms)`);
104
135
  return { data: payload, _meta: { provider: provider.id, latencyMs: result.latencyMs } };
105
136
  }
@@ -113,18 +144,15 @@ export async function executeWithFallback(capability, input) {
113
144
  log(`${capability} → ${provider.id} ✗ ${errMsg}`);
114
145
  errors.push({ id: provider.id, status: result.status, error: errMsg });
115
146
  }
147
+ debug(`${capability}: all ${errors.length} providers failed — ${JSON.stringify(errors)}`);
148
+ const sanitized = errors.map((e, i) => ({
149
+ provider: `provider_${i + 1}`,
150
+ status: e.status,
151
+ error: e.error.slice(0, 120),
152
+ }));
116
153
  return {
117
154
  error: `All ${errors.length} providers failed for ${capability}`,
118
- providers_tried: errors,
155
+ providers_tried: sanitized,
119
156
  };
120
157
  }
121
- // ---------------------------------------------------------------------------
122
- // Waterfall execution — try providers until one returns a result
123
- // Used for enrich_email: stop on first provider that finds an email
124
- // ---------------------------------------------------------------------------
125
- export async function executeWaterfall(capability, input) {
126
- // Waterfall is functionally the same as fallback — try each until one succeeds
127
- // The distinction is semantic: waterfall means "I expect most to fail, stop on first hit"
128
- return executeWithFallback(capability, input);
129
- }
130
158
  //# sourceMappingURL=executor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAA;IACtB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB,qCAAqC;IACrC,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;IACtC,kDAAkD;IAClD,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAA;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,KAAK,GAAG,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IACvG,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;IACrC,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;IAC1D;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;CACxE;AAED,MAAM,MAAM,UAAU,GAClB,kBAAkB,GAClB,aAAa,GACb,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,eAAe,GACf,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,eAAe,GACf,kBAAkB,GAClB,eAAe,GACf,YAAY,GACZ,cAAc,GACd,oBAAoB,CAAA;AA0CxB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOrD;AAq9FD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,EAAE,CAIpE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,OAAO,GAAG,aAAa,EAAE,CAW5E"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;IACpC,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAA;IACtB,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAA;IACjB,qCAAqC;IACrC,UAAU,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;IACtC,kDAAkD;IAClD,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,MAAM,CAAA;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,KAAK,GAAG,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK;QAAE,IAAI,CAAC,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;IACvG,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAA;IACrC,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;IAC1D;;;;;OAKG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;CACxE;AAED,MAAM,MAAM,UAAU,GAClB,kBAAkB,GAClB,aAAa,GACb,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,eAAe,GACf,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,eAAe,GACf,kBAAkB,GAClB,eAAe,GACf,YAAY,GACZ,cAAc,GACd,oBAAoB,CAAA;AA0CxB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOrD;AAk5FD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,GAAG,aAAa,EAAE,CAIpE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,OAAO,GAAG,aAAa,EAAE,CAW5E"}
package/dist/registry.js CHANGED
@@ -609,87 +609,6 @@ const searchCompaniesProviders = [
609
609
  isNonEmptyArray(input.industries) ||
610
610
  isNonEmptyArray(input.technologies),
611
611
  },
612
- {
613
- id: 'wiza',
614
- endpoint: '/wiza/prospects/create-prospect-list',
615
- method: 'POST',
616
- priority: 5,
617
- isApplicable: (input) => typeof input.min_founded_year === 'number' ||
618
- typeof input.max_founded_year === 'number' ||
619
- isNonEmptyArray(input.funding_stages) ||
620
- typeof input.min_funding_amount === 'number' ||
621
- typeof input.max_funding_amount === 'number',
622
- mapParams: (input) => {
623
- // Wiza filters use [{v: 'value'}] shape. Wiza's prospect endpoints return *people*,
624
- // but create-prospect-list also returns the company set indirectly via its filters.
625
- // For a search_companies waterfall, we treat a non-empty `stats.people` as proof
626
- // that the requested filter set matched at least one company.
627
- const wrap = (vals) => (Array.isArray(vals) && vals.length > 0 ? vals.map((v) => ({ v })) : undefined);
628
- const filters = {};
629
- const industries = [
630
- ...(input.industries ?? []),
631
- ...(input.keywords ?? []),
632
- ];
633
- // Wiza company_location accepts free-text English names — translate ISO codes.
634
- const locations = [
635
- ...(input.locations ?? []),
636
- ...(input.countries ?? []).map(isoCountryToName),
637
- ];
638
- if (industries.length > 0)
639
- filters.company_industry = wrap(industries);
640
- if (locations.length > 0)
641
- filters.company_location = wrap(locations);
642
- if (typeof input.min_founded_year === 'number')
643
- filters.year_founded_start = wrap([String(input.min_founded_year)]);
644
- if (typeof input.max_founded_year === 'number')
645
- filters.year_founded_end = wrap([String(input.max_founded_year)]);
646
- if (isNonEmptyArray(input.funding_stages))
647
- filters.funding_stage = wrap(input.funding_stages);
648
- if (typeof input.min_funding_amount === 'number')
649
- filters.funding_min = wrap([String(input.min_funding_amount)]);
650
- if (typeof input.max_funding_amount === 'number')
651
- filters.funding_max = wrap([String(input.max_funding_amount)]);
652
- const limit = Math.min(input.limit ?? 25, 500);
653
- return {
654
- body: {
655
- list: { name: 'mcp-search-companies', max_profiles: limit },
656
- filters,
657
- enrichment_level: 'none',
658
- },
659
- };
660
- },
661
- hasResult: (data) => {
662
- // Final poll response: { status, type, data: { id, status: 'finished', stats: { people } } }
663
- const d = data;
664
- const inner = d.data;
665
- const stats = inner?.stats;
666
- const people = stats?.people;
667
- return typeof people === 'number' && people > 0;
668
- },
669
- async: {
670
- extractId: (response) => {
671
- const r = response;
672
- const inner = r.data;
673
- const id = inner?.id;
674
- if (typeof id === 'number')
675
- return String(id);
676
- if (typeof id === 'string' && id.length > 0)
677
- return id;
678
- throw new Error('Wiza response has no list id');
679
- },
680
- pollEndpoint: (id) => `/wiza/lists/${id}`,
681
- pollIntervalMs: 10_000,
682
- timeoutMs: 300_000, // 5 min
683
- isComplete: (data) => {
684
- // Wiza uses different status strings across endpoints — accept all known terminal
685
- // states (`finished` for individual reveals, `completed` for lists, plus failures).
686
- const d = data;
687
- const inner = d.data;
688
- const status = inner?.status;
689
- return status === 'finished' || status === 'completed' || status === 'failed';
690
- },
691
- },
692
- },
693
612
  {
694
613
  id: 'limadata-prospect-filter',
695
614
  endpoint: '/coldiq/prospect/companies/filter',
@@ -1243,9 +1162,12 @@ const findEmailProviders = [
1243
1162
  endpoint: '/findymail/search/name',
1244
1163
  method: 'POST',
1245
1164
  priority: 1,
1165
+ isApplicable: (input) => typeof input.first_name === 'string' && input.first_name.length > 0 &&
1166
+ ((typeof input.domain === 'string' && input.domain.length > 0) ||
1167
+ (typeof input.company_name === 'string' && input.company_name.length > 0)),
1246
1168
  mapParams: (input) => ({
1247
1169
  body: {
1248
- name: `${input.first_name} ${input.last_name}`,
1170
+ name: [input.first_name, input.last_name].filter(Boolean).join(' '),
1249
1171
  domain: input.domain,
1250
1172
  },
1251
1173
  }),