Skip to main content
Glama

create-product

Add new products to a Shopify store by specifying title, description, vendor, product type, tags, and status.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
titleYes
descriptionHtmlNo
vendorNo
productTypeNo
tagsNo
statusNoDRAFT

Implementation Reference

  • 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)
          }`
        );
      }
    },
  • 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);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/anass319/shopify-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server