@coldiq/mcp 5.4.2 → 5.4.3

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
@@ -37,6 +37,7 @@ import { getCreditBalanceName, getCreditBalanceDescription, getCreditBalanceSche
37
37
  import { getSessionUsageName, getSessionUsageDescription, getSessionUsageSchema, getSessionUsageHandler, } from './tools/get-session-usage.js';
38
38
  import { extractPostEngagementName, extractPostEngagementDescription, extractPostEngagementSchema, extractPostEngagementHandler, } from './tools/extract-post-engagement.js';
39
39
  import { getPlaceReviewsName, getPlaceReviewsDescription, getPlaceReviewsSchema, getPlaceReviewsHandler, } from './tools/get-place-reviews.js';
40
+ import { getWebsiteVisitorsName, getWebsiteVisitorsDescription, getWebsiteVisitorsSchema, getWebsiteVisitorsHandler, } from './tools/get-website-visitors.js';
40
41
  import { listDataSourcesName, listDataSourcesDescription, listDataSourcesSchema, listDataSourcesHandler, } from './tools/list-data-sources.js';
41
42
  import { listSkillsName, listSkillsDescription, listSkillsSchema, listSkillsHandler, } from './tools/list-skills.js';
42
43
  import { loadSkillName, loadSkillDescription, loadSkillSchema, loadSkillHandler, } from './tools/load-skill.js';
@@ -90,6 +91,10 @@ server.tool(listSkillsName, listSkillsDescription, listSkillsSchema, listSkillsH
90
91
  server.tool(loadSkillName, loadSkillDescription, loadSkillSchema, loadSkillHandler);
91
92
  server.tool(extractPostEngagementName, withKnowledgeFirstRequirement(extractPostEngagementDescription), extractPostEngagementSchema, extractPostEngagementHandler);
92
93
  server.tool(getPlaceReviewsName, withKnowledgeFirstRequirement(getPlaceReviewsDescription), getPlaceReviewsSchema, getPlaceReviewsHandler);
94
+ // ColdIQ Visitor ID: read the leads identified on the account's own websites.
95
+ // Listing the websites themselves needs no tool — search_endpoints/call_endpoint
96
+ // already reach GET /visitor-id/websites.
97
+ server.tool(getWebsiteVisitorsName, withKnowledgeFirstRequirement(getWebsiteVisitorsDescription), getWebsiteVisitorsSchema, getWebsiteVisitorsHandler);
93
98
  // Generic endpoint discovery + invoke: reach any integrated provider without a dedicated tool.
94
99
  server.tool(searchEndpointsName, withKnowledgeFirstRequirement(searchEndpointsDescription), searchEndpointsSchema, searchEndpointsHandler);
95
100
  server.tool(getEndpointDetailsName, withKnowledgeFirstRequirement(getEndpointDetailsDescription), getEndpointDetailsSchema, getEndpointDetailsHandler);
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,26 @@
1
+ import { z } from 'zod';
2
+ export declare const getWebsiteVisitorsName = "get_website_visitors";
3
+ export declare const getWebsiteVisitorsDescription: string;
4
+ export declare const getWebsiteVisitorsSchema: {
5
+ website_id: z.ZodNumber;
6
+ type: z.ZodEnum<["people", "companies"]>;
7
+ limit: z.ZodOptional<z.ZodNumber>;
8
+ cursor: z.ZodOptional<z.ZodString>;
9
+ email: z.ZodOptional<z.ZodString>;
10
+ account_id: z.ZodOptional<z.ZodString>;
11
+ domain: z.ZodOptional<z.ZodString>;
12
+ };
13
+ export declare function getWebsiteVisitorsHandler(input: Record<string, unknown>): Promise<{
14
+ content: {
15
+ type: "text";
16
+ text: string;
17
+ }[];
18
+ isError: boolean;
19
+ } | {
20
+ content: {
21
+ type: "text";
22
+ text: string;
23
+ }[];
24
+ isError?: undefined;
25
+ }>;
26
+ //# sourceMappingURL=get-website-visitors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-website-visitors.d.ts","sourceRoot":"","sources":["../../src/tools/get-website-visitors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,eAAO,MAAM,sBAAsB,yBAAyB,CAAA;AAE5D,eAAO,MAAM,6BAA6B,QAGwI,CAAA;AAElL,eAAO,MAAM,wBAAwB;;;;;;;;CA4BpC,CAAA;AAED,wBAAsB,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;;;;;;GAiC7E"}
@@ -0,0 +1,73 @@
1
+ import { z } from 'zod';
2
+ import { callApi } from '../client.js';
3
+ export const getWebsiteVisitorsName = 'get_website_visitors';
4
+ export const getWebsiteVisitorsDescription = 'Read the leads ColdIQ Visitor ID identified on one of your websites — the people who visited (with verified work email, title and LinkedIn where available) or the companies they belong to (with firmographics). ' +
5
+ 'Use `type: "people"` for enriched contacts and `type: "companies"` for enriched accounts. To find `website_id`, call the free `GET /visitor-id/websites` endpoint through call_endpoint (api "visitor-id"). ' +
6
+ 'Results are paginated: pass the `cursor` from the previous response to fetch the next page. Free — identifications are billed when they are delivered, not when you read them.';
7
+ export const getWebsiteVisitorsSchema = {
8
+ website_id: z
9
+ .number()
10
+ .int()
11
+ .describe('The tracked website to read leads from, as returned by GET /visitor-id/websites.'),
12
+ type: z
13
+ .enum(['people', 'companies'])
14
+ .describe('"people" returns identified contacts (email, title, LinkedIn); "companies" returns identified accounts (firmographics).'),
15
+ limit: z
16
+ .number()
17
+ .int()
18
+ .min(1)
19
+ .max(100)
20
+ .optional()
21
+ .describe('Records per page (1–100). Default is the identification engine\'s own default.'),
22
+ cursor: z.string().optional().describe('Pagination cursor from the previous response.'),
23
+ email: z
24
+ .string()
25
+ .optional()
26
+ .describe('people only — return the identified person with this email address.'),
27
+ account_id: z
28
+ .string()
29
+ .optional()
30
+ .describe('people only — return only the people identified at this company (account id from a "companies" result).'),
31
+ domain: z
32
+ .string()
33
+ .optional()
34
+ .describe('companies only — return the identified company with this domain.'),
35
+ };
36
+ export async function getWebsiteVisitorsHandler(input) {
37
+ const websiteId = input.website_id;
38
+ const type = input.type;
39
+ const isPeople = type === 'people';
40
+ const path = `/visitor-id/websites/${websiteId}/${isPeople ? 'contacts' : 'accounts'}`;
41
+ const query = {};
42
+ if (input.limit !== undefined)
43
+ query.limit = String(input.limit);
44
+ if (input.cursor)
45
+ query.cursor = String(input.cursor);
46
+ if (isPeople) {
47
+ if (input.email)
48
+ query.email = String(input.email);
49
+ if (input.account_id)
50
+ query.account_id = String(input.account_id);
51
+ }
52
+ else if (input.domain) {
53
+ query.domain = String(input.domain);
54
+ }
55
+ const res = await callApi('GET', path, undefined, query);
56
+ if (!res.ok) {
57
+ return {
58
+ content: [
59
+ {
60
+ type: 'text',
61
+ text: JSON.stringify({
62
+ error: `Failed to read identified ${isPeople ? 'people' : 'companies'}`,
63
+ status: res.status,
64
+ data: res.data,
65
+ }),
66
+ },
67
+ ],
68
+ isError: true,
69
+ };
70
+ }
71
+ return { content: [{ type: 'text', text: JSON.stringify({ data: res.data }) }] };
72
+ }
73
+ //# sourceMappingURL=get-website-visitors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-website-visitors.js","sourceRoot":"","sources":["../../src/tools/get-website-visitors.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coldiq/mcp",
3
- "version": "5.4.2",
3
+ "version": "5.4.3",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
package/src/index.ts CHANGED
@@ -171,6 +171,13 @@ import {
171
171
  getPlaceReviewsHandler,
172
172
  } from './tools/get-place-reviews.js'
173
173
 
174
+ import {
175
+ getWebsiteVisitorsName,
176
+ getWebsiteVisitorsDescription,
177
+ getWebsiteVisitorsSchema,
178
+ getWebsiteVisitorsHandler,
179
+ } from './tools/get-website-visitors.js'
180
+
174
181
  import {
175
182
  listDataSourcesName,
176
183
  listDataSourcesDescription,
@@ -247,6 +254,10 @@ server.tool(listSkillsName, listSkillsDescription, listSkillsSchema, listSkillsH
247
254
  server.tool(loadSkillName, loadSkillDescription, loadSkillSchema, loadSkillHandler)
248
255
  server.tool(extractPostEngagementName, withKnowledgeFirstRequirement(extractPostEngagementDescription), extractPostEngagementSchema, extractPostEngagementHandler)
249
256
  server.tool(getPlaceReviewsName, withKnowledgeFirstRequirement(getPlaceReviewsDescription), getPlaceReviewsSchema, getPlaceReviewsHandler)
257
+ // ColdIQ Visitor ID: read the leads identified on the account's own websites.
258
+ // Listing the websites themselves needs no tool — search_endpoints/call_endpoint
259
+ // already reach GET /visitor-id/websites.
260
+ server.tool(getWebsiteVisitorsName, withKnowledgeFirstRequirement(getWebsiteVisitorsDescription), getWebsiteVisitorsSchema, getWebsiteVisitorsHandler)
250
261
  // Generic endpoint discovery + invoke: reach any integrated provider without a dedicated tool.
251
262
  server.tool(searchEndpointsName, withKnowledgeFirstRequirement(searchEndpointsDescription), searchEndpointsSchema, searchEndpointsHandler)
252
263
  server.tool(getEndpointDetailsName, withKnowledgeFirstRequirement(getEndpointDetailsDescription), getEndpointDetailsSchema, getEndpointDetailsHandler)
@@ -0,0 +1,74 @@
1
+ import { z } from 'zod'
2
+ import { callApi } from '../client.js'
3
+
4
+ export const getWebsiteVisitorsName = 'get_website_visitors'
5
+
6
+ export const getWebsiteVisitorsDescription =
7
+ 'Read the leads ColdIQ Visitor ID identified on one of your websites — the people who visited (with verified work email, title and LinkedIn where available) or the companies they belong to (with firmographics). ' +
8
+ 'Use `type: "people"` for enriched contacts and `type: "companies"` for enriched accounts. To find `website_id`, call the free `GET /visitor-id/websites` endpoint through call_endpoint (api "visitor-id"). ' +
9
+ 'Results are paginated: pass the `cursor` from the previous response to fetch the next page. Free — identifications are billed when they are delivered, not when you read them.'
10
+
11
+ export const getWebsiteVisitorsSchema = {
12
+ website_id: z
13
+ .number()
14
+ .int()
15
+ .describe('The tracked website to read leads from, as returned by GET /visitor-id/websites.'),
16
+ type: z
17
+ .enum(['people', 'companies'])
18
+ .describe('"people" returns identified contacts (email, title, LinkedIn); "companies" returns identified accounts (firmographics).'),
19
+ limit: z
20
+ .number()
21
+ .int()
22
+ .min(1)
23
+ .max(100)
24
+ .optional()
25
+ .describe('Records per page (1–100). Default is the identification engine\'s own default.'),
26
+ cursor: z.string().optional().describe('Pagination cursor from the previous response.'),
27
+ email: z
28
+ .string()
29
+ .optional()
30
+ .describe('people only — return the identified person with this email address.'),
31
+ account_id: z
32
+ .string()
33
+ .optional()
34
+ .describe('people only — return only the people identified at this company (account id from a "companies" result).'),
35
+ domain: z
36
+ .string()
37
+ .optional()
38
+ .describe('companies only — return the identified company with this domain.'),
39
+ }
40
+
41
+ export async function getWebsiteVisitorsHandler(input: Record<string, unknown>) {
42
+ const websiteId = input.website_id as number
43
+ const type = input.type as 'people' | 'companies'
44
+ const isPeople = type === 'people'
45
+ const path = `/visitor-id/websites/${websiteId}/${isPeople ? 'contacts' : 'accounts'}`
46
+
47
+ const query: Record<string, string> = {}
48
+ if (input.limit !== undefined) query.limit = String(input.limit)
49
+ if (input.cursor) query.cursor = String(input.cursor)
50
+ if (isPeople) {
51
+ if (input.email) query.email = String(input.email)
52
+ if (input.account_id) query.account_id = String(input.account_id)
53
+ } else if (input.domain) {
54
+ query.domain = String(input.domain)
55
+ }
56
+
57
+ const res = await callApi('GET', path, undefined, query)
58
+ if (!res.ok) {
59
+ return {
60
+ content: [
61
+ {
62
+ type: 'text' as const,
63
+ text: JSON.stringify({
64
+ error: `Failed to read identified ${isPeople ? 'people' : 'companies'}`,
65
+ status: res.status,
66
+ data: res.data,
67
+ }),
68
+ },
69
+ ],
70
+ isError: true,
71
+ }
72
+ }
73
+ return { content: [{ type: 'text' as const, text: JSON.stringify({ data: res.data }) }] }
74
+ }
@@ -0,0 +1,108 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
2
+ import { initClient } from '../../src/client.js'
3
+ import { getWebsiteVisitorsHandler, getWebsiteVisitorsSchema } from '../../src/tools/get-website-visitors.js'
4
+
5
+ describe('visitor-ID MCP tools', () => {
6
+ const originalFetch = globalThis.fetch
7
+
8
+ beforeEach(() => {
9
+ initClient('http://test-api.local', 'test-key')
10
+ })
11
+
12
+ afterEach(() => {
13
+ globalThis.fetch = originalFetch
14
+ vi.restoreAllMocks()
15
+ })
16
+
17
+ function captureUrl(payload: unknown, status = 200) {
18
+ const seen: { url: string } = { url: '' }
19
+ globalThis.fetch = vi.fn(async (url: string | URL | Request) => {
20
+ seen.url = url.toString()
21
+ return new Response(JSON.stringify(payload), { status })
22
+ }) as typeof fetch
23
+ return seen
24
+ }
25
+
26
+ describe('get_website_visitors', () => {
27
+ it('reads identified people from the contacts endpoint', async () => {
28
+ const seen = captureUrl({ data: [{ email: 'michel@coldiq.com' }], next_cursor: 'abc' })
29
+
30
+ const result = await getWebsiteVisitorsHandler({ website_id: 7, type: 'people', limit: 25 })
31
+
32
+ const url = new URL(seen.url)
33
+ expect(url.pathname).toBe('/v1/visitor-id/websites/7/contacts')
34
+ expect(url.searchParams.get('limit')).toBe('25')
35
+ expect(result.isError).toBeFalsy()
36
+ })
37
+
38
+ it('reads identified companies from the accounts endpoint', async () => {
39
+ const seen = captureUrl({ data: [{ domain: 'coldiq.com' }] })
40
+
41
+ await getWebsiteVisitorsHandler({ website_id: 7, type: 'companies', domain: 'coldiq.com' })
42
+
43
+ const url = new URL(seen.url)
44
+ expect(url.pathname).toBe('/v1/visitor-id/websites/7/accounts')
45
+ expect(url.searchParams.get('domain')).toBe('coldiq.com')
46
+ })
47
+
48
+ it('sends people-only filters only for people, and company-only filters only for companies', async () => {
49
+ const people = captureUrl({ data: [] })
50
+ await getWebsiteVisitorsHandler({
51
+ website_id: 7,
52
+ type: 'people',
53
+ email: 'michel@coldiq.com',
54
+ account_id: 'acc_1',
55
+ domain: 'coldiq.com',
56
+ })
57
+ const peopleUrl = new URL(people.url)
58
+ expect(peopleUrl.searchParams.get('email')).toBe('michel@coldiq.com')
59
+ expect(peopleUrl.searchParams.get('account_id')).toBe('acc_1')
60
+ expect(peopleUrl.searchParams.get('domain')).toBeNull()
61
+
62
+ const companies = captureUrl({ data: [] })
63
+ await getWebsiteVisitorsHandler({
64
+ website_id: 7,
65
+ type: 'companies',
66
+ domain: 'coldiq.com',
67
+ email: 'michel@coldiq.com',
68
+ })
69
+ const companiesUrl = new URL(companies.url)
70
+ expect(companiesUrl.searchParams.get('domain')).toBe('coldiq.com')
71
+ expect(companiesUrl.searchParams.get('email')).toBeNull()
72
+ })
73
+
74
+ it('forwards the pagination cursor', async () => {
75
+ const seen = captureUrl({ data: [] })
76
+
77
+ await getWebsiteVisitorsHandler({ website_id: 7, type: 'people', cursor: 'next-page' })
78
+
79
+ expect(new URL(seen.url).searchParams.get('cursor')).toBe('next-page')
80
+ })
81
+
82
+ it('passes the upstream cursor envelope through verbatim', async () => {
83
+ captureUrl({ data: [{ id: 'c1' }], next_cursor: 'page2', has_more: true })
84
+
85
+ const result = await getWebsiteVisitorsHandler({ website_id: 7, type: 'people' })
86
+ const parsed = JSON.parse(result.content[0].text)
87
+
88
+ expect(parsed.data).toEqual({ data: [{ id: 'c1' }], next_cursor: 'page2', has_more: true })
89
+ })
90
+
91
+ it('returns isError when the website is not found', async () => {
92
+ captureUrl({ error: 'Website not found' }, 404)
93
+
94
+ const result = await getWebsiteVisitorsHandler({ website_id: 999, type: 'companies' })
95
+
96
+ expect(result.isError).toBe(true)
97
+ const parsed = JSON.parse(result.content[0].text)
98
+ expect(parsed.status).toBe(404)
99
+ expect(parsed.error).toBe('Failed to read identified companies')
100
+ })
101
+
102
+ it('rejects a type outside people/companies at the schema layer', () => {
103
+ expect(getWebsiteVisitorsSchema.type.safeParse('visitors').success).toBe(false)
104
+ expect(getWebsiteVisitorsSchema.type.safeParse('people').success).toBe(true)
105
+ expect(getWebsiteVisitorsSchema.limit.safeParse(101).success).toBe(false)
106
+ })
107
+ })
108
+ })