create_template
Generate customizable product templates for e-commerce platforms by defining dimensions, layers, and shop domain using the TailorKit MCP server.
Instructions
Create a new template with shop domain
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| _id | No | The id of the template | |
| dimension | No | The dimension of the template | |
| layers | No | The layers of the template | |
| name | Yes | The name of the template | New Template |
| shopDomain | Yes | The shop domain ends with .myshopify.com |
Implementation Reference
- The main handler function for the 'create_template' MCP tool. It uses a factory to combine argument validation and the service method that calls templateService.createTemplate(args). Includes validator (lines 8-18) and service method (23-28).export const createTemplateHandler = createHandler<CreateTemplateArgs, any>( validateCreateTemplateArgs, createTemplateServiceMethod );
- Definition of the 'create_template' tool including name, description, and detailed JSON inputSchema for parameters like _id, shopDomain, name, dimension, layers.const createTemplateTool: TailorKitTool = { name: TAILOR_KIT_TOOL_NAMES.CREATE_TEMPLATE, description: "Create a new template with shop domain", inputSchema: { type: "object", properties: { _id: { type: "string", description: "The id of the template", pattern: UUID_PATTERN, }, shopDomain: { type: "string", description: "The shop domain ends with .myshopify.com", }, name: { type: "string", description: "The name of the template", default: "New Template", }, dimension: { type: "object", description: "The dimension of the template", properties: { width: { type: "number", description: "The width of the template", default: 1000, }, height: { type: "number", description: "The height of the template", default: 1000, }, measurementUnit: { type: "string", description: "The measurement unit", default: "px", }, resolution: { type: "number", description: "The resolution of the template", default: 300, }, }, required: ["width", "height", "measurementUnit", "resolution"], }, layers: { type: "array", description: "The layers of the template", items: { type: "object", properties: { _id: { type: "string", description: "The id of the layer", pattern: UUID_PATTERN, }, label: { type: "string", description: "The label of the layer", }, type: { type: "string", description: "The type of the layer", enum: ["group", "text", "image", "imageless", "multi-layout"], }, locked: { type: "boolean", description: "Whether the layer is locked", default: false, }, visible: { type: "boolean", description: "Whether the layer is visible", default: true, }, left: { type: "number", description: "The left position of the layer", default: 0, }, top: { type: "number", description: "The top position of the layer", default: 0, }, rotate: { type: "number", description: "The rotation of the layer", default: 0, }, width: { type: "number", description: "The width of the layer", default: 0, }, height: { type: "number", description: "The height of the layer", default: 0, }, image: { type: "object", description: "The image of the layer. Only used for image layer", properties: { src: { type: "string", description: "The source of the image", }, width: { type: "number", description: "The width of the image", default: 0, }, height: { type: "number", description: "The height of the image", default: 0, }, }, }, children: { type: "array", description: "The children of the layer", items: { type: "string", }, }, settings: { type: "object", description: "The settings of the layer", properties: {}, }, }, required: [ "_id", "label", "type", "locked", "visible", "left", "top", "rotate", "width", "height", ], }, }, ...COMMON_TOOL_PROPERTIES, }, required: ["_id","shopDomain", "name", "dimension", "prompt", "conversationId", "conversationTitle"], }, }; export default createTemplateTool;
- src/handlers/registrars/TemplateHandlerRegistrar.ts:24-27 (registration)Registration of the create_template tool handler in the TemplateHandlerRegistrar class.this.registry.register( TAILOR_KIT_TOOL_NAMES.CREATE_TEMPLATE, (args: unknown) => createTemplateHandler(this.serviceManager, args) );
- types/templates.ts:52-92 (schema)TypeScript interface defining the input arguments for the create_template tool.export interface CreateTemplateArgs extends CommonToolArgs { /** * The id of the template */ _id?: string; /** * The name of the template */ name: string; /** * The dimension of the template */ dimension: { width: number; height: number; measurementUnit: "px" | "cm" | "inch" | "mm"; resolution: number; }; /** * The layers of the template */ layers?: Array<{ _id: string; label: string; type: 'group' | 'text' | 'image' | 'imageless' | 'multi-layout'; locked: boolean; visible: boolean; left: number; top: number; rotate: number; width: number; height: number; children?: string[]; image?: { src: string; width: number; height: number; }; settings?: Record<string, any>; }>; }
- src/tools/index.ts:1-12 (registration)Import and inclusion of the createTemplateTool in the main tools export array.import createTemplateTool from "./template/createTemplateTool.js"; import getDetailTemplateTool from "./template/getDetailTemplateTool.js"; import getListLayersOfTemplateTool from "./layer/getListLayersOfTemplateTool.js"; import getListTemplatesTool from "./template/getListTemplatesTool.js"; import getDetailProductTool from "./shopify/products/getDetailProductTool.js"; import { getListProductsTool } from "./shopify/products/index.js"; import getUserPreferencesTool from "./userPreferences/getUserPreferencesTool.js"; const TOOLS = [ getListTemplatesTool, getDetailTemplateTool, createTemplateTool,