create_article
Create new articles in Zendesk Guide by specifying title, content, section, and optional metadata like locale or labels.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Article title | |
| body | Yes | Article body content (HTML) | |
| section_id | Yes | Section ID where the article will be created | |
| locale | No | Article locale (e.g., 'en-us') | |
| draft | No | Whether the article is a draft | |
| permission_group_id | No | Permission group ID for the article | |
| user_segment_id | No | User segment ID for the article | |
| label_names | No | Labels for the article |
Implementation Reference
- src/tools/help-center.js:68-92 (handler)The handler function for the 'create_article' tool. It constructs article data from inputs and calls the Zendesk client to create the article, returning success or error response.handler: async ({ title, body, section_id, locale, draft, permission_group_id, user_segment_id, label_names }) => { try { const articleData = { title, body, locale, draft, permission_group_id, user_segment_id, label_names }; const result = await zendeskClient.createArticle(articleData, section_id); return { content: [{ type: "text", text: `Article created successfully!\n\n${JSON.stringify(result, null, 2)}` }] }; } catch (error) { return { content: [{ type: "text", text: `Error creating article: ${error.message}` }], isError: true }; }
- src/tools/help-center.js:58-67 (schema)Zod schema defining the input parameters and validation for the 'create_article' tool.schema: { title: z.string().describe("Article title"), body: z.string().describe("Article body content (HTML)"), section_id: z.number().describe("Section ID where the article will be created"), locale: z.string().optional().describe("Article locale (e.g., 'en-us')"), draft: z.boolean().optional().describe("Whether the article is a draft"), permission_group_id: z.number().optional().describe("Permission group ID for the article"), user_segment_id: z.number().optional().describe("User segment ID for the article"), label_names: z.array(z.string()).optional().describe("Labels for the article") },
- src/tools/help-center.js:55-93 (registration)The complete tool definition object for 'create_article', including name, description, schema, and handler, which is part of the helpCenterTools array exported and registered in the MCP server.{ name: "create_article", description: "Create a new Help Center article", schema: { title: z.string().describe("Article title"), body: z.string().describe("Article body content (HTML)"), section_id: z.number().describe("Section ID where the article will be created"), locale: z.string().optional().describe("Article locale (e.g., 'en-us')"), draft: z.boolean().optional().describe("Whether the article is a draft"), permission_group_id: z.number().optional().describe("Permission group ID for the article"), user_segment_id: z.number().optional().describe("User segment ID for the article"), label_names: z.array(z.string()).optional().describe("Labels for the article") }, handler: async ({ title, body, section_id, locale, draft, permission_group_id, user_segment_id, label_names }) => { try { const articleData = { title, body, locale, draft, permission_group_id, user_segment_id, label_names }; const result = await zendeskClient.createArticle(articleData, section_id); return { content: [{ type: "text", text: `Article created successfully!\n\n${JSON.stringify(result, null, 2)}` }] }; } catch (error) { return { content: [{ type: "text", text: `Error creating article: ${error.message}` }], isError: true }; } }
- src/zendesk-client.js:263-268 (helper)Helper method in ZendeskClient that performs the actual API request to create an article in a specific section.async createArticle(data, sectionId) { return this.request( "POST", `/help_center/sections/${sectionId}/articles.json`, { article: data } );