woo-mcp-server 1.0.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/LICENSE +21 -0
- package/README.md +389 -0
- package/dist/cli.js +3021 -0
- package/dist/cli.js.map +1 -0
- package/dist/server.cjs +3061 -0
- package/dist/server.cjs.map +1 -0
- package/dist/server.d.cts +151 -0
- package/dist/server.d.ts +151 -0
- package/dist/server.js +3021 -0
- package/dist/server.js.map +1 -0
- package/package.json +68 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/server.ts","../src/config.ts","../src/client.ts","../src/tools/products.ts","../src/errors.ts","../src/types.ts","../src/tools/orders.ts","../src/tools/customers.ts","../src/tools/coupons.ts","../src/tools/categories.ts","../src/tools/tags.ts","../src/tools/variations.ts","../src/tools/shipping.ts","../src/tools/payments.ts","../src/tools/reports.ts","../src/tools/settings.ts","../src/tools/system-status.ts","../src/tools/webhooks.ts","../src/tools/tax.ts","../src/resources/store-info.ts","../src/resources/api-schema.ts","../src/prompts/store-audit.ts","../src/prompts/order-report.ts","../src/prompts/inventory-check.ts","../src/registry.ts","../src/cli.ts"],"sourcesContent":["/**\n * WooCommerce MCP server bootstrap (STDIO transport).\n *\n * Creates a configured McpServer, wires the WooCommerce client, and registers\n * all tools/resources/prompts. The CLI entrypoint connects STDIO transport.\n */\n\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { loadConfig, type McpConfig } from \"./config.js\";\nimport { createWooClient, type WooClient } from \"./client.js\";\nimport { registerAll } from \"./registry.js\";\n\nexport const SERVER_NAME = \"woo-mcp-server\";\nexport const SERVER_VERSION = \"1.0.0\";\n\nexport interface CreateServerOptions {\n /** Pre-validated config; if omitted, loaded from process.env */\n config?: McpConfig;\n /** Inject a pre-built client (tests) */\n client?: WooClient;\n}\n\nexport interface CreatedServer {\n server: McpServer;\n client: WooClient;\n config: McpConfig;\n}\n\n/**\n * Build an MCP server instance with all capabilities registered.\n * Does not connect transport — call connectStdio() or use startServer().\n */\nexport function createServer(options: CreateServerOptions = {}): CreatedServer {\n const config = options.config ?? loadConfig();\n const client = options.client ?? createWooClient(config);\n\n const server = new McpServer({\n name: SERVER_NAME,\n version: SERVER_VERSION,\n });\n\n registerAll(server, client);\n\n return { server, client, config };\n}\n\n/**\n * Connect the server to STDIO transport (Claude Desktop compatible).\n */\nexport async function connectStdio(server: McpServer): Promise<void> {\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\n/**\n * Full startup: validate env, create server, connect STDIO.\n * Exits process with code 1 on configuration failure.\n */\nexport async function startServer(): Promise<CreatedServer> {\n let created: CreatedServer;\n try {\n created = createServer();\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n // Write to stderr so STDIO protocol stdout stays clean\n console.error(message);\n process.exit(1);\n }\n\n await connectStdio(created.server);\n return created;\n}\n\nexport { loadConfig, createWooClient, registerAll };\nexport type { McpConfig, WooClient };\n","/**\n * Environment-based configuration for the WooCommerce MCP server.\n * Validates required credentials at startup — no silent fallbacks.\n */\n\nimport { z } from \"zod\";\n\n/**\n * Zod schema for MCP server environment configuration.\n * WC_URL, WC_KEY, and WC_SECRET are mandatory; the server refuses to start without them.\n */\nexport const ConfigSchema = z.object({\n WC_URL: z\n .string({ required_error: \"WC_URL is required\" })\n .url(\"WC_URL must be a valid URL (e.g. https://mystore.com)\")\n .describe(\"Base URL of the WooCommerce store\"),\n WC_KEY: z\n .string({ required_error: \"WC_KEY is required\" })\n .min(1, \"WC_KEY cannot be empty\")\n .describe(\"WooCommerce REST API consumer key (ck_...)\"),\n WC_SECRET: z\n .string({ required_error: \"WC_SECRET is required\" })\n .min(1, \"WC_SECRET cannot be empty\")\n .describe(\"WooCommerce REST API consumer secret (cs_...)\"),\n WC_VERSION: z\n .string()\n .default(\"wc/v3\")\n .describe(\"WooCommerce REST API version prefix\"),\n WC_RATE_LIMIT_PER_SECOND: z.coerce\n .number()\n .int()\n .positive()\n .default(5)\n .describe(\"Max outgoing WC API requests per second (default 5)\"),\n WC_QUERY_STRING_AUTH: z\n .enum([\"true\", \"false\", \"1\", \"0\", \"\"])\n .optional()\n .transform((v) => v === \"true\" || v === \"1\")\n .describe(\"Use query-string auth instead of Basic Auth over HTTPS\"),\n});\n\nexport type McpConfig = z.infer<typeof ConfigSchema>;\n\nconst MISSING_ENV_HELP = `\nWooCommerce MCP Server configuration error.\n\nRequired environment variables:\n WC_URL — Store base URL, e.g. https://mystore.com\n WC_KEY — REST API consumer key (WooCommerce → Settings → Advanced → REST API)\n WC_SECRET — REST API consumer secret\n\nOptional:\n WC_VERSION — API version (default: wc/v3)\n WC_RATE_LIMIT_PER_SECOND — Max requests/sec (default: 5)\n WC_QUERY_STRING_AUTH — \"true\" to pass credentials as query params\n\nExample (Claude Desktop config):\n {\n \"mcpServers\": {\n \"woocommerce\": {\n \"command\": \"npx\",\n \"args\": [\"woo-mcp-server\"],\n \"env\": {\n \"WC_URL\": \"https://mystore.com\",\n \"WC_KEY\": \"ck_xxxxxxxx\",\n \"WC_SECRET\": \"cs_xxxxxxxx\"\n }\n }\n }\n }\n`.trim();\n\n/**\n * Load and validate config from process.env.\n * Throws a clear, actionable error if required vars are missing.\n */\nexport function loadConfig(env: NodeJS.ProcessEnv = process.env): McpConfig {\n const result = ConfigSchema.safeParse({\n WC_URL: env.WC_URL,\n WC_KEY: env.WC_KEY,\n WC_SECRET: env.WC_SECRET,\n WC_VERSION: env.WC_VERSION,\n WC_RATE_LIMIT_PER_SECOND: env.WC_RATE_LIMIT_PER_SECOND ?? \"5\",\n WC_QUERY_STRING_AUTH: env.WC_QUERY_STRING_AUTH ?? \"\",\n });\n\n if (!result.success) {\n const details = result.error.issues\n .map((i) => ` - ${i.path.join(\".\")}: ${i.message}`)\n .join(\"\\n\");\n throw new Error(`${MISSING_ENV_HELP}\\n\\nValidation issues:\\n${details}`);\n }\n\n return result.data;\n}\n","/**\n * WooCommerce API client factory with rate limiting.\n *\n * Uses the library's built-in Throttler (via maxConcurrentRequests) and an\n * additional token-bucket style limiter driven by WC_RATE_LIMIT_PER_SECOND.\n * Does NOT rewrite OAuth/HTTP — delegates entirely to WooCommerceRestApi.\n */\n\nimport WooCommerceRestApiImport, {\n parsePaginationHeaders,\n type WooCommerceApiResponse,\n} from \"woocommerce-rest-ts-api\";\nimport type { McpConfig } from \"./config.js\";\n\n// CJS/ESM interop: default export may be nested under .default when resolved via NodeNext.\nconst WooCommerceRestApi =\n (WooCommerceRestApiImport as unknown as { default?: typeof WooCommerceRestApiImport })\n .default ?? WooCommerceRestApiImport;\n\n/**\n * Minimal Throttler interface matching the library's src/http/Throttler.ts.\n * We re-implement the same concurrency limiter here because the class is not\n * part of the package public exports, while still following its contract so\n * the MCP layer stays aligned with the library's throttling model.\n */\nexport interface Throttler {\n acquire(): Promise<void>;\n release(): void;\n}\n\n/**\n * Concurrency throttler (same algorithm as woocommerce-rest-ts-api Throttler).\n */\nexport class ConcurrencyThrottler implements Throttler {\n private current = 0;\n private readonly queue: Array<() => void> = [];\n private readonly maxConcurrent: number;\n\n constructor(maxConcurrent: number) {\n this.maxConcurrent = maxConcurrent;\n }\n\n async acquire(): Promise<void> {\n if (this.maxConcurrent <= 0) return;\n if (this.current < this.maxConcurrent) {\n this.current++;\n return;\n }\n return new Promise<void>((resolve) => {\n this.queue.push(() => {\n this.current++;\n resolve();\n });\n });\n }\n\n release(): void {\n if (this.maxConcurrent <= 0) return;\n this.current = Math.max(0, this.current - 1);\n const next = this.queue.shift();\n if (next) next();\n }\n}\n\n/**\n * Rate limiter: enforces a maximum number of operations per second\n * using a sliding window + the Throttler concurrency gate.\n */\nexport class RateLimiter {\n private readonly intervalMs: number;\n private readonly throttler: Throttler;\n private lastRequestAt = 0;\n private chain: Promise<void> = Promise.resolve();\n\n constructor(requestsPerSecond: number, maxConcurrent?: number) {\n this.intervalMs = Math.ceil(1000 / Math.max(1, requestsPerSecond));\n // Align concurrent slots with rate limit (library Throttler pattern)\n this.throttler = new ConcurrencyThrottler(\n maxConcurrent ?? Math.max(1, requestsPerSecond),\n );\n }\n\n /**\n * Schedule `fn` to run respecting both rate and concurrency limits.\n */\n async schedule<T>(fn: () => Promise<T>): Promise<T> {\n // Serialize start times so we never exceed N starts per second\n const run = this.chain.then(async () => {\n const now = Date.now();\n const wait = Math.max(0, this.lastRequestAt + this.intervalMs - now);\n if (wait > 0) {\n await new Promise((r) => setTimeout(r, wait));\n }\n this.lastRequestAt = Date.now();\n });\n // Keep chain alive even if a prior task rejects\n this.chain = run.catch(() => undefined);\n await run;\n\n await this.throttler.acquire();\n try {\n return await fn();\n } finally {\n this.throttler.release();\n }\n }\n}\n\n/** Minimal surface we need from WooCommerceRestApi (avoids default-export type issues). */\nexport interface WooApi {\n get<T = unknown>(\n endpoint: string,\n params?: Record<string, unknown>,\n ): Promise<WooCommerceApiResponse<T>>;\n post<T = unknown>(\n endpoint: string,\n data: Record<string, unknown>,\n params?: Record<string, unknown>,\n ): Promise<WooCommerceApiResponse<T>>;\n put<T = unknown>(\n endpoint: string,\n data: Record<string, unknown>,\n params?: Record<string, unknown>,\n ): Promise<WooCommerceApiResponse<T>>;\n delete<T = unknown>(\n endpoint: string,\n data?: { force?: boolean },\n params?: { id?: number },\n ): Promise<WooCommerceApiResponse<T>>;\n options<T = unknown>(\n endpoint: string,\n params?: Record<string, unknown>,\n ): Promise<WooCommerceApiResponse<T>>;\n}\n\nexport interface WooClient {\n api: WooApi;\n rateLimiter: RateLimiter;\n config: McpConfig;\n /** Rate-limited GET */\n get<T = unknown>(\n endpoint: string,\n params?: Record<string, unknown>,\n ): Promise<WooCommerceApiResponse<T>>;\n /** Rate-limited POST */\n post<T = unknown>(\n endpoint: string,\n data: Record<string, unknown>,\n params?: Record<string, unknown>,\n ): Promise<WooCommerceApiResponse<T>>;\n /** Rate-limited PUT */\n put<T = unknown>(\n endpoint: string,\n data: Record<string, unknown>,\n params?: Record<string, unknown>,\n ): Promise<WooCommerceApiResponse<T>>;\n /** Rate-limited DELETE */\n delete<T = unknown>(\n endpoint: string,\n data?: { force?: boolean },\n params?: { id?: number },\n ): Promise<WooCommerceApiResponse<T>>;\n /** Extract pagination meta from a list response */\n pagination(\n response: WooCommerceApiResponse<unknown>,\n page: number,\n perPage: number,\n ): { total: number; totalPages: number; currentPage: number; perPage: number };\n}\n\n/**\n * Create a rate-limited WooCommerce client from validated config.\n */\nexport function createWooClient(config: McpConfig): WooClient {\n const rateLimiter = new RateLimiter(config.WC_RATE_LIMIT_PER_SECOND);\n\n // Library's internal Throttler is engaged via maxConcurrentRequests.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const ApiCtor = WooCommerceRestApi as any;\n const apiInstance = new ApiCtor({\n url: config.WC_URL,\n consumerKey: config.WC_KEY,\n consumerSecret: config.WC_SECRET,\n version: config.WC_VERSION,\n queryStringAuth: config.WC_QUERY_STRING_AUTH,\n maxConcurrentRequests: config.WC_RATE_LIMIT_PER_SECOND,\n }) as WooApi;\n\n /**\n * WooCommerce REST rejects empty/undefined enum query params with HTTP 400\n * (\"order is not one of asc and desc\", etc.). Strip nullish values before send.\n */\n const cleanParams = (\n params?: Record<string, unknown>,\n ): Record<string, unknown> | undefined => {\n if (!params) return undefined;\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(params)) {\n if (v === undefined || v === null || v === \"\") continue;\n out[k] = v;\n }\n return Object.keys(out).length ? out : undefined;\n };\n\n const client: WooClient = {\n api: apiInstance,\n rateLimiter,\n config,\n get: (endpoint, params) =>\n rateLimiter.schedule(() => apiInstance.get(endpoint, cleanParams(params))),\n post: (endpoint, data, params) =>\n rateLimiter.schedule(() =>\n apiInstance.post(endpoint, data, cleanParams(params)),\n ),\n put: (endpoint, data, params) =>\n rateLimiter.schedule(() =>\n apiInstance.put(endpoint, data, cleanParams(params)),\n ),\n delete: (endpoint, data, params) =>\n rateLimiter.schedule(() =>\n apiInstance.delete(\n endpoint,\n data ?? { force: true },\n cleanParams(params as Record<string, unknown>) as\n | { id?: number }\n | undefined,\n ),\n ),\n pagination(response, page, perPage) {\n const info = parsePaginationHeaders(response);\n return {\n total: info.total,\n totalPages: info.totalPages,\n currentPage: page,\n perPage,\n };\n },\n };\n\n return client;\n}\n","/**\n * Product tools — list, get, create, update, delete, search, batch.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport {\n BatchOperationSchema,\n BatchResponseSchema,\n DeleteResponseSchema,\n PaginationInputSchema,\n ProductSchema,\n parseListOutput,\n parseSingleOutput,\n textContent,\n} from \"../types.js\";\n\nconst ProductCreateSchema = z\n .object({\n name: z.string().describe(\"Product name. Example: \\\"Blue T-Shirt\\\"\"),\n type: z\n .enum([\"simple\", \"grouped\", \"external\", \"variable\"])\n .optional()\n .describe(\"Product type. Default simple.\"),\n regular_price: z\n .string()\n .optional()\n .describe(\"Regular price as string. Example: \\\"29.99\\\"\"),\n description: z.string().optional().describe(\"Full HTML description\"),\n short_description: z.string().optional().describe(\"Short description / excerpt\"),\n sku: z.string().optional().describe(\"Stock keeping unit\"),\n manage_stock: z.boolean().optional().describe(\"Whether to manage stock\"),\n stock_quantity: z.number().optional().describe(\"Stock quantity when manage_stock is true\"),\n categories: z\n .array(z.object({ id: z.number() }))\n .optional()\n .describe(\"Category IDs to assign\"),\n images: z\n .array(z.object({ src: z.string().url() }))\n .optional()\n .describe(\"Product images by source URL\"),\n status: z\n .enum([\"draft\", \"pending\", \"private\", \"publish\"])\n .optional()\n .describe(\"Publish status\"),\n })\n .passthrough();\n\nexport function registerProductTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_products_list\",\n {\n title: \"List products\",\n description:\n \"Lists products from the WooCommerce catalog with pagination. Use this when you need to browse the catalog, build an inventory overview, or feed product data into a report. Returns product objects plus pagination metadata (total, totalPages, currentPage).\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n status: z\n .enum([\"any\", \"draft\", \"pending\", \"private\", \"publish\"])\n .optional()\n .describe(\"Filter by publish status. Example: publish\"),\n category: z\n .string()\n .optional()\n .describe(\"Filter by category ID. Example: \\\"15\\\"\"),\n tag: z.string().optional().describe(\"Filter by tag ID\"),\n stock_status: z\n .enum([\"instock\", \"outofstock\", \"onbackorder\"])\n .optional()\n .describe(\"Filter by stock status\"),\n orderby: z\n .enum([\"date\", \"id\", \"title\", \"slug\", \"price\", \"popularity\", \"rating\"])\n .optional()\n .describe(\"Sort field\"),\n order: z.enum([\"asc\", \"desc\"]).optional().describe(\"Sort direction\"),\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"products\", {\n page,\n per_page,\n status: args.status,\n category: args.category,\n tag: args.tag,\n stock_status: args.stock_status,\n orderby: args.orderby,\n order: args.order,\n });\n const meta = client.pagination(res, page, per_page);\n const out = parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n ProductSchema,\n );\n return textContent(out);\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_products_get\",\n {\n title: \"Get product\",\n description:\n \"Retrieves a single product by its numeric ID, including prices, stock, images, categories, and attributes. Use this when you already know the product ID and need full details for editing, display, or diagnostics.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Product ID. Example: 42\"),\n },\n },\n async (args) => {\n try {\n const res = await client.get(\"products\", { id: args.id });\n return textContent(parseSingleOutput(res.data, ProductSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_products_create\",\n {\n title: \"Create product\",\n description:\n \"Creates a new product in the WooCommerce catalog. Use this to add simple or variable products with pricing, descriptions, categories, and images. Returns the created product object including the new ID.\",\n inputSchema: ProductCreateSchema.shape,\n },\n async (args) => {\n try {\n const res = await client.post(\"products\", args as Record<string, unknown>);\n return textContent(parseSingleOutput(res.data, ProductSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_products_update\",\n {\n title: \"Update product\",\n description:\n \"Updates an existing product by ID. Only fields you provide are changed (partial update). Use this for price changes, stock adjustments, description edits, or status transitions without re-sending the full product.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Product ID to update\"),\n data: ProductCreateSchema.partial()\n .passthrough()\n .describe(\"Fields to update on the product\"),\n },\n },\n async (args) => {\n try {\n const res = await client.put(\n \"products\",\n args.data as Record<string, unknown>,\n { id: args.id },\n );\n return textContent(parseSingleOutput(res.data, ProductSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_products_delete\",\n {\n title: \"Delete product\",\n description:\n \"Deletes a product by ID. By default force=true permanently deletes; set force=false to move to trash when supported. Use this for catalog cleanup or removing test products.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Product ID to delete\"),\n force: z\n .boolean()\n .default(true)\n .optional()\n .describe(\"Permanently delete when true (default true)\"),\n },\n },\n async (args) => {\n try {\n const res = await client.delete(\n \"products\",\n { force: args.force ?? true },\n { id: args.id },\n );\n const out = DeleteResponseSchema.parse({\n deleted: true,\n previous: res.data,\n id: args.id,\n });\n return textContent(out);\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_products_search\",\n {\n title: \"Search products\",\n description:\n \"Searches products by a free-text query matching name, SKU, and description fields. Use this when the user asks to find products by keyword rather than by ID or filters. Returns paginated matching products.\",\n inputSchema: {\n query: z\n .string()\n .min(1)\n .describe(\"Search query string. Example: \\\"blue shirt\\\"\"),\n ...PaginationInputSchema.shape,\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"products\", {\n search: args.query,\n page,\n per_page,\n });\n const meta = client.pagination(res, page, per_page);\n const out = parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n ProductSchema,\n );\n return textContent(out);\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_products_batch\",\n {\n title: \"Batch products\",\n description:\n \"Performs multiple product create, update, and/or delete operations in a single API call. Use this for bulk catalog imports, mass price updates, or multi-item cleanup to reduce round-trips and respect rate limits.\",\n inputSchema: BatchOperationSchema.shape,\n },\n async (args) => {\n try {\n const res = await client.post(\"products/batch\", args as Record<string, unknown>);\n const out = BatchResponseSchema.parse(res.data ?? {});\n return textContent(out);\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * MCP-aware error normalization.\n * Converts WooCommerce / Axios / unknown errors into structured tool error payloads\n * instead of dumping raw HTTP stacks to the model.\n */\n\nimport { WooCommerceApiError, AuthenticationError, OptionsException } from \"woocommerce-rest-ts-api\";\n\nexport interface McpToolErrorPayload {\n isError: true;\n content: Array<{ type: \"text\"; text: string }>;\n}\n\nexport interface NormalizedError {\n code: string;\n message: string;\n status?: number;\n details?: unknown;\n}\n\nfunction messageOf(err: unknown, fallback: string): string {\n if (err instanceof Error && err.message) return err.message;\n if (typeof err === \"string\" && err) return err;\n return fallback;\n}\n\n/**\n * Normalize any thrown value into a structured error object.\n */\nexport function normalizeError(err: unknown): NormalizedError {\n if (err instanceof AuthenticationError) {\n return {\n code: \"authentication_error\",\n message: messageOf(\n err,\n \"WooCommerce authentication failed. Check WC_KEY and WC_SECRET.\",\n ),\n status: 401,\n };\n }\n\n if (err instanceof WooCommerceApiError) {\n const anyErr = err as WooCommerceApiError & {\n response?: { status?: number; data?: unknown };\n statusCode?: number;\n code?: string;\n };\n const maybeStatus = (err as { status?: unknown }).status;\n const status =\n anyErr.statusCode ??\n anyErr.response?.status ??\n (typeof maybeStatus === \"number\" ? maybeStatus : undefined);\n return {\n code: anyErr.code || \"woocommerce_api_error\",\n message: messageOf(err, \"WooCommerce API request failed\"),\n status,\n details: anyErr.response?.data,\n };\n }\n\n if (err instanceof OptionsException) {\n return {\n code: \"options_error\",\n message: messageOf(err, \"Invalid WooCommerce client options\"),\n };\n }\n\n if (err instanceof Error) {\n // Axios-style errors often carry response\n const axiosLike = err as Error & {\n response?: { status?: number; data?: { message?: string; code?: string } };\n code?: string;\n status?: number;\n };\n if (axiosLike.response) {\n const data = axiosLike.response.data;\n return {\n code: data?.code || axiosLike.code || \"http_error\",\n message:\n data?.message ||\n messageOf(err, `HTTP ${axiosLike.response.status} error from WooCommerce`),\n status: axiosLike.response.status,\n details: data,\n };\n }\n return {\n code: axiosLike.code || \"internal_error\",\n message: messageOf(err, \"Internal error\"),\n status: axiosLike.status,\n };\n }\n\n return {\n code: \"unknown_error\",\n message: typeof err === \"string\" ? err : \"An unknown error occurred\",\n };\n}\n\n/**\n * Format a normalized error as an MCP tool error result.\n */\nexport function toMcpToolError(err: unknown): McpToolErrorPayload {\n const normalized = normalizeError(err);\n const parts = [\n `Error [${normalized.code}]${normalized.status ? ` (HTTP ${normalized.status})` : \"\"}: ${normalized.message}`,\n ];\n if (normalized.details !== undefined) {\n try {\n parts.push(`Details: ${JSON.stringify(normalized.details)}`);\n } catch {\n // ignore non-serializable details\n }\n }\n return {\n isError: true,\n content: [{ type: \"text\", text: parts.join(\"\\n\") }],\n };\n}\n\n/**\n * Wrap an async tool handler so uncaught errors become MCP tool errors.\n */\nexport function withToolErrorHandling<TArgs, TResult>(\n handler: (args: TArgs) => Promise<TResult>,\n): (args: TArgs) => Promise<TResult | McpToolErrorPayload> {\n return async (args: TArgs) => {\n try {\n return await handler(args);\n } catch (err) {\n return toMcpToolError(err);\n }\n };\n}\n","/**\n * Shared Zod schemas for MCP tool inputs and outputs.\n * Every tool validates both directions: input from the model, output from WC API.\n */\n\nimport { z } from \"zod\";\n\n// ─── Pagination ───────────────────────────────────────────────────────────────\n\nexport const PaginationInputSchema = z.object({\n page: z\n .number()\n .int()\n .min(1)\n .default(1)\n .describe(\"Page number to retrieve (1-based). Example: 1\")\n .optional(),\n per_page: z\n .number()\n .int()\n .min(1)\n .max(100)\n .default(10)\n .describe(\"Number of items per page (1–100). Example: 20\")\n .optional(),\n});\n\nexport const PaginationMetaSchema = z.object({\n total: z.number().describe(\"Total number of matching items across all pages\"),\n totalPages: z.number().describe(\"Total number of pages available\"),\n currentPage: z.number().describe(\"The page that was returned\"),\n perPage: z.number().describe(\"Items requested per page\"),\n});\n\nexport type PaginationMeta = z.infer<typeof PaginationMetaSchema>;\n\n// ─── Common entity fragments ──────────────────────────────────────────────────\n\n/** Loose object for WC entities — validates shape without rejecting extra fields.\n * `id` may be number (products/orders) or string (payment gateways, shipping methods).\n */\nexport const WcEntitySchema = z\n .object({\n id: z.union([z.number(), z.string()]).optional(),\n })\n .passthrough();\n\nexport const ProductSchema = z\n .object({\n id: z.number().optional(),\n name: z.string().optional(),\n slug: z.string().optional(),\n permalink: z.string().optional(),\n type: z.string().optional(),\n status: z.string().optional(),\n description: z.string().optional(),\n short_description: z.string().optional(),\n sku: z.string().optional(),\n price: z.union([z.string(), z.number()]).optional(),\n regular_price: z.union([z.string(), z.number()]).optional(),\n sale_price: z.union([z.string(), z.number()]).optional(),\n stock_quantity: z.number().nullable().optional(),\n stock_status: z.string().optional(),\n manage_stock: z.boolean().optional(),\n categories: z.array(z.unknown()).optional(),\n tags: z.array(z.unknown()).optional(),\n images: z.array(z.unknown()).optional(),\n })\n .passthrough();\n\nexport const OrderSchema = z\n .object({\n id: z.number().optional(),\n status: z.string().optional(),\n currency: z.string().optional(),\n total: z.union([z.string(), z.number()]).optional(),\n customer_id: z.number().optional(),\n billing: z.record(z.unknown()).optional(),\n shipping: z.record(z.unknown()).optional(),\n line_items: z.array(z.unknown()).optional(),\n date_created: z.string().optional(),\n })\n .passthrough();\n\nexport const CustomerSchema = z\n .object({\n id: z.number().optional(),\n email: z.string().optional(),\n first_name: z.string().optional(),\n last_name: z.string().optional(),\n username: z.string().optional(),\n role: z.string().optional(),\n billing: z.record(z.unknown()).optional(),\n shipping: z.record(z.unknown()).optional(),\n })\n .passthrough();\n\nexport const CouponSchema = z\n .object({\n id: z.number().optional(),\n code: z.string().optional(),\n amount: z.union([z.string(), z.number()]).optional(),\n discount_type: z.string().optional(),\n description: z.string().optional(),\n })\n .passthrough();\n\nexport const CategorySchema = z\n .object({\n id: z.number().optional(),\n name: z.string().optional(),\n slug: z.string().optional(),\n parent: z.number().optional(),\n description: z.string().optional(),\n count: z.number().optional(),\n })\n .passthrough();\n\nexport const TagSchema = z\n .object({\n id: z.number().optional(),\n name: z.string().optional(),\n slug: z.string().optional(),\n description: z.string().optional(),\n count: z.number().optional(),\n })\n .passthrough();\n\nexport const VariationSchema = z\n .object({\n id: z.number().optional(),\n sku: z.string().optional(),\n price: z.union([z.string(), z.number()]).optional(),\n regular_price: z.union([z.string(), z.number()]).optional(),\n stock_quantity: z.number().nullable().optional(),\n stock_status: z.string().optional(),\n attributes: z.array(z.unknown()).optional(),\n })\n .passthrough();\n\nexport const WebhookSchema = z\n .object({\n id: z.number().optional(),\n name: z.string().optional(),\n status: z.string().optional(),\n topic: z.string().optional(),\n delivery_url: z.string().optional(),\n })\n .passthrough();\n\nexport const TaxRateSchema = z\n .object({\n id: z.number().optional(),\n country: z.string().optional(),\n state: z.string().optional(),\n rate: z.string().optional(),\n name: z.string().optional(),\n class: z.string().optional(),\n })\n .passthrough();\n\nexport const OrderNoteSchema = z\n .object({\n id: z.number().optional(),\n author: z.string().optional(),\n date_created: z.string().optional(),\n note: z.string().optional(),\n customer_note: z.boolean().optional(),\n })\n .passthrough();\n\n// ─── List response wrapper ────────────────────────────────────────────────────\n\nexport function listResponseSchema<T extends z.ZodTypeAny>(itemSchema: T) {\n return z.object({\n items: z.array(itemSchema),\n pagination: PaginationMetaSchema,\n });\n}\n\nexport function singleResponseSchema<T extends z.ZodTypeAny>(itemSchema: T) {\n return z.object({\n item: itemSchema,\n });\n}\n\nexport const DeleteResponseSchema = z.object({\n deleted: z.boolean(),\n previous: z.unknown().optional(),\n id: z.number().optional(),\n});\n\nexport const BatchResponseSchema = z.object({\n create: z.array(z.unknown()).optional(),\n update: z.array(z.unknown()).optional(),\n delete: z.array(z.unknown()).optional(),\n});\n\n// ─── Batch operation input ────────────────────────────────────────────────────\n\nexport const BatchOperationSchema = z.object({\n create: z\n .array(z.record(z.unknown()))\n .optional()\n .describe(\"Array of objects to create\"),\n update: z\n .array(\n z\n .object({ id: z.number().describe(\"ID of the resource to update\") })\n .passthrough(),\n )\n .optional()\n .describe(\"Array of objects to update (each must include id)\"),\n delete: z\n .array(z.number())\n .optional()\n .describe(\"Array of resource IDs to delete\"),\n});\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nexport function parseListOutput<T>(\n items: unknown,\n page: number,\n perPage: number,\n total: number,\n totalPages: number,\n itemSchema: z.ZodType<T>,\n) {\n const schema = listResponseSchema(itemSchema);\n return schema.parse({\n items: Array.isArray(items) ? items : [],\n pagination: {\n total,\n totalPages,\n currentPage: page,\n perPage,\n },\n });\n}\n\nexport function parseSingleOutput<T>(item: unknown, itemSchema: z.ZodType<T>) {\n return singleResponseSchema(itemSchema).parse({ item });\n}\n\nexport function textContent(data: unknown): {\n content: Array<{ type: \"text\"; text: string }>;\n} {\n return {\n content: [\n {\n type: \"text\",\n text: typeof data === \"string\" ? data : JSON.stringify(data, null, 2),\n },\n ],\n };\n}\n","/**\n * Order tools — list, get, create, update, delete, notes, batch.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport {\n BatchOperationSchema,\n BatchResponseSchema,\n DeleteResponseSchema,\n OrderNoteSchema,\n OrderSchema,\n PaginationInputSchema,\n parseListOutput,\n parseSingleOutput,\n textContent,\n} from \"../types.js\";\n\nconst LineItemInput = z.object({\n product_id: z.number().describe(\"Product ID to order\"),\n quantity: z.number().int().positive().describe(\"Quantity. Example: 2\"),\n variation_id: z.number().optional().describe(\"Variation ID for variable products\"),\n});\n\nconst OrderCreateSchema = z\n .object({\n status: z\n .enum([\n \"pending\",\n \"processing\",\n \"on-hold\",\n \"completed\",\n \"cancelled\",\n \"refunded\",\n \"failed\",\n ])\n .optional()\n .describe(\"Order status\"),\n customer_id: z.number().optional().describe(\"Existing customer ID (0 for guest)\"),\n payment_method: z.string().optional().describe(\"Payment method ID, e.g. bacs\"),\n payment_method_title: z.string().optional().describe(\"Payment method title\"),\n set_paid: z.boolean().optional().describe(\"Mark order as paid on create\"),\n billing: z.record(z.unknown()).optional().describe(\"Billing address object\"),\n shipping: z.record(z.unknown()).optional().describe(\"Shipping address object\"),\n line_items: z.array(LineItemInput).optional().describe(\"Products to include\"),\n shipping_lines: z.array(z.record(z.unknown())).optional(),\n coupon_lines: z.array(z.object({ code: z.string() })).optional(),\n customer_note: z.string().optional().describe(\"Note visible to customer\"),\n })\n .passthrough();\n\nexport function registerOrderTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_orders_list\",\n {\n title: \"List orders\",\n description:\n \"Lists store orders with pagination and optional filters for status, date range, and customer. Use this to build order queues, support lookups, or feed sales analysis. Returns order objects plus pagination metadata.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n status: z\n .string()\n .optional()\n .describe(\n \"Order status or comma-separated list. Example: processing,completed\",\n ),\n customer: z\n .number()\n .optional()\n .describe(\"Filter by customer ID. Example: 12\"),\n after: z\n .string()\n .optional()\n .describe(\"ISO8601 date — only orders after this. Example: 2024-01-01T00:00:00\"),\n before: z\n .string()\n .optional()\n .describe(\"ISO8601 date — only orders before this\"),\n product: z.number().optional().describe(\"Filter orders containing product ID\"),\n orderby: z\n .enum([\"date\", \"id\", \"include\", \"title\", \"slug\"])\n .optional()\n .describe(\"Sort field\"),\n order: z.enum([\"asc\", \"desc\"]).optional().describe(\"Sort direction\"),\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"orders\", {\n page,\n per_page,\n status: args.status,\n customer: args.customer,\n after: args.after,\n before: args.before,\n product: args.product,\n orderby: args.orderby,\n order: args.order,\n });\n const meta = client.pagination(res, page, per_page);\n const out = parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n OrderSchema,\n );\n return textContent(out);\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_orders_get\",\n {\n title: \"Get order\",\n description:\n \"Retrieves a single order by ID including line items, billing/shipping, totals, and status history fields. Use this for support tickets, fulfillment, or when an order number is already known.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Order ID. Example: 101\"),\n },\n },\n async (args) => {\n try {\n const res = await client.get(\"orders\", { id: args.id });\n return textContent(parseSingleOutput(res.data, OrderSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_orders_create\",\n {\n title: \"Create order\",\n description:\n \"Creates a new order with optional customer, line items, addresses, and payment fields. Use this to place orders on behalf of customers, seed test data, or automate checkout-like flows from an agent.\",\n inputSchema: OrderCreateSchema.shape,\n },\n async (args) => {\n try {\n const res = await client.post(\"orders\", args as Record<string, unknown>);\n return textContent(parseSingleOutput(res.data, OrderSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_orders_update\",\n {\n title: \"Update order\",\n description:\n \"Updates an existing order by ID (status changes, notes, addresses, line items). Use this for fulfillment transitions (e.g. processing → completed), address corrections, or partial refunds workflows that only need field updates.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Order ID to update\"),\n data: OrderCreateSchema.partial()\n .passthrough()\n .describe(\"Fields to update on the order\"),\n },\n },\n async (args) => {\n try {\n const res = await client.put(\n \"orders\",\n args.data as Record<string, unknown>,\n { id: args.id },\n );\n return textContent(parseSingleOutput(res.data, OrderSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_orders_delete\",\n {\n title: \"Delete order\",\n description:\n \"Deletes an order by ID. force=true permanently deletes; force=false moves to trash. Use carefully for test cleanup or GDPR-style removal when appropriate policies allow.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Order ID to delete\"),\n force: z.boolean().default(true).optional().describe(\"Permanent delete (default true)\"),\n },\n },\n async (args) => {\n try {\n const res = await client.delete(\n \"orders\",\n { force: args.force ?? true },\n { id: args.id },\n );\n return textContent(\n DeleteResponseSchema.parse({\n deleted: true,\n previous: res.data,\n id: args.id,\n }),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_orders_notes_list\",\n {\n title: \"List order notes\",\n description:\n \"Lists notes attached to a specific order (customer-visible and private staff notes). Use this when reviewing order history, support context, or audit trails for a single order.\",\n inputSchema: {\n order_id: z.number().int().positive().describe(\"Order ID whose notes to list\"),\n ...PaginationInputSchema.shape,\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(`orders/${args.order_id}/notes`, {\n page,\n per_page,\n });\n const meta = client.pagination(res, page, per_page);\n const out = parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n OrderNoteSchema,\n );\n return textContent(out);\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_orders_notes_create\",\n {\n title: \"Create order note\",\n description:\n \"Adds a note to an order. Set customer_note=true to show it to the customer (email may be triggered by WC). Use this to document support actions or notify customers of fulfillment updates.\",\n inputSchema: {\n order_id: z.number().int().positive().describe(\"Order ID to attach the note to\"),\n note: z.string().min(1).describe(\"Note text content\"),\n customer_note: z\n .boolean()\n .optional()\n .describe(\"If true, note is customer-facing\"),\n },\n },\n async (args) => {\n try {\n const res = await client.post(`orders/${args.order_id}/notes`, {\n note: args.note,\n customer_note: args.customer_note ?? false,\n });\n return textContent(parseSingleOutput(res.data, OrderNoteSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_orders_batch\",\n {\n title: \"Batch orders\",\n description:\n \"Runs multiple order create/update/delete operations in one batch request. Use this for bulk status updates (e.g. mark many orders completed) or mass test-data management while minimizing API calls.\",\n inputSchema: BatchOperationSchema.shape,\n },\n async (args) => {\n try {\n const res = await client.post(\"orders/batch\", args as Record<string, unknown>);\n return textContent(BatchResponseSchema.parse(res.data ?? {}));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * Customer tools — list, get, create, update, delete, search.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport {\n CustomerSchema,\n DeleteResponseSchema,\n PaginationInputSchema,\n parseListOutput,\n parseSingleOutput,\n textContent,\n} from \"../types.js\";\n\nconst CustomerCreateSchema = z\n .object({\n email: z.string().email().describe(\"Customer email. Example: jane@example.com\"),\n first_name: z.string().optional().describe(\"First name\"),\n last_name: z.string().optional().describe(\"Last name\"),\n username: z.string().optional().describe(\"Login username\"),\n password: z.string().optional().describe(\"Account password (create only)\"),\n billing: z.record(z.unknown()).optional().describe(\"Billing address\"),\n shipping: z.record(z.unknown()).optional().describe(\"Shipping address\"),\n })\n .passthrough();\n\nexport function registerCustomerTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_customers_list\",\n {\n title: \"List customers\",\n description:\n \"Lists WooCommerce customers with pagination. Use this for CRM-style overviews, segmenting audiences, or finding accounts before creating orders. Returns customer objects and pagination metadata.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n role: z.string().optional().describe(\"Filter by role, e.g. customer\"),\n email: z.string().optional().describe(\"Filter by exact email\"),\n orderby: z\n .enum([\"id\", \"include\", \"name\", \"registered_date\"])\n .optional()\n .describe(\"Sort field\"),\n order: z.enum([\"asc\", \"desc\"]).optional().describe(\"Sort direction\"),\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"customers\", {\n page,\n per_page,\n role: args.role,\n email: args.email,\n orderby: args.orderby,\n order: args.order,\n });\n const meta = client.pagination(res, page, per_page);\n return textContent(\n parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n CustomerSchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_customers_get\",\n {\n title: \"Get customer\",\n description:\n \"Retrieves a single customer by ID including billing/shipping and meta. Use this when you have a customer ID from an order or search and need full account details.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Customer ID\"),\n },\n },\n async (args) => {\n try {\n const res = await client.get(\"customers\", { id: args.id });\n return textContent(parseSingleOutput(res.data, CustomerSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_customers_create\",\n {\n title: \"Create customer\",\n description:\n \"Creates a new customer account with email and optional name, addresses, and password. Use this to onboard users from an agent workflow or seed demo accounts.\",\n inputSchema: CustomerCreateSchema.shape,\n },\n async (args) => {\n try {\n const res = await client.post(\"customers\", args as Record<string, unknown>);\n return textContent(parseSingleOutput(res.data, CustomerSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_customers_update\",\n {\n title: \"Update customer\",\n description:\n \"Updates an existing customer by ID. Use this to fix addresses, names, or billing details without recreating the account.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Customer ID\"),\n data: CustomerCreateSchema.partial()\n .passthrough()\n .describe(\"Fields to update\"),\n },\n },\n async (args) => {\n try {\n const res = await client.put(\n \"customers\",\n args.data as Record<string, unknown>,\n { id: args.id },\n );\n return textContent(parseSingleOutput(res.data, CustomerSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_customers_delete\",\n {\n title: \"Delete customer\",\n description:\n \"Deletes a customer by ID. force=true is required by WooCommerce for permanent deletion. Use for GDPR erasure or test cleanup only when authorized.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Customer ID\"),\n force: z.boolean().default(true).optional().describe(\"Must be true to delete\"),\n reassign: z\n .number()\n .optional()\n .describe(\"User ID to reassign posts to (optional)\"),\n },\n },\n async (args) => {\n try {\n const res = await client.delete(\n \"customers\",\n { force: args.force ?? true },\n { id: args.id },\n );\n return textContent(\n DeleteResponseSchema.parse({\n deleted: true,\n previous: res.data,\n id: args.id,\n }),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_customers_search\",\n {\n title: \"Search customers\",\n description:\n \"Searches customers by free-text query (name, email, username). Use this when the user provides a partial name or email and you need matching accounts before acting on orders.\",\n inputSchema: {\n query: z.string().min(1).describe(\"Search query. Example: \\\"jane@\\\"\"),\n ...PaginationInputSchema.shape,\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"customers\", {\n search: args.query,\n page,\n per_page,\n });\n const meta = client.pagination(res, page, per_page);\n return textContent(\n parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n CustomerSchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * Coupon tools — list, get, create, update, delete.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport {\n CouponSchema,\n DeleteResponseSchema,\n PaginationInputSchema,\n parseListOutput,\n parseSingleOutput,\n textContent,\n} from \"../types.js\";\n\nconst CouponCreateSchema = z\n .object({\n code: z.string().describe(\"Coupon code. Example: SUMMER20\"),\n discount_type: z\n .enum([\"percent\", \"fixed_cart\", \"fixed_product\"])\n .optional()\n .describe(\"How the discount is calculated\"),\n amount: z.string().optional().describe(\"Discount amount as string. Example: \\\"20\\\"\"),\n description: z.string().optional().describe(\"Internal description\"),\n individual_use: z.boolean().optional(),\n exclude_sale_items: z.boolean().optional(),\n minimum_amount: z.string().optional(),\n maximum_amount: z.string().optional(),\n usage_limit: z.number().optional(),\n usage_limit_per_user: z.number().optional(),\n free_shipping: z.boolean().optional(),\n date_expires: z.string().nullable().optional().describe(\"ISO date when coupon expires\"),\n })\n .passthrough();\n\nexport function registerCouponTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_coupons_list\",\n {\n title: \"List coupons\",\n description:\n \"Lists discount coupons with pagination. Use this to audit active promotions, find a code by browsing, or report on campaign inventory.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n code: z.string().optional().describe(\"Filter by exact coupon code\"),\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"coupons\", {\n page,\n per_page,\n code: args.code,\n });\n const meta = client.pagination(res, page, per_page);\n return textContent(\n parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n CouponSchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_coupons_get\",\n {\n title: \"Get coupon\",\n description:\n \"Retrieves a single coupon by ID including amount, limits, and expiry. Use this when you already have the coupon ID from a list or order coupon_lines.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Coupon ID\"),\n },\n },\n async (args) => {\n try {\n const res = await client.get(\"coupons\", { id: args.id });\n return textContent(parseSingleOutput(res.data, CouponSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_coupons_create\",\n {\n title: \"Create coupon\",\n description:\n \"Creates a new coupon code with discount type, amount, and optional limits. Use this to launch promotions or generate one-off support discounts.\",\n inputSchema: CouponCreateSchema.shape,\n },\n async (args) => {\n try {\n const res = await client.post(\"coupons\", args as Record<string, unknown>);\n return textContent(parseSingleOutput(res.data, CouponSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_coupons_update\",\n {\n title: \"Update coupon\",\n description:\n \"Updates an existing coupon by ID (amount, expiry, usage limits, etc.). Use this to extend campaigns or disable a code without deleting history.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Coupon ID\"),\n data: CouponCreateSchema.partial().passthrough().describe(\"Fields to update\"),\n },\n },\n async (args) => {\n try {\n const res = await client.put(\n \"coupons\",\n args.data as Record<string, unknown>,\n { id: args.id },\n );\n return textContent(parseSingleOutput(res.data, CouponSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_coupons_delete\",\n {\n title: \"Delete coupon\",\n description:\n \"Deletes a coupon by ID. Use this to retire obsolete or leaked promo codes. force=true permanently removes the coupon.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Coupon ID\"),\n force: z.boolean().default(true).optional(),\n },\n },\n async (args) => {\n try {\n const res = await client.delete(\n \"coupons\",\n { force: args.force ?? true },\n { id: args.id },\n );\n return textContent(\n DeleteResponseSchema.parse({\n deleted: true,\n previous: res.data,\n id: args.id,\n }),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * Product category tools — list, get, create, update, delete.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport {\n CategorySchema,\n DeleteResponseSchema,\n PaginationInputSchema,\n parseListOutput,\n parseSingleOutput,\n textContent,\n} from \"../types.js\";\n\nconst CategoryCreateSchema = z\n .object({\n name: z.string().describe(\"Category name. Example: Apparel\"),\n slug: z.string().optional().describe(\"URL slug\"),\n parent: z.number().optional().describe(\"Parent category ID for hierarchy\"),\n description: z.string().optional().describe(\"Category description HTML\"),\n display: z\n .enum([\"default\", \"products\", \"subcategories\", \"both\"])\n .optional()\n .describe(\"Catalog display type\"),\n image: z.object({ src: z.string().url() }).optional().describe(\"Category image\"),\n menu_order: z.number().optional(),\n })\n .passthrough();\n\nexport function registerCategoryTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_categories_list\",\n {\n title: \"List product categories\",\n description:\n \"Lists product categories with pagination and optional parent filter. Use this to understand catalog taxonomy, build navigation, or assign products to the correct category IDs.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n parent: z.number().optional().describe(\"Only children of this category ID\"),\n hide_empty: z.boolean().optional().describe(\"Hide categories with no products\"),\n search: z.string().optional().describe(\"Search category names\"),\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"products/categories\", {\n page,\n per_page,\n parent: args.parent,\n hide_empty: args.hide_empty,\n search: args.search,\n });\n const meta = client.pagination(res, page, per_page);\n return textContent(\n parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n CategorySchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_categories_get\",\n {\n title: \"Get product category\",\n description:\n \"Retrieves a single product category by ID. Use this when you need the full category record including description, image, and product count.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Category ID\"),\n },\n },\n async (args) => {\n try {\n const res = await client.get(\"products/categories\", { id: args.id });\n return textContent(parseSingleOutput(res.data, CategorySchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_categories_create\",\n {\n title: \"Create product category\",\n description:\n \"Creates a new product category, optionally nested under a parent. Use this when structuring or expanding the store catalog taxonomy.\",\n inputSchema: CategoryCreateSchema.shape,\n },\n async (args) => {\n try {\n const res = await client.post(\n \"products/categories\",\n args as Record<string, unknown>,\n );\n return textContent(parseSingleOutput(res.data, CategorySchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_categories_update\",\n {\n title: \"Update product category\",\n description:\n \"Updates an existing product category by ID. Use this to rename categories, fix slugs, re-parent nodes, or update descriptions for SEO.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Category ID\"),\n data: CategoryCreateSchema.partial().passthrough().describe(\"Fields to update\"),\n },\n },\n async (args) => {\n try {\n const res = await client.put(\n \"products/categories\",\n args.data as Record<string, unknown>,\n { id: args.id },\n );\n return textContent(parseSingleOutput(res.data, CategorySchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_categories_delete\",\n {\n title: \"Delete product category\",\n description:\n \"Deletes a product category by ID. Products are not deleted; they simply lose this category assignment. force=true permanently deletes.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Category ID\"),\n force: z.boolean().default(true).optional(),\n },\n },\n async (args) => {\n try {\n const res = await client.delete(\n \"products/categories\",\n { force: args.force ?? true },\n { id: args.id },\n );\n return textContent(\n DeleteResponseSchema.parse({\n deleted: true,\n previous: res.data,\n id: args.id,\n }),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * Product tag tools — list, get, create, update, delete.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport {\n DeleteResponseSchema,\n PaginationInputSchema,\n TagSchema,\n parseListOutput,\n parseSingleOutput,\n textContent,\n} from \"../types.js\";\n\nconst TagCreateSchema = z\n .object({\n name: z.string().describe(\"Tag name. Example: organic\"),\n slug: z.string().optional().describe(\"URL slug\"),\n description: z.string().optional().describe(\"Tag description\"),\n })\n .passthrough();\n\nexport function registerTagTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_tags_list\",\n {\n title: \"List product tags\",\n description:\n \"Lists product tags with pagination. Use this to discover available tags for filtering, merchandising, or assigning to products during catalog work.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n search: z.string().optional().describe(\"Search tag names\"),\n hide_empty: z.boolean().optional(),\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"products/tags\", {\n page,\n per_page,\n search: args.search,\n hide_empty: args.hide_empty,\n });\n const meta = client.pagination(res, page, per_page);\n return textContent(\n parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n TagSchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_tags_get\",\n {\n title: \"Get product tag\",\n description:\n \"Retrieves a single product tag by ID. Use this when you need the full tag record including slug and product count.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Tag ID\"),\n },\n },\n async (args) => {\n try {\n const res = await client.get(\"products/tags\", { id: args.id });\n return textContent(parseSingleOutput(res.data, TagSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_tags_create\",\n {\n title: \"Create product tag\",\n description:\n \"Creates a new product tag. Use this when introducing a new merchandising or SEO label that products can share.\",\n inputSchema: TagCreateSchema.shape,\n },\n async (args) => {\n try {\n const res = await client.post(\"products/tags\", args as Record<string, unknown>);\n return textContent(parseSingleOutput(res.data, TagSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_tags_update\",\n {\n title: \"Update product tag\",\n description:\n \"Updates an existing product tag by ID. Use this to rename tags or improve descriptions for storefront filters and SEO.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Tag ID\"),\n data: TagCreateSchema.partial().passthrough().describe(\"Fields to update\"),\n },\n },\n async (args) => {\n try {\n const res = await client.put(\n \"products/tags\",\n args.data as Record<string, unknown>,\n { id: args.id },\n );\n return textContent(parseSingleOutput(res.data, TagSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_tags_delete\",\n {\n title: \"Delete product tag\",\n description:\n \"Deletes a product tag by ID. Products keep their other tags; only this association is removed. force=true permanently deletes.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Tag ID\"),\n force: z.boolean().default(true).optional(),\n },\n },\n async (args) => {\n try {\n const res = await client.delete(\n \"products/tags\",\n { force: args.force ?? true },\n { id: args.id },\n );\n return textContent(\n DeleteResponseSchema.parse({\n deleted: true,\n previous: res.data,\n id: args.id,\n }),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * Product variation tools — list, get, create, update, delete.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport {\n DeleteResponseSchema,\n PaginationInputSchema,\n VariationSchema,\n parseListOutput,\n parseSingleOutput,\n textContent,\n} from \"../types.js\";\n\nconst VariationCreateSchema = z\n .object({\n regular_price: z.string().optional().describe(\"Regular price. Example: \\\"19.99\\\"\"),\n sale_price: z.string().optional().describe(\"Sale price\"),\n sku: z.string().optional().describe(\"Variation SKU\"),\n manage_stock: z.boolean().optional(),\n stock_quantity: z.number().optional(),\n stock_status: z.enum([\"instock\", \"outofstock\", \"onbackorder\"]).optional(),\n attributes: z\n .array(\n z.object({\n id: z.number().optional(),\n name: z.string(),\n option: z.string(),\n }),\n )\n .optional()\n .describe(\"Attribute options that define this variation\"),\n image: z.object({ src: z.string().url() }).optional(),\n status: z.enum([\"publish\", \"private\", \"draft\"]).optional(),\n })\n .passthrough();\n\nexport function registerVariationTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_variations_list\",\n {\n title: \"List product variations\",\n description:\n \"Lists variations for a parent variable product with pagination. Use this when managing size/color SKUs, checking per-variant stock, or syncing variant pricing.\",\n inputSchema: {\n product_id: z\n .number()\n .int()\n .positive()\n .describe(\"Parent variable product ID\"),\n ...PaginationInputSchema.shape,\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\n `products/${args.product_id}/variations`,\n { page, per_page },\n );\n const meta = client.pagination(res, page, per_page);\n return textContent(\n parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n VariationSchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_variations_get\",\n {\n title: \"Get product variation\",\n description:\n \"Retrieves a single product variation by parent product ID and variation ID. Use this for detailed variant pricing, stock, or attribute inspection.\",\n inputSchema: {\n product_id: z.number().int().positive().describe(\"Parent product ID\"),\n id: z.number().int().positive().describe(\"Variation ID\"),\n },\n },\n async (args) => {\n try {\n // Library uses id query param; nested path also works via endpoint string\n const res = await client.get(\n `products/${args.product_id}/variations/${args.id}`,\n );\n return textContent(parseSingleOutput(res.data, VariationSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_variations_create\",\n {\n title: \"Create product variation\",\n description:\n \"Creates a new variation under a variable product. Use this when adding a new size/color combination with its own price and stock.\",\n inputSchema: {\n product_id: z.number().int().positive().describe(\"Parent product ID\"),\n data: VariationCreateSchema.describe(\"Variation fields\"),\n },\n },\n async (args) => {\n try {\n const res = await client.post(\n `products/${args.product_id}/variations`,\n args.data as Record<string, unknown>,\n );\n return textContent(parseSingleOutput(res.data, VariationSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_variations_update\",\n {\n title: \"Update product variation\",\n description:\n \"Updates an existing product variation. Use this for variant price changes, stock adjustments, or attribute corrections.\",\n inputSchema: {\n product_id: z.number().int().positive().describe(\"Parent product ID\"),\n id: z.number().int().positive().describe(\"Variation ID\"),\n data: VariationCreateSchema.partial()\n .passthrough()\n .describe(\"Fields to update\"),\n },\n },\n async (args) => {\n try {\n const res = await client.put(\n `products/${args.product_id}/variations/${args.id}`,\n args.data as Record<string, unknown>,\n );\n return textContent(parseSingleOutput(res.data, VariationSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_variations_delete\",\n {\n title: \"Delete product variation\",\n description:\n \"Deletes a product variation by ID. Use this to remove obsolete size/color SKUs from a variable product. force=true permanently deletes.\",\n inputSchema: {\n product_id: z.number().int().positive().describe(\"Parent product ID\"),\n id: z.number().int().positive().describe(\"Variation ID\"),\n force: z.boolean().default(true).optional(),\n },\n },\n async (args) => {\n try {\n const res = await client.delete(\n `products/${args.product_id}/variations/${args.id}`,\n { force: args.force ?? true },\n );\n return textContent(\n DeleteResponseSchema.parse({\n deleted: true,\n previous: res.data,\n id: args.id,\n }),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * Shipping tools — zones, methods, classes.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport {\n PaginationInputSchema,\n WcEntitySchema,\n parseListOutput,\n parseSingleOutput,\n textContent,\n} from \"../types.js\";\n\nexport function registerShippingTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_shipping_zones_list\",\n {\n title: \"List shipping zones\",\n description:\n \"Lists all shipping zones configured in the store. Use this to understand regional shipping setup before inspecting methods or diagnosing delivery options.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"shipping/zones\", { page, per_page });\n const meta = client.pagination(res, page, per_page);\n return textContent(\n parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total || (Array.isArray(res.data) ? res.data.length : 0),\n meta.totalPages,\n WcEntitySchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_shipping_zones_get\",\n {\n title: \"Get shipping zone\",\n description:\n \"Retrieves a single shipping zone by ID including name and order. Use this when drilling into a specific zone from the list.\",\n inputSchema: {\n id: z.number().int().nonnegative().describe(\"Shipping zone ID (0 = Locations not covered)\"),\n },\n },\n async (args) => {\n try {\n const res = await client.get(`shipping/zones/${args.id}`);\n return textContent(parseSingleOutput(res.data, WcEntitySchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_shipping_zone_methods_list\",\n {\n title: \"List shipping zone methods\",\n description:\n \"Lists shipping methods enabled for a given zone (flat rate, free shipping, local pickup, etc.). Use this to audit delivery options available to customers in that region.\",\n inputSchema: {\n zone_id: z.number().int().nonnegative().describe(\"Shipping zone ID\"),\n ...PaginationInputSchema.shape,\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\n `shipping/zones/${args.zone_id}/methods`,\n { page, per_page },\n );\n const meta = client.pagination(res, page, per_page);\n return textContent(\n parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total || (Array.isArray(res.data) ? res.data.length : 0),\n meta.totalPages,\n WcEntitySchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_shipping_methods_list\",\n {\n title: \"List shipping methods\",\n description:\n \"Lists all registered shipping method types available in WooCommerce (not zone assignments). Use this to see which method plugins/classes the store supports.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"shipping_methods\", { page, per_page });\n const meta = client.pagination(res, page, per_page);\n return textContent(\n parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total || (Array.isArray(res.data) ? res.data.length : 0),\n meta.totalPages,\n WcEntitySchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_shipping_classes_list\",\n {\n title: \"List shipping classes\",\n description:\n \"Lists product shipping classes used to group products for rate calculation. Use this when assigning classes to products or configuring class-based flat rates.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"products/shipping_classes\", {\n page,\n per_page,\n });\n const meta = client.pagination(res, page, per_page);\n return textContent(\n parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n WcEntitySchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_shipping_classes_get\",\n {\n title: \"Get shipping class\",\n description:\n \"Retrieves a single product shipping class by ID. Use this to inspect slug, description, and count for a specific class.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Shipping class ID\"),\n },\n },\n async (args) => {\n try {\n const res = await client.get(\"products/shipping_classes\", { id: args.id });\n return textContent(parseSingleOutput(res.data, WcEntitySchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * Payment gateway tools — list, get, update settings.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport {\n PaginationInputSchema,\n WcEntitySchema,\n parseListOutput,\n parseSingleOutput,\n textContent,\n} from \"../types.js\";\n\nexport function registerPaymentTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_payments_list\",\n {\n title: \"List payment gateways\",\n description:\n \"Lists all payment gateways registered in the store (enabled and disabled). Use this to audit checkout payment options or find gateway IDs before updating settings.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"payment_gateways\", {\n page,\n per_page,\n });\n const meta = client.pagination(res, page, per_page);\n const items = Array.isArray(res.data) ? res.data : [];\n return textContent(\n parseListOutput(\n items,\n meta.currentPage,\n meta.perPage,\n meta.total || items.length,\n meta.totalPages,\n WcEntitySchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_payments_get\",\n {\n title: \"Get payment gateway\",\n description:\n \"Retrieves a single payment gateway by its ID string (e.g. bacs, cod, stripe). Use this to inspect title, enabled flag, and settings fields for a specific method.\",\n inputSchema: {\n id: z\n .string()\n .min(1)\n .describe(\"Gateway ID. Example: \\\"bacs\\\" or \\\"cod\\\"\"),\n },\n },\n async (args) => {\n try {\n const res = await client.get(`payment_gateways/${args.id}`);\n return textContent(parseSingleOutput(res.data, WcEntitySchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_payments_update\",\n {\n title: \"Update payment gateway\",\n description:\n \"Updates payment gateway settings such as enabled state, title, or method-specific options. Use this carefully when enabling/disabling checkout methods or fixing gateway configuration from an agent workflow.\",\n inputSchema: {\n id: z.string().min(1).describe(\"Gateway ID to update\"),\n data: z\n .object({\n enabled: z.boolean().optional().describe(\"Whether gateway is enabled\"),\n title: z.string().optional().describe(\"Checkout title\"),\n description: z.string().optional().describe(\"Checkout description\"),\n order: z.number().optional().describe(\"Display order\"),\n settings: z.record(z.unknown()).optional().describe(\"Gateway-specific settings map\"),\n })\n .passthrough()\n .describe(\"Fields to update on the gateway\"),\n },\n },\n async (args) => {\n try {\n const res = await client.put(\n `payment_gateways/${args.id}`,\n args.data as Record<string, unknown>,\n );\n return textContent(parseSingleOutput(res.data, WcEntitySchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * Report tools — sales, top sellers, order totals, customer totals.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport { textContent, WcEntitySchema } from \"../types.js\";\n\nconst DateRangeSchema = {\n date_min: z\n .string()\n .optional()\n .describe(\"Start date YYYY-MM-DD. Example: 2024-01-01\"),\n date_max: z\n .string()\n .optional()\n .describe(\"End date YYYY-MM-DD. Example: 2024-01-31\"),\n period: z\n .enum([\"week\", \"month\", \"last_month\", \"year\"])\n .optional()\n .describe(\"Preset period alternative to date_min/date_max\"),\n};\n\nexport function registerReportTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_reports_sales\",\n {\n title: \"Sales report\",\n description:\n \"Fetches the WooCommerce sales report for a period or custom date range, including totals, averages, and order counts. Use this for revenue dashboards, period comparisons, or answering “how much did we sell last month?”.\",\n inputSchema: DateRangeSchema,\n },\n async (args) => {\n try {\n const res = await client.get(\"reports/sales\", {\n date_min: args.date_min,\n date_max: args.date_max,\n period: args.period,\n });\n const data = Array.isArray(res.data) ? res.data : [res.data];\n return textContent({ report: data });\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_reports_top_sellers\",\n {\n title: \"Top sellers report\",\n description:\n \"Returns the top-selling products for a period with quantities sold. Use this to identify bestsellers, plan restocks, or build merchandising recommendations.\",\n inputSchema: DateRangeSchema,\n },\n async (args) => {\n try {\n const res = await client.get<unknown[]>(\"reports/top_sellers\", {\n date_min: args.date_min,\n date_max: args.date_max,\n period: args.period,\n });\n return textContent({\n items: Array.isArray(res.data) ? res.data : [],\n });\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_reports_orders_totals\",\n {\n title: \"Orders totals report\",\n description:\n \"Returns order counts grouped by status (pending, processing, completed, etc.). Use this for operational dashboards and backlog visibility without listing every order.\",\n inputSchema: {},\n },\n async () => {\n try {\n const res = await client.get<unknown[]>(\"reports/orders/totals\");\n return textContent({\n items: Array.isArray(res.data) ? res.data : [],\n });\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_reports_customers_totals\",\n {\n title: \"Customers totals report\",\n description:\n \"Returns customer counts by role or segment totals exposed by WooCommerce. Use this for a quick snapshot of the customer base size without paging through all customer records.\",\n inputSchema: {},\n },\n async () => {\n try {\n const res = await client.get<unknown[]>(\"reports/customers/totals\");\n return textContent({\n items: Array.isArray(res.data) ? res.data : [],\n });\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_reports_products_totals\",\n {\n title: \"Products totals report\",\n description:\n \"Returns product counts by type (simple, variable, etc.). Use this for catalog composition analysis and inventory planning at a high level.\",\n inputSchema: {},\n },\n async () => {\n try {\n const res = await client.get<unknown[]>(\"reports/products/totals\");\n // validate loosely\n WcEntitySchema.array().or(z.array(z.unknown())).parse(\n Array.isArray(res.data) ? res.data : [],\n );\n return textContent({\n items: Array.isArray(res.data) ? res.data : [],\n });\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_reports_coupons_totals\",\n {\n title: \"Coupons totals report\",\n description:\n \"Returns coupon usage/count totals from the reports API. Use this to measure promotion adoption without listing every coupon record.\",\n inputSchema: {},\n },\n async () => {\n try {\n const res = await client.get<unknown[]>(\"reports/coupons/totals\");\n return textContent({\n items: Array.isArray(res.data) ? res.data : [],\n });\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_reports_reviews_totals\",\n {\n title: \"Reviews totals report\",\n description:\n \"Returns product review counts by status (approved, hold, spam, etc.). Use this to monitor moderation backlog and review health.\",\n inputSchema: {},\n },\n async () => {\n try {\n const res = await client.get<unknown[]>(\"reports/reviews/totals\");\n return textContent({\n items: Array.isArray(res.data) ? res.data : [],\n });\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * Settings tools — list groups, get/update options.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport {\n PaginationInputSchema,\n WcEntitySchema,\n parseListOutput,\n parseSingleOutput,\n textContent,\n} from \"../types.js\";\n\nexport function registerSettingsTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_settings_groups_list\",\n {\n title: \"List settings groups\",\n description:\n \"Lists WooCommerce settings groups (general, products, tax, shipping, checkout, account, email, advanced, etc.). Use this to discover which setting groups exist before reading or updating options.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 100;\n const res = await client.get<unknown[]>(\"settings\", { page, per_page });\n const meta = client.pagination(res, page, per_page);\n const items = Array.isArray(res.data) ? res.data : [];\n return textContent(\n parseListOutput(\n items,\n meta.currentPage,\n meta.perPage,\n meta.total || items.length,\n meta.totalPages,\n WcEntitySchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_settings_list\",\n {\n title: \"List settings in a group\",\n description:\n \"Lists all setting options within a settings group (e.g. general, products). Use this to inspect current store configuration values such as currency, country, or tax display.\",\n inputSchema: {\n group: z\n .string()\n .min(1)\n .describe(\"Settings group ID. Example: general, products, tax\"),\n ...PaginationInputSchema.shape,\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 100;\n const res = await client.get<unknown[]>(`settings/${args.group}`, {\n page,\n per_page,\n });\n const meta = client.pagination(res, page, per_page);\n const items = Array.isArray(res.data) ? res.data : [];\n return textContent(\n parseListOutput(\n items,\n meta.currentPage,\n meta.perPage,\n meta.total || items.length,\n meta.totalPages,\n WcEntitySchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_settings_get\",\n {\n title: \"Get setting option\",\n description:\n \"Retrieves a single setting option by group and option ID. Use this when you need the current value and metadata (type, default, options) for one configuration key.\",\n inputSchema: {\n group: z.string().min(1).describe(\"Settings group ID. Example: general\"),\n id: z\n .string()\n .min(1)\n .describe(\"Setting option ID. Example: woocommerce_currency\"),\n },\n },\n async (args) => {\n try {\n const res = await client.get(`settings/${args.group}/${args.id}`);\n return textContent(parseSingleOutput(res.data, WcEntitySchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_settings_update\",\n {\n title: \"Update setting option\",\n description:\n \"Updates a single setting option value. Use this carefully for configuration changes such as currency, store address, or tax display — always confirm intent with the user for production stores.\",\n inputSchema: {\n group: z.string().min(1).describe(\"Settings group ID\"),\n id: z.string().min(1).describe(\"Setting option ID\"),\n value: z\n .union([z.string(), z.number(), z.boolean(), z.array(z.string())])\n .describe(\"New value for the setting\"),\n },\n },\n async (args) => {\n try {\n const res = await client.put(`settings/${args.group}/${args.id}`, {\n value: args.value,\n });\n return textContent(parseSingleOutput(res.data, WcEntitySchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * System status tools — store health, environment, database, plugins.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport { textContent, WcEntitySchema } from \"../types.js\";\n\nconst SystemStatusSchema = z\n .object({\n environment: z.record(z.unknown()).optional(),\n database: z.record(z.unknown()).optional(),\n active_plugins: z.array(z.unknown()).optional(),\n theme: z.record(z.unknown()).optional(),\n settings: z.record(z.unknown()).optional(),\n security: z.record(z.unknown()).optional(),\n pages: z.array(z.unknown()).optional(),\n })\n .passthrough();\n\nexport function registerSystemStatusTools(\n server: McpServer,\n client: WooClient,\n): void {\n server.registerTool(\n \"woo_system_status_get\",\n {\n title: \"Get system status\",\n description:\n \"Fetches the full WooCommerce system status report including environment (PHP, WordPress, WC version), database, active plugins, theme, and security flags. Use this for store health checks, debugging plugin conflicts, or verifying the runtime before bulk operations.\",\n inputSchema: {},\n },\n async () => {\n try {\n const res = await client.get(\"system_status\");\n const parsed = SystemStatusSchema.parse(res.data ?? {});\n return textContent({ item: parsed });\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_system_status_tools_list\",\n {\n title: \"List system status tools\",\n description:\n \"Lists available WooCommerce system tools (clear transients, recount terms, regenerate thumbnails, etc.). Use this to discover maintenance actions before running one.\",\n inputSchema: {},\n },\n async () => {\n try {\n const res = await client.get<unknown[]>(\"system_status/tools\");\n const items = Array.isArray(res.data) ? res.data : [];\n WcEntitySchema.array().parse(items.length ? items : [{ id: 0 }]);\n return textContent({ items });\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_system_status_tools_run\",\n {\n title: \"Run system status tool\",\n description:\n \"Runs a WooCommerce system maintenance tool by ID (e.g. clear_transients). Use this only when the user explicitly requests a maintenance action — these can be destructive or slow on large stores.\",\n inputSchema: {\n id: z\n .string()\n .min(1)\n .describe(\"Tool ID. Example: clear_transients\"),\n },\n },\n async (args) => {\n try {\n const res = await client.put(`system_status/tools/${args.id}`, {\n confirm: true,\n });\n return textContent({ item: res.data });\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * Webhook tools — list, get, create, update, delete.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport {\n DeleteResponseSchema,\n PaginationInputSchema,\n WebhookSchema,\n parseListOutput,\n parseSingleOutput,\n textContent,\n} from \"../types.js\";\n\nconst WebhookCreateSchema = z\n .object({\n name: z.string().optional().describe(\"Friendly webhook name\"),\n status: z\n .enum([\"active\", \"paused\", \"disabled\"])\n .optional()\n .describe(\"Webhook status\"),\n topic: z\n .string()\n .describe(\n \"Event topic. Example: order.created, product.updated, customer.deleted\",\n ),\n delivery_url: z\n .string()\n .url()\n .describe(\"HTTPS URL that receives the webhook payload\"),\n secret: z.string().optional().describe(\"Optional signing secret\"),\n })\n .passthrough();\n\nexport function registerWebhookTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_webhooks_list\",\n {\n title: \"List webhooks\",\n description:\n \"Lists configured WooCommerce webhooks with pagination. Use this to audit integrations, find broken delivery URLs, or inventory event subscriptions.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n status: z\n .enum([\"all\", \"active\", \"paused\", \"disabled\"])\n .optional()\n .describe(\"Filter by webhook status\"),\n search: z.string().optional().describe(\"Search webhook names\"),\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"webhooks\", {\n page,\n per_page,\n status: args.status,\n search: args.search,\n });\n const meta = client.pagination(res, page, per_page);\n return textContent(\n parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n WebhookSchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_webhooks_get\",\n {\n title: \"Get webhook\",\n description:\n \"Retrieves a single webhook by ID including topic, delivery URL, and status. Use this when diagnosing a specific integration endpoint.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Webhook ID\"),\n },\n },\n async (args) => {\n try {\n const res = await client.get(\"webhooks\", { id: args.id });\n return textContent(parseSingleOutput(res.data, WebhookSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_webhooks_create\",\n {\n title: \"Create webhook\",\n description:\n \"Creates a new webhook subscription for a topic and delivery URL. Use this to connect the store to external systems (ERP, Slack, custom services) on order/product/customer events.\",\n inputSchema: WebhookCreateSchema.shape,\n },\n async (args) => {\n try {\n const res = await client.post(\"webhooks\", args as Record<string, unknown>);\n return textContent(parseSingleOutput(res.data, WebhookSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_webhooks_update\",\n {\n title: \"Update webhook\",\n description:\n \"Updates an existing webhook by ID (status, URL, topic, name). Use this to pause/resume integrations or rotate delivery endpoints.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Webhook ID\"),\n data: WebhookCreateSchema.partial()\n .passthrough()\n .describe(\"Fields to update\"),\n },\n },\n async (args) => {\n try {\n const res = await client.put(\n \"webhooks\",\n args.data as Record<string, unknown>,\n { id: args.id },\n );\n return textContent(parseSingleOutput(res.data, WebhookSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_webhooks_delete\",\n {\n title: \"Delete webhook\",\n description:\n \"Deletes a webhook by ID. Use this to remove obsolete integrations or stop noisy event delivery. force=true permanently deletes.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Webhook ID\"),\n force: z.boolean().default(true).optional(),\n },\n },\n async (args) => {\n try {\n const res = await client.delete(\n \"webhooks\",\n { force: args.force ?? true },\n { id: args.id },\n );\n return textContent(\n DeleteResponseSchema.parse({\n deleted: true,\n previous: res.data,\n id: args.id,\n }),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * Tax tools — rates and classes.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { toMcpToolError } from \"../errors.js\";\nimport {\n DeleteResponseSchema,\n PaginationInputSchema,\n TaxRateSchema,\n WcEntitySchema,\n parseListOutput,\n parseSingleOutput,\n textContent,\n} from \"../types.js\";\n\nconst TaxRateCreateSchema = z\n .object({\n country: z.string().optional().describe(\"ISO country code. Example: US\"),\n state: z.string().optional().describe(\"State code. Example: CA\"),\n postcode: z.string().optional().describe(\"Postcode / ZIP\"),\n city: z.string().optional().describe(\"City name\"),\n rate: z.string().describe(\"Tax rate percentage as string. Example: \\\"8.5000\\\"\"),\n name: z.string().optional().describe(\"Tax name. Example: VAT\"),\n priority: z.number().optional(),\n compound: z.boolean().optional(),\n shipping: z.boolean().optional().describe(\"Whether rate applies to shipping\"),\n class: z.string().optional().describe(\"Tax class slug. Example: standard\"),\n })\n .passthrough();\n\nexport function registerTaxTools(server: McpServer, client: WooClient): void {\n server.registerTool(\n \"woo_tax_rates_list\",\n {\n title: \"List tax rates\",\n description:\n \"Lists configured tax rates with pagination and optional filters. Use this to audit regional tax setup or find rate IDs before updates.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n class: z.string().optional().describe(\"Filter by tax class slug\"),\n country: z.string().optional().describe(\"Filter by country code\"),\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"taxes\", {\n page,\n per_page,\n class: args.class,\n country: args.country,\n });\n const meta = client.pagination(res, page, per_page);\n return textContent(\n parseListOutput(\n res.data,\n meta.currentPage,\n meta.perPage,\n meta.total,\n meta.totalPages,\n TaxRateSchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_tax_rates_get\",\n {\n title: \"Get tax rate\",\n description:\n \"Retrieves a single tax rate by ID. Use this when you need the full rate record including location and class details.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Tax rate ID\"),\n },\n },\n async (args) => {\n try {\n const res = await client.get(\"taxes\", { id: args.id });\n return textContent(parseSingleOutput(res.data, TaxRateSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_tax_rates_create\",\n {\n title: \"Create tax rate\",\n description:\n \"Creates a new tax rate for a location and optional tax class. Use this when expanding into new regions or adding reduced/zero rates.\",\n inputSchema: TaxRateCreateSchema.shape,\n },\n async (args) => {\n try {\n const res = await client.post(\"taxes\", args as Record<string, unknown>);\n return textContent(parseSingleOutput(res.data, TaxRateSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_tax_rates_update\",\n {\n title: \"Update tax rate\",\n description:\n \"Updates an existing tax rate by ID. Use this when tax legislation changes or location matching needs correction.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Tax rate ID\"),\n data: TaxRateCreateSchema.partial()\n .passthrough()\n .describe(\"Fields to update\"),\n },\n },\n async (args) => {\n try {\n const res = await client.put(\n \"taxes\",\n args.data as Record<string, unknown>,\n { id: args.id },\n );\n return textContent(parseSingleOutput(res.data, TaxRateSchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_tax_rates_delete\",\n {\n title: \"Delete tax rate\",\n description:\n \"Deletes a tax rate by ID. Use this to remove obsolete regional rates. force=true permanently deletes.\",\n inputSchema: {\n id: z.number().int().positive().describe(\"Tax rate ID\"),\n force: z.boolean().default(true).optional(),\n },\n },\n async (args) => {\n try {\n const res = await client.delete(\n \"taxes\",\n { force: args.force ?? true },\n { id: args.id },\n );\n return textContent(\n DeleteResponseSchema.parse({\n deleted: true,\n previous: res.data,\n id: args.id,\n }),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_tax_classes_list\",\n {\n title: \"List tax classes\",\n description:\n \"Lists tax classes (standard, reduced-rate, zero-rate, and custom). Use this when assigning tax classes to products or configuring class-specific rates.\",\n inputSchema: {\n ...PaginationInputSchema.shape,\n },\n },\n async (args) => {\n try {\n const page = args.page ?? 1;\n const per_page = args.per_page ?? 10;\n const res = await client.get<unknown[]>(\"taxes/classes\", {\n page,\n per_page,\n });\n const meta = client.pagination(res, page, per_page);\n const items = Array.isArray(res.data) ? res.data : [];\n return textContent(\n parseListOutput(\n items,\n meta.currentPage,\n meta.perPage,\n meta.total || items.length,\n meta.totalPages,\n WcEntitySchema,\n ),\n );\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n\n server.registerTool(\n \"woo_tax_classes_get\",\n {\n title: \"Get tax class\",\n description:\n \"Retrieves a tax class by slug. Use this to confirm a class exists before assigning it to products or rates.\",\n inputSchema: {\n slug: z\n .string()\n .min(1)\n .describe(\"Tax class slug. Example: reduced-rate\"),\n },\n },\n async (args) => {\n try {\n // WC API uses slug in path for tax classes\n const res = await client.get(`taxes/classes/${args.slug}`);\n // May return array or object depending on WC version\n const data = Array.isArray(res.data) ? res.data[0] : res.data;\n return textContent(parseSingleOutput(data, WcEntitySchema));\n } catch (err) {\n return toMcpToolError(err);\n }\n },\n );\n}\n","/**\n * MCP resource: woo://store/info\n * Read-only store context (name, currency, timezone, WC version).\n */\n\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { normalizeError } from \"../errors.js\";\n\nexport const STORE_INFO_URI = \"woo://store/info\";\n\nexport function registerStoreInfoResource(\n server: McpServer,\n client: WooClient,\n): void {\n server.registerResource(\n \"store-info\",\n STORE_INFO_URI,\n {\n title: \"WooCommerce store info\",\n description:\n \"Read-only snapshot of the connected store: name, URL, currency, timezone, weight/dimension units, and WooCommerce version from system status / settings. Use this as grounding context before making catalog or order changes.\",\n mimeType: \"application/json\",\n },\n async (uri) => {\n try {\n const [statusRes, generalRes] = await Promise.all([\n client.get<Record<string, unknown>>(\"system_status\"),\n client.get<Array<Record<string, unknown>>>(\"settings/general\"),\n ]);\n\n const env = (statusRes.data?.environment ?? {}) as Record<\n string,\n unknown\n >;\n const settings = (statusRes.data?.settings ?? {}) as Record<\n string,\n unknown\n >;\n const general: Array<Record<string, unknown>> = Array.isArray(\n generalRes.data,\n )\n ? generalRes.data\n : [];\n\n const findSetting = (id: string): unknown =>\n general.find((s: Record<string, unknown>) => s.id === id)?.value;\n\n const info = {\n url: client.config.WC_URL,\n name:\n findSetting(\"woocommerce_store_address\") ||\n settings.store_id ||\n \"WooCommerce Store\",\n currency:\n findSetting(\"woocommerce_currency\") ||\n settings.currency ||\n null,\n currency_symbol: settings.currency_symbol ?? null,\n timezone:\n env.default_timezone ||\n findSetting(\"woocommerce_default_customer_address\") ||\n null,\n weight_unit: settings.weight_unit ?? findSetting(\"woocommerce_weight_unit\") ?? null,\n dimension_unit:\n settings.dimension_unit ??\n findSetting(\"woocommerce_dimension_unit\") ??\n null,\n woocommerce_version: env.version ?? null,\n wordpress_version: env.wp_version ?? null,\n php_version: env.php_version ?? null,\n api_version: client.config.WC_VERSION,\n };\n\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify(info, null, 2),\n },\n ],\n };\n } catch (err) {\n const n = normalizeError(err);\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({ error: n }, null, 2),\n },\n ],\n };\n }\n },\n );\n}\n","/**\n * MCP resource: woo://api/schema\n * Exposes available WC REST API endpoints and parameters as context for the model.\n */\n\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"../client.js\";\nimport { normalizeError } from \"../errors.js\";\n\nexport const API_SCHEMA_URI = \"woo://api/schema\";\n\n/** Static schema map describing the tools/endpoints this MCP server exposes. */\nexport const WC_API_SCHEMA = {\n version: \"wc/v3\",\n description:\n \"WooCommerce REST API surface wrapped by woo-mcp-server tools. Prefer purpose-built tools over inventing raw paths.\",\n endpoints: [\n {\n resource: \"products\",\n path: \"/products\",\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\"],\n batch: \"/products/batch\",\n search_param: \"search\",\n tools: [\n \"woo_products_list\",\n \"woo_products_get\",\n \"woo_products_create\",\n \"woo_products_update\",\n \"woo_products_delete\",\n \"woo_products_search\",\n \"woo_products_batch\",\n ],\n },\n {\n resource: \"orders\",\n path: \"/orders\",\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\"],\n batch: \"/orders/batch\",\n notes: \"/orders/{id}/notes\",\n filters: [\"status\", \"customer\", \"after\", \"before\", \"product\"],\n tools: [\n \"woo_orders_list\",\n \"woo_orders_get\",\n \"woo_orders_create\",\n \"woo_orders_update\",\n \"woo_orders_delete\",\n \"woo_orders_notes_list\",\n \"woo_orders_notes_create\",\n \"woo_orders_batch\",\n ],\n },\n {\n resource: \"customers\",\n path: \"/customers\",\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\"],\n search_param: \"search\",\n tools: [\n \"woo_customers_list\",\n \"woo_customers_get\",\n \"woo_customers_create\",\n \"woo_customers_update\",\n \"woo_customers_delete\",\n \"woo_customers_search\",\n ],\n },\n {\n resource: \"coupons\",\n path: \"/coupons\",\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\"],\n tools: [\n \"woo_coupons_list\",\n \"woo_coupons_get\",\n \"woo_coupons_create\",\n \"woo_coupons_update\",\n \"woo_coupons_delete\",\n ],\n },\n {\n resource: \"categories\",\n path: \"/products/categories\",\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\"],\n tools: [\n \"woo_categories_list\",\n \"woo_categories_get\",\n \"woo_categories_create\",\n \"woo_categories_update\",\n \"woo_categories_delete\",\n ],\n },\n {\n resource: \"tags\",\n path: \"/products/tags\",\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\"],\n tools: [\n \"woo_tags_list\",\n \"woo_tags_get\",\n \"woo_tags_create\",\n \"woo_tags_update\",\n \"woo_tags_delete\",\n ],\n },\n {\n resource: \"variations\",\n path: \"/products/{product_id}/variations\",\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\"],\n tools: [\n \"woo_variations_list\",\n \"woo_variations_get\",\n \"woo_variations_create\",\n \"woo_variations_update\",\n \"woo_variations_delete\",\n ],\n },\n {\n resource: \"shipping\",\n paths: [\n \"/shipping/zones\",\n \"/shipping/zones/{id}/methods\",\n \"/shipping_methods\",\n \"/products/shipping_classes\",\n ],\n tools: [\n \"woo_shipping_zones_list\",\n \"woo_shipping_zones_get\",\n \"woo_shipping_zone_methods_list\",\n \"woo_shipping_methods_list\",\n \"woo_shipping_classes_list\",\n \"woo_shipping_classes_get\",\n ],\n },\n {\n resource: \"payments\",\n path: \"/payment_gateways\",\n methods: [\"GET\", \"PUT\"],\n tools: [\"woo_payments_list\", \"woo_payments_get\", \"woo_payments_update\"],\n },\n {\n resource: \"reports\",\n paths: [\n \"/reports/sales\",\n \"/reports/top_sellers\",\n \"/reports/orders/totals\",\n \"/reports/customers/totals\",\n \"/reports/products/totals\",\n \"/reports/coupons/totals\",\n \"/reports/reviews/totals\",\n ],\n tools: [\n \"woo_reports_sales\",\n \"woo_reports_top_sellers\",\n \"woo_reports_orders_totals\",\n \"woo_reports_customers_totals\",\n \"woo_reports_products_totals\",\n \"woo_reports_coupons_totals\",\n \"woo_reports_reviews_totals\",\n ],\n },\n {\n resource: \"settings\",\n path: \"/settings\",\n methods: [\"GET\", \"PUT\"],\n tools: [\n \"woo_settings_groups_list\",\n \"woo_settings_list\",\n \"woo_settings_get\",\n \"woo_settings_update\",\n ],\n },\n {\n resource: \"system_status\",\n path: \"/system_status\",\n tools: [\n \"woo_system_status_get\",\n \"woo_system_status_tools_list\",\n \"woo_system_status_tools_run\",\n ],\n },\n {\n resource: \"webhooks\",\n path: \"/webhooks\",\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\"],\n tools: [\n \"woo_webhooks_list\",\n \"woo_webhooks_get\",\n \"woo_webhooks_create\",\n \"woo_webhooks_update\",\n \"woo_webhooks_delete\",\n ],\n },\n {\n resource: \"tax\",\n paths: [\"/taxes\", \"/taxes/classes\"],\n methods: [\"GET\", \"POST\", \"PUT\", \"DELETE\"],\n tools: [\n \"woo_tax_rates_list\",\n \"woo_tax_rates_get\",\n \"woo_tax_rates_create\",\n \"woo_tax_rates_update\",\n \"woo_tax_rates_delete\",\n \"woo_tax_classes_list\",\n \"woo_tax_classes_get\",\n ],\n },\n ],\n pagination: {\n params: [\"page\", \"per_page\"],\n headers: [\"x-wp-total\", \"x-wp-totalpages\"],\n },\n authentication: \"OAuth 1.0a (HTTP) or Basic Auth over HTTPS with consumer key/secret\",\n};\n\nexport function registerApiSchemaResource(\n server: McpServer,\n client: WooClient,\n): void {\n server.registerResource(\n \"api-schema\",\n API_SCHEMA_URI,\n {\n title: \"WooCommerce REST API schema\",\n description:\n \"Documents the WooCommerce REST endpoints and corresponding MCP tools available in this server. Helps the model choose the correct tool instead of inventing raw API paths.\",\n mimeType: \"application/json\",\n },\n async (uri) => {\n try {\n // Optionally enrich with live OPTIONS on products when available\n let live: unknown = null;\n try {\n const opt = await client.api.options(\"products\");\n live = opt.data;\n } catch {\n // live schema optional — static schema is always returned\n }\n\n const payload = {\n ...WC_API_SCHEMA,\n store_url: client.config.WC_URL,\n live_products_options: live,\n };\n\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify(payload, null, 2),\n },\n ],\n };\n } catch (err) {\n const n = normalizeError(err);\n return {\n contents: [\n {\n uri: uri.href,\n mimeType: \"application/json\",\n text: JSON.stringify({ error: n, static: WC_API_SCHEMA }, null, 2),\n },\n ],\n };\n }\n },\n );\n}\n","/**\n * Prompt template: store-audit\n * Audits products for missing images, short descriptions, categories, stock, SEO.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\nexport function registerStoreAuditPrompt(server: McpServer): void {\n server.registerPrompt(\n \"store-audit\",\n {\n title: \"Store product SEO & quality audit\",\n description:\n \"Guides an audit of catalog products for missing images, empty short descriptions, uncategorized items, zero stock, and basic SEO issues. Use when the user asks to review catalog quality or SEO readiness.\",\n argsSchema: {\n sample_size: z\n .string()\n .optional()\n .describe(\"How many products to sample (default 50). Example: \\\"50\\\"\"),\n focus: z\n .string()\n .optional()\n .describe(\n \"Optional focus area: seo, inventory, images, categories, or all\",\n ),\n },\n },\n ({ sample_size, focus }) => {\n const size = sample_size || \"50\";\n const area = focus || \"all\";\n return {\n messages: [\n {\n role: \"user\",\n content: {\n type: \"text\",\n text: `You are auditing a WooCommerce store catalog for quality and SEO issues.\n\nFocus area: ${area}\nSample size: up to ${size} products\n\nSteps:\n1. Read the woo://store/info resource for store context (currency, WC version).\n2. Use woo_products_list with per_page appropriate for the sample (paginate if needed).\n3. For each product, flag issues:\n - Missing or empty images array\n - Empty or very short short_description (< 20 chars)\n - No categories assigned\n - stock_quantity is 0 or stock_status is outofstock while status is publish\n - Missing or generic name / slug issues (slug equals \"product\" or empty)\n - description longer than 0 but missing title-like H1 keywords (basic SEO note)\n4. Group findings by severity (critical / warning / info).\n5. Produce a prioritized action list with product IDs and suggested fixes.\n6. Do not modify products unless the user explicitly asks you to apply fixes.\n\nReturn a structured markdown report with counts and a table of affected product IDs.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * Prompt template: order-report\n * Summarizes orders by status, revenue, top products for a date range.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\nexport function registerOrderReportPrompt(server: McpServer): void {\n server.registerPrompt(\n \"order-report\",\n {\n title: \"Sales / order report\",\n description:\n \"Generates a sales report for a given date range: orders by status, revenue totals, and top products. Defaults to the last 30 days when dates are omitted.\",\n argsSchema: {\n date_min: z\n .string()\n .optional()\n .describe(\"Start date YYYY-MM-DD (default: 30 days ago)\"),\n date_max: z\n .string()\n .optional()\n .describe(\"End date YYYY-MM-DD (default: today)\"),\n status: z\n .string()\n .optional()\n .describe(\"Optional order status filter, e.g. completed,processing\"),\n },\n },\n ({ date_min, date_max, status }) => {\n const min = date_min || \"(30 days ago — compute ISO date)\";\n const max = date_max || \"(today — compute ISO date)\";\n const statusFilter = status || \"any relevant statuses\";\n return {\n messages: [\n {\n role: \"user\",\n content: {\n type: \"text\",\n text: `Generate a WooCommerce sales report for the date range ${min} to ${max}.\n\nStatus filter: ${statusFilter}\n\nSteps:\n1. Read woo://store/info for currency and store name.\n2. Call woo_reports_sales with date_min/date_max (or period if appropriate).\n3. Call woo_reports_top_sellers for the same range.\n4. Call woo_reports_orders_totals for status distribution.\n5. Optionally list recent orders with woo_orders_list (after/before filters, status) for qualitative notes.\n6. Summarize:\n - Total revenue and order count\n - Average order value\n - Breakdown by order status\n - Top 5 products by quantity sold\n - Notable anomalies (refunds, failed spikes)\n\nPresent results as executive-friendly markdown with bullet KPIs and a short narrative. Do not invent numbers — only use tool results.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * Prompt template: inventory-check\n * Finds products below a stock threshold, groups by category, suggests reorder qty.\n */\n\nimport { z } from \"zod\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\n\nexport function registerInventoryCheckPrompt(server: McpServer): void {\n server.registerPrompt(\n \"inventory-check\",\n {\n title: \"Low-stock inventory check\",\n description:\n \"Finds products with stock below a threshold, groups them by category, and suggests reorder quantities. Use for replenishment planning and stock-out prevention.\",\n argsSchema: {\n threshold: z\n .string()\n .optional()\n .describe(\"Stock quantity threshold (default 5). Example: \\\"5\\\"\"),\n include_outofstock: z\n .string()\n .optional()\n .describe(\"Whether to include outofstock items: true|false (default true)\"),\n },\n },\n ({ threshold, include_outofstock }) => {\n const thr = threshold || \"5\";\n const includeOoS = include_outofstock ?? \"true\";\n return {\n messages: [\n {\n role: \"user\",\n content: {\n type: \"text\",\n text: `Perform a low-stock inventory check for this WooCommerce store.\n\nThreshold: stock_quantity < ${thr} (or null with manage_stock)\nInclude out-of-stock products: ${includeOoS}\n\nSteps:\n1. Use woo_products_list with stock_status filters and paginate through results (per_page=50).\n2. Also fetch categories with woo_categories_list for grouping labels.\n3. Filter products where manage_stock is true and stock_quantity is below ${thr}, plus outofstock if requested.\n4. For variable products, use woo_variations_list when parent stock is not authoritative.\n5. Group low-stock items by primary category name.\n6. Suggest a reorder quantity per SKU: max(${thr} * 2 - current_stock, ${thr}) unless historical sales data is available from woo_reports_top_sellers to refine.\n7. Produce a markdown table: SKU | Name | Category | Stock | Suggested reorder | Product ID.\n\nDo not change stock levels unless the user explicitly asks to update products.`,\n },\n },\n ],\n };\n },\n );\n}\n","/**\n * Registers all MCP tools, resources, and prompts on the server instance.\n */\n\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport type { WooClient } from \"./client.js\";\n\nimport { registerProductTools } from \"./tools/products.js\";\nimport { registerOrderTools } from \"./tools/orders.js\";\nimport { registerCustomerTools } from \"./tools/customers.js\";\nimport { registerCouponTools } from \"./tools/coupons.js\";\nimport { registerCategoryTools } from \"./tools/categories.js\";\nimport { registerTagTools } from \"./tools/tags.js\";\nimport { registerVariationTools } from \"./tools/variations.js\";\nimport { registerShippingTools } from \"./tools/shipping.js\";\nimport { registerPaymentTools } from \"./tools/payments.js\";\nimport { registerReportTools } from \"./tools/reports.js\";\nimport { registerSettingsTools } from \"./tools/settings.js\";\nimport { registerSystemStatusTools } from \"./tools/system-status.js\";\nimport { registerWebhookTools } from \"./tools/webhooks.js\";\nimport { registerTaxTools } from \"./tools/tax.js\";\n\nimport { registerStoreInfoResource } from \"./resources/store-info.js\";\nimport { registerApiSchemaResource } from \"./resources/api-schema.js\";\n\nimport { registerStoreAuditPrompt } from \"./prompts/store-audit.js\";\nimport { registerOrderReportPrompt } from \"./prompts/order-report.js\";\nimport { registerInventoryCheckPrompt } from \"./prompts/inventory-check.js\";\n\n/**\n * Catalog of tool domains for documentation / UI.\n */\nexport const TOOL_DOMAINS = [\n \"products\",\n \"orders\",\n \"customers\",\n \"coupons\",\n \"categories\",\n \"tags\",\n \"variations\",\n \"shipping\",\n \"payments\",\n \"reports\",\n \"settings\",\n \"system-status\",\n \"webhooks\",\n \"tax\",\n] as const;\n\nexport type ToolDomain = (typeof TOOL_DOMAINS)[number];\n\n/**\n * Auto-register every tool, resource, and prompt.\n */\nexport function registerAll(server: McpServer, client: WooClient): void {\n // Tools\n registerProductTools(server, client);\n registerOrderTools(server, client);\n registerCustomerTools(server, client);\n registerCouponTools(server, client);\n registerCategoryTools(server, client);\n registerTagTools(server, client);\n registerVariationTools(server, client);\n registerShippingTools(server, client);\n registerPaymentTools(server, client);\n registerReportTools(server, client);\n registerSettingsTools(server, client);\n registerSystemStatusTools(server, client);\n registerWebhookTools(server, client);\n registerTaxTools(server, client);\n\n // Resources\n registerStoreInfoResource(server, client);\n registerApiSchemaResource(server, client);\n\n // Prompts\n registerStoreAuditPrompt(server);\n registerOrderReportPrompt(server);\n registerInventoryCheckPrompt(server);\n}\n","/**\n * CLI entrypoint for `woo-mcp-server` / `npx woo-mcp-server`.\n * Validates env and starts the MCP server on STDIO.\n */\n\nimport { startServer } from \"./server.js\";\n\nstartServer().catch((err) => {\n console.error(\n err instanceof Error ? err.message : `Fatal error: ${String(err)}`,\n );\n process.exit(1);\n});\n"],"mappings":"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","names":["z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z","z"]}
|