update-article
Modify existing blog articles in Shopify stores by updating titles, content, summaries, tags, or author information using the article's unique identifier.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| articleId | Yes | The GID of the article to update (e.g., "gid://shopify/Article/1234567890") | |
| title | No | ||
| body | No | ||
| summary | No | ||
| tags | No | ||
| author | No |
Implementation Reference
- src/tools/updateArticle.ts:35-115 (handler)The main handler function that executes the GraphQL mutation to update the Shopify article using the provided input data.execute: async (input: UpdateArticleInput) => { try { const { articleId, ...updateData } = input; const mutation = gql` mutation UpdateArticle($id: ID!, $article: ArticleUpdateInput!) { articleUpdate(id: $id, article: $article) { article { id title handle body summary tags author { name } image { id url altText } } userErrors { field message } } } `; const variables = { id: articleId, article: updateData }; const data = await shopifyClient.request(mutation, variables) as { articleUpdate: { article: { id: string; title: string; handle: string; body: string; summary: string; tags: string[]; author: { name: string; } | null; image: { id: string; url: string; altText: string | null; } | null; }; userErrors: Array<{ field: string; message: string; }>; }; }; if (data.articleUpdate.userErrors.length > 0) { throw new Error( `Failed to update article: ${data.articleUpdate.userErrors .map((error) => error.message) .join(", ")}` ); } return { article: data.articleUpdate.article }; } catch (error) { console.error("Error updating article:", error); throw new Error( `Failed to update article: ${ error instanceof Error ? error.message : String(error) }` ); } }
- src/tools/updateArticle.ts:6-15 (schema)Zod input schema defining the parameters for updating an article, including articleId, title, body, summary, tags, and author.const UpdateArticleInputSchema = z.object({ articleId: z.string().min(1).describe("The GID of the article to update (e.g., \"gid://shopify/Article/1234567890\")"), title: z.string().optional().describe("The new title for the article"), body: z.string().optional().describe("The new content for the article"), summary: z.string().optional().describe("A short summary of the article"), tags: z.array(z.string()).optional().describe("Tags for the article"), author: z.object({ name: z.string() }).optional().describe("Author information for the article") });
- src/index.ts:242-261 (registration)Registers the 'update-article' tool with the MCP server, providing an inline Zod schema and a handler that delegates to the imported updateArticle.execute method.// Add the updateArticle tool server.tool( "update-article", { articleId: z.string().min(1).describe("The GID of the article to update (e.g., \"gid://shopify/Article/1234567890\")"), title: z.string().optional(), body: z.string().optional(), summary: z.string().optional(), tags: z.array(z.string()).optional(), author: z.object({ name: z.string() }).optional() }, async (args) => { const result = await updateArticle.execute(args); return { content: [{ type: "text", text: JSON.stringify(result) }] }; } );