create-product
Add new products to a Shopify store by specifying title, description, vendor, product type, tags, and status.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| descriptionHtml | No | ||
| vendor | No | ||
| productType | No | ||
| tags | No | ||
| status | No | DRAFT |
Implementation Reference
- src/tools/createProduct.ts:31-85 (handler)The execute method that handles the create-product tool logic. It constructs a GraphQL mutation, sends it to Shopify, handles errors, and returns the created product.execute: async (input: CreateProductInput) => { try { const query = gql` mutation productCreate($input: ProductInput!) { productCreate(input: $input) { product { id title descriptionHtml vendor productType status tags } userErrors { field message } } } `; const variables = { input, }; const data = (await shopifyClient.request(query, variables)) as { productCreate: { product: any; userErrors: Array<{ field: string; message: string; }>; }; }; // If there are user errors, throw an error if (data.productCreate.userErrors.length > 0) { throw new Error( `Failed to create product: ${data.productCreate.userErrors .map((e) => `${e.field}: ${e.message}`) .join(", ")}` ); } return { product: data.productCreate.product }; } catch (error) { console.error("Error creating product:", error); throw new Error( `Failed to create product: ${ error instanceof Error ? error.message : String(error) }` ); } },
- src/tools/createProduct.ts:7-14 (schema)Input validation schema using Zod for the create-product tool. Defines fields: title (required), descriptionHtml, vendor, productType, tags, and status (default DRAFT).const CreateProductInputSchema = z.object({ title: z.string().min(1), descriptionHtml: z.string().optional(), vendor: z.string().optional(), productType: z.string().optional(), tags: z.array(z.string()).optional(), status: z.enum(["ACTIVE", "DRAFT", "ARCHIVED"]).default("DRAFT"), });
- src/index.ts:255-271 (registration)Registration of the create-product tool with the MCP server. Maps the schema and calls createProduct.execute with the validated arguments.server.tool( "create-product", { title: z.string().min(1), descriptionHtml: z.string().optional(), vendor: z.string().optional(), productType: z.string().optional(), tags: z.array(z.string()).optional(), status: z.enum(["ACTIVE", "DRAFT", "ARCHIVED"]).default("DRAFT"), }, async (args) => { const result = await createProduct.execute(args); return { content: [{ type: "text", text: JSON.stringify(result) }] }; } );
- src/index.ts:19-19 (registration)Import statement for the createProduct module.import { createProduct } from "./tools/createProduct.js";
- src/index.ts:71-71 (registration)Initialization of the createProduct tool with the Shopify GraphQL client.createProduct.initialize(shopifyClient);