MCP Tools
Article Pipeline Tools
7 MCP tools for block-based article generation. Create articles from templates, write individual blocks, rewrite, add/remove blocks, and manage the review workflow.
aeo_create_article (select template and get block list) - aeo_write_block (write each block in generation order) - aeo_review_article (send for review). Use aeo_rewrite_block, aeo_add_block, and aeo_remove_block to refine the article before submitting.aeo_create_article
Create a new block-based article from a recipe template. Returns an execution ID and the full list of blocks with their generation order. Each block has an instance_id (e.g., "B-07-0") that uniquely identifies it within the execution, and a generation_order indicating the recommended sequence for writing blocks.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
domain | string | Required | Client domain (e.g., "understoodcare.com") |
article_type | enum | Required | Template type: blog-post, knowledge-article, how-to-guide, listicle, comparison-post, beginners-guide, case-study, landing-page, glossary, product-review, ultimate-guide |
topic_title | string | Required | The article topic or headline |
topic_description | string | Optional | Brief description of the article scope and angle |
target_word_count | number | Optional | Desired word count for the finished article |
audience | string | Optional | Target audience description |
goal | string | Optional | Business goal for this article (e.g., "Generate qualified leads") |
folder_id | string | Optional | Folder ID to organize the article in |
scope | enum | Optional | Content depth: quick (fewer blocks), standard, or deep (more blocks, more detail)Default: standard |
brief | object | Optional | Article brief with h1, directAnswer, ctaType, and intentStage fields |
internal_links | array | Optional | Array of internal URLs to link to within the article |
author_preset_id | string | Optional | Author preset ID for voice/tone configuration |
Example
Response
aeo_write_block
Write content for a single block in an article execution. Each block is identified by its instance_id (e.g., "B-07-0"). Provide HTML for rendered output and plain text for word counting. The running total_word_count across all blocks is returned so you can track progress toward the target.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
execution_id | string | Required | The execution ID returned by aeo_create_article |
instance_id | string | Required | Block instance ID (e.g., "B-07-0") |
block_id | string | Required | Block type ID (e.g., "B-07") |
html | string | Optional | HTML content for the block |
text | string | Optional | Plain text content (used for word count tracking) |
output | JSON | Optional | Structured JSON output for blocks that produce data (e.g., schema blocks) |
word_count | number | Optional | Explicit word count override |
metadata | object | Optional | Additional metadata to store with the block |
Example
Response
aeo_get_article_blocks
Retrieve all blocks and their content for an article. Pass an execution_id for a specific article, or a domain to fetch the latest execution for that domain. Use include_content to control whether block content is returned as HTML or plain text.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
execution_id | string | Optional | Execution ID of a specific article |
domain | string | Optional | Client domain - fetches the latest execution for this domain |
include_content | enum | Optional | Content format to include: "text" or "html" |
execution_id or domain, not both. If neither is provided, the tool returns an error.Example
Response
aeo_rewrite_block
Rewrite an existing block with new content. Use this after reviewing a block that needs revision - for example, to add more original data, improve the CTA, or adjust tone to match the client voice profile. The previous version is replaced and the running total_word_count is recalculated.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
execution_id | string | Required | The execution ID of the article |
instance_id | string | Required | Block instance ID to rewrite (e.g., "B-07-0") |
html | string | Optional | New HTML content for the block |
text | string | Optional | New plain text content |
output | JSON | Optional | New structured JSON output |
word_count | number | Optional | Explicit word count override for the rewritten block |
Example
Response
aeo_add_block
Add a new block to an existing article. Specify the block type via block_id and optionally position it after an existing block. If no after_instance_id is provided, the block is appended to the end. The new block gets a unique instance_id with an incremented suffix (e.g., if "B-14-0" exists, the new one becomes "B-14-1").
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
execution_id | string | Required | The execution ID of the article |
block_id | string | Required | Block type to add (e.g., "B-14" for Expert Quote, "B-11" for Callout) |
after_instance_id | string | Optional | Insert after this block instance. Defaults to appending at end. |
Example
Response
aeo_write_block with the returned instance_id to populate it with content.aeo_remove_block
Remove a block from an article. The remaining blocks are reordered automatically. Use this to trim unnecessary sections - for example, removing a second comparison table if the article already has enough data density, or dropping a callout box that feels redundant.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
execution_id | string | Required | The execution ID of the article |
instance_id | string | Required | Block instance ID to remove (e.g., "B-14-1") |
Example
Response
aeo_review_article
Manage the article review workflow. Actions transition the article through statuses: draft - in_review - approved or revision_requested - published. When requesting revision, include notes explaining what needs to change.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
execution_id | string | Required | The execution ID of the article |
action | enum | Required | Workflow action: send_for_review, approve, request_revision, publish |
notes | string | Optional | Review notes. Required when action is request_revision. |
categories | array | Optional | Category tags for the article (e.g., ["home-health", "hiring-guide"]) |
Send for review
Example
Response
Approve article
Example
Response
aeo_review_article with action: "publish" to mark the article as published. To push content to a CMS, use the separate aeo_publish_to_cms tool.