{"version":3,"sources":["../src/index.ts","../src/utils/schema-converter.ts","../package.json"],"sourcesContent":["import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n  CallToolRequestSchema,\n  ListToolsRequestSchema,\n  type CallToolRequest,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport {\n  addPlugin,\n  createSdk,\n  SDK_OPTIONS_ID,\n  CORE_OPTIONS_ID,\n  zapierCoreOptions,\n  DEPRECATION_NOTICE_EVENT,\n  zapierSdkPlugin,\n  runWithCallerContext,\n  isZapierApprovalError,\n  type ZapierSdkOptions,\n  type ZapierSdk,\n  type FunctionRegistryEntry,\n  type Plugin,\n  type PluginProvides,\n} from \"@zapier/zapier-sdk\";\nimport { zapierExperimentalSdkPlugin } from \"@zapier/zapier-sdk/experimental\";\nimport { convertZodToMcpSchema } from \"./utils/schema-converter.js\";\nimport packageJson from \"../package.json\" with { type: \"json\" };\n\ninterface ZapierMcpServerOptions {\n  debug?: boolean;\n  /**\n   * Forwarded to the underlying SDK so a CLI invocation like\n   * `zapier-sdk --max-concurrent-requests 50 mcp` actually constrains\n   * the MCP server's tool calls. Undefined falls through to the SDK's\n   * own resolution chain (option > env var > default).\n   */\n  maxConcurrentRequests?: number;\n  /**\n   * Extra plugins to layer onto the SDK before exposing it as MCP tools.\n   * Used by the CLI's `mcp` command to forward extensions discovered via\n   * the `ZAPIER_SDK_EXTENSIONS` env var. Standalone callers can omit this;\n   * the server then uses a vanilla public SDK. Each is forwarded to\n   * `addPlugin`, which accepts a legacy function plugin or a new-model plugin\n   * descriptor (`{ pluginType }`).\n   */\n  extensions?: (\n    | Plugin<unknown, PluginProvides>\n    | { readonly pluginType: string }\n  )[];\n  /**\n   * Build the server against `@zapier/zapier-sdk/experimental` instead of\n   * the stable surface, so experimental plugins appear as MCP tools.\n   * Mirrors the CLI's `--experimental` opt-in: a default invocation only\n   * ever sees stable plugins.\n   */\n  experimental?: 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({\n  debug = false,\n  maxConcurrentRequests,\n  extensions = [],\n  experimental = false,\n}: ZapierMcpServerOptions = {}) {\n  // Pick the SDK root by opt-in: the experimental aggregate is a strict\n  // superset (it re-exports zapierSdkPlugin plus the experimental plugins),\n  // so the registry path used below works the same regardless of root.\n  const sdkRootPlugin = experimental\n    ? zapierExperimentalSdkPlugin\n    : zapierSdkPlugin;\n\n  // Active SDK deprecation notices, keyed by notice id. The SDK's own\n  // console.warn goes to stderr, which agents never see over stdio — so the\n  // server attaches each active notice to every tool result, instructing the\n  // agent to relay it to the user. No per-call dedupe: an agent that ignores\n  // the block once still surfaces it on a later call. Keying by id keeps a\n  // single result from repeating the same notice.\n  const activeDeprecationNotices = new Map<string, string>();\n\n  const deprecationNoticeContent = () =>\n    Array.from(activeDeprecationNotices.values(), (message) => ({\n      type: \"text\" as const,\n      text: `⚠️ Zapier SDK deprecation notice: ${message} You **must** relay this warning to the user — this will break soon.`,\n    }));\n\n  const stackOptions: ZapierSdkOptions = {\n    debug,\n    maxConcurrentRequests,\n    eventEmission: { callContext: \"mcp\" },\n    callerPackage: { name: packageJson.name, version: packageJson.version },\n    approvalMode: \"throw\",\n    onEvent: (event) => {\n      if (event.type !== DEPRECATION_NOTICE_EVENT) return;\n      const { id, message } = event.payload ?? {};\n      if (typeof id === \"string\" && typeof message === \"string\") {\n        activeDeprecationNotices.set(id, message);\n      }\n    },\n  };\n  const zapierSdk: ZapierSdk = createSdk(sdkRootPlugin, {\n    configuration: {\n      [SDK_OPTIONS_ID]: stackOptions,\n      [CORE_OPTIONS_ID]: zapierCoreOptions,\n    },\n  }) as unknown as ZapierSdk;\n\n  // Layer extension plugins on top of the vanilla SDK so their methods show\n  // up in `getRegistry({ package: \"mcp\" })` alongside the public surface.\n  // Same robustness contract as the CLI: a broken extension warns and\n  // skips rather than killing the MCP server. `addPlugin` is atomic\n  // (validate-then-apply), so a failed extension leaves the sdk in its\n  // prior consistent state.\n  for (const ext of extensions) {\n    try {\n      addPlugin(zapierSdk, ext);\n    } catch (err) {\n      console.warn(\n        `Extension plugin failed to construct: ${(err as Error).message}; skipping.`,\n      );\n    }\n  }\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        const description =\n          functionInfo.description ||\n          functionInfo.inputSchema?.description ||\n          `Execute ${functionInfo.name}`;\n\n        return {\n          name: toolName,\n          description,\n          inputSchema: functionInfo.inputSchema\n            ? convertZodToMcpSchema(functionInfo.inputSchema)\n            : { type: \"object\", properties: {} },\n        };\n      });\n\n    return { tools };\n  });\n\n  // Execute SDK functions as tool calls. Kept separate from the registered\n  // handler so every return path — success, approval, and error results —\n  // flows through the deprecation-notice attachment below.\n  const handleToolCall = async (request: CallToolRequest) => {\n    const { name, arguments: args } = request.params;\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      let result: unknown;\n\n      if (functionInfo.inputSchema) {\n        const validatedArgs = functionInfo.inputSchema.parse(args || {});\n        const sdkFn = (\n          zapierSdk as unknown as Record<\n            string,\n            (...args: unknown[]) => Promise<unknown>\n          >\n        )[functionInfo.name];\n        // A method with a `positional` projection (fetch's `(url, init)`) takes\n        // ordered args, not the single bag; spread the validated object by its\n        // positional keys. Everything else is single-object.\n        result = functionInfo.positional?.length\n          ? await sdkFn(\n              ...functionInfo.positional.map(\n                (name) => (validatedArgs as Record<string, unknown>)[name],\n              ),\n            )\n          : await sdkFn(validatedArgs);\n      } else {\n        const sdkFn = (\n          zapierSdk as unknown as Record<\n            string,\n            (...args: unknown[]) => Promise<unknown>\n          >\n        )[functionInfo.name];\n        result = await sdkFn();\n      }\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      if (isZapierApprovalError(error)) {\n        switch (error.approvalStatus) {\n          // Pending approval: return the URL so the LLM can instruct the user\n          case \"pending\":\n            return {\n              content: [\n                {\n                  type: \"text\",\n                  text: `This action requires approval. The end user must open this link in their browser to approve this action, then retry this tool call:\\n\\n${error.approvalUrl}`,\n                },\n              ],\n              isError: false,\n            };\n          // Policy denied: hard deny, cannot be approved\n          case \"policy_denied\":\n            return {\n              content: [\n                {\n                  type: \"text\",\n                  text: `This action was denied by policy and cannot be approved:\\n\\n${error.message}`,\n                },\n              ],\n              isError: true,\n            };\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      const errorSchema = functionInfo.inputSchema\n        ? convertZodToMcpSchema(functionInfo.inputSchema)\n        : {};\n\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: isValidationError\n              ? `${errorMessage}\\n\\nExpected input format:\\n${JSON.stringify(errorSchema, null, 2)}`\n              : errorMessage,\n          },\n        ],\n        isError: true,\n      };\n    }\n  };\n\n  server.setRequestHandler(CallToolRequestSchema, async (request) => {\n    const { name } = request.params;\n    // Use the external wire name (e.g. \"run-action\"), not the camelCase SDK method.\n    return runWithCallerContext({ packageOperation: name }, async () => {\n      const result = await handleToolCall(request);\n      const notices = deprecationNoticeContent();\n      if (notices.length === 0) return result;\n      return { ...result, content: [...result.content, ...notices] };\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\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      if (innerSchema.type !== undefined) {\n        return {\n          ...innerSchema,\n          type: Array.isArray(innerSchema.type)\n            ? [...innerSchema.type, \"null\"]\n            : [innerSchema.type, \"null\"],\n        };\n      }\n      return {\n        anyOf: [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    const result: McpSchema = {};\n    if (description) result.description = description;\n    return result;\n  }\n\n  // Handle unknown\n  if (def.type === \"unknown\") {\n    const result: McpSchema = {};\n    if (description) result.description = description;\n    return result;\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","{\n  \"name\": \"@zapier/zapier-sdk-mcp\",\n  \"version\": \"0.21.9\",\n  \"description\": \"MCP server for Zapier SDK\",\n  \"main\": \"dist/index.mjs\",\n  \"types\": \"dist/index.d.mts\",\n  \"exports\": {\n    \".\": {\n      \"source\": \"./src/index.ts\",\n      \"import\": {\n        \"types\": \"./dist/index.d.mts\",\n        \"default\": \"./dist/index.mjs\"\n      },\n      \"default\": \"./dist/index.mjs\"\n    }\n  },\n  \"scripts\": {\n    \"build\": \"tsup\",\n    \"clean\": \"rm -rf dist\",\n    \"rebuild\": \"pnpm clean && pnpm build\",\n    \"dev\": \"tsup --watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"test\": \"vitest\",\n    \"test:run\": \"vitest run\",\n    \"prepublishOnly\": \"node ../../scripts/check-version.js\"\n  },\n  \"keywords\": [\n    \"zapier\",\n    \"sdk\",\n    \"mcp\",\n    \"model-context-protocol\"\n  ],\n  \"author\": \"\",\n  \"license\": \"SEE LICENSE IN LICENSE\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://gitlab.com/zapier/zapier-sdk/zapier-sdk.git\",\n    \"directory\": \"packages/zapier-sdk-mcp\"\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"dependencies\": {\n    \"@modelcontextprotocol/sdk\": \"^1.17.3\",\n    \"@zapier/zapier-sdk\": \"workspace:*\",\n    \"zod\": \"4.3.6\"\n  },\n  \"devDependencies\": {\n    \"@types/node\": \"^20.0.0\",\n    \"tsup\": \"^8.0.0\",\n    \"typescript\": \"^5.0.0\",\n    \"vitest\": \"^4.1.4\"\n  },\n  \"files\": [\n    \"dist\",\n    \"README.md\",\n    \"CHANGELOG.md\"\n  ]\n}\n"],"mappings":";AAAA,SAAS,cAAc;AACvB,SAAS,4BAA4B;AACrC;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAMK;AACP,SAAS,mCAAmC;;;ACoC5C,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,UAAI,YAAY,SAAS,QAAW;AAClC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,MAAM,MAAM,QAAQ,YAAY,IAAI,IAChC,CAAC,GAAG,YAAY,MAAM,MAAM,IAC5B,CAAC,YAAY,MAAM,MAAM;AAAA,QAC/B;AAAA,MACF;AACA,aAAO;AAAA,QACL,OAAO,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC;AAAA,MACvC;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,UAAM,SAAoB,CAAC;AAC3B,QAAI,YAAa,QAAO,cAAc;AACtC,WAAO;AAAA,EACT;AAGA,MAAI,IAAI,SAAS,WAAW;AAC1B,UAAM,SAAoB,CAAC;AAC3B,QAAI,YAAa,QAAO,cAAc;AACtC,WAAO;AAAA,EACT;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;;;AC/WA;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,MAAQ;AAAA,EACR,OAAS;AAAA,EACT,SAAW;AAAA,IACT,KAAK;AAAA,MACH,QAAU;AAAA,MACV,QAAU;AAAA,QACR,OAAS;AAAA,QACT,SAAW;AAAA,MACb;AAAA,MACA,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,IACT,OAAS;AAAA,IACT,SAAW;AAAA,IACX,KAAO;AAAA,IACP,WAAa;AAAA,IACb,MAAQ;AAAA,IACR,YAAY;AAAA,IACZ,gBAAkB;AAAA,EACpB;AAAA,EACA,UAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,QAAU;AAAA,EACV,SAAW;AAAA,EACX,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,IACP,WAAa;AAAA,EACf;AAAA,EACA,eAAiB;AAAA,IACf,QAAU;AAAA,EACZ;AAAA,EACA,cAAgB;AAAA,IACd,6BAA6B;AAAA,IAC7B,sBAAsB;AAAA,IACtB,KAAO;AAAA,EACT;AAAA,EACA,iBAAmB;AAAA,IACjB,eAAe;AAAA,IACf,MAAQ;AAAA,IACR,YAAc;AAAA,IACd,QAAU;AAAA,EACZ;AAAA,EACA,OAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AFiBA,SAAS,sBAAsB;AAAA,EAC7B,QAAQ;AAAA,EACR;AAAA,EACA,aAAa,CAAC;AAAA,EACd,eAAe;AACjB,IAA4B,CAAC,GAAG;AAI9B,QAAM,gBAAgB,eAClB,8BACA;AAQJ,QAAM,2BAA2B,oBAAI,IAAoB;AAEzD,QAAM,2BAA2B,MAC/B,MAAM,KAAK,yBAAyB,OAAO,GAAG,CAAC,aAAa;AAAA,IAC1D,MAAM;AAAA,IACN,MAAM,+CAAqC,OAAO;AAAA,EACpD,EAAE;AAEJ,QAAM,eAAiC;AAAA,IACrC;AAAA,IACA;AAAA,IACA,eAAe,EAAE,aAAa,MAAM;AAAA,IACpC,eAAe,EAAE,MAAM,gBAAY,MAAM,SAAS,gBAAY,QAAQ;AAAA,IACtE,cAAc;AAAA,IACd,SAAS,CAAC,UAAU;AAClB,UAAI,MAAM,SAAS,yBAA0B;AAC7C,YAAM,EAAE,IAAI,QAAQ,IAAI,MAAM,WAAW,CAAC;AAC1C,UAAI,OAAO,OAAO,YAAY,OAAO,YAAY,UAAU;AACzD,iCAAyB,IAAI,IAAI,OAAO;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AACA,QAAM,YAAuB,UAAU,eAAe;AAAA,IACpD,eAAe;AAAA,MACb,CAAC,cAAc,GAAG;AAAA,MAClB,CAAC,eAAe,GAAG;AAAA,IACrB;AAAA,EACF,CAAC;AAQD,aAAW,OAAO,YAAY;AAC5B,QAAI;AACF,gBAAU,WAAW,GAAG;AAAA,IAC1B,SAAS,KAAK;AACZ,cAAQ;AAAA,QACN,yCAA0C,IAAc,OAAO;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAGA,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,YAAM,cACJ,aAAa,eACb,aAAa,aAAa,eAC1B,WAAW,aAAa,IAAI;AAE9B,aAAO;AAAA,QACL,MAAM;AAAA,QACN;AAAA,QACA,aAAa,aAAa,cACtB,sBAAsB,aAAa,WAAW,IAC9C,EAAE,MAAM,UAAU,YAAY,CAAC,EAAE;AAAA,MACvC;AAAA,IACF,CAAC;AAEH,WAAO,EAAE,MAAM;AAAA,EACjB,CAAC;AAKD,QAAM,iBAAiB,OAAO,YAA6B;AACzD,UAAM,EAAE,MAAM,WAAW,KAAK,IAAI,QAAQ;AAE1C,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;AACF,UAAI;AAEJ,UAAI,aAAa,aAAa;AAC5B,cAAM,gBAAgB,aAAa,YAAY,MAAM,QAAQ,CAAC,CAAC;AAC/D,cAAM,QACJ,UAIA,aAAa,IAAI;AAInB,iBAAS,aAAa,YAAY,SAC9B,MAAM;AAAA,UACJ,GAAG,aAAa,WAAW;AAAA,YACzB,CAACA,UAAU,cAA0CA,KAAI;AAAA,UAC3D;AAAA,QACF,IACA,MAAM,MAAM,aAAa;AAAA,MAC/B,OAAO;AACL,cAAM,QACJ,UAIA,aAAa,IAAI;AACnB,iBAAS,MAAM,MAAM;AAAA,MACvB;AAEA,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,sBAAsB,KAAK,GAAG;AAChC,gBAAQ,MAAM,gBAAgB;AAAA;AAAA,UAE5B,KAAK;AACH,mBAAO;AAAA,cACL,SAAS;AAAA,gBACP;AAAA,kBACE,MAAM;AAAA,kBACN,MAAM;AAAA;AAAA,EAA0I,MAAM,WAAW;AAAA,gBACnK;AAAA,cACF;AAAA,cACA,SAAS;AAAA,YACX;AAAA;AAAA,UAEF,KAAK;AACH,mBAAO;AAAA,cACL,SAAS;AAAA,gBACP;AAAA,kBACE,MAAM;AAAA,kBACN,MAAM;AAAA;AAAA,EAA+D,MAAM,OAAO;AAAA,gBACpF;AAAA,cACF;AAAA,cACA,SAAS;AAAA,YACX;AAAA,QACJ;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,YAAM,cAAc,aAAa,cAC7B,sBAAsB,aAAa,WAAW,IAC9C,CAAC;AAEL,aAAO;AAAA,QACL,SAAS;AAAA,UACP;AAAA,YACE,MAAM;AAAA,YACN,MAAM,oBACF,GAAG,YAAY;AAAA;AAAA;AAAA,EAA+B,KAAK,UAAU,aAAa,MAAM,CAAC,CAAC,KAClF;AAAA,UACN;AAAA,QACF;AAAA,QACA,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAEA,SAAO,kBAAkB,uBAAuB,OAAO,YAAY;AACjE,UAAM,EAAE,KAAK,IAAI,QAAQ;AAEzB,WAAO,qBAAqB,EAAE,kBAAkB,KAAK,GAAG,YAAY;AAClE,YAAM,SAAS,MAAM,eAAe,OAAO;AAC3C,YAAM,UAAU,yBAAyB;AACzC,UAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,aAAO,EAAE,GAAG,QAAQ,SAAS,CAAC,GAAG,OAAO,SAAS,GAAG,OAAO,EAAE;AAAA,IAC/D,CAAC;AAAA,EACH,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;","names":["name"]}