@coldiq/mcp 0.3.5 → 0.3.7

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/index.js CHANGED
@@ -22,6 +22,7 @@ import { fetchPageContentName, fetchPageContentDescription, fetchPageContentSche
22
22
  import { getCreditBalanceName, getCreditBalanceDescription, getCreditBalanceSchema, getCreditBalanceHandler, } from './tools/get-credit-balance.js';
23
23
  import { extractPostEngagementName, extractPostEngagementDescription, extractPostEngagementSchema, extractPostEngagementHandler, } from './tools/extract-post-engagement.js';
24
24
  import { getPlaceReviewsName, getPlaceReviewsDescription, getPlaceReviewsSchema, getPlaceReviewsHandler, } from './tools/get-place-reviews.js';
25
+ import { listDataSourcesName, listDataSourcesDescription, listDataSourcesSchema, listDataSourcesHandler, } from './tools/list-data-sources.js';
25
26
  // Initialize HTTP client (reads env vars)
26
27
  initClient();
27
28
  const server = new McpServer({
@@ -47,6 +48,7 @@ server.tool(searchSeoName, searchSeoDescription, searchSeoSchema, searchSeoHandl
47
48
  server.tool(findSignalsName, findSignalsDescription, findSignalsSchema, findSignalsHandler);
48
49
  server.tool(fetchPageContentName, fetchPageContentDescription, fetchPageContentSchema, fetchPageContentHandler);
49
50
  server.tool(getCreditBalanceName, getCreditBalanceDescription, getCreditBalanceSchema, getCreditBalanceHandler);
51
+ server.tool(listDataSourcesName, listDataSourcesDescription, listDataSourcesSchema, listDataSourcesHandler);
50
52
  server.tool(extractPostEngagementName, extractPostEngagementDescription, extractPostEngagementSchema, extractPostEngagementHandler);
51
53
  server.tool(getPlaceReviewsName, getPlaceReviewsDescription, getPlaceReviewsSchema, getPlaceReviewsHandler);
52
54
  // Connect via stdio transport
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { z } from 'zod';
2
+ export declare const listDataSourcesName = "list_data_sources";
3
+ export declare const listDataSourcesDescription = "List the B2B data sources ColdIQ routes across, grouped by what they do (company search, email finding, enrichment, signals, ads, etc.). ColdIQ automatically picks the best source for each request \u2014 you normally never choose one \u2014 so use this only to see the coverage available (e.g. \"is Apollo supported?\"). No credits are spent; this is local information. Pass an optional `capability` (a tool name like \"search_companies\" or \"find_email\") to narrow to a single category. When presenting the result, show each source together with its `strength` so the user sees what each one is best at.";
4
+ export declare const listDataSourcesSchema: {
5
+ capability: z.ZodOptional<z.ZodString>;
6
+ };
7
+ export declare function listDataSourcesHandler(input: Record<string, unknown>): Promise<{
8
+ content: {
9
+ type: "text";
10
+ text: string;
11
+ }[];
12
+ isError: boolean;
13
+ } | {
14
+ content: {
15
+ type: "text";
16
+ text: string;
17
+ }[];
18
+ isError?: undefined;
19
+ }>;
20
+ //# sourceMappingURL=list-data-sources.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-data-sources.d.ts","sourceRoot":"","sources":["../../src/tools/list-data-sources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,mBAAmB,sBAAsB,CAAA;AAEtD,eAAO,MAAM,0BAA0B,mmBAC2iB,CAAA;AAEllB,eAAO,MAAM,qBAAqB;;CAKjC,CAAA;AA6FD,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;GAmC1E"}
@@ -0,0 +1,119 @@
1
+ import { z } from 'zod';
2
+ import { getProvidersForCapability } from '../utils/provider-resolver.js';
3
+ import { providerDisplayName } from '../utils/provider-display.js';
4
+ import { getProviderStrength } from '../utils/selection-insight.js';
5
+ export const listDataSourcesName = 'list_data_sources';
6
+ export const listDataSourcesDescription = 'List the B2B data sources ColdIQ routes across, grouped by what they do (company search, email finding, enrichment, signals, ads, etc.). ColdIQ automatically picks the best source for each request — you normally never choose one — so use this only to see the coverage available (e.g. "is Apollo supported?"). No credits are spent; this is local information. Pass an optional `capability` (a tool name like "search_companies" or "find_email") to narrow to a single category. When presenting the result, show each source together with its `strength` so the user sees what each one is best at.';
7
+ export const listDataSourcesSchema = {
8
+ capability: z
9
+ .string()
10
+ .optional()
11
+ .describe('Optional tool/category name to narrow the list, e.g. "search_companies", "find_email", "find_signals". Leave empty to list every category.'),
12
+ };
13
+ // Ordered catalog rows. Only capability-routed tools (multi-source waterfalls) are
14
+ // listed — single-purpose scrapers and utility tools (get_credit_balance,
15
+ // extract_post_engagement) are not "data sources we route across". The two email
16
+ // tools share providers, so they collapse into one row.
17
+ const CATALOG = [
18
+ { capability: 'search_companies', tool: 'search_companies', label: 'Company search' },
19
+ { capability: 'find_people', tool: 'find_people', label: 'People search' },
20
+ { capability: 'find_email', tool: 'find_email / find_emails', label: 'Email finding' },
21
+ { capability: 'verify_email', tool: 'verify_email', label: 'Email verification' },
22
+ { capability: 'find_phone', tool: 'find_phone', label: 'Phone finding' },
23
+ { capability: 'enrich_company', tool: 'enrich_company', label: 'Company enrichment' },
24
+ { capability: 'enrich_person', tool: 'enrich_person', label: 'Person enrichment' },
25
+ { capability: 'search_web', tool: 'search_web', label: 'Web search' },
26
+ { capability: 'search_jobs', tool: 'search_jobs', label: 'Job postings' },
27
+ { capability: 'search_ads', tool: 'search_ads', label: 'Ads search' },
28
+ { capability: 'search_places', tool: 'search_places', label: 'Local places' },
29
+ { capability: 'get_place_reviews', tool: 'get_place_reviews', label: 'Place reviews' },
30
+ { capability: 'find_influencers', tool: 'find_influencers', label: 'Influencer discovery' },
31
+ { capability: 'search_reddit', tool: 'search_reddit', label: 'Reddit search' },
32
+ { capability: 'search_seo', tool: 'search_seo', label: 'SEO & SERP' },
33
+ { capability: 'find_signals', tool: 'find_signals', label: 'Buying & growth signals' },
34
+ { capability: 'fetch_page_content', tool: 'fetch_page_content', label: 'Page content' },
35
+ ];
36
+ // Vendor-level strength overrides for the catalog. When a vendor appears in a
37
+ // capability via several internal ids (e.g. SignalBase = funding/acquisition/
38
+ // hiring/job-change), the deduped row would otherwise show only the highest-
39
+ // priority sub-id's strength and undersell the vendor. These curated unions give
40
+ // the accurate coverage. Keyed by capability -> branded display name.
41
+ const VENDOR_STRENGTH_OVERRIDES = {
42
+ search_companies: {
43
+ LimaData: 'LinkedIn-based company discovery, incl. Sales Navigator URLs',
44
+ LinkupAPI: 'live LinkedIn company search, incl. recently-funded and hiring companies',
45
+ },
46
+ find_email: {
47
+ LimaData: 'work-email lookup by name + domain or LinkedIn URL',
48
+ },
49
+ enrich_company: {
50
+ CompanyEnrich: 'firmographic enrichment from a domain, name or LinkedIn URL',
51
+ },
52
+ find_influencers: {
53
+ 'Influencer Discovery': 'creator discovery by topic & audience, plus lookalikes from a seed handle',
54
+ },
55
+ enrich_person: {
56
+ Findymail: 'LinkedIn profile enrichment & reverse-email lookup',
57
+ Icypeas: 'LinkedIn profile enrichment, name + company lookup & reverse-email',
58
+ LinkupAPI: 'live LinkedIn profile enrichment & reverse-email lookup',
59
+ 'People Data Labs': 'structured person enrichment & identity resolution',
60
+ },
61
+ find_signals: {
62
+ SignalBase: 'funding, acquisition, hiring & job-change signals',
63
+ TheirStack: 'hiring & buying-intent signals from job and tech data',
64
+ PredictLeads: 'financing, news & startup-post signals',
65
+ },
66
+ };
67
+ // Build the source list for one capability: branded names, deduped per vendor
68
+ // (highest-priority id wins and supplies the representative strength).
69
+ function buildSources(capability) {
70
+ const seen = new Set();
71
+ const sources = [];
72
+ for (const id of getProvidersForCapability(capability)) {
73
+ const name = providerDisplayName(id);
74
+ if (seen.has(name))
75
+ continue;
76
+ seen.add(name);
77
+ // Prefer the curated vendor-level union (accurate for multi-id vendors);
78
+ // fall back to the representative sub-id's routing strength.
79
+ const strength = VENDOR_STRENGTH_OVERRIDES[capability]?.[name] ?? getProviderStrength(capability, id);
80
+ sources.push(strength ? { name, strength } : { name });
81
+ }
82
+ return sources;
83
+ }
84
+ function buildRow(row) {
85
+ return { tool: row.tool, label: row.label, sources: buildSources(row.capability) };
86
+ }
87
+ const INTRO = 'ColdIQ automatically routes each request to the best data source — you normally never pick one. These are the sources we route across:';
88
+ export async function listDataSourcesHandler(input) {
89
+ const filter = typeof input.capability === 'string' ? input.capability.trim().toLowerCase() : undefined;
90
+ if (filter) {
91
+ // Match against the capability key, the displayed tool string, or the
92
+ // find_emails alias (which shares the find_email row).
93
+ const matched = CATALOG.filter((row) => row.capability === filter ||
94
+ row.tool.toLowerCase().split(' / ').includes(filter) ||
95
+ (filter === 'find_emails' && row.capability === 'find_email'));
96
+ if (matched.length === 0) {
97
+ const valid = CATALOG.flatMap((row) => row.tool.split(' / '));
98
+ return {
99
+ content: [
100
+ {
101
+ type: 'text',
102
+ text: JSON.stringify({
103
+ error: `'${input.capability}' is not a recognized category. Valid values: ${valid.join(', ')}.`,
104
+ valid_capabilities: valid,
105
+ }),
106
+ },
107
+ ],
108
+ isError: true,
109
+ };
110
+ }
111
+ return {
112
+ content: [{ type: 'text', text: JSON.stringify({ data: { intro: INTRO, capabilities: matched.map(buildRow) } }) }],
113
+ };
114
+ }
115
+ return {
116
+ content: [{ type: 'text', text: JSON.stringify({ data: { intro: INTRO, capabilities: CATALOG.map(buildRow) } }) }],
117
+ };
118
+ }
119
+ //# sourceMappingURL=list-data-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-data-sources.js","sourceRoot":"","sources":["../../src/tools/list-data-sources.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,12 @@ export interface InsightContext {
11
11
  /** True when the caller pinned this provider via `use_providers`. */
12
12
  pinnedByUser: boolean;
13
13
  }
14
+ /**
15
+ * Read the curated data-quality strength for a provider within a capability,
16
+ * if one exists. Exposed for the `list_data_sources` catalog so the strengths
17
+ * stay defined in one place.
18
+ */
19
+ export declare function getProviderStrength(capability: InsightCapability, providerId: string): string | undefined;
14
20
  /**
15
21
  * Build a data-quality-framed reason for why `providerId` was selected for
16
22
  * `capability` given `input`. Returns undefined only when there is genuinely
@@ -1 +1 @@
1
- {"version":3,"file":"selection-insight.d.ts","sourceRoot":"","sources":["../../src/utils/selection-insight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAmBhD,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,aAAa,CAAA;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B;gFAC4E;IAC5E,WAAW,EAAE,OAAO,CAAA;IACpB,qEAAqE;IACrE,YAAY,EAAE,OAAO,CAAA;CACtB;AAgRD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,EAAE,cAAc,GAClB,gBAAgB,GAAG,SAAS,CAgC9B"}
1
+ {"version":3,"file":"selection-insight.d.ts","sourceRoot":"","sources":["../../src/utils/selection-insight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAmBhD,MAAM,MAAM,iBAAiB,GAAG,UAAU,GAAG,aAAa,CAAA;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B;gFAC4E;IAC5E,WAAW,EAAE,OAAO,CAAA;IACpB,qEAAqE;IACrE,YAAY,EAAE,OAAO,CAAA;CACtB;AAyKD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,MAAM,GACjB,MAAM,GAAG,SAAS,CAEpB;AA2HD;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,GAAG,EAAE,cAAc,GAClB,gBAAgB,GAAG,SAAS,CAgC9B"}
@@ -130,6 +130,24 @@ const STRENGTHS = {
130
130
  search_reddit: {
131
131
  reddit: 'Reddit post and comment search',
132
132
  },
133
+ search_seo: {
134
+ kw_search_volume: 'monthly search volume & CPC for keywords',
135
+ kw_trends: 'search-interest trends over time',
136
+ serp_google: 'live Google search results',
137
+ serp_bing: 'live Bing search results',
138
+ serp_youtube: 'YouTube search results',
139
+ bl_summary: 'backlink-profile summary for a domain',
140
+ bl_backlinks: 'individual backlinks for a domain',
141
+ bl_referring: 'referring domains for a target',
142
+ domain_tech: 'technologies detected on a domain',
143
+ domain_whois: 'WHOIS / domain registration data',
144
+ labs_rank_overview: 'organic ranking overview for a domain',
145
+ labs_ranked_kw: 'keywords a domain ranks for',
146
+ labs_competitors: 'organic competitor domains',
147
+ labs_kw_ideas: 'related keyword ideas',
148
+ page_lighthouse: 'Lighthouse performance audit',
149
+ page_content: 'rendered page content',
150
+ },
133
151
  find_signals: {
134
152
  'signalbase-funding': 'real-time funding-round signals',
135
153
  'signalbase-acquisition': 'acquisition signals',
@@ -146,6 +164,14 @@ const STRENGTHS = {
146
164
  'exa-contents': 'clean page-content extraction',
147
165
  },
148
166
  };
167
+ /**
168
+ * Read the curated data-quality strength for a provider within a capability,
169
+ * if one exists. Exposed for the `list_data_sources` catalog so the strengths
170
+ * stay defined in one place.
171
+ */
172
+ export function getProviderStrength(capability, providerId) {
173
+ return STRENGTHS[capability]?.[providerId];
174
+ }
149
175
  // ---------------------------------------------------------------------------
150
176
  // Per-capability noun used in the plain fallback line ("X matched this <noun>").
151
177
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"selection-insight.js","sourceRoot":"","sources":["../../src/utils/selection-insight.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAiC3D,8EAA8E;AAC9E,oEAAoE;AACpE,+EAA+E;AAC/E,+EAA+E;AAC/E,gDAAgD;AAChD,8EAA8E;AAE9E,MAAM,SAAS,GAA+D;IAC5E,gBAAgB,EAAE;QAChB,aAAa,EAAE,6DAA6D;QAC5E,MAAM,EAAE,sCAAsC;QAC9C,UAAU,EAAE,2DAA2D;QACvE,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,yDAAyD;QACrE,QAAQ,EAAE,+BAA+B;QACzC,QAAQ,EAAE,kCAAkC;QAC5C,YAAY,EAAE,uDAAuD;QACrE,UAAU,EAAE,+CAA+C;QAC3D,MAAM,EAAE,kDAAkD;QAC1D,0BAA0B,EAAE,yCAAyC;QACrE,uBAAuB,EAAE,2DAA2D;QACpF,kBAAkB,EAAE,8BAA8B;QAClD,uBAAuB,EAAE,gDAAgD;QACzE,kBAAkB,EAAE,gDAAgD;QACpE,wBAAwB,EAAE,0CAA0C;QACpE,kBAAkB,EAAE,gCAAgC;KACrD;IACD,WAAW,EAAE;QACX,YAAY,EAAE,6CAA6C;QAC3D,MAAM,EAAE,sCAAsC;QAC9C,GAAG,EAAE,2CAA2C;QAChD,aAAa,EAAE,gCAAgC;QAC/C,2BAA2B,EAAE,8BAA8B;QAC3D,oBAAoB,EAAE,0CAA0C;QAChE,uBAAuB,EAAE,wCAAwC;QACjE,eAAe,EAAE,+BAA+B;QAChD,0BAA0B,EAAE,6BAA6B;QACzD,4BAA4B,EAAE,kCAAkC;KACjE;IACD,UAAU,EAAE;QACV,OAAO,EAAE,4BAA4B;QACrC,UAAU,EAAE,+DAA+D;QAC3E,SAAS,EAAE,oCAAoC;QAC/C,OAAO,EAAE,8BAA8B;QACvC,qBAAqB,EAAE,mCAAmC;QAC1D,QAAQ,EAAE,kCAAkC;QAC5C,8BAA8B,EAAE,sCAAsC;QACtE,SAAS,EAAE,gCAAgC;KAC5C;IACD,WAAW,EAAE;QACX,OAAO,EAAE,4BAA4B;QACrC,UAAU,EAAE,+DAA+D;QAC3E,SAAS,EAAE,oCAAoC;QAC/C,OAAO,EAAE,8BAA8B;QACvC,qBAAqB,EAAE,mCAAmC;QAC1D,QAAQ,EAAE,kCAAkC;QAC5C,8BAA8B,EAAE,sCAAsC;QACtE,SAAS,EAAE,gCAAgC;KAC5C;IACD,YAAY,EAAE;QACZ,SAAS,EAAE,sCAAsC;QACjD,OAAO,EAAE,0BAA0B;QACnC,SAAS,EAAE,qCAAqC;QAChD,oBAAoB,EAAE,iCAAiC;KACxD;IACD,UAAU,EAAE;QACV,SAAS,EAAE,iCAAiC;QAC5C,QAAQ,EAAE,gDAAgD;QAC1D,QAAQ,EAAE,0CAA0C;KACrD;IACD,cAAc,EAAE;QACd,aAAa,EAAE,6CAA6C;QAC5D,MAAM,EAAE,8BAA8B;QACtC,GAAG,EAAE,8BAA8B;QACnC,SAAS,EAAE,iCAAiC;QAC5C,IAAI,EAAE,wCAAwC;QAC9C,QAAQ,EAAE,mCAAmC;QAC7C,OAAO,EAAE,oBAAoB;QAC7B,mBAAmB,EAAE,0CAA0C;QAC/D,QAAQ,EAAE,iCAAiC;QAC3C,OAAO,EAAE,iCAAiC;QAC1C,SAAS,EAAE,yCAAyC;QACpD,QAAQ,EAAE,8BAA8B;QACxC,qBAAqB,EAAE,4BAA4B;QACnD,kBAAkB,EAAE,4BAA4B;KACjD;IACD,aAAa,EAAE;QACb,0BAA0B,EAAE,kCAAkC;QAC9D,yBAAyB,EAAE,yCAAyC;QACpE,mBAAmB,EAAE,8BAA8B;QACnD,qBAAqB,EAAE,wBAAwB;QAC/C,wBAAwB,EAAE,8BAA8B;QACxD,4BAA4B,EAAE,6BAA6B;QAC3D,yBAAyB,EAAE,sBAAsB;QACjD,wBAAwB,EAAE,2BAA2B;QACrD,4BAA4B,EAAE,oCAAoC;QAClE,uBAAuB,EAAE,oCAAoC;QAC7D,8BAA8B,EAAE,sBAAsB;QACtD,qBAAqB,EAAE,4BAA4B;KACpD;IACD,UAAU,EAAE;QACV,MAAM,EAAE,4BAA4B;QACpC,GAAG,EAAE,kCAAkC;QACvC,QAAQ,EAAE,oBAAoB;QAC9B,IAAI,EAAE,6BAA6B;KACpC;IACD,WAAW,EAAE;QACX,gBAAgB,EAAE,iDAAiD;QACnE,iBAAiB,EAAE,uBAAuB;QAC1C,iBAAiB,EAAE,gDAAgD;KACpE;IACD,UAAU,EAAE;QACV,UAAU,EAAE,6BAA6B;QACzC,mBAAmB,EAAE,8BAA8B;QACnD,QAAQ,EAAE,+CAA+C;QACzD,WAAW,EAAE,eAAe;QAC5B,UAAU,EAAE,oBAAoB;KACjC;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,2DAA2D;QACrE,WAAW,EAAE,+CAA+C;KAC7D;IACD,iBAAiB,EAAE;QACjB,mBAAmB,EAAE,yBAAyB;KAC/C;IACD,gBAAgB,EAAE;QAChB,mBAAmB,EAAE,gDAAgD;QACrE,qBAAqB,EAAE,yCAAyC;KACjE;IACD,aAAa,EAAE;QACb,MAAM,EAAE,gCAAgC;KACzC;IACD,YAAY,EAAE;QACZ,oBAAoB,EAAE,iCAAiC;QACvD,wBAAwB,EAAE,qBAAqB;QAC/C,mBAAmB,EAAE,gBAAgB;QACrC,uBAAuB,EAAE,oBAAoB;QAC7C,mBAAmB,EAAE,sCAAsC;QAC3D,6BAA6B,EAAE,yBAAyB;QACxD,2BAA2B,EAAE,8CAA8C;QAC3E,wBAAwB,EAAE,yBAAyB;QACnD,mBAAmB,EAAE,sBAAsB;QAC3C,4BAA4B,EAAE,8BAA8B;KAC7D;IACD,kBAAkB,EAAE;QAClB,cAAc,EAAE,+BAA+B;KAChD;CACF,CAAA;AAED,8EAA8E;AAC9E,iFAAiF;AACjF,8EAA8E;AAE9E,MAAM,eAAe,GAAsC;IACzD,gBAAgB,EAAE,gBAAgB;IAClC,WAAW,EAAE,eAAe;IAC5B,UAAU,EAAE,cAAc;IAC1B,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,oBAAoB;IAClC,UAAU,EAAE,cAAc;IAC1B,cAAc,EAAE,oBAAoB;IACpC,aAAa,EAAE,mBAAmB;IAClC,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,YAAY;IACzB,UAAU,EAAE,WAAW;IACvB,aAAa,EAAE,eAAe;IAC9B,iBAAiB,EAAE,gBAAgB;IACnC,gBAAgB,EAAE,mBAAmB;IACrC,aAAa,EAAE,eAAe;IAC9B,UAAU,EAAE,YAAY;IACxB,YAAY,EAAE,eAAe;IAC7B,kBAAkB,EAAE,YAAY;CACjC,CAAA;AAED,8EAA8E;AAC9E,2EAA2E;AAC3E,4EAA4E;AAC5E,8EAA8E;AAE9E,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;AACzC,CAAC;AACD,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAA;AAC9B,CAAC;AACD,SAAS,GAAG,CAAC,CAAU;IACrB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;AAC9C,CAAC;AAED,SAAS,aAAa,CAAC,UAA6B,EAAE,KAA8B;IAClF,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,MAAM,IAAI,GAAG,CAAC,IAAa,EAAE,KAAa,EAAE,EAAE;QAC5C,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACnD,CAAC,CAAA;IAED,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,kBAAkB;YACrB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC,CAAA;YAClD,IAAI,CACF,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC;gBACvB,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC;gBAC9D,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAC5D,gBAAgB,CACjB,CAAA;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,gBAAgB,CAAC,CAAA;YACxE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,gBAAgB,CAAC,CAAA;YACnH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,wBAAwB,CAAC,EAAE,yBAAyB,CAAC,CAAA;YACpE,IAAI,CAAC,KAAK,CAAC,SAAS,KAAK,IAAI,EAAE,eAAe,CAAC,CAAA;YAC/C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,sBAAsB,CAAC,CAAA;YACxF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,qBAAqB,CAAC,CAAA;YACjF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,EAAE,8BAA8B,CAAC,CAAA;YACpE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,iBAAiB,CAAC,CAAA;YAC9C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,CAAA;YAC3C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAA;YAChE,MAAK;QACP,KAAK,aAAa;YAChB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,uBAAuB,CAAC,CAAA;YACzD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,yBAAyB,CAAC,CAAA;YACjE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,kBAAkB,CAAC,CAAA;YAC/C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC,CAAA;YAChD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,gBAAgB,CAAC,CAAA;YAC3C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAA;YACxC,MAAK;QACP,KAAK,YAAY;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC,CAAA;YAC7C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,gBAAgB,CAAC,CAAA;YACpE,MAAK;QACP,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,MAAM,GAAI,KAAK,CAAC,MAAqD,IAAI,EAAE,CAAA;YACjF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,EAAE,eAAe,CAAC,CAAA;YAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC,CAAA;YACxD,MAAK;QACP,CAAC;QACD,KAAK,gBAAgB;YACnB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAC,CAAA;YACzC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC,CAAA;YAC7C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAA;YACrC,MAAK;QACP,KAAK,eAAe;YAClB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAA;YAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC,CAAA;YAC7C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,gBAAgB,CAAC,CAAA;YACrE,MAAK;QACP,KAAK,cAAc;YACjB,IAAI,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;YAC5E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAA;YAClE,MAAK;QACP,KAAK,aAAa;YAChB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,mBAAmB,CAAC,CAAA;YAClD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,uBAAuB,CAAC,CAAA;YACzD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAA;YACjE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,CAAA;YACxC,MAAK;QACP,KAAK,YAAY;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,yBAAyB,CAAC,CAAA;YACvD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,mBAAmB,CAAC,CAAA;YAC1E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,gBAAgB,CAAC,CAAA;YACxC,MAAK;QACP;YACE,8EAA8E;YAC9E,+EAA+E;YAC/E,MAAK;IACT,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAA6B,EAC7B,UAAkB,EAClB,KAA8B,EAC9B,GAAmB;IAEnB,MAAM,IAAI,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAEhD,2EAA2E;IAC3E,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,OAAO,EAAE,CAAA;IAC3D,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;IACpD,MAAM,IAAI,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,SAAS,CAAA;IACrD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAE1B,iFAAiF;IACjF,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,OAAO;YACrB,CAAC,CAAC,GAAG,IAAI,iBAAiB,OAAO,aAAa,IAAI,GAAG;YACrD,CAAC,CAAC,GAAG,IAAI,iBAAiB,IAAI,GAAG,CAAA;QACnC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;IAC7B,CAAC;IAED,4EAA4E;IAC5E,2EAA2E;IAC3E,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,kCAAkC,QAAQ,GAAG,EAAE,OAAO,EAAE,CAAA;IACnF,CAAC;IAED,wEAAwE;IACxE,MAAM,OAAO,GAAG,OAAO;QACrB,CAAC,CAAC,aAAa,IAAI,YAAY,QAAQ,qBAAqB,OAAO,GAAG;QACtE,CAAC,CAAC,aAAa,IAAI,YAAY,QAAQ,GAAG,CAAA;IAC5C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAA;AAC7B,CAAC"}
1
+ {"version":3,"file":"selection-insight.js","sourceRoot":"","sources":["../../src/utils/selection-insight.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.3.5",
3
+ "version": "0.3.7",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
package/src/index.ts CHANGED
@@ -144,6 +144,13 @@ import {
144
144
  getPlaceReviewsHandler,
145
145
  } from './tools/get-place-reviews.js'
146
146
 
147
+ import {
148
+ listDataSourcesName,
149
+ listDataSourcesDescription,
150
+ listDataSourcesSchema,
151
+ listDataSourcesHandler,
152
+ } from './tools/list-data-sources.js'
153
+
147
154
  // Initialize HTTP client (reads env vars)
148
155
  initClient()
149
156
 
@@ -171,6 +178,7 @@ server.tool(searchSeoName, searchSeoDescription, searchSeoSchema, searchSeoHandl
171
178
  server.tool(findSignalsName, findSignalsDescription, findSignalsSchema, findSignalsHandler)
172
179
  server.tool(fetchPageContentName, fetchPageContentDescription, fetchPageContentSchema, fetchPageContentHandler)
173
180
  server.tool(getCreditBalanceName, getCreditBalanceDescription, getCreditBalanceSchema, getCreditBalanceHandler)
181
+ server.tool(listDataSourcesName, listDataSourcesDescription, listDataSourcesSchema, listDataSourcesHandler)
174
182
  server.tool(extractPostEngagementName, extractPostEngagementDescription, extractPostEngagementSchema, extractPostEngagementHandler)
175
183
  server.tool(getPlaceReviewsName, getPlaceReviewsDescription, getPlaceReviewsSchema, getPlaceReviewsHandler)
176
184
 
@@ -0,0 +1,144 @@
1
+ import { z } from 'zod'
2
+ import { getProvidersForCapability } from '../utils/provider-resolver.js'
3
+ import { providerDisplayName } from '../utils/provider-display.js'
4
+ import { getProviderStrength, type InsightCapability } from '../utils/selection-insight.js'
5
+
6
+ export const listDataSourcesName = 'list_data_sources'
7
+
8
+ export const listDataSourcesDescription =
9
+ 'List the B2B data sources ColdIQ routes across, grouped by what they do (company search, email finding, enrichment, signals, ads, etc.). ColdIQ automatically picks the best source for each request — you normally never choose one — so use this only to see the coverage available (e.g. "is Apollo supported?"). No credits are spent; this is local information. Pass an optional `capability` (a tool name like "search_companies" or "find_email") to narrow to a single category. When presenting the result, show each source together with its `strength` so the user sees what each one is best at.'
10
+
11
+ export const listDataSourcesSchema = {
12
+ capability: z
13
+ .string()
14
+ .optional()
15
+ .describe('Optional tool/category name to narrow the list, e.g. "search_companies", "find_email", "find_signals". Leave empty to list every category.'),
16
+ }
17
+
18
+ // Ordered catalog rows. Only capability-routed tools (multi-source waterfalls) are
19
+ // listed — single-purpose scrapers and utility tools (get_credit_balance,
20
+ // extract_post_engagement) are not "data sources we route across". The two email
21
+ // tools share providers, so they collapse into one row.
22
+ const CATALOG: Array<{ capability: InsightCapability; tool: string; label: string }> = [
23
+ { capability: 'search_companies', tool: 'search_companies', label: 'Company search' },
24
+ { capability: 'find_people', tool: 'find_people', label: 'People search' },
25
+ { capability: 'find_email', tool: 'find_email / find_emails', label: 'Email finding' },
26
+ { capability: 'verify_email', tool: 'verify_email', label: 'Email verification' },
27
+ { capability: 'find_phone', tool: 'find_phone', label: 'Phone finding' },
28
+ { capability: 'enrich_company', tool: 'enrich_company', label: 'Company enrichment' },
29
+ { capability: 'enrich_person', tool: 'enrich_person', label: 'Person enrichment' },
30
+ { capability: 'search_web', tool: 'search_web', label: 'Web search' },
31
+ { capability: 'search_jobs', tool: 'search_jobs', label: 'Job postings' },
32
+ { capability: 'search_ads', tool: 'search_ads', label: 'Ads search' },
33
+ { capability: 'search_places', tool: 'search_places', label: 'Local places' },
34
+ { capability: 'get_place_reviews', tool: 'get_place_reviews', label: 'Place reviews' },
35
+ { capability: 'find_influencers', tool: 'find_influencers', label: 'Influencer discovery' },
36
+ { capability: 'search_reddit', tool: 'search_reddit', label: 'Reddit search' },
37
+ { capability: 'search_seo', tool: 'search_seo', label: 'SEO & SERP' },
38
+ { capability: 'find_signals', tool: 'find_signals', label: 'Buying & growth signals' },
39
+ { capability: 'fetch_page_content', tool: 'fetch_page_content', label: 'Page content' },
40
+ ]
41
+
42
+ // Vendor-level strength overrides for the catalog. When a vendor appears in a
43
+ // capability via several internal ids (e.g. SignalBase = funding/acquisition/
44
+ // hiring/job-change), the deduped row would otherwise show only the highest-
45
+ // priority sub-id's strength and undersell the vendor. These curated unions give
46
+ // the accurate coverage. Keyed by capability -> branded display name.
47
+ const VENDOR_STRENGTH_OVERRIDES: Partial<Record<InsightCapability, Record<string, string>>> = {
48
+ search_companies: {
49
+ LimaData: 'LinkedIn-based company discovery, incl. Sales Navigator URLs',
50
+ LinkupAPI: 'live LinkedIn company search, incl. recently-funded and hiring companies',
51
+ },
52
+ find_email: {
53
+ LimaData: 'work-email lookup by name + domain or LinkedIn URL',
54
+ },
55
+ enrich_company: {
56
+ CompanyEnrich: 'firmographic enrichment from a domain, name or LinkedIn URL',
57
+ },
58
+ find_influencers: {
59
+ 'Influencer Discovery': 'creator discovery by topic & audience, plus lookalikes from a seed handle',
60
+ },
61
+ enrich_person: {
62
+ Findymail: 'LinkedIn profile enrichment & reverse-email lookup',
63
+ Icypeas: 'LinkedIn profile enrichment, name + company lookup & reverse-email',
64
+ LinkupAPI: 'live LinkedIn profile enrichment & reverse-email lookup',
65
+ 'People Data Labs': 'structured person enrichment & identity resolution',
66
+ },
67
+ find_signals: {
68
+ SignalBase: 'funding, acquisition, hiring & job-change signals',
69
+ TheirStack: 'hiring & buying-intent signals from job and tech data',
70
+ PredictLeads: 'financing, news & startup-post signals',
71
+ },
72
+ }
73
+
74
+ interface Source {
75
+ name: string
76
+ strength?: string
77
+ }
78
+
79
+ interface CapabilityCatalog {
80
+ tool: string
81
+ label: string
82
+ sources: Source[]
83
+ }
84
+
85
+ // Build the source list for one capability: branded names, deduped per vendor
86
+ // (highest-priority id wins and supplies the representative strength).
87
+ function buildSources(capability: InsightCapability): Source[] {
88
+ const seen = new Set<string>()
89
+ const sources: Source[] = []
90
+ for (const id of getProvidersForCapability(capability)) {
91
+ const name = providerDisplayName(id)
92
+ if (seen.has(name)) continue
93
+ seen.add(name)
94
+ // Prefer the curated vendor-level union (accurate for multi-id vendors);
95
+ // fall back to the representative sub-id's routing strength.
96
+ const strength = VENDOR_STRENGTH_OVERRIDES[capability]?.[name] ?? getProviderStrength(capability, id)
97
+ sources.push(strength ? { name, strength } : { name })
98
+ }
99
+ return sources
100
+ }
101
+
102
+ function buildRow(row: (typeof CATALOG)[number]): CapabilityCatalog {
103
+ return { tool: row.tool, label: row.label, sources: buildSources(row.capability) }
104
+ }
105
+
106
+ const INTRO =
107
+ 'ColdIQ automatically routes each request to the best data source — you normally never pick one. These are the sources we route across:'
108
+
109
+ export async function listDataSourcesHandler(input: Record<string, unknown>) {
110
+ const filter = typeof input.capability === 'string' ? input.capability.trim().toLowerCase() : undefined
111
+
112
+ if (filter) {
113
+ // Match against the capability key, the displayed tool string, or the
114
+ // find_emails alias (which shares the find_email row).
115
+ const matched = CATALOG.filter(
116
+ (row) =>
117
+ row.capability === filter ||
118
+ row.tool.toLowerCase().split(' / ').includes(filter) ||
119
+ (filter === 'find_emails' && row.capability === 'find_email'),
120
+ )
121
+ if (matched.length === 0) {
122
+ const valid = CATALOG.flatMap((row) => row.tool.split(' / '))
123
+ return {
124
+ content: [
125
+ {
126
+ type: 'text' as const,
127
+ text: JSON.stringify({
128
+ error: `'${input.capability}' is not a recognized category. Valid values: ${valid.join(', ')}.`,
129
+ valid_capabilities: valid,
130
+ }),
131
+ },
132
+ ],
133
+ isError: true,
134
+ }
135
+ }
136
+ return {
137
+ content: [{ type: 'text' as const, text: JSON.stringify({ data: { intro: INTRO, capabilities: matched.map(buildRow) } }) }],
138
+ }
139
+ }
140
+
141
+ return {
142
+ content: [{ type: 'text' as const, text: JSON.stringify({ data: { intro: INTRO, capabilities: CATALOG.map(buildRow) } }) }],
143
+ }
144
+ }
@@ -164,6 +164,24 @@ const STRENGTHS: Partial<Record<InsightCapability, Record<string, string>>> = {
164
164
  search_reddit: {
165
165
  reddit: 'Reddit post and comment search',
166
166
  },
167
+ search_seo: {
168
+ kw_search_volume: 'monthly search volume & CPC for keywords',
169
+ kw_trends: 'search-interest trends over time',
170
+ serp_google: 'live Google search results',
171
+ serp_bing: 'live Bing search results',
172
+ serp_youtube: 'YouTube search results',
173
+ bl_summary: 'backlink-profile summary for a domain',
174
+ bl_backlinks: 'individual backlinks for a domain',
175
+ bl_referring: 'referring domains for a target',
176
+ domain_tech: 'technologies detected on a domain',
177
+ domain_whois: 'WHOIS / domain registration data',
178
+ labs_rank_overview: 'organic ranking overview for a domain',
179
+ labs_ranked_kw: 'keywords a domain ranks for',
180
+ labs_competitors: 'organic competitor domains',
181
+ labs_kw_ideas: 'related keyword ideas',
182
+ page_lighthouse: 'Lighthouse performance audit',
183
+ page_content: 'rendered page content',
184
+ },
167
185
  find_signals: {
168
186
  'signalbase-funding': 'real-time funding-round signals',
169
187
  'signalbase-acquisition': 'acquisition signals',
@@ -181,6 +199,18 @@ const STRENGTHS: Partial<Record<InsightCapability, Record<string, string>>> = {
181
199
  },
182
200
  }
183
201
 
202
+ /**
203
+ * Read the curated data-quality strength for a provider within a capability,
204
+ * if one exists. Exposed for the `list_data_sources` catalog so the strengths
205
+ * stay defined in one place.
206
+ */
207
+ export function getProviderStrength(
208
+ capability: InsightCapability,
209
+ providerId: string,
210
+ ): string | undefined {
211
+ return STRENGTHS[capability]?.[providerId]
212
+ }
213
+
184
214
  // ---------------------------------------------------------------------------
185
215
  // Per-capability noun used in the plain fallback line ("X matched this <noun>").
186
216
  // ---------------------------------------------------------------------------
@@ -0,0 +1,104 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { listDataSourcesHandler } from '../../src/tools/list-data-sources.js'
3
+
4
+ interface Source { name: string; strength?: string }
5
+ interface CapabilityCatalog { tool: string; label: string; sources: Source[] }
6
+
7
+ function parse(result: { content: { text: string }[]; isError?: boolean }) {
8
+ return JSON.parse(result.content[0].text)
9
+ }
10
+
11
+ function rowFor(caps: CapabilityCatalog[], toolContains: string): CapabilityCatalog | undefined {
12
+ return caps.find((c) => c.tool.includes(toolContains))
13
+ }
14
+
15
+ describe('list_data_sources handler', () => {
16
+ it('lists every capability-routed category with branded sources', async () => {
17
+ const parsed = parse(await listDataSourcesHandler({}))
18
+ const caps: CapabilityCatalog[] = parsed.data.capabilities
19
+ expect(parsed.data.intro).toContain('routes')
20
+ expect(caps.length).toBeGreaterThan(10)
21
+
22
+ const companies = rowFor(caps, 'search_companies')!
23
+ const names = companies.sources.map((s) => s.name)
24
+ expect(names).toContain('Apollo')
25
+ expect(names).toContain('TheirStack')
26
+
27
+ const emails = rowFor(caps, 'find_email')!
28
+ expect(emails.sources.map((s) => s.name)).toContain('FullEnrich')
29
+ })
30
+
31
+ it('never emits a raw slug or "Apify" in any source name', async () => {
32
+ const parsed = parse(await listDataSourcesHandler({}))
33
+ const caps: CapabilityCatalog[] = parsed.data.capabilities
34
+ for (const cap of caps) {
35
+ for (const src of cap.sources) {
36
+ expect(src.name).not.toContain('_')
37
+ expect(src.name.toLowerCase()).not.toContain('apify')
38
+ }
39
+ }
40
+ })
41
+
42
+ it('dedupes vendors within a category (one row per brand)', async () => {
43
+ const parsed = parse(await listDataSourcesHandler({}))
44
+ const caps: CapabilityCatalog[] = parsed.data.capabilities
45
+ const companies = rowFor(caps, 'search_companies')!
46
+ const names = companies.sources.map((s) => s.name)
47
+ // search_companies has limadata + limadata-prospect-* + linkupapi-* internally
48
+ expect(names.filter((n) => n === 'LimaData')).toHaveLength(1)
49
+ expect(names.filter((n) => n === 'LinkupAPI')).toHaveLength(1)
50
+ // every row carries the metadata a frontend needs
51
+ for (const cap of caps) {
52
+ expect(typeof cap.tool).toBe('string')
53
+ expect(typeof cap.label).toBe('string')
54
+ expect(cap.sources.length).toBeGreaterThan(0)
55
+ }
56
+ })
57
+
58
+ it('carries curated strengths on the well-known sources', async () => {
59
+ const parsed = parse(await listDataSourcesHandler({}))
60
+ const caps: CapabilityCatalog[] = parsed.data.capabilities
61
+ const theirstack = rowFor(caps, 'search_companies')!.sources.find((s) => s.name === 'TheirStack')!
62
+ expect(theirstack.strength).toBeTruthy()
63
+ expect(theirstack.strength).toContain('technographic')
64
+ })
65
+
66
+ it('shows the full union strength for multi-action vendors', async () => {
67
+ const parsed = parse(await listDataSourcesHandler({ capability: 'find_signals' }))
68
+ const signals: CapabilityCatalog = parsed.data.capabilities[0]
69
+ const signalbase = signals.sources.find((s) => s.name === 'SignalBase')!
70
+ // not just "funding" — the union covers all four signal types
71
+ expect(signalbase.strength).toContain('acquisition')
72
+ expect(signalbase.strength).toContain('job-change')
73
+ })
74
+
75
+ it('gives every SEO source a non-empty strength', async () => {
76
+ const parsed = parse(await listDataSourcesHandler({ capability: 'search_seo' }))
77
+ const seo: CapabilityCatalog = parsed.data.capabilities[0]
78
+ expect(seo.sources.length).toBeGreaterThan(0)
79
+ for (const src of seo.sources) {
80
+ expect(src.strength).toBeTruthy()
81
+ }
82
+ })
83
+
84
+ it('filters to a single category by tool name', async () => {
85
+ const parsed = parse(await listDataSourcesHandler({ capability: 'find_email' }))
86
+ const caps: CapabilityCatalog[] = parsed.data.capabilities
87
+ expect(caps).toHaveLength(1)
88
+ expect(caps[0].tool).toContain('find_email')
89
+ })
90
+
91
+ it('accepts the find_emails alias for the shared email row', async () => {
92
+ const parsed = parse(await listDataSourcesHandler({ capability: 'find_emails' }))
93
+ expect(parsed.data.capabilities).toHaveLength(1)
94
+ expect(parsed.data.capabilities[0].tool).toContain('find_email')
95
+ })
96
+
97
+ it('returns an error payload listing valid values for an unknown category', async () => {
98
+ const result = await listDataSourcesHandler({ capability: 'nonsense' })
99
+ expect(result.isError).toBe(true)
100
+ const parsed = parse(result)
101
+ expect(parsed.error).toContain('not a recognized category')
102
+ expect(parsed.valid_capabilities).toContain('search_companies')
103
+ })
104
+ })