@mondaydotcomorg/atp-mcp-adapter 0.24.2 → 0.24.4

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.cjs ADDED
@@ -0,0 +1,408 @@
1
+ 'use strict';
2
+
3
+ var index_js = require('@modelcontextprotocol/sdk/client/index.js');
4
+ var stdio_js = require('@modelcontextprotocol/sdk/client/stdio.js');
5
+ var sse_js = require('@modelcontextprotocol/sdk/client/sse.js');
6
+
7
+ var __defProp = Object.defineProperty;
8
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
+
10
+ // src/schema-utils.ts
11
+ function convertMCPInputSchema(inputSchema) {
12
+ const schema = inputSchema;
13
+ if (!schema) {
14
+ return {
15
+ type: "object",
16
+ properties: {}
17
+ };
18
+ }
19
+ const result = {};
20
+ result.type = schema.type || "object";
21
+ if (result.type === "object") {
22
+ result.properties = schema.properties || {};
23
+ } else if (schema.properties) {
24
+ result.properties = schema.properties;
25
+ }
26
+ if (schema.required && schema.required.length > 0) {
27
+ result.required = schema.required;
28
+ }
29
+ if (schema.description) {
30
+ result.description = schema.description;
31
+ }
32
+ const knownFields = /* @__PURE__ */ new Set([
33
+ "type",
34
+ "properties",
35
+ "required",
36
+ "description"
37
+ ]);
38
+ for (const [key, value] of Object.entries(schema)) {
39
+ if (!knownFields.has(key) && value !== void 0) {
40
+ result[key] = value;
41
+ }
42
+ }
43
+ return result;
44
+ }
45
+ __name(convertMCPInputSchema, "convertMCPInputSchema");
46
+ function convertMCPToolToFunction(tool, handler) {
47
+ return {
48
+ name: tool.name,
49
+ description: tool.description || `MCP tool: ${tool.name}`,
50
+ inputSchema: convertMCPInputSchema(tool.inputSchema),
51
+ handler
52
+ };
53
+ }
54
+ __name(convertMCPToolToFunction, "convertMCPToolToFunction");
55
+
56
+ // src/mcp-connector.ts
57
+ var MCPConnector = class {
58
+ static {
59
+ __name(this, "MCPConnector");
60
+ }
61
+ clients = /* @__PURE__ */ new Map();
62
+ currentClient = null;
63
+ currentServerName = null;
64
+ /**
65
+ * Fetches all tools from an MCP server, handling pagination if present.
66
+ */
67
+ async fetchAllTools(client) {
68
+ const allTools = [];
69
+ let cursor;
70
+ do {
71
+ const toolsResult = await client.listTools(cursor ? {
72
+ cursor
73
+ } : void 0);
74
+ const tools = toolsResult.tools || [];
75
+ allTools.push(...tools);
76
+ cursor = toolsResult.nextCursor;
77
+ } while (cursor);
78
+ return allTools;
79
+ }
80
+ /**
81
+ * Connects to an MCP server using stdio transport.
82
+ * @param config - MCP stdio server configuration
83
+ * @returns APIGroupConfig with converted tools
84
+ */
85
+ async connectToStdioServer(config) {
86
+ const transport = new stdio_js.StdioClientTransport({
87
+ command: config.command,
88
+ args: config.args,
89
+ env: config.env
90
+ });
91
+ const client = new index_js.Client({
92
+ name: "agent-tool-protocol-connector",
93
+ version: "1.0.0"
94
+ }, {
95
+ capabilities: {}
96
+ });
97
+ await client.connect(transport);
98
+ this.clients.set(config.name, client);
99
+ this.currentClient = client;
100
+ this.currentServerName = config.name;
101
+ const tools = await this.fetchAllTools(client);
102
+ const functions = tools.map((tool) => {
103
+ const inputSchema = convertMCPInputSchema(tool.inputSchema);
104
+ return {
105
+ name: tool.name,
106
+ description: tool.description || `MCP tool: ${tool.name}`,
107
+ inputSchema,
108
+ handler: /* @__PURE__ */ __name(async (input) => {
109
+ const result = await client.callTool({
110
+ name: tool.name,
111
+ arguments: input
112
+ });
113
+ return result.content;
114
+ }, "handler")
115
+ };
116
+ });
117
+ return {
118
+ name: config.name,
119
+ type: "mcp",
120
+ functions
121
+ };
122
+ }
123
+ /**
124
+ * Connects to an MCP server using SSE transport.
125
+ * @param config - MCP SSE server configuration
126
+ * @returns APIGroupConfig with converted tools
127
+ */
128
+ async connectToSSEServer(config) {
129
+ const transport = new sse_js.SSEClientTransport(new URL(config.serverUrl), {
130
+ requestInit: {
131
+ headers: config.headers || {}
132
+ }
133
+ });
134
+ const client = new index_js.Client({
135
+ name: "agent-tool-protocol-connector",
136
+ version: "1.0.0"
137
+ }, {
138
+ capabilities: {}
139
+ });
140
+ await client.connect(transport);
141
+ this.clients.set(config.name, client);
142
+ this.currentClient = client;
143
+ this.currentServerName = config.name;
144
+ const tools = await this.fetchAllTools(client);
145
+ const functions = tools.map((tool) => {
146
+ const inputSchema = convertMCPInputSchema(tool.inputSchema);
147
+ return {
148
+ name: tool.name,
149
+ description: tool.description || `MCP tool: ${tool.name}`,
150
+ inputSchema,
151
+ handler: /* @__PURE__ */ __name(async (input) => {
152
+ const result = await client.callTool({
153
+ name: tool.name,
154
+ arguments: input
155
+ });
156
+ return result.content;
157
+ }, "handler")
158
+ };
159
+ });
160
+ return {
161
+ name: config.name,
162
+ type: "mcp",
163
+ functions
164
+ };
165
+ }
166
+ /**
167
+ * Connects to an MCP server and retrieves its tools.
168
+ * @param config - MCP server configuration (supports both stdio and SSE)
169
+ * @returns APIGroupConfig with converted tools
170
+ */
171
+ async connectToMCPServer(config) {
172
+ if ("transport" in config) {
173
+ if (config.transport === "sse") {
174
+ return this.connectToSSEServer(config);
175
+ }
176
+ return this.connectToStdioServer(config);
177
+ }
178
+ return this.connectToStdioServer({
179
+ name: config.name,
180
+ transport: "stdio",
181
+ command: config.command,
182
+ args: config.args,
183
+ env: config.env
184
+ });
185
+ }
186
+ /**
187
+ * Connects to multiple MCP servers.
188
+ * @param configs - Array of MCP server configurations
189
+ * @returns Array of APIGroupConfig objects
190
+ */
191
+ async connectToMultipleServers(configs) {
192
+ return Promise.all(configs.map((config) => this.connectToMCPServer(config)));
193
+ }
194
+ /**
195
+ * Disconnects from all MCP servers.
196
+ */
197
+ async disconnectAll() {
198
+ const disconnectPromises = Array.from(this.clients.values()).map(async (client) => {
199
+ try {
200
+ await client.close();
201
+ } catch (error) {
202
+ }
203
+ });
204
+ await Promise.all(disconnectPromises);
205
+ this.clients.clear();
206
+ }
207
+ /**
208
+ * Gets a connected MCP client by name.
209
+ * @param name - Server name
210
+ * @returns MCP Client or undefined
211
+ */
212
+ getClient(name) {
213
+ return this.clients.get(name);
214
+ }
215
+ /**
216
+ * Lists all tools from the currently connected MCP server.
217
+ * @returns Array of tools
218
+ */
219
+ async listTools() {
220
+ if (!this.currentClient) {
221
+ throw new Error("Not connected to any MCP server");
222
+ }
223
+ const toolsResult = await this.currentClient.listTools();
224
+ return toolsResult.tools || [];
225
+ }
226
+ /**
227
+ * Lists all prompts from the currently connected MCP server.
228
+ * @returns Array of prompts
229
+ */
230
+ async listPrompts() {
231
+ if (!this.currentClient) {
232
+ throw new Error("Not connected to any MCP server");
233
+ }
234
+ try {
235
+ const promptsResult = await this.currentClient.listPrompts();
236
+ return promptsResult.prompts || [];
237
+ } catch (error) {
238
+ return [];
239
+ }
240
+ }
241
+ /**
242
+ * Calls a tool on the currently connected MCP server.
243
+ * @param name - Tool name
244
+ * @param input - Tool input parameters
245
+ * @returns Tool execution result
246
+ */
247
+ async callTool(name, input) {
248
+ if (!this.currentClient) {
249
+ throw new Error("Not connected to any MCP server");
250
+ }
251
+ const result = await this.currentClient.callTool({
252
+ name,
253
+ arguments: input
254
+ });
255
+ return result.content;
256
+ }
257
+ };
258
+
259
+ // src/http-connector.ts
260
+ var MCPHttpConnector = class {
261
+ static {
262
+ __name(this, "MCPHttpConnector");
263
+ }
264
+ baseUrl;
265
+ headers;
266
+ constructor(baseUrl, headers = {}) {
267
+ this.baseUrl = baseUrl.replace(/\/$/, "");
268
+ this.headers = {
269
+ "Content-Type": "application/json",
270
+ ...headers
271
+ };
272
+ }
273
+ async makeRequest(method, params) {
274
+ const body = {
275
+ jsonrpc: "2.0",
276
+ id: Date.now(),
277
+ method
278
+ };
279
+ if (params) {
280
+ body.params = params;
281
+ }
282
+ const response = await fetch(this.baseUrl, {
283
+ method: "POST",
284
+ headers: this.headers,
285
+ body: JSON.stringify(body)
286
+ });
287
+ if (!response.ok) {
288
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
289
+ }
290
+ const data = await response.json();
291
+ if (data.error) {
292
+ throw new Error(`MCP Error: ${data.error.message || JSON.stringify(data.error)}`);
293
+ }
294
+ return data.result;
295
+ }
296
+ async listTools() {
297
+ const result = await this.makeRequest("tools/list");
298
+ return result.tools || [];
299
+ }
300
+ async listPrompts() {
301
+ try {
302
+ const result = await this.makeRequest("prompts/list");
303
+ return result.prompts || [];
304
+ } catch (error) {
305
+ return [];
306
+ }
307
+ }
308
+ async getPrompt(name, args) {
309
+ const result = await this.makeRequest("prompts/get", {
310
+ name,
311
+ arguments: args
312
+ });
313
+ return {
314
+ messages: result.messages.map((msg) => ({
315
+ role: msg.role,
316
+ content: typeof msg.content === "string" ? msg.content : msg.content.text
317
+ }))
318
+ };
319
+ }
320
+ async callTool(name, input) {
321
+ const result = await this.makeRequest("tools/call", {
322
+ name,
323
+ arguments: input
324
+ });
325
+ if (!result.content || result.content.length === 0) {
326
+ return null;
327
+ }
328
+ const firstBlock = result.content[0];
329
+ if (result.content.length === 1 && firstBlock && firstBlock.type === "text") {
330
+ const text = firstBlock.text || "";
331
+ try {
332
+ return JSON.parse(text);
333
+ } catch {
334
+ return text;
335
+ }
336
+ }
337
+ return result.content.map((block) => {
338
+ if (block.type === "text") {
339
+ return block.text;
340
+ }
341
+ return block;
342
+ });
343
+ }
344
+ async disconnect() {
345
+ }
346
+ };
347
+
348
+ // src/atp-to-mcp.ts
349
+ function registerATPTools(client, mcpServer) {
350
+ const tools = client.getATPTools();
351
+ registerToolsWithMCP(tools, mcpServer);
352
+ }
353
+ __name(registerATPTools, "registerATPTools");
354
+ function registerToolsWithMCP(tools, mcpServer) {
355
+ for (const tool of tools) {
356
+ const handler = /* @__PURE__ */ __name(async (args) => {
357
+ try {
358
+ const result = await tool.func(args);
359
+ const resultText = typeof result === "string" ? result : JSON.stringify(result, null, 2);
360
+ return {
361
+ content: [
362
+ {
363
+ type: "text",
364
+ text: resultText
365
+ }
366
+ ]
367
+ };
368
+ } catch (error) {
369
+ const errorMessage = error instanceof Error ? error.message : String(error);
370
+ return {
371
+ content: [
372
+ {
373
+ type: "text",
374
+ text: `Error: ${errorMessage}`
375
+ }
376
+ ],
377
+ isError: true
378
+ };
379
+ }
380
+ }, "handler");
381
+ if (typeof mcpServer.registerTool === "function") {
382
+ const inputSchema = tool.zodSchema?.shape ?? {};
383
+ mcpServer.registerTool(tool.name, {
384
+ description: tool.description || "",
385
+ inputSchema
386
+ }, handler);
387
+ } else if (typeof mcpServer.tool === "function") {
388
+ const jsonSchema = {
389
+ type: tool.inputSchema.type,
390
+ properties: tool.inputSchema.properties || {},
391
+ required: tool.inputSchema.required || []
392
+ };
393
+ mcpServer.tool(tool.name, tool.description || "", jsonSchema, handler);
394
+ } else {
395
+ throw new Error("MCP server does not have a compatible tool registration method. Expected registerTool() or tool() method.");
396
+ }
397
+ }
398
+ }
399
+ __name(registerToolsWithMCP, "registerToolsWithMCP");
400
+
401
+ exports.MCPConnector = MCPConnector;
402
+ exports.MCPHttpConnector = MCPHttpConnector;
403
+ exports.convertMCPInputSchema = convertMCPInputSchema;
404
+ exports.convertMCPToolToFunction = convertMCPToolToFunction;
405
+ exports.registerATPTools = registerATPTools;
406
+ exports.registerToolsWithMCP = registerToolsWithMCP;
407
+ //# sourceMappingURL=index.cjs.map
408
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schema-utils.ts","../src/mcp-connector.ts","../src/http-connector.ts","../src/atp-to-mcp.ts"],"names":["convertMCPInputSchema","inputSchema","schema","type","properties","result","required","length","description","knownFields","Set","key","value","Object","entries","has","undefined","convertMCPToolToFunction","tool","handler","name","MCPConnector","clients","Map","currentClient","currentServerName","fetchAllTools","client","allTools","cursor","toolsResult","listTools","tools","push","nextCursor","connectToStdioServer","config","transport","StdioClientTransport","command","args","env","Client","version","capabilities","connect","set","functions","map","input","callTool","arguments","content","connectToSSEServer","SSEClientTransport","URL","serverUrl","requestInit","headers","connectToMCPServer","connectToMultipleServers","configs","Promise","all","disconnectAll","disconnectPromises","Array","from","values","close","error","clear","getClient","get","Error","listPrompts","promptsResult","prompts","MCPHttpConnector","baseUrl","constructor","replace","makeRequest","method","params","body","jsonrpc","id","Date","now","response","fetch","JSON","stringify","ok","status","statusText","data","json","message","getPrompt","messages","msg","role","text","firstBlock","parse","block","disconnect","registerATPTools","mcpServer","getATPTools","registerToolsWithMCP","func","resultText","errorMessage","String","isError","registerTool","zodSchema","shape","jsonSchema"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { CustomFunctionDef } from '@mondaydotcomorg/atp-protocol';\n\nexport interface MCPToolSchema {\n\ttype?: string;\n\tproperties?: Record<string, unknown>;\n\trequired?: string[];\n\tdescription?: string;\n\t[key: string]: unknown;\n}\n\nexport interface MCPToolDefinition {\n\tname: string;\n\tdescription?: string;\n\tinputSchema?: MCPToolSchema;\n}\n\nexport function convertMCPInputSchema(inputSchema: unknown): {\n\ttype: string;\n\tproperties?: Record<string, unknown>;\n\trequired?: string[];\n\t[key: string]: unknown;\n} {\n\tconst schema = inputSchema as MCPToolSchema | undefined;\n\n\tif (!schema) {\n\t\treturn { type: 'object', properties: {} };\n\t}\n\n\tconst result: Record<string, unknown> = {};\n\tresult.type = schema.type || 'object';\n\n\tif (result.type === 'object') {\n\t\tresult.properties = schema.properties || {};\n\t} else if (schema.properties) {\n\t\tresult.properties = schema.properties;\n\t}\n\n\tif (schema.required && schema.required.length > 0) {\n\t\tresult.required = schema.required;\n\t}\n\n\tif (schema.description) {\n\t\tresult.description = schema.description;\n\t}\n\n\tconst knownFields = new Set(['type', 'properties', 'required', 'description']);\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (!knownFields.has(key) && value !== undefined) {\n\t\t\tresult[key] = value;\n\t\t}\n\t}\n\n\treturn result as {\n\t\ttype: string;\n\t\tproperties?: Record<string, unknown>;\n\t\trequired?: string[];\n\t\t[key: string]: unknown;\n\t};\n}\n\nexport function convertMCPToolToFunction(\n\ttool: MCPToolDefinition,\n\thandler: (input: unknown) => Promise<unknown>\n): CustomFunctionDef {\n\treturn {\n\t\tname: tool.name,\n\t\tdescription: tool.description || `MCP tool: ${tool.name}`,\n\t\tinputSchema: convertMCPInputSchema(tool.inputSchema),\n\t\thandler,\n\t};\n}\n","import { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';\nimport type { APIGroupConfig, CustomFunctionDef } from '@mondaydotcomorg/atp-protocol';\nimport { convertMCPInputSchema } from './schema-utils.js';\nimport type { MCPStdioServerConfig, MCPSSEServerConfig, MCPServerConfig } from './types.js';\n\ninterface MCPServerConfigLegacy {\n\tname: string;\n\tcommand: string;\n\targs: string[];\n\tenv?: Record<string, string>;\n}\n\n/**\n * MCPConnector connects to MCP servers and converts their tools to Agent Tool Protocol format.\n */\nexport class MCPConnector {\n\tprivate clients: Map<string, Client> = new Map();\n\tprivate currentClient: Client | null = null;\n\tprivate currentServerName: string | null = null;\n\n\t/**\n\t * Fetches all tools from an MCP server, handling pagination if present.\n\t */\n\tprivate async fetchAllTools(client: Client): Promise<Array<{ name: string; description?: string; inputSchema: unknown }>> {\n\t\tconst allTools: Array<{ name: string; description?: string; inputSchema: unknown }> = [];\n\t\tlet cursor: string | undefined;\n\n\t\tdo {\n\t\t\tconst toolsResult = await client.listTools(cursor ? { cursor } : undefined);\n\t\t\tconst tools = toolsResult.tools || [];\n\t\t\tallTools.push(...tools);\n\t\t\tcursor = toolsResult.nextCursor;\n\t\t} while (cursor);\n\n\t\treturn allTools;\n\t}\n\n\t/**\n\t * Connects to an MCP server using stdio transport.\n\t * @param config - MCP stdio server configuration\n\t * @returns APIGroupConfig with converted tools\n\t */\n\tasync connectToStdioServer(config: MCPStdioServerConfig): Promise<APIGroupConfig> {\n\t\tconst transport = new StdioClientTransport({\n\t\t\tcommand: config.command,\n\t\t\targs: config.args,\n\t\t\tenv: config.env,\n\t\t});\n\n\t\tconst client = new Client(\n\t\t\t{ name: 'agent-tool-protocol-connector', version: '1.0.0' },\n\t\t\t{ capabilities: {} }\n\t\t);\n\n\t\tawait client.connect(transport);\n\t\tthis.clients.set(config.name, client);\n\t\tthis.currentClient = client;\n\t\tthis.currentServerName = config.name;\n\n\t\tconst tools = await this.fetchAllTools(client);\n\n\t\tconst functions: CustomFunctionDef[] = tools.map((tool) => {\n\t\t\tconst inputSchema = convertMCPInputSchema(tool.inputSchema);\n\n\t\t\treturn {\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description || `MCP tool: ${tool.name}`,\n\t\t\t\tinputSchema,\n\t\t\t\thandler: async (input: unknown) => {\n\t\t\t\t\tconst result = await client.callTool({\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\targuments: input as Record<string, unknown>,\n\t\t\t\t\t});\n\t\t\t\t\treturn result.content;\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\treturn {\n\t\t\tname: config.name,\n\t\t\ttype: 'mcp',\n\t\t\tfunctions,\n\t\t};\n\t}\n\n\t/**\n\t * Connects to an MCP server using SSE transport.\n\t * @param config - MCP SSE server configuration\n\t * @returns APIGroupConfig with converted tools\n\t */\n\tasync connectToSSEServer(config: MCPSSEServerConfig): Promise<APIGroupConfig> {\n\t\tconst transport = new SSEClientTransport(new URL(config.serverUrl), {\n\t\t\trequestInit: { headers: config.headers || {} },\n\t\t});\n\n\t\tconst client = new Client(\n\t\t\t{ name: 'agent-tool-protocol-connector', version: '1.0.0' },\n\t\t\t{ capabilities: {} }\n\t\t);\n\n\t\tawait client.connect(transport);\n\t\tthis.clients.set(config.name, client);\n\t\tthis.currentClient = client;\n\t\tthis.currentServerName = config.name;\n\n\t\tconst tools = await this.fetchAllTools(client);\n\n\t\tconst functions: CustomFunctionDef[] = tools.map((tool) => {\n\t\t\tconst inputSchema = convertMCPInputSchema(tool.inputSchema);\n\n\t\t\treturn {\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description || `MCP tool: ${tool.name}`,\n\t\t\t\tinputSchema,\n\t\t\t\thandler: async (input: unknown) => {\n\t\t\t\t\tconst result = await client.callTool({\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\targuments: input as Record<string, unknown>,\n\t\t\t\t\t});\n\t\t\t\t\treturn result.content;\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\treturn {\n\t\t\tname: config.name,\n\t\t\ttype: 'mcp',\n\t\t\tfunctions,\n\t\t};\n\t}\n\n\t/**\n\t * Connects to an MCP server and retrieves its tools.\n\t * @param config - MCP server configuration (supports both stdio and SSE)\n\t * @returns APIGroupConfig with converted tools\n\t */\n\tasync connectToMCPServer(config: MCPServerConfig | MCPServerConfigLegacy): Promise<APIGroupConfig> {\n\t\tif ('transport' in config) {\n\t\t\tif (config.transport === 'sse') {\n\t\t\t\treturn this.connectToSSEServer(config);\n\t\t\t}\n\t\t\treturn this.connectToStdioServer(config);\n\t\t}\n\n\t\t// Legacy support: treat as stdio config\n\t\treturn this.connectToStdioServer({\n\t\t\tname: config.name,\n\t\t\ttransport: 'stdio',\n\t\t\tcommand: config.command,\n\t\t\targs: config.args,\n\t\t\tenv: config.env,\n\t\t});\n\t}\n\n\t/**\n\t * Connects to multiple MCP servers.\n\t * @param configs - Array of MCP server configurations\n\t * @returns Array of APIGroupConfig objects\n\t */\n\tasync connectToMultipleServers(configs: MCPServerConfig[]): Promise<APIGroupConfig[]> {\n\t\treturn Promise.all(configs.map((config) => this.connectToMCPServer(config)));\n\t}\n\n\t/**\n\t * Disconnects from all MCP servers.\n\t */\n\tasync disconnectAll(): Promise<void> {\n\t\tconst disconnectPromises = Array.from(this.clients.values()).map(async (client) => {\n\t\t\ttry {\n\t\t\t\tawait client.close();\n\t\t\t} catch (error) {}\n\t\t});\n\t\tawait Promise.all(disconnectPromises);\n\t\tthis.clients.clear();\n\t}\n\n\t/**\n\t * Gets a connected MCP client by name.\n\t * @param name - Server name\n\t * @returns MCP Client or undefined\n\t */\n\tgetClient(name: string): Client | undefined {\n\t\treturn this.clients.get(name);\n\t}\n\n\t/**\n\t * Lists all tools from the currently connected MCP server.\n\t * @returns Array of tools\n\t */\n\tasync listTools(): Promise<unknown[]> {\n\t\tif (!this.currentClient) {\n\t\t\tthrow new Error('Not connected to any MCP server');\n\t\t}\n\t\tconst toolsResult = await this.currentClient.listTools();\n\t\treturn toolsResult.tools || [];\n\t}\n\n\t/**\n\t * Lists all prompts from the currently connected MCP server.\n\t * @returns Array of prompts\n\t */\n\tasync listPrompts(): Promise<unknown[]> {\n\t\tif (!this.currentClient) {\n\t\t\tthrow new Error('Not connected to any MCP server');\n\t\t}\n\t\ttry {\n\t\t\tconst promptsResult = await this.currentClient.listPrompts();\n\t\t\treturn promptsResult.prompts || [];\n\t\t} catch (error) {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t/**\n\t * Calls a tool on the currently connected MCP server.\n\t * @param name - Tool name\n\t * @param input - Tool input parameters\n\t * @returns Tool execution result\n\t */\n\tasync callTool(name: string, input: Record<string, unknown>): Promise<unknown> {\n\t\tif (!this.currentClient) {\n\t\t\tthrow new Error('Not connected to any MCP server');\n\t\t}\n\t\tconst result = await this.currentClient.callTool({\n\t\t\tname,\n\t\t\targuments: input,\n\t\t});\n\t\treturn result.content;\n\t}\n}\n","import type { MCPTool, MCPPrompt } from './types.js';\n\ninterface JsonRpcResponse {\n\tjsonrpc: string;\n\tid: number;\n\tresult?: unknown;\n\terror?: {\n\t\tcode?: number;\n\t\tmessage?: string;\n\t\tdata?: unknown;\n\t};\n}\n\nexport class MCPHttpConnector {\n\tprivate baseUrl: string;\n\tprivate headers: Record<string, string>;\n\n\tconstructor(baseUrl: string, headers: Record<string, string> = {}) {\n\t\tthis.baseUrl = baseUrl.replace(/\\/$/, '');\n\t\tthis.headers = {\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...headers,\n\t\t};\n\t}\n\n\tprivate async makeRequest(method: string, params?: unknown): Promise<unknown> {\n\t\tconst body: {\n\t\t\tjsonrpc: string;\n\t\t\tid: number;\n\t\t\tmethod: string;\n\t\t\tparams?: unknown;\n\t\t} = {\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: Date.now(),\n\t\t\tmethod,\n\t\t};\n\n\t\tif (params) {\n\t\t\tbody.params = params;\n\t\t}\n\n\t\tconst response = await fetch(this.baseUrl, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: this.headers,\n\t\t\tbody: JSON.stringify(body),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP ${response.status}: ${response.statusText}`);\n\t\t}\n\n\t\tconst data = (await response.json()) as JsonRpcResponse;\n\n\t\tif (data.error) {\n\t\t\tthrow new Error(`MCP Error: ${data.error.message || JSON.stringify(data.error)}`);\n\t\t}\n\n\t\treturn data.result;\n\t}\n\n\tasync listTools(): Promise<MCPTool[]> {\n\t\tconst result = (await this.makeRequest('tools/list')) as { tools: MCPTool[] };\n\t\treturn result.tools || [];\n\t}\n\n\tasync listPrompts(): Promise<MCPPrompt[]> {\n\t\ttry {\n\t\t\tconst result = (await this.makeRequest('prompts/list')) as { prompts: MCPPrompt[] };\n\t\t\treturn result.prompts || [];\n\t\t} catch (error) {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tasync getPrompt(\n\t\tname: string,\n\t\targs?: Record<string, string>\n\t): Promise<{ messages: Array<{ role: string; content: string }> }> {\n\t\tconst result = (await this.makeRequest('prompts/get', {\n\t\t\tname,\n\t\t\targuments: args,\n\t\t})) as { messages: Array<{ role: string; content: { type: string; text: string } | string }> };\n\n\t\treturn {\n\t\t\tmessages: result.messages.map((msg) => ({\n\t\t\t\trole: msg.role,\n\t\t\t\tcontent: typeof msg.content === 'string' ? msg.content : msg.content.text,\n\t\t\t})),\n\t\t};\n\t}\n\n\tasync callTool(name: string, input: Record<string, unknown>): Promise<unknown> {\n\t\tconst result = (await this.makeRequest('tools/call', {\n\t\t\tname,\n\t\t\targuments: input,\n\t\t})) as { content: Array<{ type: string; text?: string; data?: string; mimeType?: string }> };\n\n\t\tif (!result.content || result.content.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst firstBlock = result.content[0];\n\t\tif (result.content.length === 1 && firstBlock && firstBlock.type === 'text') {\n\t\t\tconst text = firstBlock.text || '';\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(text);\n\t\t\t} catch {\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\n\t\treturn result.content.map((block) => {\n\t\t\tif (block.type === 'text') {\n\t\t\t\treturn block.text;\n\t\t\t}\n\t\t\treturn block;\n\t\t});\n\t}\n\n\tasync disconnect(): Promise<void> {}\n}\n","import type { AgentToolProtocolClient, Tool } from '@mondaydotcomorg/atp-client';\n\n/**\n * MCP tool handler result\n */\nexport interface MCPToolResult {\n\tcontent: Array<{ type: 'text'; text: string }>;\n\tisError?: boolean;\n}\n\n/**\n * MCP Server interface - supports both legacy (v0.x) and modern (v1.x) SDK.\n *\n * Uses minimal duck-typing to avoid TypeScript variance issues with the\n * MCP SDK's complex generic callback signatures.\n */\nexport interface MCPServerLike {\n\tregisterTool?: Function;\n\ttool?: Function;\n}\n\n/**\n * Registers ATP tools with an MCP server.\n *\n * @example\n * ```typescript\n * import { Server } from '@modelcontextprotocol/sdk/server/index.js';\n * import { AgentToolProtocolClient } from '@mondaydotcomorg/atp-client';\n * import { registerATPTools } from '@mondaydotcomorg/atp-mcp-adapter';\n *\n * const client = new AgentToolProtocolClient({ baseUrl: 'http://localhost:3000' });\n * await client.init();\n * await client.connect();\n *\n * const mcpServer = new Server({ name: 'my-server', version: '1.0.0' }, { capabilities: { tools: {} } });\n * registerATPTools(client, mcpServer);\n * ```\n */\nexport function registerATPTools(client: AgentToolProtocolClient, mcpServer: MCPServerLike): void {\n\tconst tools = client.getATPTools();\n\tregisterToolsWithMCP(tools, mcpServer);\n}\n\n/**\n * Registers an array of ATP tools with an MCP server.\n * Use this if you want more control over which tools to register.\n * Supports both MCP SDK v0.x and v1.x APIs.\n *\n * @example\n * ```typescript\n * const tools = client.getATPTools().filter(t => t.name !== 'search_api');\n * registerToolsWithMCP(tools, mcpServer);\n * ```\n */\nexport function registerToolsWithMCP(tools: Tool[], mcpServer: MCPServerLike): void {\n\tfor (const tool of tools) {\n\t\tconst handler = async (args: Record<string, unknown>): Promise<MCPToolResult> => {\n\t\t\ttry {\n\t\t\t\tconst result = await tool.func(args);\n\t\t\t\tconst resultText = typeof result === 'string' ? result : JSON.stringify(result, null, 2);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: 'text' as const, text: resultText }],\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: 'text' as const, text: `Error: ${errorMessage}` }],\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tif (typeof mcpServer.registerTool === 'function') {\n\t\t\tconst inputSchema = tool.zodSchema?.shape ?? {};\n\t\t\tmcpServer.registerTool(\n\t\t\t\ttool.name,\n\t\t\t\t{\n\t\t\t\t\tdescription: tool.description || '',\n\t\t\t\t\tinputSchema,\n\t\t\t\t},\n\t\t\t\thandler\n\t\t\t);\n\t\t} else if (typeof mcpServer.tool === 'function') {\n\t\t\tconst jsonSchema = {\n\t\t\t\ttype: tool.inputSchema.type,\n\t\t\t\tproperties: tool.inputSchema.properties || {},\n\t\t\t\trequired: tool.inputSchema.required || [],\n\t\t\t};\n\t\t\tmcpServer.tool(tool.name, tool.description || '', jsonSchema, handler);\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t'MCP server does not have a compatible tool registration method. Expected registerTool() or tool() method.'\n\t\t\t);\n\t\t}\n\t}\n}\n"]}
package/dist/index.js CHANGED
@@ -1,5 +1,401 @@
1
- export { MCPConnector } from './mcp-connector.js';
2
- export { MCPHttpConnector } from './http-connector.js';
3
- export { registerATPTools, registerToolsWithMCP } from './atp-to-mcp.js';
4
- export { convertMCPInputSchema, convertMCPToolToFunction } from './schema-utils.js';
1
+ import { Client } from '@modelcontextprotocol/sdk/client/index.js';
2
+ import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
3
+ import { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';
4
+
5
+ var __defProp = Object.defineProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+
8
+ // src/schema-utils.ts
9
+ function convertMCPInputSchema(inputSchema) {
10
+ const schema = inputSchema;
11
+ if (!schema) {
12
+ return {
13
+ type: "object",
14
+ properties: {}
15
+ };
16
+ }
17
+ const result = {};
18
+ result.type = schema.type || "object";
19
+ if (result.type === "object") {
20
+ result.properties = schema.properties || {};
21
+ } else if (schema.properties) {
22
+ result.properties = schema.properties;
23
+ }
24
+ if (schema.required && schema.required.length > 0) {
25
+ result.required = schema.required;
26
+ }
27
+ if (schema.description) {
28
+ result.description = schema.description;
29
+ }
30
+ const knownFields = /* @__PURE__ */ new Set([
31
+ "type",
32
+ "properties",
33
+ "required",
34
+ "description"
35
+ ]);
36
+ for (const [key, value] of Object.entries(schema)) {
37
+ if (!knownFields.has(key) && value !== void 0) {
38
+ result[key] = value;
39
+ }
40
+ }
41
+ return result;
42
+ }
43
+ __name(convertMCPInputSchema, "convertMCPInputSchema");
44
+ function convertMCPToolToFunction(tool, handler) {
45
+ return {
46
+ name: tool.name,
47
+ description: tool.description || `MCP tool: ${tool.name}`,
48
+ inputSchema: convertMCPInputSchema(tool.inputSchema),
49
+ handler
50
+ };
51
+ }
52
+ __name(convertMCPToolToFunction, "convertMCPToolToFunction");
53
+
54
+ // src/mcp-connector.ts
55
+ var MCPConnector = class {
56
+ static {
57
+ __name(this, "MCPConnector");
58
+ }
59
+ clients = /* @__PURE__ */ new Map();
60
+ currentClient = null;
61
+ currentServerName = null;
62
+ /**
63
+ * Fetches all tools from an MCP server, handling pagination if present.
64
+ */
65
+ async fetchAllTools(client) {
66
+ const allTools = [];
67
+ let cursor;
68
+ do {
69
+ const toolsResult = await client.listTools(cursor ? {
70
+ cursor
71
+ } : void 0);
72
+ const tools = toolsResult.tools || [];
73
+ allTools.push(...tools);
74
+ cursor = toolsResult.nextCursor;
75
+ } while (cursor);
76
+ return allTools;
77
+ }
78
+ /**
79
+ * Connects to an MCP server using stdio transport.
80
+ * @param config - MCP stdio server configuration
81
+ * @returns APIGroupConfig with converted tools
82
+ */
83
+ async connectToStdioServer(config) {
84
+ const transport = new StdioClientTransport({
85
+ command: config.command,
86
+ args: config.args,
87
+ env: config.env
88
+ });
89
+ const client = new Client({
90
+ name: "agent-tool-protocol-connector",
91
+ version: "1.0.0"
92
+ }, {
93
+ capabilities: {}
94
+ });
95
+ await client.connect(transport);
96
+ this.clients.set(config.name, client);
97
+ this.currentClient = client;
98
+ this.currentServerName = config.name;
99
+ const tools = await this.fetchAllTools(client);
100
+ const functions = tools.map((tool) => {
101
+ const inputSchema = convertMCPInputSchema(tool.inputSchema);
102
+ return {
103
+ name: tool.name,
104
+ description: tool.description || `MCP tool: ${tool.name}`,
105
+ inputSchema,
106
+ handler: /* @__PURE__ */ __name(async (input) => {
107
+ const result = await client.callTool({
108
+ name: tool.name,
109
+ arguments: input
110
+ });
111
+ return result.content;
112
+ }, "handler")
113
+ };
114
+ });
115
+ return {
116
+ name: config.name,
117
+ type: "mcp",
118
+ functions
119
+ };
120
+ }
121
+ /**
122
+ * Connects to an MCP server using SSE transport.
123
+ * @param config - MCP SSE server configuration
124
+ * @returns APIGroupConfig with converted tools
125
+ */
126
+ async connectToSSEServer(config) {
127
+ const transport = new SSEClientTransport(new URL(config.serverUrl), {
128
+ requestInit: {
129
+ headers: config.headers || {}
130
+ }
131
+ });
132
+ const client = new Client({
133
+ name: "agent-tool-protocol-connector",
134
+ version: "1.0.0"
135
+ }, {
136
+ capabilities: {}
137
+ });
138
+ await client.connect(transport);
139
+ this.clients.set(config.name, client);
140
+ this.currentClient = client;
141
+ this.currentServerName = config.name;
142
+ const tools = await this.fetchAllTools(client);
143
+ const functions = tools.map((tool) => {
144
+ const inputSchema = convertMCPInputSchema(tool.inputSchema);
145
+ return {
146
+ name: tool.name,
147
+ description: tool.description || `MCP tool: ${tool.name}`,
148
+ inputSchema,
149
+ handler: /* @__PURE__ */ __name(async (input) => {
150
+ const result = await client.callTool({
151
+ name: tool.name,
152
+ arguments: input
153
+ });
154
+ return result.content;
155
+ }, "handler")
156
+ };
157
+ });
158
+ return {
159
+ name: config.name,
160
+ type: "mcp",
161
+ functions
162
+ };
163
+ }
164
+ /**
165
+ * Connects to an MCP server and retrieves its tools.
166
+ * @param config - MCP server configuration (supports both stdio and SSE)
167
+ * @returns APIGroupConfig with converted tools
168
+ */
169
+ async connectToMCPServer(config) {
170
+ if ("transport" in config) {
171
+ if (config.transport === "sse") {
172
+ return this.connectToSSEServer(config);
173
+ }
174
+ return this.connectToStdioServer(config);
175
+ }
176
+ return this.connectToStdioServer({
177
+ name: config.name,
178
+ transport: "stdio",
179
+ command: config.command,
180
+ args: config.args,
181
+ env: config.env
182
+ });
183
+ }
184
+ /**
185
+ * Connects to multiple MCP servers.
186
+ * @param configs - Array of MCP server configurations
187
+ * @returns Array of APIGroupConfig objects
188
+ */
189
+ async connectToMultipleServers(configs) {
190
+ return Promise.all(configs.map((config) => this.connectToMCPServer(config)));
191
+ }
192
+ /**
193
+ * Disconnects from all MCP servers.
194
+ */
195
+ async disconnectAll() {
196
+ const disconnectPromises = Array.from(this.clients.values()).map(async (client) => {
197
+ try {
198
+ await client.close();
199
+ } catch (error) {
200
+ }
201
+ });
202
+ await Promise.all(disconnectPromises);
203
+ this.clients.clear();
204
+ }
205
+ /**
206
+ * Gets a connected MCP client by name.
207
+ * @param name - Server name
208
+ * @returns MCP Client or undefined
209
+ */
210
+ getClient(name) {
211
+ return this.clients.get(name);
212
+ }
213
+ /**
214
+ * Lists all tools from the currently connected MCP server.
215
+ * @returns Array of tools
216
+ */
217
+ async listTools() {
218
+ if (!this.currentClient) {
219
+ throw new Error("Not connected to any MCP server");
220
+ }
221
+ const toolsResult = await this.currentClient.listTools();
222
+ return toolsResult.tools || [];
223
+ }
224
+ /**
225
+ * Lists all prompts from the currently connected MCP server.
226
+ * @returns Array of prompts
227
+ */
228
+ async listPrompts() {
229
+ if (!this.currentClient) {
230
+ throw new Error("Not connected to any MCP server");
231
+ }
232
+ try {
233
+ const promptsResult = await this.currentClient.listPrompts();
234
+ return promptsResult.prompts || [];
235
+ } catch (error) {
236
+ return [];
237
+ }
238
+ }
239
+ /**
240
+ * Calls a tool on the currently connected MCP server.
241
+ * @param name - Tool name
242
+ * @param input - Tool input parameters
243
+ * @returns Tool execution result
244
+ */
245
+ async callTool(name, input) {
246
+ if (!this.currentClient) {
247
+ throw new Error("Not connected to any MCP server");
248
+ }
249
+ const result = await this.currentClient.callTool({
250
+ name,
251
+ arguments: input
252
+ });
253
+ return result.content;
254
+ }
255
+ };
256
+
257
+ // src/http-connector.ts
258
+ var MCPHttpConnector = class {
259
+ static {
260
+ __name(this, "MCPHttpConnector");
261
+ }
262
+ baseUrl;
263
+ headers;
264
+ constructor(baseUrl, headers = {}) {
265
+ this.baseUrl = baseUrl.replace(/\/$/, "");
266
+ this.headers = {
267
+ "Content-Type": "application/json",
268
+ ...headers
269
+ };
270
+ }
271
+ async makeRequest(method, params) {
272
+ const body = {
273
+ jsonrpc: "2.0",
274
+ id: Date.now(),
275
+ method
276
+ };
277
+ if (params) {
278
+ body.params = params;
279
+ }
280
+ const response = await fetch(this.baseUrl, {
281
+ method: "POST",
282
+ headers: this.headers,
283
+ body: JSON.stringify(body)
284
+ });
285
+ if (!response.ok) {
286
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
287
+ }
288
+ const data = await response.json();
289
+ if (data.error) {
290
+ throw new Error(`MCP Error: ${data.error.message || JSON.stringify(data.error)}`);
291
+ }
292
+ return data.result;
293
+ }
294
+ async listTools() {
295
+ const result = await this.makeRequest("tools/list");
296
+ return result.tools || [];
297
+ }
298
+ async listPrompts() {
299
+ try {
300
+ const result = await this.makeRequest("prompts/list");
301
+ return result.prompts || [];
302
+ } catch (error) {
303
+ return [];
304
+ }
305
+ }
306
+ async getPrompt(name, args) {
307
+ const result = await this.makeRequest("prompts/get", {
308
+ name,
309
+ arguments: args
310
+ });
311
+ return {
312
+ messages: result.messages.map((msg) => ({
313
+ role: msg.role,
314
+ content: typeof msg.content === "string" ? msg.content : msg.content.text
315
+ }))
316
+ };
317
+ }
318
+ async callTool(name, input) {
319
+ const result = await this.makeRequest("tools/call", {
320
+ name,
321
+ arguments: input
322
+ });
323
+ if (!result.content || result.content.length === 0) {
324
+ return null;
325
+ }
326
+ const firstBlock = result.content[0];
327
+ if (result.content.length === 1 && firstBlock && firstBlock.type === "text") {
328
+ const text = firstBlock.text || "";
329
+ try {
330
+ return JSON.parse(text);
331
+ } catch {
332
+ return text;
333
+ }
334
+ }
335
+ return result.content.map((block) => {
336
+ if (block.type === "text") {
337
+ return block.text;
338
+ }
339
+ return block;
340
+ });
341
+ }
342
+ async disconnect() {
343
+ }
344
+ };
345
+
346
+ // src/atp-to-mcp.ts
347
+ function registerATPTools(client, mcpServer) {
348
+ const tools = client.getATPTools();
349
+ registerToolsWithMCP(tools, mcpServer);
350
+ }
351
+ __name(registerATPTools, "registerATPTools");
352
+ function registerToolsWithMCP(tools, mcpServer) {
353
+ for (const tool of tools) {
354
+ const handler = /* @__PURE__ */ __name(async (args) => {
355
+ try {
356
+ const result = await tool.func(args);
357
+ const resultText = typeof result === "string" ? result : JSON.stringify(result, null, 2);
358
+ return {
359
+ content: [
360
+ {
361
+ type: "text",
362
+ text: resultText
363
+ }
364
+ ]
365
+ };
366
+ } catch (error) {
367
+ const errorMessage = error instanceof Error ? error.message : String(error);
368
+ return {
369
+ content: [
370
+ {
371
+ type: "text",
372
+ text: `Error: ${errorMessage}`
373
+ }
374
+ ],
375
+ isError: true
376
+ };
377
+ }
378
+ }, "handler");
379
+ if (typeof mcpServer.registerTool === "function") {
380
+ const inputSchema = tool.zodSchema?.shape ?? {};
381
+ mcpServer.registerTool(tool.name, {
382
+ description: tool.description || "",
383
+ inputSchema
384
+ }, handler);
385
+ } else if (typeof mcpServer.tool === "function") {
386
+ const jsonSchema = {
387
+ type: tool.inputSchema.type,
388
+ properties: tool.inputSchema.properties || {},
389
+ required: tool.inputSchema.required || []
390
+ };
391
+ mcpServer.tool(tool.name, tool.description || "", jsonSchema, handler);
392
+ } else {
393
+ throw new Error("MCP server does not have a compatible tool registration method. Expected registerTool() or tool() method.");
394
+ }
395
+ }
396
+ }
397
+ __name(registerToolsWithMCP, "registerToolsWithMCP");
398
+
399
+ export { MCPConnector, MCPHttpConnector, convertMCPInputSchema, convertMCPToolToFunction, registerATPTools, registerToolsWithMCP };
400
+ //# sourceMappingURL=index.js.map
5
401
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"sources":["../src/schema-utils.ts","../src/mcp-connector.ts","../src/http-connector.ts","../src/atp-to-mcp.ts"],"names":["convertMCPInputSchema","inputSchema","schema","type","properties","result","required","length","description","knownFields","Set","key","value","Object","entries","has","undefined","convertMCPToolToFunction","tool","handler","name","MCPConnector","clients","Map","currentClient","currentServerName","fetchAllTools","client","allTools","cursor","toolsResult","listTools","tools","push","nextCursor","connectToStdioServer","config","transport","StdioClientTransport","command","args","env","Client","version","capabilities","connect","set","functions","map","input","callTool","arguments","content","connectToSSEServer","SSEClientTransport","URL","serverUrl","requestInit","headers","connectToMCPServer","connectToMultipleServers","configs","Promise","all","disconnectAll","disconnectPromises","Array","from","values","close","error","clear","getClient","get","Error","listPrompts","promptsResult","prompts","MCPHttpConnector","baseUrl","constructor","replace","makeRequest","method","params","body","jsonrpc","id","Date","now","response","fetch","JSON","stringify","ok","status","statusText","data","json","message","getPrompt","messages","msg","role","text","firstBlock","parse","block","disconnect","registerATPTools","mcpServer","getATPTools","registerToolsWithMCP","func","resultText","errorMessage","String","isError","registerTool","zodSchema","shape","jsonSchema"],"mappings":"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","file":"index.js","sourcesContent":["import type { CustomFunctionDef } from '@mondaydotcomorg/atp-protocol';\n\nexport interface MCPToolSchema {\n\ttype?: string;\n\tproperties?: Record<string, unknown>;\n\trequired?: string[];\n\tdescription?: string;\n\t[key: string]: unknown;\n}\n\nexport interface MCPToolDefinition {\n\tname: string;\n\tdescription?: string;\n\tinputSchema?: MCPToolSchema;\n}\n\nexport function convertMCPInputSchema(inputSchema: unknown): {\n\ttype: string;\n\tproperties?: Record<string, unknown>;\n\trequired?: string[];\n\t[key: string]: unknown;\n} {\n\tconst schema = inputSchema as MCPToolSchema | undefined;\n\n\tif (!schema) {\n\t\treturn { type: 'object', properties: {} };\n\t}\n\n\tconst result: Record<string, unknown> = {};\n\tresult.type = schema.type || 'object';\n\n\tif (result.type === 'object') {\n\t\tresult.properties = schema.properties || {};\n\t} else if (schema.properties) {\n\t\tresult.properties = schema.properties;\n\t}\n\n\tif (schema.required && schema.required.length > 0) {\n\t\tresult.required = schema.required;\n\t}\n\n\tif (schema.description) {\n\t\tresult.description = schema.description;\n\t}\n\n\tconst knownFields = new Set(['type', 'properties', 'required', 'description']);\n\tfor (const [key, value] of Object.entries(schema)) {\n\t\tif (!knownFields.has(key) && value !== undefined) {\n\t\t\tresult[key] = value;\n\t\t}\n\t}\n\n\treturn result as {\n\t\ttype: string;\n\t\tproperties?: Record<string, unknown>;\n\t\trequired?: string[];\n\t\t[key: string]: unknown;\n\t};\n}\n\nexport function convertMCPToolToFunction(\n\ttool: MCPToolDefinition,\n\thandler: (input: unknown) => Promise<unknown>\n): CustomFunctionDef {\n\treturn {\n\t\tname: tool.name,\n\t\tdescription: tool.description || `MCP tool: ${tool.name}`,\n\t\tinputSchema: convertMCPInputSchema(tool.inputSchema),\n\t\thandler,\n\t};\n}\n","import { Client } from '@modelcontextprotocol/sdk/client/index.js';\nimport { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';\nimport { SSEClientTransport } from '@modelcontextprotocol/sdk/client/sse.js';\nimport type { APIGroupConfig, CustomFunctionDef } from '@mondaydotcomorg/atp-protocol';\nimport { convertMCPInputSchema } from './schema-utils.js';\nimport type { MCPStdioServerConfig, MCPSSEServerConfig, MCPServerConfig } from './types.js';\n\ninterface MCPServerConfigLegacy {\n\tname: string;\n\tcommand: string;\n\targs: string[];\n\tenv?: Record<string, string>;\n}\n\n/**\n * MCPConnector connects to MCP servers and converts their tools to Agent Tool Protocol format.\n */\nexport class MCPConnector {\n\tprivate clients: Map<string, Client> = new Map();\n\tprivate currentClient: Client | null = null;\n\tprivate currentServerName: string | null = null;\n\n\t/**\n\t * Fetches all tools from an MCP server, handling pagination if present.\n\t */\n\tprivate async fetchAllTools(client: Client): Promise<Array<{ name: string; description?: string; inputSchema: unknown }>> {\n\t\tconst allTools: Array<{ name: string; description?: string; inputSchema: unknown }> = [];\n\t\tlet cursor: string | undefined;\n\n\t\tdo {\n\t\t\tconst toolsResult = await client.listTools(cursor ? { cursor } : undefined);\n\t\t\tconst tools = toolsResult.tools || [];\n\t\t\tallTools.push(...tools);\n\t\t\tcursor = toolsResult.nextCursor;\n\t\t} while (cursor);\n\n\t\treturn allTools;\n\t}\n\n\t/**\n\t * Connects to an MCP server using stdio transport.\n\t * @param config - MCP stdio server configuration\n\t * @returns APIGroupConfig with converted tools\n\t */\n\tasync connectToStdioServer(config: MCPStdioServerConfig): Promise<APIGroupConfig> {\n\t\tconst transport = new StdioClientTransport({\n\t\t\tcommand: config.command,\n\t\t\targs: config.args,\n\t\t\tenv: config.env,\n\t\t});\n\n\t\tconst client = new Client(\n\t\t\t{ name: 'agent-tool-protocol-connector', version: '1.0.0' },\n\t\t\t{ capabilities: {} }\n\t\t);\n\n\t\tawait client.connect(transport);\n\t\tthis.clients.set(config.name, client);\n\t\tthis.currentClient = client;\n\t\tthis.currentServerName = config.name;\n\n\t\tconst tools = await this.fetchAllTools(client);\n\n\t\tconst functions: CustomFunctionDef[] = tools.map((tool) => {\n\t\t\tconst inputSchema = convertMCPInputSchema(tool.inputSchema);\n\n\t\t\treturn {\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description || `MCP tool: ${tool.name}`,\n\t\t\t\tinputSchema,\n\t\t\t\thandler: async (input: unknown) => {\n\t\t\t\t\tconst result = await client.callTool({\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\targuments: input as Record<string, unknown>,\n\t\t\t\t\t});\n\t\t\t\t\treturn result.content;\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\treturn {\n\t\t\tname: config.name,\n\t\t\ttype: 'mcp',\n\t\t\tfunctions,\n\t\t};\n\t}\n\n\t/**\n\t * Connects to an MCP server using SSE transport.\n\t * @param config - MCP SSE server configuration\n\t * @returns APIGroupConfig with converted tools\n\t */\n\tasync connectToSSEServer(config: MCPSSEServerConfig): Promise<APIGroupConfig> {\n\t\tconst transport = new SSEClientTransport(new URL(config.serverUrl), {\n\t\t\trequestInit: { headers: config.headers || {} },\n\t\t});\n\n\t\tconst client = new Client(\n\t\t\t{ name: 'agent-tool-protocol-connector', version: '1.0.0' },\n\t\t\t{ capabilities: {} }\n\t\t);\n\n\t\tawait client.connect(transport);\n\t\tthis.clients.set(config.name, client);\n\t\tthis.currentClient = client;\n\t\tthis.currentServerName = config.name;\n\n\t\tconst tools = await this.fetchAllTools(client);\n\n\t\tconst functions: CustomFunctionDef[] = tools.map((tool) => {\n\t\t\tconst inputSchema = convertMCPInputSchema(tool.inputSchema);\n\n\t\t\treturn {\n\t\t\t\tname: tool.name,\n\t\t\t\tdescription: tool.description || `MCP tool: ${tool.name}`,\n\t\t\t\tinputSchema,\n\t\t\t\thandler: async (input: unknown) => {\n\t\t\t\t\tconst result = await client.callTool({\n\t\t\t\t\t\tname: tool.name,\n\t\t\t\t\t\targuments: input as Record<string, unknown>,\n\t\t\t\t\t});\n\t\t\t\t\treturn result.content;\n\t\t\t\t},\n\t\t\t};\n\t\t});\n\n\t\treturn {\n\t\t\tname: config.name,\n\t\t\ttype: 'mcp',\n\t\t\tfunctions,\n\t\t};\n\t}\n\n\t/**\n\t * Connects to an MCP server and retrieves its tools.\n\t * @param config - MCP server configuration (supports both stdio and SSE)\n\t * @returns APIGroupConfig with converted tools\n\t */\n\tasync connectToMCPServer(config: MCPServerConfig | MCPServerConfigLegacy): Promise<APIGroupConfig> {\n\t\tif ('transport' in config) {\n\t\t\tif (config.transport === 'sse') {\n\t\t\t\treturn this.connectToSSEServer(config);\n\t\t\t}\n\t\t\treturn this.connectToStdioServer(config);\n\t\t}\n\n\t\t// Legacy support: treat as stdio config\n\t\treturn this.connectToStdioServer({\n\t\t\tname: config.name,\n\t\t\ttransport: 'stdio',\n\t\t\tcommand: config.command,\n\t\t\targs: config.args,\n\t\t\tenv: config.env,\n\t\t});\n\t}\n\n\t/**\n\t * Connects to multiple MCP servers.\n\t * @param configs - Array of MCP server configurations\n\t * @returns Array of APIGroupConfig objects\n\t */\n\tasync connectToMultipleServers(configs: MCPServerConfig[]): Promise<APIGroupConfig[]> {\n\t\treturn Promise.all(configs.map((config) => this.connectToMCPServer(config)));\n\t}\n\n\t/**\n\t * Disconnects from all MCP servers.\n\t */\n\tasync disconnectAll(): Promise<void> {\n\t\tconst disconnectPromises = Array.from(this.clients.values()).map(async (client) => {\n\t\t\ttry {\n\t\t\t\tawait client.close();\n\t\t\t} catch (error) {}\n\t\t});\n\t\tawait Promise.all(disconnectPromises);\n\t\tthis.clients.clear();\n\t}\n\n\t/**\n\t * Gets a connected MCP client by name.\n\t * @param name - Server name\n\t * @returns MCP Client or undefined\n\t */\n\tgetClient(name: string): Client | undefined {\n\t\treturn this.clients.get(name);\n\t}\n\n\t/**\n\t * Lists all tools from the currently connected MCP server.\n\t * @returns Array of tools\n\t */\n\tasync listTools(): Promise<unknown[]> {\n\t\tif (!this.currentClient) {\n\t\t\tthrow new Error('Not connected to any MCP server');\n\t\t}\n\t\tconst toolsResult = await this.currentClient.listTools();\n\t\treturn toolsResult.tools || [];\n\t}\n\n\t/**\n\t * Lists all prompts from the currently connected MCP server.\n\t * @returns Array of prompts\n\t */\n\tasync listPrompts(): Promise<unknown[]> {\n\t\tif (!this.currentClient) {\n\t\t\tthrow new Error('Not connected to any MCP server');\n\t\t}\n\t\ttry {\n\t\t\tconst promptsResult = await this.currentClient.listPrompts();\n\t\t\treturn promptsResult.prompts || [];\n\t\t} catch (error) {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\t/**\n\t * Calls a tool on the currently connected MCP server.\n\t * @param name - Tool name\n\t * @param input - Tool input parameters\n\t * @returns Tool execution result\n\t */\n\tasync callTool(name: string, input: Record<string, unknown>): Promise<unknown> {\n\t\tif (!this.currentClient) {\n\t\t\tthrow new Error('Not connected to any MCP server');\n\t\t}\n\t\tconst result = await this.currentClient.callTool({\n\t\t\tname,\n\t\t\targuments: input,\n\t\t});\n\t\treturn result.content;\n\t}\n}\n","import type { MCPTool, MCPPrompt } from './types.js';\n\ninterface JsonRpcResponse {\n\tjsonrpc: string;\n\tid: number;\n\tresult?: unknown;\n\terror?: {\n\t\tcode?: number;\n\t\tmessage?: string;\n\t\tdata?: unknown;\n\t};\n}\n\nexport class MCPHttpConnector {\n\tprivate baseUrl: string;\n\tprivate headers: Record<string, string>;\n\n\tconstructor(baseUrl: string, headers: Record<string, string> = {}) {\n\t\tthis.baseUrl = baseUrl.replace(/\\/$/, '');\n\t\tthis.headers = {\n\t\t\t'Content-Type': 'application/json',\n\t\t\t...headers,\n\t\t};\n\t}\n\n\tprivate async makeRequest(method: string, params?: unknown): Promise<unknown> {\n\t\tconst body: {\n\t\t\tjsonrpc: string;\n\t\t\tid: number;\n\t\t\tmethod: string;\n\t\t\tparams?: unknown;\n\t\t} = {\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: Date.now(),\n\t\t\tmethod,\n\t\t};\n\n\t\tif (params) {\n\t\t\tbody.params = params;\n\t\t}\n\n\t\tconst response = await fetch(this.baseUrl, {\n\t\t\tmethod: 'POST',\n\t\t\theaders: this.headers,\n\t\t\tbody: JSON.stringify(body),\n\t\t});\n\n\t\tif (!response.ok) {\n\t\t\tthrow new Error(`HTTP ${response.status}: ${response.statusText}`);\n\t\t}\n\n\t\tconst data = (await response.json()) as JsonRpcResponse;\n\n\t\tif (data.error) {\n\t\t\tthrow new Error(`MCP Error: ${data.error.message || JSON.stringify(data.error)}`);\n\t\t}\n\n\t\treturn data.result;\n\t}\n\n\tasync listTools(): Promise<MCPTool[]> {\n\t\tconst result = (await this.makeRequest('tools/list')) as { tools: MCPTool[] };\n\t\treturn result.tools || [];\n\t}\n\n\tasync listPrompts(): Promise<MCPPrompt[]> {\n\t\ttry {\n\t\t\tconst result = (await this.makeRequest('prompts/list')) as { prompts: MCPPrompt[] };\n\t\t\treturn result.prompts || [];\n\t\t} catch (error) {\n\t\t\treturn [];\n\t\t}\n\t}\n\n\tasync getPrompt(\n\t\tname: string,\n\t\targs?: Record<string, string>\n\t): Promise<{ messages: Array<{ role: string; content: string }> }> {\n\t\tconst result = (await this.makeRequest('prompts/get', {\n\t\t\tname,\n\t\t\targuments: args,\n\t\t})) as { messages: Array<{ role: string; content: { type: string; text: string } | string }> };\n\n\t\treturn {\n\t\t\tmessages: result.messages.map((msg) => ({\n\t\t\t\trole: msg.role,\n\t\t\t\tcontent: typeof msg.content === 'string' ? msg.content : msg.content.text,\n\t\t\t})),\n\t\t};\n\t}\n\n\tasync callTool(name: string, input: Record<string, unknown>): Promise<unknown> {\n\t\tconst result = (await this.makeRequest('tools/call', {\n\t\t\tname,\n\t\t\targuments: input,\n\t\t})) as { content: Array<{ type: string; text?: string; data?: string; mimeType?: string }> };\n\n\t\tif (!result.content || result.content.length === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst firstBlock = result.content[0];\n\t\tif (result.content.length === 1 && firstBlock && firstBlock.type === 'text') {\n\t\t\tconst text = firstBlock.text || '';\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(text);\n\t\t\t} catch {\n\t\t\t\treturn text;\n\t\t\t}\n\t\t}\n\n\t\treturn result.content.map((block) => {\n\t\t\tif (block.type === 'text') {\n\t\t\t\treturn block.text;\n\t\t\t}\n\t\t\treturn block;\n\t\t});\n\t}\n\n\tasync disconnect(): Promise<void> {}\n}\n","import type { AgentToolProtocolClient, Tool } from '@mondaydotcomorg/atp-client';\n\n/**\n * MCP tool handler result\n */\nexport interface MCPToolResult {\n\tcontent: Array<{ type: 'text'; text: string }>;\n\tisError?: boolean;\n}\n\n/**\n * MCP Server interface - supports both legacy (v0.x) and modern (v1.x) SDK.\n *\n * Uses minimal duck-typing to avoid TypeScript variance issues with the\n * MCP SDK's complex generic callback signatures.\n */\nexport interface MCPServerLike {\n\tregisterTool?: Function;\n\ttool?: Function;\n}\n\n/**\n * Registers ATP tools with an MCP server.\n *\n * @example\n * ```typescript\n * import { Server } from '@modelcontextprotocol/sdk/server/index.js';\n * import { AgentToolProtocolClient } from '@mondaydotcomorg/atp-client';\n * import { registerATPTools } from '@mondaydotcomorg/atp-mcp-adapter';\n *\n * const client = new AgentToolProtocolClient({ baseUrl: 'http://localhost:3000' });\n * await client.init();\n * await client.connect();\n *\n * const mcpServer = new Server({ name: 'my-server', version: '1.0.0' }, { capabilities: { tools: {} } });\n * registerATPTools(client, mcpServer);\n * ```\n */\nexport function registerATPTools(client: AgentToolProtocolClient, mcpServer: MCPServerLike): void {\n\tconst tools = client.getATPTools();\n\tregisterToolsWithMCP(tools, mcpServer);\n}\n\n/**\n * Registers an array of ATP tools with an MCP server.\n * Use this if you want more control over which tools to register.\n * Supports both MCP SDK v0.x and v1.x APIs.\n *\n * @example\n * ```typescript\n * const tools = client.getATPTools().filter(t => t.name !== 'search_api');\n * registerToolsWithMCP(tools, mcpServer);\n * ```\n */\nexport function registerToolsWithMCP(tools: Tool[], mcpServer: MCPServerLike): void {\n\tfor (const tool of tools) {\n\t\tconst handler = async (args: Record<string, unknown>): Promise<MCPToolResult> => {\n\t\t\ttry {\n\t\t\t\tconst result = await tool.func(args);\n\t\t\t\tconst resultText = typeof result === 'string' ? result : JSON.stringify(result, null, 2);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: 'text' as const, text: resultText }],\n\t\t\t\t};\n\t\t\t} catch (error) {\n\t\t\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\t\t\treturn {\n\t\t\t\t\tcontent: [{ type: 'text' as const, text: `Error: ${errorMessage}` }],\n\t\t\t\t\tisError: true,\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tif (typeof mcpServer.registerTool === 'function') {\n\t\t\tconst inputSchema = tool.zodSchema?.shape ?? {};\n\t\t\tmcpServer.registerTool(\n\t\t\t\ttool.name,\n\t\t\t\t{\n\t\t\t\t\tdescription: tool.description || '',\n\t\t\t\t\tinputSchema,\n\t\t\t\t},\n\t\t\t\thandler\n\t\t\t);\n\t\t} else if (typeof mcpServer.tool === 'function') {\n\t\t\tconst jsonSchema = {\n\t\t\t\ttype: tool.inputSchema.type,\n\t\t\t\tproperties: tool.inputSchema.properties || {},\n\t\t\t\trequired: tool.inputSchema.required || [],\n\t\t\t};\n\t\t\tmcpServer.tool(tool.name, tool.description || '', jsonSchema, handler);\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t'MCP server does not have a compatible tool registration method. Expected registerTool() or tool() method.'\n\t\t\t);\n\t\t}\n\t}\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mondaydotcomorg/atp-mcp-adapter",
3
- "version": "0.24.2",
3
+ "version": "0.24.4",
4
4
  "description": "MCP compatibility adapter for Agent Tool Protocol",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -44,8 +44,8 @@
44
44
  ],
45
45
  "license": "MIT",
46
46
  "dependencies": {
47
- "@mondaydotcomorg/atp-protocol": "0.22.1",
48
- "@mondaydotcomorg/atp-server": "0.24.2"
47
+ "@mondaydotcomorg/atp-protocol": "0.22.2",
48
+ "@mondaydotcomorg/atp-server": "0.24.3"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "@modelcontextprotocol/sdk": ">=0.5.0",