update-collection
Modify Shopify collection details including title, description, and SEO metadata to keep store content current and optimized for search engines.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| collectionId | Yes | The GID of the collection to update (e.g., "gid://shopify/Collection/1234567890") | |
| title | No | ||
| description | No | ||
| descriptionHtml | No | ||
| seo | No |
Implementation Reference
- src/tools/updateCollection.ts:35-109 (handler)The main handler function 'execute' that performs the GraphQL mutation to update the Shopify collection using the provided input data, handles errors, and returns the updated collection information.execute: async (input: UpdateCollectionInput) => { try { const { collectionId, ...updateData } = input; const mutation = gql` mutation collectionUpdate($input: CollectionInput!) { collectionUpdate(input: $input) { collection { id title handle description descriptionHtml updatedAt seo { title description } } userErrors { field message } } } `; const variables = { input: { id: collectionId, ...updateData } }; const data = await shopifyClient.request(mutation, variables) as { collectionUpdate: { collection: { id: string; title: string; handle: string; description: string; descriptionHtml: string; updatedAt: string; seo: { title: string; description: string; }; }; userErrors: Array<{ field: string; message: string; }>; }; }; if (data.collectionUpdate.userErrors.length > 0) { throw new Error( `Failed to update collection: ${data.collectionUpdate.userErrors .map((error) => error.message) .join(", ")}` ); } return { collection: data.collectionUpdate.collection }; } catch (error) { console.error("Error updating collection:", error); throw new Error( `Failed to update collection: ${ error instanceof Error ? error.message : String(error) }` ); } }
- src/tools/updateCollection.ts:6-15 (schema)Zod schema defining the input parameters for the update-collection tool, including collectionId (required) and optional fields like title, description, seo.const UpdateCollectionInputSchema = z.object({ collectionId: z.string().min(1).describe("The GID of the collection to update (e.g., \"gid://shopify/Collection/1234567890\")"), title: z.string().optional().describe("The new title for the collection"), description: z.string().optional().describe("The new description for the collection"), descriptionHtml: z.string().optional().describe("The new HTML description for the collection"), seo: z.object({ title: z.string().optional(), description: z.string().optional() }).optional().describe("SEO information for the collection") });
- src/index.ts:136-154 (registration)Registration of the 'update-collection' tool in the MCP server, using an inline Zod schema and delegating execution to the imported updateCollection.execute function.server.tool( "update-collection", { collectionId: z.string().min(1).describe("The GID of the collection to update (e.g., \"gid://shopify/Collection/1234567890\")"), title: z.string().optional(), description: z.string().optional(), descriptionHtml: z.string().optional(), seo: z.object({ title: z.string().optional(), description: z.string().optional() }).optional() }, async (args) => { const result = await updateCollection.execute(args); return { content: [{ type: "text", text: JSON.stringify(result) }] }; } );
- src/index.ts:15-15 (registration)Import statement for the updateCollection tool module.import { updateCollection } from "./tools/updateCollection.js";
- src/index.ts:73-73 (registration)Initialization of the updateCollection tool with the Shopify GraphQL client.updateCollection.initialize(shopifyClient);