@zapier/zapier-sdk-mcp 0.3.39 → 0.4.0
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.mjs +127 -109
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
package/dist/index.mjs
CHANGED
|
@@ -12,190 +12,208 @@ import {
|
|
|
12
12
|
} from "@zapier/zapier-sdk";
|
|
13
13
|
|
|
14
14
|
// src/utils/schema-converter.ts
|
|
15
|
+
function getZodDef(schema) {
|
|
16
|
+
const schemaAny = schema;
|
|
17
|
+
return schemaAny._zod?.def;
|
|
18
|
+
}
|
|
19
|
+
function getDescription(schema) {
|
|
20
|
+
if (!schema) return void 0;
|
|
21
|
+
return schema.description;
|
|
22
|
+
}
|
|
15
23
|
function convertZodToMcpSchema(zodSchema) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
24
|
+
const def = getZodDef(zodSchema);
|
|
25
|
+
if (!def) {
|
|
26
|
+
return {
|
|
27
|
+
type: "string",
|
|
28
|
+
description: "Unsupported schema type"
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return convertZodType(def, zodSchema);
|
|
20
32
|
}
|
|
21
33
|
function convertZodType(def, schema) {
|
|
22
|
-
|
|
34
|
+
const description = getDescription(schema);
|
|
35
|
+
if (def.type === "object" && schema) {
|
|
23
36
|
const schemaWithShape = schema;
|
|
24
37
|
const properties = {};
|
|
25
38
|
const required = [];
|
|
26
39
|
if (schemaWithShape.shape) {
|
|
27
40
|
for (const [key, value] of Object.entries(schemaWithShape.shape)) {
|
|
28
|
-
const fieldDef = value
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
41
|
+
const fieldDef = getZodDef(value);
|
|
42
|
+
if (fieldDef) {
|
|
43
|
+
properties[key] = convertZodType(fieldDef, value);
|
|
44
|
+
if (fieldDef.type !== "optional" && fieldDef.type !== "nullable") {
|
|
45
|
+
required.push(key);
|
|
46
|
+
}
|
|
32
47
|
}
|
|
33
48
|
}
|
|
34
49
|
}
|
|
35
50
|
const result = {
|
|
36
51
|
type: "object",
|
|
37
|
-
properties
|
|
38
|
-
description: def.description
|
|
52
|
+
properties
|
|
39
53
|
};
|
|
40
|
-
if (
|
|
41
|
-
|
|
42
|
-
}
|
|
54
|
+
if (description) result.description = description;
|
|
55
|
+
if (required.length > 0) result.required = required;
|
|
43
56
|
return result;
|
|
44
57
|
}
|
|
45
|
-
if (def.
|
|
46
|
-
const
|
|
47
|
-
if (
|
|
48
|
-
return
|
|
58
|
+
if (def.type === "string") {
|
|
59
|
+
const result = { type: "string" };
|
|
60
|
+
if (description) result.description = description;
|
|
61
|
+
return result;
|
|
49
62
|
}
|
|
50
|
-
if (def.
|
|
51
|
-
const
|
|
52
|
-
if (
|
|
53
|
-
return
|
|
63
|
+
if (def.type === "number") {
|
|
64
|
+
const result = { type: "number" };
|
|
65
|
+
if (description) result.description = description;
|
|
66
|
+
return result;
|
|
54
67
|
}
|
|
55
|
-
if (def.
|
|
56
|
-
const
|
|
57
|
-
if (
|
|
58
|
-
return
|
|
68
|
+
if (def.type === "boolean") {
|
|
69
|
+
const result = { type: "boolean" };
|
|
70
|
+
if (description) result.description = description;
|
|
71
|
+
return result;
|
|
59
72
|
}
|
|
60
|
-
if (def.
|
|
61
|
-
|
|
73
|
+
if (def.type === "array" && def.element) {
|
|
74
|
+
const elementDef = getZodDef(def.element);
|
|
75
|
+
const result = {
|
|
62
76
|
type: "array",
|
|
63
|
-
items: convertZodType(
|
|
64
|
-
def.type._def,
|
|
65
|
-
def.type
|
|
66
|
-
),
|
|
67
|
-
description: def.description
|
|
77
|
+
items: elementDef ? convertZodType(elementDef, def.element) : { type: "string" }
|
|
68
78
|
};
|
|
79
|
+
if (description) result.description = description;
|
|
80
|
+
return result;
|
|
69
81
|
}
|
|
70
|
-
if (def.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
def.innerType
|
|
74
|
-
|
|
82
|
+
if (def.type === "optional" && def.innerType) {
|
|
83
|
+
const innerDef = getZodDef(def.innerType);
|
|
84
|
+
if (innerDef) {
|
|
85
|
+
return convertZodType(innerDef, def.innerType);
|
|
86
|
+
}
|
|
75
87
|
}
|
|
76
|
-
if (def.
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
def.innerType
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
88
|
+
if (def.type === "nullable" && def.innerType) {
|
|
89
|
+
const innerDef = getZodDef(def.innerType);
|
|
90
|
+
if (innerDef) {
|
|
91
|
+
const innerSchema = convertZodType(innerDef, def.innerType);
|
|
92
|
+
return {
|
|
93
|
+
...innerSchema,
|
|
94
|
+
type: Array.isArray(innerSchema.type) ? [...innerSchema.type, "null"] : [innerSchema.type, "null"]
|
|
95
|
+
};
|
|
96
|
+
}
|
|
85
97
|
}
|
|
86
|
-
if (def.
|
|
87
|
-
|
|
98
|
+
if (def.type === "enum" && def.entries) {
|
|
99
|
+
const result = {
|
|
88
100
|
type: "string",
|
|
89
|
-
enum:
|
|
90
|
-
description: def.description
|
|
101
|
+
enum: Object.keys(def.entries)
|
|
91
102
|
};
|
|
103
|
+
if (description) result.description = description;
|
|
104
|
+
return result;
|
|
92
105
|
}
|
|
93
|
-
if (def.
|
|
94
|
-
|
|
95
|
-
oneOf: def.options.map(
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
106
|
+
if (def.type === "union" && def.options) {
|
|
107
|
+
const result = {
|
|
108
|
+
oneOf: def.options.map((option) => {
|
|
109
|
+
const optionDef = getZodDef(option);
|
|
110
|
+
return optionDef ? convertZodType(optionDef, option) : null;
|
|
111
|
+
}).filter((s) => s !== null)
|
|
99
112
|
};
|
|
113
|
+
if (description) result.description = description;
|
|
114
|
+
return result;
|
|
100
115
|
}
|
|
101
|
-
if (def.
|
|
102
|
-
|
|
116
|
+
if (def.type === "intersection" && def.left && def.right) {
|
|
117
|
+
const leftDef = getZodDef(def.left);
|
|
118
|
+
const rightDef = getZodDef(def.right);
|
|
119
|
+
const result = {
|
|
103
120
|
allOf: [
|
|
104
|
-
convertZodType(
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
),
|
|
108
|
-
convertZodType(
|
|
109
|
-
def.right._def,
|
|
110
|
-
def.right
|
|
111
|
-
)
|
|
112
|
-
],
|
|
113
|
-
description: def.description
|
|
121
|
+
leftDef ? convertZodType(leftDef, def.left) : { type: "string" },
|
|
122
|
+
rightDef ? convertZodType(rightDef, def.right) : { type: "string" }
|
|
123
|
+
]
|
|
114
124
|
};
|
|
125
|
+
if (description) result.description = description;
|
|
126
|
+
return result;
|
|
115
127
|
}
|
|
116
|
-
if (def.
|
|
117
|
-
const value = def.
|
|
118
|
-
|
|
128
|
+
if (def.type === "literal" && def.values && def.values.length > 0) {
|
|
129
|
+
const value = def.values[0];
|
|
130
|
+
const result = {
|
|
119
131
|
type: typeof value,
|
|
120
|
-
enum: [value]
|
|
121
|
-
description: def.description
|
|
132
|
+
enum: [value]
|
|
122
133
|
};
|
|
134
|
+
if (description) result.description = description;
|
|
135
|
+
return result;
|
|
123
136
|
}
|
|
124
|
-
if (def.
|
|
125
|
-
|
|
137
|
+
if (def.type === "record") {
|
|
138
|
+
let additionalProperties = true;
|
|
139
|
+
if (def.valueType) {
|
|
140
|
+
const valueDef = getZodDef(def.valueType);
|
|
141
|
+
if (valueDef) {
|
|
142
|
+
additionalProperties = convertZodType(valueDef, def.valueType);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const result = {
|
|
126
146
|
type: "object",
|
|
127
|
-
additionalProperties
|
|
128
|
-
def.valueType._def,
|
|
129
|
-
def.valueType
|
|
130
|
-
) : true,
|
|
131
|
-
description: def.description
|
|
147
|
+
additionalProperties
|
|
132
148
|
};
|
|
149
|
+
if (description) result.description = description;
|
|
150
|
+
return result;
|
|
133
151
|
}
|
|
134
|
-
if (def.
|
|
152
|
+
if (def.type === "any") {
|
|
135
153
|
return {
|
|
136
|
-
description:
|
|
154
|
+
description: description || "Any value"
|
|
137
155
|
};
|
|
138
156
|
}
|
|
139
|
-
if (def.
|
|
157
|
+
if (def.type === "unknown") {
|
|
140
158
|
return {
|
|
141
|
-
description:
|
|
159
|
+
description: description || "Unknown value"
|
|
142
160
|
};
|
|
143
161
|
}
|
|
144
|
-
if (def.
|
|
162
|
+
if (def.type === "date") {
|
|
145
163
|
return {
|
|
146
164
|
type: "string",
|
|
147
165
|
format: "date-time",
|
|
148
|
-
description:
|
|
166
|
+
description: description || "ISO 8601 date-time string"
|
|
149
167
|
};
|
|
150
168
|
}
|
|
151
|
-
if (def.
|
|
169
|
+
if (def.type === "bigint") {
|
|
152
170
|
return {
|
|
153
171
|
type: "string",
|
|
154
|
-
description:
|
|
172
|
+
description: description || "BigInt as string"
|
|
155
173
|
};
|
|
156
174
|
}
|
|
157
|
-
if (def.
|
|
175
|
+
if (def.type === "undefined") {
|
|
158
176
|
return {
|
|
159
177
|
type: "null",
|
|
160
|
-
description:
|
|
178
|
+
description: description || "Undefined value"
|
|
161
179
|
};
|
|
162
180
|
}
|
|
163
|
-
if (def.
|
|
181
|
+
if (def.type === "null") {
|
|
164
182
|
return {
|
|
165
183
|
type: "null",
|
|
166
|
-
description:
|
|
184
|
+
description: description || "Null value"
|
|
167
185
|
};
|
|
168
186
|
}
|
|
169
|
-
if (def.
|
|
187
|
+
if (def.type === "void") {
|
|
170
188
|
return {
|
|
171
189
|
type: "null",
|
|
172
|
-
description:
|
|
190
|
+
description: description || "Void (null) value"
|
|
173
191
|
};
|
|
174
192
|
}
|
|
175
|
-
if (def.
|
|
193
|
+
if (def.type === "nan") {
|
|
176
194
|
return {
|
|
177
195
|
type: "number",
|
|
178
|
-
description:
|
|
196
|
+
description: description || "Not-a-Number value"
|
|
179
197
|
};
|
|
180
198
|
}
|
|
181
|
-
if (def.
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
def.innerType
|
|
185
|
-
|
|
199
|
+
if (def.type === "default" && def.innerType) {
|
|
200
|
+
const innerDef = getZodDef(def.innerType);
|
|
201
|
+
if (innerDef) {
|
|
202
|
+
return convertZodType(innerDef, def.innerType);
|
|
203
|
+
}
|
|
186
204
|
}
|
|
187
|
-
if (def.
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
def.innerType
|
|
191
|
-
|
|
205
|
+
if (def.type === "catch" && def.innerType) {
|
|
206
|
+
const innerDef = getZodDef(def.innerType);
|
|
207
|
+
if (innerDef) {
|
|
208
|
+
return convertZodType(innerDef, def.innerType);
|
|
209
|
+
}
|
|
192
210
|
}
|
|
193
211
|
console.warn(
|
|
194
|
-
`Unhandled Zod type: ${def.
|
|
212
|
+
`Unhandled Zod type: ${def.type}. Please consider adding support for this type.`
|
|
195
213
|
);
|
|
196
214
|
return {
|
|
197
215
|
type: "string",
|
|
198
|
-
description:
|
|
216
|
+
description: description || `Unsupported type: ${def.type}`
|
|
199
217
|
};
|
|
200
218
|
}
|
|
201
219
|
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/utils/schema-converter.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport {\n createZapierSdk,\n type ZapierSdk,\n type FunctionRegistryEntry,\n} from \"@zapier/zapier-sdk\";\nimport { convertZodToMcpSchema } from \"./utils/schema-converter.js\";\n\ninterface ZapierMcpServerOptions {\n debug?: boolean;\n}\n\n/**\n * Creates an MCP server that exposes Zapier SDK functions as MCP tools.\n *\n * The server automatically discovers all available SDK functions and converts\n * their Zod schemas to MCP-compatible JSON schemas. It handles tool execution\n * by validating inputs and calling the appropriate SDK functions.\n *\n * @param options - Configuration options for the MCP server\n * @param options.debug - Enable debug logging for detailed error information\n * @returns An MCP server instance configured to expose Zapier SDK tools\n *\n * @example\n * ```typescript\n * const server = createZapierMcpServer({ debug: true });\n * const transport = new StdioServerTransport();\n * await server.connect(transport);\n * ```\n */\nfunction createZapierMcpServer({ debug = false }: ZapierMcpServerOptions = {}) {\n // Create Zapier SDK instance\n const zapierSdk: ZapierSdk = createZapierSdk({ debug });\n\n // Create MCP server\n const server = new Server(\n {\n name: \"zapier-sdk\",\n version: \"1.0.0\",\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n\n // Register list_tools handler - dynamically list all SDK functions as tools\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n const tools = zapierSdk\n .getRegistry({ package: \"mcp\" })\n .functions.map((functionInfo: FunctionRegistryEntry) => {\n const toolName = functionInfo.name\n .replace(/([A-Z])/g, \"-$1\")\n .toLowerCase();\n\n return {\n name: toolName,\n description:\n functionInfo.inputSchema.description ||\n `Execute ${functionInfo.name}`,\n inputSchema: convertZodToMcpSchema(functionInfo.inputSchema),\n };\n });\n\n return { tools };\n });\n\n // Register call_tool handler - execute SDK functions\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n // Convert kebab-case tool name back to camelCase function name\n const functionName = name.replace(/-([a-z])/g, (_, letter) =>\n letter.toUpperCase(),\n );\n\n // Find the function info\n const functionInfo: FunctionRegistryEntry | undefined = zapierSdk\n .getRegistry({ package: \"mcp\" })\n .functions.find(\n (info: FunctionRegistryEntry) => info.name === functionName,\n );\n\n if (!functionInfo) {\n const availableTools = zapierSdk\n .getRegistry({ package: \"mcp\" })\n .functions.map((info) =>\n info.name.replace(/([A-Z])/g, \"-$1\").toLowerCase(),\n )\n .join(\", \");\n throw new Error(\n `Unknown tool: ${name}. Available tools: ${availableTools}`,\n );\n }\n\n try {\n // Validate arguments against schema\n const validatedArgs = functionInfo.inputSchema.parse(args || {});\n\n // Execute the function\n const result = await zapierSdk[functionInfo.name](validatedArgs);\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n if (debug) {\n console.error(\n `Error executing function '${functionInfo.name}' (tool: ${name}):`,\n error,\n );\n }\n\n let errorMessage: string;\n let isValidationError = false;\n\n if (error instanceof Error) {\n // Check if it's a Zod validation error\n if (error.name === \"ZodError\") {\n isValidationError = true;\n errorMessage = `Validation error for ${functionInfo.name}: ${error.message}`;\n } else {\n errorMessage = `Error in ${functionInfo.name}: ${error.message}`;\n }\n } else {\n errorMessage = `Unexpected error in ${functionInfo.name}: ${String(error)}`;\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: isValidationError\n ? `${errorMessage}\\n\\nExpected input format:\\n${JSON.stringify(convertZodToMcpSchema(functionInfo.inputSchema), null, 2)}`\n : errorMessage,\n },\n ],\n isError: true,\n };\n }\n });\n\n return server;\n}\n\n/**\n * Starts an MCP server with stdio transport for CLI usage.\n *\n * This is the main entry point when running the MCP server from the command line.\n * It creates the server and connects it using stdio transport for communication\n * with MCP clients like Claude Code.\n *\n * @param options - Configuration options for the MCP server\n * @param options.debug - Enable debug logging for detailed error information\n *\n * @example\n * ```typescript\n * // Start server with debug logging\n * await startMcpServer({ debug: true });\n * ```\n */\nasync function startMcpServer(\n options: ZapierMcpServerOptions = {},\n): Promise<void> {\n const server = createZapierMcpServer(options);\n const transport = new StdioServerTransport();\n\n return new Promise<void>((resolve) => {\n let isShuttingDown = false;\n\n const cleanup = async () => {\n if (isShuttingDown) return;\n isShuttingDown = true;\n\n try {\n await server.close();\n } finally {\n resolve();\n }\n };\n\n // Handle clean shutdown when client closes connection\n server.onclose = () => {\n cleanup();\n };\n\n // Handle termination signals (Ctrl+C, kill, etc.)\n // Using process.once() to prevent handler accumulation\n process.once(\"SIGINT\", cleanup);\n process.once(\"SIGTERM\", cleanup);\n\n server.connect(transport).catch((error) => {\n console.error(\"Failed to start MCP server:\", error);\n process.exit(1);\n });\n });\n}\n\n// Auto-start if this file is run directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n const debug = process.argv.includes(\"--debug\");\n startMcpServer({ debug }).catch((error) => {\n console.error(\"Failed to start MCP server:\", error);\n process.exit(1);\n });\n}\n\nexport { createZapierMcpServer, startMcpServer };\n","/**\n * A robust schema converter that handles conversion from Zod schemas to JSON Schema format:\n *\n * **Core Types:**\n * - ✅ Objects, arrays, strings, numbers, booleans\n * - ✅ Enums, unions, intersections, literals\n * - ✅ Optional and nullable fields\n * - ✅ Records and dates\n * - ✅ Nested schemas and complex types\n *\n * **Additional Types:**\n * - ✅ Any, unknown, bigint, null, undefined, void, NaN\n * - ✅ Default values and catch handlers (unwrapped to inner type)\n * - ✅ Graceful fallback for unsupported types\n */\n\nimport type { z } from \"zod\";\n\ninterface McpSchema {\n type?: string | string[];\n properties?: Record<string, McpSchema>;\n required?: string[];\n description?: string;\n items?: McpSchema;\n enum?: unknown[];\n anyOf?: McpSchema[];\n oneOf?: McpSchema[];\n allOf?: McpSchema[];\n additionalProperties?: McpSchema | boolean;\n format?: string;\n}\n\n// Types for Zod internals to improve type safety\ninterface ZodDef {\n typeName: string;\n description?: string;\n type?: z.ZodSchema;\n innerType?: z.ZodSchema;\n values?: readonly string[];\n options?: z.ZodSchema[];\n left?: z.ZodSchema;\n right?: z.ZodSchema;\n value?: unknown;\n valueType?: z.ZodSchema;\n}\n\ninterface ZodSchemaWithShape extends z.ZodSchema {\n shape?: Record<string, z.ZodSchema>;\n}\n\n/**\n * Converts a Zod schema to MCP-compatible JSON Schema format.\n *\n * This function handles the conversion of Zod validation schemas (used internally\n * by the Zapier SDK) to JSON Schema format required by the MCP protocol. It supports\n * most common Zod types including objects, arrays, primitives, enums, unions, and more.\n *\n * @param zodSchema - The Zod schema to convert\n * @returns An MCP-compatible JSON Schema object\n *\n * @example\n * ```typescript\n * import { z } from \"zod\";\n *\n * const userSchema = z.object({\n * name: z.string(),\n * age: z.number().optional(),\n * email: z.string().email()\n * });\n *\n * const mcpSchema = convertZodToMcpSchema(userSchema);\n * // Result: { type: \"object\", properties: { ... }, required: [\"name\", \"email\"] }\n * ```\n */\nfunction convertZodToMcpSchema(zodSchema: z.ZodSchema): McpSchema {\n return convertZodType(\n (zodSchema as unknown as { _def: ZodDef })._def,\n zodSchema,\n );\n}\n\n/**\n * Internal function that recursively converts Zod type definitions to MCP schema format.\n *\n * This function handles the actual conversion logic for different Zod types by examining\n * the internal type definition and converting it to the appropriate JSON Schema structure.\n *\n * @param def - The Zod internal definition object\n * @param schema - The original Zod schema (used for accessing shape in objects)\n * @returns An MCP-compatible JSON Schema object\n * @internal\n */\nfunction convertZodType(def: ZodDef, schema?: z.ZodSchema): McpSchema {\n // Handle ZodObject\n if (def.typeName === \"ZodObject\" && schema) {\n const schemaWithShape = schema as ZodSchemaWithShape;\n const properties: Record<string, McpSchema> = {};\n const required: string[] = [];\n\n if (schemaWithShape.shape) {\n for (const [key, value] of Object.entries(schemaWithShape.shape)) {\n const fieldDef = (value as unknown as { _def: ZodDef })._def;\n properties[key] = convertZodType(fieldDef, value);\n\n // Check if field is required (not optional)\n if (\n fieldDef.typeName !== \"ZodOptional\" &&\n fieldDef.typeName !== \"ZodNullable\"\n ) {\n required.push(key);\n }\n }\n }\n\n const result: McpSchema = {\n type: \"object\",\n properties,\n description: def.description,\n };\n\n if (required.length > 0) {\n result.required = required;\n }\n\n return result;\n }\n\n // Handle ZodString\n if (def.typeName === \"ZodString\") {\n const schema: McpSchema = { type: \"string\" };\n if (def.description) schema.description = def.description;\n return schema;\n }\n\n // Handle ZodNumber\n if (def.typeName === \"ZodNumber\") {\n const schema: McpSchema = { type: \"number\" };\n if (def.description) schema.description = def.description;\n return schema;\n }\n\n // Handle ZodBoolean\n if (def.typeName === \"ZodBoolean\") {\n const schema: McpSchema = { type: \"boolean\" };\n if (def.description) schema.description = def.description;\n return schema;\n }\n\n // Handle ZodArray\n if (def.typeName === \"ZodArray\" && def.type) {\n return {\n type: \"array\",\n items: convertZodType(\n (def.type as unknown as { _def: ZodDef })._def,\n def.type,\n ),\n description: def.description,\n };\n }\n\n // Handle ZodOptional\n if (def.typeName === \"ZodOptional\" && def.innerType) {\n return convertZodType(\n (def.innerType as unknown as { _def: ZodDef })._def,\n def.innerType,\n );\n }\n\n // Handle ZodNullable\n if (def.typeName === \"ZodNullable\" && def.innerType) {\n const innerSchema = convertZodType(\n (def.innerType as unknown as { _def: ZodDef })._def,\n def.innerType,\n );\n return {\n ...innerSchema,\n type: Array.isArray(innerSchema.type)\n ? [...innerSchema.type, \"null\"]\n : [innerSchema.type, \"null\"],\n };\n }\n\n // Handle ZodEnum\n if (def.typeName === \"ZodEnum\" && def.values) {\n return {\n type: \"string\",\n enum: Array.from(def.values),\n description: def.description,\n };\n }\n\n // Handle ZodUnion\n if (def.typeName === \"ZodUnion\" && def.options) {\n return {\n oneOf: def.options.map((option) =>\n convertZodType((option as unknown as { _def: ZodDef })._def, option),\n ),\n description: def.description,\n };\n }\n\n // Handle ZodIntersection\n if (def.typeName === \"ZodIntersection\" && def.left && def.right) {\n return {\n allOf: [\n convertZodType(\n (def.left as unknown as { _def: ZodDef })._def,\n def.left,\n ),\n convertZodType(\n (def.right as unknown as { _def: ZodDef })._def,\n def.right,\n ),\n ],\n description: def.description,\n };\n }\n\n // Handle ZodLiteral\n if (def.typeName === \"ZodLiteral\" && def.value !== undefined) {\n const value = def.value;\n return {\n type: typeof value as \"string\" | \"number\" | \"boolean\",\n enum: [value],\n description: def.description,\n };\n }\n\n // Handle ZodRecord (for object with string keys)\n if (def.typeName === \"ZodRecord\") {\n return {\n type: \"object\",\n additionalProperties: def.valueType\n ? convertZodType(\n (def.valueType as unknown as { _def: ZodDef })._def,\n def.valueType,\n )\n : true,\n description: def.description,\n };\n }\n\n // Handle ZodAny\n if (def.typeName === \"ZodAny\") {\n return {\n description: def.description || \"Any value\",\n };\n }\n\n // Handle ZodUnknown\n if (def.typeName === \"ZodUnknown\") {\n return {\n description: def.description || \"Unknown value\",\n };\n }\n\n // Handle ZodDate\n if (def.typeName === \"ZodDate\") {\n return {\n type: \"string\",\n format: \"date-time\",\n description: def.description || \"ISO 8601 date-time string\",\n };\n }\n\n // Handle ZodBigInt\n if (def.typeName === \"ZodBigInt\") {\n return {\n type: \"string\",\n description: def.description || \"BigInt as string\",\n };\n }\n\n // Handle ZodUndefined\n if (def.typeName === \"ZodUndefined\") {\n return {\n type: \"null\",\n description: def.description || \"Undefined value\",\n };\n }\n\n // Handle ZodNull\n if (def.typeName === \"ZodNull\") {\n return {\n type: \"null\",\n description: def.description || \"Null value\",\n };\n }\n\n // Handle ZodVoid\n if (def.typeName === \"ZodVoid\") {\n return {\n type: \"null\",\n description: def.description || \"Void (null) value\",\n };\n }\n\n // Handle ZodNaN\n if (def.typeName === \"ZodNaN\") {\n return {\n type: \"number\",\n description: def.description || \"Not-a-Number value\",\n };\n }\n\n // Handle ZodDefault\n if (def.typeName === \"ZodDefault\" && def.innerType) {\n return convertZodType(\n (def.innerType as unknown as { _def: ZodDef })._def,\n def.innerType,\n );\n }\n\n // Handle ZodCatch (with fallback value)\n if (def.typeName === \"ZodCatch\" && def.innerType) {\n return convertZodType(\n (def.innerType as unknown as { _def: ZodDef })._def,\n def.innerType,\n );\n }\n\n // Fallback for unhandled types\n console.warn(\n `Unhandled Zod type: ${def.typeName}. Please consider adding support for this type.`,\n );\n return {\n type: \"string\",\n description: def.description || `Unsupported type: ${def.typeName}`,\n };\n}\n\nexport { convertZodToMcpSchema };\n"],"mappings":"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","names":["schema"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/schema-converter.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport {\n createZapierSdk,\n type ZapierSdk,\n type FunctionRegistryEntry,\n} from \"@zapier/zapier-sdk\";\nimport { convertZodToMcpSchema } from \"./utils/schema-converter.js\";\n\ninterface ZapierMcpServerOptions {\n debug?: boolean;\n}\n\n/**\n * Creates an MCP server that exposes Zapier SDK functions as MCP tools.\n *\n * The server automatically discovers all available SDK functions and converts\n * their Zod schemas to MCP-compatible JSON schemas. It handles tool execution\n * by validating inputs and calling the appropriate SDK functions.\n *\n * @param options - Configuration options for the MCP server\n * @param options.debug - Enable debug logging for detailed error information\n * @returns An MCP server instance configured to expose Zapier SDK tools\n *\n * @example\n * ```typescript\n * const server = createZapierMcpServer({ debug: true });\n * const transport = new StdioServerTransport();\n * await server.connect(transport);\n * ```\n */\nfunction createZapierMcpServer({ debug = false }: ZapierMcpServerOptions = {}) {\n // Create Zapier SDK instance\n const zapierSdk: ZapierSdk = createZapierSdk({ debug });\n\n // Create MCP server\n const server = new Server(\n {\n name: \"zapier-sdk\",\n version: \"1.0.0\",\n },\n {\n capabilities: {\n tools: {},\n },\n },\n );\n\n // Register list_tools handler - dynamically list all SDK functions as tools\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n const tools = zapierSdk\n .getRegistry({ package: \"mcp\" })\n .functions.map((functionInfo: FunctionRegistryEntry) => {\n const toolName = functionInfo.name\n .replace(/([A-Z])/g, \"-$1\")\n .toLowerCase();\n\n return {\n name: toolName,\n description:\n functionInfo.inputSchema.description ||\n `Execute ${functionInfo.name}`,\n inputSchema: convertZodToMcpSchema(functionInfo.inputSchema),\n };\n });\n\n return { tools };\n });\n\n // Register call_tool handler - execute SDK functions\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n // Convert kebab-case tool name back to camelCase function name\n const functionName = name.replace(/-([a-z])/g, (_, letter) =>\n letter.toUpperCase(),\n );\n\n // Find the function info\n const functionInfo: FunctionRegistryEntry | undefined = zapierSdk\n .getRegistry({ package: \"mcp\" })\n .functions.find(\n (info: FunctionRegistryEntry) => info.name === functionName,\n );\n\n if (!functionInfo) {\n const availableTools = zapierSdk\n .getRegistry({ package: \"mcp\" })\n .functions.map((info) =>\n info.name.replace(/([A-Z])/g, \"-$1\").toLowerCase(),\n )\n .join(\", \");\n throw new Error(\n `Unknown tool: ${name}. Available tools: ${availableTools}`,\n );\n }\n\n try {\n // Validate arguments against schema\n const validatedArgs = functionInfo.inputSchema.parse(args || {});\n\n // Execute the function\n const result = await zapierSdk[functionInfo.name](validatedArgs);\n\n return {\n content: [\n {\n type: \"text\",\n text: JSON.stringify(result, null, 2),\n },\n ],\n };\n } catch (error) {\n if (debug) {\n console.error(\n `Error executing function '${functionInfo.name}' (tool: ${name}):`,\n error,\n );\n }\n\n let errorMessage: string;\n let isValidationError = false;\n\n if (error instanceof Error) {\n // Check if it's a Zod validation error\n if (error.name === \"ZodError\") {\n isValidationError = true;\n errorMessage = `Validation error for ${functionInfo.name}: ${error.message}`;\n } else {\n errorMessage = `Error in ${functionInfo.name}: ${error.message}`;\n }\n } else {\n errorMessage = `Unexpected error in ${functionInfo.name}: ${String(error)}`;\n }\n\n return {\n content: [\n {\n type: \"text\",\n text: isValidationError\n ? `${errorMessage}\\n\\nExpected input format:\\n${JSON.stringify(convertZodToMcpSchema(functionInfo.inputSchema), null, 2)}`\n : errorMessage,\n },\n ],\n isError: true,\n };\n }\n });\n\n return server;\n}\n\n/**\n * Starts an MCP server with stdio transport for CLI usage.\n *\n * This is the main entry point when running the MCP server from the command line.\n * It creates the server and connects it using stdio transport for communication\n * with MCP clients like Claude Code.\n *\n * @param options - Configuration options for the MCP server\n * @param options.debug - Enable debug logging for detailed error information\n *\n * @example\n * ```typescript\n * // Start server with debug logging\n * await startMcpServer({ debug: true });\n * ```\n */\nasync function startMcpServer(\n options: ZapierMcpServerOptions = {},\n): Promise<void> {\n const server = createZapierMcpServer(options);\n const transport = new StdioServerTransport();\n\n return new Promise<void>((resolve) => {\n let isShuttingDown = false;\n\n const cleanup = async () => {\n if (isShuttingDown) return;\n isShuttingDown = true;\n\n try {\n await server.close();\n } finally {\n resolve();\n }\n };\n\n // Handle clean shutdown when client closes connection\n server.onclose = () => {\n cleanup();\n };\n\n // Handle termination signals (Ctrl+C, kill, etc.)\n // Using process.once() to prevent handler accumulation\n process.once(\"SIGINT\", cleanup);\n process.once(\"SIGTERM\", cleanup);\n\n server.connect(transport).catch((error) => {\n console.error(\"Failed to start MCP server:\", error);\n process.exit(1);\n });\n });\n}\n\n// Auto-start if this file is run directly\nif (import.meta.url === `file://${process.argv[1]}`) {\n const debug = process.argv.includes(\"--debug\");\n startMcpServer({ debug }).catch((error) => {\n console.error(\"Failed to start MCP server:\", error);\n process.exit(1);\n });\n}\n\nexport { createZapierMcpServer, startMcpServer };\n","/**\n * A robust schema converter that handles conversion from Zod schemas to JSON Schema format:\n *\n * **Core Types:**\n * - ✅ Objects, arrays, strings, numbers, booleans\n * - ✅ Enums, unions, intersections, literals\n * - ✅ Optional and nullable fields\n * - ✅ Records and dates\n * - ✅ Nested schemas and complex types\n *\n * **Additional Types:**\n * - ✅ Any, unknown, bigint, null, undefined, void, NaN\n * - ✅ Default values and catch handlers (unwrapped to inner type)\n * - ✅ Graceful fallback for unsupported types\n */\n\nimport type { z } from \"zod\";\n\ninterface McpSchema {\n type?: string | string[];\n properties?: Record<string, McpSchema>;\n required?: string[];\n description?: string;\n items?: McpSchema;\n enum?: unknown[];\n anyOf?: McpSchema[];\n oneOf?: McpSchema[];\n allOf?: McpSchema[];\n additionalProperties?: McpSchema | boolean;\n format?: string;\n}\n\n// Zod internal definition structure\ninterface ZodDef {\n type: string; // e.g., \"string\", \"number\", \"object\", \"optional\", etc.\n element?: z.ZodSchema; // For arrays\n innerType?: z.ZodSchema; // For optional, nullable, default, catch\n entries?: Record<string, string>; // For enums\n values?: unknown[]; // For literals\n options?: z.ZodSchema[]; // For unions\n left?: z.ZodSchema; // For intersections\n right?: z.ZodSchema; // For intersections\n keyType?: z.ZodSchema; // For records (key type)\n valueType?: z.ZodSchema; // For records (value type)\n shape?: Record<string, z.ZodSchema>; // For objects (function in some cases)\n}\n\n// Zod schema with description (description is on the schema, not the def)\ninterface ZodSchemaWithDescription extends z.ZodSchema {\n description?: string;\n}\n\ninterface ZodSchemaWithShape extends z.ZodSchema {\n shape?: Record<string, z.ZodSchema>;\n}\n\n/**\n * Gets the Zod def from a schema, with fallback for edge cases\n */\nfunction getZodDef(schema: z.ZodSchema): ZodDef | undefined {\n const schemaAny = schema as unknown as { _zod?: { def?: ZodDef } };\n return schemaAny._zod?.def;\n}\n\n/**\n * Gets the description from a Zod schema (description is on the schema object, not the def)\n */\nfunction getDescription(schema?: z.ZodSchema): string | undefined {\n if (!schema) return undefined;\n return (schema as ZodSchemaWithDescription).description;\n}\n\n/**\n * Converts a Zod schema to MCP-compatible JSON Schema format.\n *\n * This function handles the conversion of Zod validation schemas (used internally\n * by the Zapier SDK) to JSON Schema format required by the MCP protocol. It supports\n * most common Zod types including objects, arrays, primitives, enums, unions, and more.\n *\n * @param zodSchema - The Zod schema to convert\n * @returns An MCP-compatible JSON Schema object\n *\n * @example\n * ```typescript\n * import { z } from \"zod\";\n *\n * const userSchema = z.object({\n * name: z.string(),\n * age: z.number().optional(),\n * email: z.string().email()\n * });\n *\n * const mcpSchema = convertZodToMcpSchema(userSchema);\n * // Result: { type: \"object\", properties: { ... }, required: [\"name\", \"email\"] }\n * ```\n */\nfunction convertZodToMcpSchema(zodSchema: z.ZodSchema): McpSchema {\n const def = getZodDef(zodSchema);\n if (!def) {\n // Fallback for schemas without _zod.def (e.g., custom or invalid schemas)\n return {\n type: \"string\",\n description: \"Unsupported schema type\",\n };\n }\n return convertZodType(def, zodSchema);\n}\n\n/**\n * Internal function that recursively converts Zod type definitions to MCP schema format.\n *\n * This function handles the actual conversion logic for different Zod types by examining\n * the internal type definition and converting it to the appropriate JSON Schema structure.\n *\n * @param def - The Zod internal definition object\n * @param schema - The original Zod schema (used for accessing shape in objects)\n * @returns An MCP-compatible JSON Schema object\n * @internal\n */\nfunction convertZodType(def: ZodDef, schema?: z.ZodSchema): McpSchema {\n const description = getDescription(schema);\n\n // Handle object\n if (def.type === \"object\" && schema) {\n const schemaWithShape = schema as ZodSchemaWithShape;\n const properties: Record<string, McpSchema> = {};\n const required: string[] = [];\n\n if (schemaWithShape.shape) {\n for (const [key, value] of Object.entries(schemaWithShape.shape)) {\n const fieldDef = getZodDef(value);\n if (fieldDef) {\n properties[key] = convertZodType(fieldDef, value);\n\n // Check if field is required (not optional or nullable)\n if (fieldDef.type !== \"optional\" && fieldDef.type !== \"nullable\") {\n required.push(key);\n }\n }\n }\n }\n\n const result: McpSchema = {\n type: \"object\",\n properties,\n };\n\n if (description) result.description = description;\n if (required.length > 0) result.required = required;\n\n return result;\n }\n\n // Handle string\n if (def.type === \"string\") {\n const result: McpSchema = { type: \"string\" };\n if (description) result.description = description;\n return result;\n }\n\n // Handle number\n if (def.type === \"number\") {\n const result: McpSchema = { type: \"number\" };\n if (description) result.description = description;\n return result;\n }\n\n // Handle boolean\n if (def.type === \"boolean\") {\n const result: McpSchema = { type: \"boolean\" };\n if (description) result.description = description;\n return result;\n }\n\n // Handle array\n if (def.type === \"array\" && def.element) {\n const elementDef = getZodDef(def.element);\n const result: McpSchema = {\n type: \"array\",\n items: elementDef\n ? convertZodType(elementDef, def.element)\n : { type: \"string\" },\n };\n if (description) result.description = description;\n return result;\n }\n\n // Handle optional\n if (def.type === \"optional\" && def.innerType) {\n const innerDef = getZodDef(def.innerType);\n if (innerDef) {\n return convertZodType(innerDef, def.innerType);\n }\n }\n\n // Handle nullable\n if (def.type === \"nullable\" && def.innerType) {\n const innerDef = getZodDef(def.innerType);\n if (innerDef) {\n const innerSchema = convertZodType(innerDef, def.innerType);\n return {\n ...innerSchema,\n type: Array.isArray(innerSchema.type)\n ? [...innerSchema.type, \"null\"]\n : [innerSchema.type, \"null\"],\n };\n }\n }\n\n // Handle enum\n if (def.type === \"enum\" && def.entries) {\n const result: McpSchema = {\n type: \"string\",\n enum: Object.keys(def.entries),\n };\n if (description) result.description = description;\n return result;\n }\n\n // Handle union\n if (def.type === \"union\" && def.options) {\n const result: McpSchema = {\n oneOf: def.options\n .map((option) => {\n const optionDef = getZodDef(option);\n return optionDef ? convertZodType(optionDef, option) : null;\n })\n .filter((s): s is McpSchema => s !== null),\n };\n if (description) result.description = description;\n return result;\n }\n\n // Handle intersection\n if (def.type === \"intersection\" && def.left && def.right) {\n const leftDef = getZodDef(def.left);\n const rightDef = getZodDef(def.right);\n const result: McpSchema = {\n allOf: [\n leftDef ? convertZodType(leftDef, def.left) : { type: \"string\" },\n rightDef ? convertZodType(rightDef, def.right) : { type: \"string\" },\n ],\n };\n if (description) result.description = description;\n return result;\n }\n\n // Handle literal\n if (def.type === \"literal\" && def.values && def.values.length > 0) {\n const value = def.values[0];\n const result: McpSchema = {\n type: typeof value as \"string\" | \"number\" | \"boolean\",\n enum: [value],\n };\n if (description) result.description = description;\n return result;\n }\n\n // Handle record\n if (def.type === \"record\") {\n let additionalProperties: McpSchema | boolean = true;\n if (def.valueType) {\n const valueDef = getZodDef(def.valueType);\n if (valueDef) {\n additionalProperties = convertZodType(valueDef, def.valueType);\n }\n }\n const result: McpSchema = {\n type: \"object\",\n additionalProperties,\n };\n if (description) result.description = description;\n return result;\n }\n\n // Handle any\n if (def.type === \"any\") {\n return {\n description: description || \"Any value\",\n };\n }\n\n // Handle unknown\n if (def.type === \"unknown\") {\n return {\n description: description || \"Unknown value\",\n };\n }\n\n // Handle date\n if (def.type === \"date\") {\n return {\n type: \"string\",\n format: \"date-time\",\n description: description || \"ISO 8601 date-time string\",\n };\n }\n\n // Handle bigint\n if (def.type === \"bigint\") {\n return {\n type: \"string\",\n description: description || \"BigInt as string\",\n };\n }\n\n // Handle undefined\n if (def.type === \"undefined\") {\n return {\n type: \"null\",\n description: description || \"Undefined value\",\n };\n }\n\n // Handle null\n if (def.type === \"null\") {\n return {\n type: \"null\",\n description: description || \"Null value\",\n };\n }\n\n // Handle void\n if (def.type === \"void\") {\n return {\n type: \"null\",\n description: description || \"Void (null) value\",\n };\n }\n\n // Handle nan\n if (def.type === \"nan\") {\n return {\n type: \"number\",\n description: description || \"Not-a-Number value\",\n };\n }\n\n // Handle default\n if (def.type === \"default\" && def.innerType) {\n const innerDef = getZodDef(def.innerType);\n if (innerDef) {\n return convertZodType(innerDef, def.innerType);\n }\n }\n\n // Handle catch (with fallback value)\n if (def.type === \"catch\" && def.innerType) {\n const innerDef = getZodDef(def.innerType);\n if (innerDef) {\n return convertZodType(innerDef, def.innerType);\n }\n }\n\n // Fallback for unhandled types\n console.warn(\n `Unhandled Zod type: ${def.type}. Please consider adding support for this type.`,\n );\n return {\n type: \"string\",\n description: description || `Unsupported type: ${def.type}`,\n };\n}\n\nexport { convertZodToMcpSchema };\n"],"mappings":";;;AAEA,SAAS,cAAc;AACvB,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,OAGK;;;AC+CP,SAAS,UAAU,QAAyC;AAC1D,QAAM,YAAY;AAClB,SAAO,UAAU,MAAM;AACzB;AAKA,SAAS,eAAe,QAA0C;AAChE,MAAI,CAAC,OAAQ,QAAO;AACpB,SAAQ,OAAoC;AAC9C;AA0BA,SAAS,sBAAsB,WAAmC;AAChE,QAAM,MAAM,UAAU,SAAS;AAC/B,MAAI,CAAC,KAAK;AAER,WAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa;AAAA,IACf;AAAA,EACF;AACA,SAAO,eAAe,KAAK,SAAS;AACtC;AAaA,SAAS,eAAe,KAAa,QAAiC;AACpE,QAAM,cAAc,eAAe,MAAM;AAGzC,MAAI,IAAI,SAAS,YAAY,QAAQ;AACnC,UAAM,kBAAkB;AACxB,UAAM,aAAwC,CAAC;AAC/C,UAAM,WAAqB,CAAC;AAE5B,QAAI,gBAAgB,OAAO;AACzB,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,gBAAgB,KAAK,GAAG;AAChE,cAAM,WAAW,UAAU,KAAK;AAChC,YAAI,UAAU;AACZ,qBAAW,GAAG,IAAI,eAAe,UAAU,KAAK;AAGhD,cAAI,SAAS,SAAS,cAAc,SAAS,SAAS,YAAY;AAChE,qBAAS,KAAK,GAAG;AAAA,UACnB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,SAAoB;AAAA,MACxB,MAAM;AAAA,MACN;AAAA,IACF;AAEA,QAAI,YAAa,QAAO,cAAc;AACtC,QAAI,SAAS,SAAS,EAAG,QAAO,WAAW;AAE3C,WAAO;AAAA,EACT;AAGA,MAAI,IAAI,SAAS,UAAU;AACzB,UAAM,SAAoB,EAAE,MAAM,SAAS;AAC3C,QAAI,YAAa,QAAO,cAAc;AACtC,WAAO;AAAA,EACT;AAGA,MAAI,IAAI,SAAS,UAAU;AACzB,UAAM,SAAoB,EAAE,MAAM,SAAS;AAC3C,QAAI,YAAa,QAAO,cAAc;AACtC,WAAO;AAAA,EACT;AAGA,MAAI,IAAI,SAAS,WAAW;AAC1B,UAAM,SAAoB,EAAE,MAAM,UAAU;AAC5C,QAAI,YAAa,QAAO,cAAc;AACtC,WAAO;AAAA,EACT;AAGA,MAAI,IAAI,SAAS,WAAW,IAAI,SAAS;AACvC,UAAM,aAAa,UAAU,IAAI,OAAO;AACxC,UAAM,SAAoB;AAAA,MACxB,MAAM;AAAA,MACN,OAAO,aACH,eAAe,YAAY,IAAI,OAAO,IACtC,EAAE,MAAM,SAAS;AAAA,IACvB;AACA,QAAI,YAAa,QAAO,cAAc;AACtC,WAAO;AAAA,EACT;AAGA,MAAI,IAAI,SAAS,cAAc,IAAI,WAAW;AAC5C,UAAM,WAAW,UAAU,IAAI,SAAS;AACxC,QAAI,UAAU;AACZ,aAAO,eAAe,UAAU,IAAI,SAAS;AAAA,IAC/C;AAAA,EACF;AAGA,MAAI,IAAI,SAAS,cAAc,IAAI,WAAW;AAC5C,UAAM,WAAW,UAAU,IAAI,SAAS;AACxC,QAAI,UAAU;AACZ,YAAM,cAAc,eAAe,UAAU,IAAI,SAAS;AAC1D,aAAO;AAAA,QACL,GAAG;AAAA,QACH,MAAM,MAAM,QAAQ,YAAY,IAAI,IAChC,CAAC,GAAG,YAAY,MAAM,MAAM,IAC5B,CAAC,YAAY,MAAM,MAAM;AAAA,MAC/B;AAAA,IACF;AAAA,EACF;AAGA,MAAI,IAAI,SAAS,UAAU,IAAI,SAAS;AACtC,UAAM,SAAoB;AAAA,MACxB,MAAM;AAAA,MACN,MAAM,OAAO,KAAK,IAAI,OAAO;AAAA,IAC/B;AACA,QAAI,YAAa,QAAO,cAAc;AACtC,WAAO;AAAA,EACT;AAGA,MAAI,IAAI,SAAS,WAAW,IAAI,SAAS;AACvC,UAAM,SAAoB;AAAA,MACxB,OAAO,IAAI,QACR,IAAI,CAAC,WAAW;AACf,cAAM,YAAY,UAAU,MAAM;AAClC,eAAO,YAAY,eAAe,WAAW,MAAM,IAAI;AAAA,MACzD,CAAC,EACA,OAAO,CAAC,MAAsB,MAAM,IAAI;AAAA,IAC7C;AACA,QAAI,YAAa,QAAO,cAAc;AACtC,WAAO;AAAA,EACT;AAGA,MAAI,IAAI,SAAS,kBAAkB,IAAI,QAAQ,IAAI,OAAO;AACxD,UAAM,UAAU,UAAU,IAAI,IAAI;AAClC,UAAM,WAAW,UAAU,IAAI,KAAK;AACpC,UAAM,SAAoB;AAAA,MACxB,OAAO;AAAA,QACL,UAAU,eAAe,SAAS,IAAI,IAAI,IAAI,EAAE,MAAM,SAAS;AAAA,QAC/D,WAAW,eAAe,UAAU,IAAI,KAAK,IAAI,EAAE,MAAM,SAAS;AAAA,MACpE;AAAA,IACF;AACA,QAAI,YAAa,QAAO,cAAc;AACtC,WAAO;AAAA,EACT;AAGA,MAAI,IAAI,SAAS,aAAa,IAAI,UAAU,IAAI,OAAO,SAAS,GAAG;AACjE,UAAM,QAAQ,IAAI,OAAO,CAAC;AAC1B,UAAM,SAAoB;AAAA,MACxB,MAAM,OAAO;AAAA,MACb,MAAM,CAAC,KAAK;AAAA,IACd;AACA,QAAI,YAAa,QAAO,cAAc;AACtC,WAAO;AAAA,EACT;AAGA,MAAI,IAAI,SAAS,UAAU;AACzB,QAAI,uBAA4C;AAChD,QAAI,IAAI,WAAW;AACjB,YAAM,WAAW,UAAU,IAAI,SAAS;AACxC,UAAI,UAAU;AACZ,+BAAuB,eAAe,UAAU,IAAI,SAAS;AAAA,MAC/D;AAAA,IACF;AACA,UAAM,SAAoB;AAAA,MACxB,MAAM;AAAA,MACN;AAAA,IACF;AACA,QAAI,YAAa,QAAO,cAAc;AACtC,WAAO;AAAA,EACT;AAGA,MAAI,IAAI,SAAS,OAAO;AACtB,WAAO;AAAA,MACL,aAAa,eAAe;AAAA,IAC9B;AAAA,EACF;AAGA,MAAI,IAAI,SAAS,WAAW;AAC1B,WAAO;AAAA,MACL,aAAa,eAAe;AAAA,IAC9B;AAAA,EACF;AAGA,MAAI,IAAI,SAAS,QAAQ;AACvB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,aAAa,eAAe;AAAA,IAC9B;AAAA,EACF;AAGA,MAAI,IAAI,SAAS,UAAU;AACzB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa,eAAe;AAAA,IAC9B;AAAA,EACF;AAGA,MAAI,IAAI,SAAS,aAAa;AAC5B,WAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa,eAAe;AAAA,IAC9B;AAAA,EACF;AAGA,MAAI,IAAI,SAAS,QAAQ;AACvB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa,eAAe;AAAA,IAC9B;AAAA,EACF;AAGA,MAAI,IAAI,SAAS,QAAQ;AACvB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa,eAAe;AAAA,IAC9B;AAAA,EACF;AAGA,MAAI,IAAI,SAAS,OAAO;AACtB,WAAO;AAAA,MACL,MAAM;AAAA,MACN,aAAa,eAAe;AAAA,IAC9B;AAAA,EACF;AAGA,MAAI,IAAI,SAAS,aAAa,IAAI,WAAW;AAC3C,UAAM,WAAW,UAAU,IAAI,SAAS;AACxC,QAAI,UAAU;AACZ,aAAO,eAAe,UAAU,IAAI,SAAS;AAAA,IAC/C;AAAA,EACF;AAGA,MAAI,IAAI,SAAS,WAAW,IAAI,WAAW;AACzC,UAAM,WAAW,UAAU,IAAI,SAAS;AACxC,QAAI,UAAU;AACZ,aAAO,eAAe,UAAU,IAAI,SAAS;AAAA,IAC/C;AAAA,EACF;AAGA,UAAQ;AAAA,IACN,uBAAuB,IAAI,IAAI;AAAA,EACjC;AACA,SAAO;AAAA,IACL,MAAM;AAAA,IACN,aAAa,eAAe,qBAAqB,IAAI,IAAI;AAAA,EAC3D;AACF;;;ADrUA,SAAS,sBAAsB,EAAE,QAAQ,MAAM,IAA4B,CAAC,GAAG;AAE7E,QAAM,YAAuB,gBAAgB,EAAE,MAAM,CAAC;AAGtD,QAAM,SAAS,IAAI;AAAA,IACjB;AAAA,MACE,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA;AAAA,MACE,cAAc;AAAA,QACZ,OAAO,CAAC;AAAA,MACV;AAAA,IACF;AAAA,EACF;AAGA,SAAO,kBAAkB,wBAAwB,YAAY;AAC3D,UAAM,QAAQ,UACX,YAAY,EAAE,SAAS,MAAM,CAAC,EAC9B,UAAU,IAAI,CAAC,iBAAwC;AACtD,YAAM,WAAW,aAAa,KAC3B,QAAQ,YAAY,KAAK,EACzB,YAAY;AAEf,aAAO;AAAA,QACL,MAAM;AAAA,QACN,aACE,aAAa,YAAY,eACzB,WAAW,aAAa,IAAI;AAAA,QAC9B,aAAa,sBAAsB,aAAa,WAAW;AAAA,MAC7D;AAAA,IACF,CAAC;AAEH,WAAO,EAAE,MAAM;AAAA,EACjB,CAAC;AAGD,SAAO,kBAAkB,uBAAuB,OAAO,YAAY;AACjE,UAAM,EAAE,MAAM,WAAW,KAAK,IAAI,QAAQ;AAG1C,UAAM,eAAe,KAAK;AAAA,MAAQ;AAAA,MAAa,CAAC,GAAG,WACjD,OAAO,YAAY;AAAA,IACrB;AAGA,UAAM,eAAkD,UACrD,YAAY,EAAE,SAAS,MAAM,CAAC,EAC9B,UAAU;AAAA,MACT,CAAC,SAAgC,KAAK,SAAS;AAAA,IACjD;AAEF,QAAI,CAAC,cAAc;AACjB,YAAM,iBAAiB,UACpB,YAAY,EAAE,SAAS,MAAM,CAAC,EAC9B,UAAU;AAAA,QAAI,CAAC,SACd,KAAK,KAAK,QAAQ,YAAY,KAAK,EAAE,YAAY;AAAA,MACnD,EACC,KAAK,IAAI;AACZ,YAAM,IAAI;AAAA,QACR,iBAAiB,IAAI,sBAAsB,cAAc;AAAA,MAC3D;AAAA,IACF;AAEA,QAAI;AAEF,YAAM,gBAAgB,aAAa,YAAY,MAAM,QAAQ,CAAC,CAAC;AAG/D,YAAM,SAAS,MAAM,UAAU,aAAa,IAAI,EAAE,aAAa;AAE/D,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,KAAK,UAAU,QAAQ,MAAM,CAAC;AAAA,UACtC;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,UAAI,OAAO;AACT,gBAAQ;AAAA,UACN,6BAA6B,aAAa,IAAI,YAAY,IAAI;AAAA,UAC9D;AAAA,QACF;AAAA,MACF;AAEA,UAAI;AACJ,UAAI,oBAAoB;AAExB,UAAI,iBAAiB,OAAO;AAE1B,YAAI,MAAM,SAAS,YAAY;AAC7B,8BAAoB;AACpB,yBAAe,wBAAwB,aAAa,IAAI,KAAK,MAAM,OAAO;AAAA,QAC5E,OAAO;AACL,yBAAe,YAAY,aAAa,IAAI,KAAK,MAAM,OAAO;AAAA,QAChE;AAAA,MACF,OAAO;AACL,uBAAe,uBAAuB,aAAa,IAAI,KAAK,OAAO,KAAK,CAAC;AAAA,MAC3E;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,oBACF,GAAG,YAAY;AAAA;AAAA;AAAA,EAA+B,KAAK,UAAU,sBAAsB,aAAa,WAAW,GAAG,MAAM,CAAC,CAAC,KACtH;AAAA,UACN;AAAA,QACF;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAkBA,eAAe,eACb,UAAkC,CAAC,GACpB;AACf,QAAM,SAAS,sBAAsB,OAAO;AAC5C,QAAM,YAAY,IAAI,qBAAqB;AAE3C,SAAO,IAAI,QAAc,CAAC,YAAY;AACpC,QAAI,iBAAiB;AAErB,UAAM,UAAU,YAAY;AAC1B,UAAI,eAAgB;AACpB,uBAAiB;AAEjB,UAAI;AACF,cAAM,OAAO,MAAM;AAAA,MACrB,UAAE;AACA,gBAAQ;AAAA,MACV;AAAA,IACF;AAGA,WAAO,UAAU,MAAM;AACrB,cAAQ;AAAA,IACV;AAIA,YAAQ,KAAK,UAAU,OAAO;AAC9B,YAAQ,KAAK,WAAW,OAAO;AAE/B,WAAO,QAAQ,SAAS,EAAE,MAAM,CAAC,UAAU;AACzC,cAAQ,MAAM,+BAA+B,KAAK;AAClD,cAAQ,KAAK,CAAC;AAAA,IAChB,CAAC;AAAA,EACH,CAAC;AACH;AAGA,IAAI,YAAY,QAAQ,UAAU,QAAQ,KAAK,CAAC,CAAC,IAAI;AACnD,QAAM,QAAQ,QAAQ,KAAK,SAAS,SAAS;AAC7C,iBAAe,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,UAAU;AACzC,YAAQ,MAAM,+BAA+B,KAAK;AAClD,YAAQ,KAAK,CAAC;AAAA,EAChB,CAAC;AACH;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zapier/zapier-sdk-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "MCP server for Zapier SDK",
|
|
5
5
|
"main": "dist/index.mjs",
|
|
6
6
|
"types": "dist/index.d.mts",
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@modelcontextprotocol/sdk": "^1.17.3",
|
|
23
|
-
"zod": "
|
|
24
|
-
"@zapier/zapier-sdk": "0.
|
|
23
|
+
"zod": "4.2.1",
|
|
24
|
+
"@zapier/zapier-sdk": "0.16.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/node": "^20.0.0",
|