@coldiq/mcp 5.4.5 → 5.4.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.
- package/dist/index.js +44 -36
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +51 -37
- package/tests/instructions.test.ts +3 -3
- package/tests/sdk-zod4-compatibility.test.ts +59 -0
- package/tests/tool-json-schema.test.ts +2 -1
package/dist/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
+
import { z } from 'zod';
|
|
4
5
|
import { initClient } from './client.js';
|
|
5
6
|
import { MCP_SERVER_INSTRUCTIONS } from './instructions.js';
|
|
6
7
|
import { withKnowledgeFirstRequirement } from './knowledge-policy.js';
|
|
@@ -57,48 +58,55 @@ const server = new McpServer({
|
|
|
57
58
|
}, {
|
|
58
59
|
instructions: MCP_SERVER_INSTRUCTIONS,
|
|
59
60
|
});
|
|
61
|
+
function registerPublicTool(name, description, schema, handler) {
|
|
62
|
+
const inputSchema = z.strictObject(schema);
|
|
63
|
+
server.registerTool(name, {
|
|
64
|
+
description,
|
|
65
|
+
inputSchema,
|
|
66
|
+
}, handler);
|
|
67
|
+
}
|
|
60
68
|
// Register knowledge retrieval before every operational tool so clients that
|
|
61
69
|
// preserve registration order surface the mandatory prerequisite first.
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
70
|
+
registerPublicTool(searchKnowledgeName, searchKnowledgeDescription, searchKnowledgeSchema, searchKnowledgeHandler);
|
|
71
|
+
registerPublicTool(searchCompaniesName, withKnowledgeFirstRequirement(searchCompaniesDescription), searchCompaniesSchema, searchCompaniesHandler);
|
|
72
|
+
registerPublicTool(findPeopleName, withKnowledgeFirstRequirement(findPeopleDescription), findPeopleSchema, findPeopleHandler);
|
|
73
|
+
registerPublicTool(findEmailName, withKnowledgeFirstRequirement(findEmailDescription), findEmailSchema, findEmailHandler);
|
|
74
|
+
registerPublicTool(enrichPersonName, withKnowledgeFirstRequirement(enrichPersonDescription), enrichPersonSchema, enrichPersonHandler);
|
|
75
|
+
registerPublicTool(findEmailsName, withKnowledgeFirstRequirement(findEmailsDescription), findEmailsSchema, findEmailsHandler);
|
|
76
|
+
registerPublicTool(verifyEmailName, withKnowledgeFirstRequirement(verifyEmailDescription), verifyEmailSchema, verifyEmailHandler);
|
|
77
|
+
registerPublicTool(verifyEmailsBulkName, withKnowledgeFirstRequirement(verifyEmailsBulkDescription), verifyEmailsBulkSchema, verifyEmailsBulkHandler);
|
|
78
|
+
registerPublicTool(findEmailsBulkName, withKnowledgeFirstRequirement(findEmailsBulkDescription), findEmailsBulkSchema, findEmailsBulkHandler);
|
|
79
|
+
registerPublicTool(enrichPersonBulkName, withKnowledgeFirstRequirement(enrichPersonBulkDescription), enrichPersonBulkSchema, enrichPersonBulkHandler);
|
|
80
|
+
registerPublicTool(enrichCompanyBulkName, withKnowledgeFirstRequirement(enrichCompanyBulkDescription), enrichCompanyBulkSchema, enrichCompanyBulkHandler);
|
|
81
|
+
registerPublicTool(findPhoneBulkName, withKnowledgeFirstRequirement(findPhoneBulkDescription), findPhoneBulkSchema, findPhoneBulkHandler);
|
|
82
|
+
registerPublicTool(getBulkJobName, withKnowledgeFirstRequirement(getBulkJobDescription), getBulkJobSchema, getBulkJobHandler);
|
|
83
|
+
registerPublicTool(cancelBulkJobName, withKnowledgeFirstRequirement(cancelBulkJobDescription), cancelBulkJobSchema, cancelBulkJobHandler);
|
|
84
|
+
registerPublicTool(findPhoneName, withKnowledgeFirstRequirement(findPhoneDescription), findPhoneSchema, findPhoneHandler);
|
|
85
|
+
registerPublicTool(enrichCompanyName, withKnowledgeFirstRequirement(enrichCompanyDescription), enrichCompanySchema, enrichCompanyHandler);
|
|
86
|
+
registerPublicTool(searchWebName, withKnowledgeFirstRequirement(searchWebDescription), searchWebSchema, searchWebHandler);
|
|
87
|
+
registerPublicTool(searchJobsName, withKnowledgeFirstRequirement(searchJobsDescription), searchJobsSchema, searchJobsHandler);
|
|
88
|
+
registerPublicTool(searchAdsName, withKnowledgeFirstRequirement(searchAdsDescription), searchAdsSchema, searchAdsHandler);
|
|
89
|
+
registerPublicTool(searchPlacesName, withKnowledgeFirstRequirement(searchPlacesDescription), searchPlacesSchema, searchPlacesHandler);
|
|
90
|
+
registerPublicTool(findInfluencersName, withKnowledgeFirstRequirement(findInfluencersDescription), findInfluencersSchema, findInfluencersHandler);
|
|
91
|
+
registerPublicTool(searchRedditName, withKnowledgeFirstRequirement(searchRedditDescription), searchRedditSchema, searchRedditHandler);
|
|
92
|
+
registerPublicTool(searchSeoName, withKnowledgeFirstRequirement(searchSeoDescription), searchSeoSchema, searchSeoHandler);
|
|
93
|
+
registerPublicTool(findSignalsName, withKnowledgeFirstRequirement(findSignalsDescription), findSignalsSchema, findSignalsHandler);
|
|
94
|
+
registerPublicTool(fetchPageContentName, withKnowledgeFirstRequirement(fetchPageContentDescription), fetchPageContentSchema, fetchPageContentHandler);
|
|
95
|
+
registerPublicTool(getCreditBalanceName, getCreditBalanceDescription, getCreditBalanceSchema, getCreditBalanceHandler);
|
|
96
|
+
registerPublicTool(getSessionUsageName, getSessionUsageDescription, getSessionUsageSchema, getSessionUsageHandler);
|
|
97
|
+
registerPublicTool(listDataSourcesName, withKnowledgeFirstRequirement(listDataSourcesDescription), listDataSourcesSchema, listDataSourcesHandler);
|
|
98
|
+
registerPublicTool(listSkillsName, listSkillsDescription, listSkillsSchema, listSkillsHandler);
|
|
99
|
+
registerPublicTool(loadSkillName, loadSkillDescription, loadSkillSchema, loadSkillHandler);
|
|
100
|
+
registerPublicTool(extractPostEngagementName, withKnowledgeFirstRequirement(extractPostEngagementDescription), extractPostEngagementSchema, extractPostEngagementHandler);
|
|
101
|
+
registerPublicTool(getPlaceReviewsName, withKnowledgeFirstRequirement(getPlaceReviewsDescription), getPlaceReviewsSchema, getPlaceReviewsHandler);
|
|
94
102
|
// ColdIQ Visitor ID: read the leads identified on the account's own websites.
|
|
95
103
|
// Listing the websites themselves needs no tool — search_endpoints/call_endpoint
|
|
96
104
|
// already reach GET /visitor-id/websites.
|
|
97
|
-
|
|
105
|
+
registerPublicTool(getWebsiteVisitorsName, withKnowledgeFirstRequirement(getWebsiteVisitorsDescription), getWebsiteVisitorsSchema, getWebsiteVisitorsHandler);
|
|
98
106
|
// Generic endpoint discovery + invoke: reach any integrated provider without a dedicated tool.
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
107
|
+
registerPublicTool(searchEndpointsName, withKnowledgeFirstRequirement(searchEndpointsDescription), searchEndpointsSchema, searchEndpointsHandler);
|
|
108
|
+
registerPublicTool(getEndpointDetailsName, withKnowledgeFirstRequirement(getEndpointDetailsDescription), getEndpointDetailsSchema, getEndpointDetailsHandler);
|
|
109
|
+
registerPublicTool(callEndpointName, withKnowledgeFirstRequirement(callEndpointDescription), callEndpointSchema, callEndpointHandler);
|
|
102
110
|
// Connect via stdio transport
|
|
103
111
|
const transport = new StdioServerTransport();
|
|
104
112
|
await server.connect(transport);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.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.
|
|
3
|
+
"version": "5.4.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"node": ">=18.18"
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@modelcontextprotocol/sdk": "^1.
|
|
22
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
23
23
|
"undici": "^6.25.0",
|
|
24
24
|
"zod": "4.5.4"
|
|
25
25
|
},
|
package/src/index.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
|
|
3
|
+
import { McpServer, type ToolCallback } from '@modelcontextprotocol/sdk/server/mcp.js'
|
|
4
4
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
|
|
5
|
+
import { z } from 'zod'
|
|
5
6
|
import { initClient } from './client.js'
|
|
6
7
|
import { MCP_SERVER_INSTRUCTIONS } from './instructions.js'
|
|
7
8
|
import { withKnowledgeFirstRequirement } from './knowledge-policy.js'
|
|
@@ -220,48 +221,61 @@ const server = new McpServer(
|
|
|
220
221
|
},
|
|
221
222
|
)
|
|
222
223
|
|
|
224
|
+
function registerPublicTool<Fields extends Record<string, z.ZodType>>(
|
|
225
|
+
name: string,
|
|
226
|
+
description: string,
|
|
227
|
+
schema: Fields,
|
|
228
|
+
handler: ToolCallback<z.ZodObject<Fields>>,
|
|
229
|
+
): void {
|
|
230
|
+
const inputSchema = z.strictObject(schema)
|
|
231
|
+
server.registerTool<never, typeof inputSchema>(name, {
|
|
232
|
+
description,
|
|
233
|
+
inputSchema,
|
|
234
|
+
}, handler)
|
|
235
|
+
}
|
|
236
|
+
|
|
223
237
|
// Register knowledge retrieval before every operational tool so clients that
|
|
224
238
|
// preserve registration order surface the mandatory prerequisite first.
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
239
|
+
registerPublicTool(searchKnowledgeName, searchKnowledgeDescription, searchKnowledgeSchema, searchKnowledgeHandler)
|
|
240
|
+
registerPublicTool(searchCompaniesName, withKnowledgeFirstRequirement(searchCompaniesDescription), searchCompaniesSchema, searchCompaniesHandler)
|
|
241
|
+
registerPublicTool(findPeopleName, withKnowledgeFirstRequirement(findPeopleDescription), findPeopleSchema, findPeopleHandler)
|
|
242
|
+
registerPublicTool(findEmailName, withKnowledgeFirstRequirement(findEmailDescription), findEmailSchema, findEmailHandler)
|
|
243
|
+
registerPublicTool(enrichPersonName, withKnowledgeFirstRequirement(enrichPersonDescription), enrichPersonSchema, enrichPersonHandler)
|
|
244
|
+
registerPublicTool(findEmailsName, withKnowledgeFirstRequirement(findEmailsDescription), findEmailsSchema, findEmailsHandler)
|
|
245
|
+
registerPublicTool(verifyEmailName, withKnowledgeFirstRequirement(verifyEmailDescription), verifyEmailSchema, verifyEmailHandler)
|
|
246
|
+
registerPublicTool(verifyEmailsBulkName, withKnowledgeFirstRequirement(verifyEmailsBulkDescription), verifyEmailsBulkSchema, verifyEmailsBulkHandler)
|
|
247
|
+
registerPublicTool(findEmailsBulkName, withKnowledgeFirstRequirement(findEmailsBulkDescription), findEmailsBulkSchema, findEmailsBulkHandler)
|
|
248
|
+
registerPublicTool(enrichPersonBulkName, withKnowledgeFirstRequirement(enrichPersonBulkDescription), enrichPersonBulkSchema, enrichPersonBulkHandler)
|
|
249
|
+
registerPublicTool(enrichCompanyBulkName, withKnowledgeFirstRequirement(enrichCompanyBulkDescription), enrichCompanyBulkSchema, enrichCompanyBulkHandler)
|
|
250
|
+
registerPublicTool(findPhoneBulkName, withKnowledgeFirstRequirement(findPhoneBulkDescription), findPhoneBulkSchema, findPhoneBulkHandler)
|
|
251
|
+
registerPublicTool(getBulkJobName, withKnowledgeFirstRequirement(getBulkJobDescription), getBulkJobSchema, getBulkJobHandler)
|
|
252
|
+
registerPublicTool(cancelBulkJobName, withKnowledgeFirstRequirement(cancelBulkJobDescription), cancelBulkJobSchema, cancelBulkJobHandler)
|
|
253
|
+
registerPublicTool(findPhoneName, withKnowledgeFirstRequirement(findPhoneDescription), findPhoneSchema, findPhoneHandler)
|
|
254
|
+
registerPublicTool(enrichCompanyName, withKnowledgeFirstRequirement(enrichCompanyDescription), enrichCompanySchema, enrichCompanyHandler)
|
|
255
|
+
registerPublicTool(searchWebName, withKnowledgeFirstRequirement(searchWebDescription), searchWebSchema, searchWebHandler)
|
|
256
|
+
registerPublicTool(searchJobsName, withKnowledgeFirstRequirement(searchJobsDescription), searchJobsSchema, searchJobsHandler)
|
|
257
|
+
registerPublicTool(searchAdsName, withKnowledgeFirstRequirement(searchAdsDescription), searchAdsSchema, searchAdsHandler)
|
|
258
|
+
registerPublicTool(searchPlacesName, withKnowledgeFirstRequirement(searchPlacesDescription), searchPlacesSchema, searchPlacesHandler)
|
|
259
|
+
registerPublicTool(findInfluencersName, withKnowledgeFirstRequirement(findInfluencersDescription), findInfluencersSchema, findInfluencersHandler)
|
|
260
|
+
registerPublicTool(searchRedditName, withKnowledgeFirstRequirement(searchRedditDescription), searchRedditSchema, searchRedditHandler)
|
|
261
|
+
registerPublicTool(searchSeoName, withKnowledgeFirstRequirement(searchSeoDescription), searchSeoSchema, searchSeoHandler)
|
|
262
|
+
registerPublicTool(findSignalsName, withKnowledgeFirstRequirement(findSignalsDescription), findSignalsSchema, findSignalsHandler)
|
|
263
|
+
registerPublicTool(fetchPageContentName, withKnowledgeFirstRequirement(fetchPageContentDescription), fetchPageContentSchema, fetchPageContentHandler)
|
|
264
|
+
registerPublicTool(getCreditBalanceName, getCreditBalanceDescription, getCreditBalanceSchema, getCreditBalanceHandler)
|
|
265
|
+
registerPublicTool(getSessionUsageName, getSessionUsageDescription, getSessionUsageSchema, getSessionUsageHandler)
|
|
266
|
+
registerPublicTool(listDataSourcesName, withKnowledgeFirstRequirement(listDataSourcesDescription), listDataSourcesSchema, listDataSourcesHandler)
|
|
267
|
+
registerPublicTool(listSkillsName, listSkillsDescription, listSkillsSchema, listSkillsHandler)
|
|
268
|
+
registerPublicTool(loadSkillName, loadSkillDescription, loadSkillSchema, loadSkillHandler)
|
|
269
|
+
registerPublicTool(extractPostEngagementName, withKnowledgeFirstRequirement(extractPostEngagementDescription), extractPostEngagementSchema, extractPostEngagementHandler)
|
|
270
|
+
registerPublicTool(getPlaceReviewsName, withKnowledgeFirstRequirement(getPlaceReviewsDescription), getPlaceReviewsSchema, getPlaceReviewsHandler)
|
|
257
271
|
// ColdIQ Visitor ID: read the leads identified on the account's own websites.
|
|
258
272
|
// Listing the websites themselves needs no tool — search_endpoints/call_endpoint
|
|
259
273
|
// already reach GET /visitor-id/websites.
|
|
260
|
-
|
|
274
|
+
registerPublicTool(getWebsiteVisitorsName, withKnowledgeFirstRequirement(getWebsiteVisitorsDescription), getWebsiteVisitorsSchema, getWebsiteVisitorsHandler)
|
|
261
275
|
// Generic endpoint discovery + invoke: reach any integrated provider without a dedicated tool.
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
276
|
+
registerPublicTool(searchEndpointsName, withKnowledgeFirstRequirement(searchEndpointsDescription), searchEndpointsSchema, searchEndpointsHandler)
|
|
277
|
+
registerPublicTool(getEndpointDetailsName, withKnowledgeFirstRequirement(getEndpointDetailsDescription), getEndpointDetailsSchema, getEndpointDetailsHandler)
|
|
278
|
+
registerPublicTool(callEndpointName, withKnowledgeFirstRequirement(callEndpointDescription), callEndpointSchema, callEndpointHandler)
|
|
265
279
|
|
|
266
280
|
// Connect via stdio transport
|
|
267
281
|
const transport = new StdioServerTransport()
|
|
@@ -50,7 +50,7 @@ describe('MCP knowledge-first policy', () => {
|
|
|
50
50
|
const indexPath = fileURLToPath(new URL('../src/index.ts', import.meta.url))
|
|
51
51
|
const registrations = readFileSync(indexPath, 'utf8')
|
|
52
52
|
.split('\n')
|
|
53
|
-
.filter((line) => line.trimStart().startsWith('
|
|
53
|
+
.filter((line) => line.trimStart().startsWith('registerPublicTool('))
|
|
54
54
|
const unguardedCompatibilityTools = [
|
|
55
55
|
'getCreditBalanceName',
|
|
56
56
|
'getSessionUsageName',
|
|
@@ -58,9 +58,9 @@ describe('MCP knowledge-first policy', () => {
|
|
|
58
58
|
'loadSkillName',
|
|
59
59
|
]
|
|
60
60
|
|
|
61
|
-
expect(registrations[0]).toContain('
|
|
61
|
+
expect(registrations[0]).toContain('registerPublicTool(searchKnowledgeName, searchKnowledgeDescription')
|
|
62
62
|
for (const registration of registrations.slice(1)) {
|
|
63
|
-
if (unguardedCompatibilityTools.some((name) => registration.includes(`
|
|
63
|
+
if (unguardedCompatibilityTools.some((name) => registration.includes(`registerPublicTool(${name},`))) continue
|
|
64
64
|
expect(registration).toContain('withKnowledgeFirstRequirement(')
|
|
65
65
|
}
|
|
66
66
|
})
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js'
|
|
2
|
+
import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js'
|
|
3
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
|
|
4
|
+
import { afterEach, describe, expect, it } from 'vitest'
|
|
5
|
+
import { z } from 'zod'
|
|
6
|
+
|
|
7
|
+
describe('MCP SDK Zod 4 compatibility', () => {
|
|
8
|
+
const closeCallbacks: Array<() => Promise<void>> = []
|
|
9
|
+
|
|
10
|
+
afterEach(async () => {
|
|
11
|
+
await Promise.all(closeCallbacks.splice(0).map((close) => close()))
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
it('publishes populated input properties and required fields over the wire', async () => {
|
|
15
|
+
const server = new McpServer({ name: 'schema-contract-server', version: '1.0.0' })
|
|
16
|
+
server.registerTool(
|
|
17
|
+
'schema_contract',
|
|
18
|
+
{
|
|
19
|
+
description: 'Verify Zod 4 tool schema conversion.',
|
|
20
|
+
inputSchema: z.strictObject({
|
|
21
|
+
platform: z.enum(['linkedin', 'instagram']),
|
|
22
|
+
limit: z.number().int().min(1).max(100).default(25),
|
|
23
|
+
}),
|
|
24
|
+
},
|
|
25
|
+
async () => ({ content: [{ type: 'text', text: 'ok' }] }),
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
const client = new Client({ name: 'schema-contract-client', version: '1.0.0' })
|
|
29
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair()
|
|
30
|
+
closeCallbacks.push(() => client.close(), () => server.close())
|
|
31
|
+
|
|
32
|
+
await server.connect(serverTransport)
|
|
33
|
+
await client.connect(clientTransport)
|
|
34
|
+
|
|
35
|
+
const result = await client.listTools()
|
|
36
|
+
expect(result.tools).toHaveLength(1)
|
|
37
|
+
expect(result.tools[0]?.inputSchema).toMatchObject({
|
|
38
|
+
type: 'object',
|
|
39
|
+
properties: {
|
|
40
|
+
platform: { type: 'string', enum: ['linkedin', 'instagram'] },
|
|
41
|
+
limit: { type: 'integer', minimum: 1, maximum: 100, default: 25 },
|
|
42
|
+
},
|
|
43
|
+
required: ['platform'],
|
|
44
|
+
additionalProperties: false,
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
const invalidCall = await client.callTool({
|
|
48
|
+
name: 'schema_contract',
|
|
49
|
+
arguments: { platform: 'linkedin', unexpected: true },
|
|
50
|
+
})
|
|
51
|
+
expect(invalidCall.isError).toBe(true)
|
|
52
|
+
expect(invalidCall.content).toEqual([
|
|
53
|
+
expect.objectContaining({
|
|
54
|
+
type: 'text',
|
|
55
|
+
text: expect.stringContaining('Unrecognized key: "unexpected"'),
|
|
56
|
+
}),
|
|
57
|
+
])
|
|
58
|
+
})
|
|
59
|
+
})
|
|
@@ -14,7 +14,8 @@ describe('public MCP tool JSON schemas', () => {
|
|
|
14
14
|
.sort()
|
|
15
15
|
const indexSource = readFileSync(new URL('../src/index.ts', import.meta.url), 'utf8')
|
|
16
16
|
|
|
17
|
-
expect(indexSource.match(/
|
|
17
|
+
expect(indexSource.match(/registerPublicTool\(/g)).toHaveLength(toolFiles.length)
|
|
18
|
+
expect(indexSource).not.toContain('server.tool(')
|
|
18
19
|
|
|
19
20
|
for (const file of toolFiles) {
|
|
20
21
|
const exports = await import(new URL(`../src/tools/${file}`, import.meta.url).href)
|