Skip to main content
The content tools give AI agents full control over Rankahead’s content generation pipeline. You can generate blog posts from answer gap suggestions, GSC keyword data, or competitor URLs — then edit, publish, and track their search performance. Additional tools let you manage CMS connections, configure tone and style settings, and define the audience persona that shapes generated content.

list_blog_posts

Lists all blog posts in your account. You can filter by the prompt they were generated from or by their current status.
promptId
string
Optional prompt ID to return only posts generated from a specific prompt.
status
string
Optional status filter. Accepted values: GENERATING, DRAFT, PUBLISHED, FAILED.
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "list_blog_posts",
    "arguments": {}
  },
  "id": 1
}

get_blog_post

Returns full content and metadata for a single blog post, including the generated body, title, and associated prompt information.
blogPostId
string
required
The ID of the blog post to retrieve.
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "get_blog_post",
    "arguments": {
      "blogPostId": "blg_04ncp5t3p9fa"
    }
  },
  "id": 3
}
blogPostId
string
Unique identifier for the blog post.
title
string
The post title.
content
string
The full post body in TipTap JSON format.
status
string
Current status: GENERATING, DRAFT, PUBLISHED, or FAILED.

get_blog_publish_status

Returns the CMS publish records for a blog post, showing the publish status per connected CMS integration.
blogPostId
string
required
The ID of the blog post to check publish status for.
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "get_blog_publish_status",
    "arguments": {
      "blogPostId": "blg_04ncp5t3p9fa"
    }
  },
  "id": 4
}
publishRecords
object[]
Array of publish records, one per CMS connection, each showing the connection name, status, and published URL if available.

generate_blog_post

Triggers asynchronous generation of a new blog post. You must choose a generation mode, and some modes require additional parameters.
domainId
string
required
The domain to generate the post for.
mode
string
required
Generation mode. Accepted values:
  • FROM_SUGGESTIONS — generates from an answer gap suggestion identified by a prompt run
  • FROM_GSC_KEYWORD — generates targeting a keyword from your Google Search Console data
  • FROM_COMPETITOR — generates from a competitor URL for gap or comparison content
promptId
string
Required when mode is FROM_SUGGESTIONS. The ID of the prompt whose suggestions to use.
promptRunId
string
Optional specific run ID to pull suggestions from when using FROM_SUGGESTIONS mode.
keyword
string
Required when mode is FROM_GSC_KEYWORD. The GSC keyword to target.
competitorUrl
string
Required when mode is FROM_COMPETITOR. The competitor page URL to generate content from.
title
string
Optional custom title. If omitted, a title is generated automatically.
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "generate_blog_post",
    "arguments": {
      "domainId": "dom_01j9z3k8p4c2x",
      "mode": "FROM_SUGGESTIONS",
      "promptId": "prm_02kxw9a1m7d3y"
    }
  },
  "id": 5
}
blogPostId
string
The ID of the newly created blog post. Poll get_blog_post until status changes from GENERATING to DRAFT or FAILED.

get_blog_gsc_metrics

Returns Google Search Console performance metrics for a published blog post, including clicks, impressions, CTR, and average position.
blogPostId
string
required
The ID of the blog post to retrieve GSC metrics for.
days
number
default:"28"
Lookback window in days. Defaults to 28.
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "get_blog_gsc_metrics",
    "arguments": {
      "blogPostId": "blg_04ncp5t3p9fa",
      "days": 28
    }
  },
  "id": 8
}
clicks
number
Total organic clicks over the selected period.
impressions
number
Total search impressions over the selected period.
ctr
number
Average click-through rate as a decimal (e.g. 0.042 for 4.2%).
position
number
Average search ranking position over the selected period.

update_blog_post

Updates the title and/or content of a blog post. Only posts in DRAFT status can be edited.
blogPostId
string
required
The ID of the blog post to update.
title
string
Updated post title.
content
string
Updated post body as a JSON string in TipTap format.
Only DRAFT posts can be edited. Attempting to update a PUBLISHED post will return an error.
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "update_blog_post",
    "arguments": {
      "blogPostId": "blg_04ncp5t3p9fa",
      "title": "The Best CRM Software for Early-Stage Startups"
    }
  },
  "id": 9
}

delete_blog_post

Permanently deletes a blog post and all associated CMS publish records. This action cannot be undone.
blogPostId
string
required
The ID of the blog post to delete.
Deletion is permanent and removes all publish records for this post across connected CMS integrations.
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "delete_blog_post",
    "arguments": {
      "blogPostId": "blg_04ncp5t3p9fa"
    }
  },
  "id": 10
}

publish_blog_post

Publishes a blog post to a connected CMS. You must supply both the post ID and the CMS connection ID. Use list_cms_connections to retrieve available connection IDs.
blogPostId
string
required
The ID of the blog post to publish.
cmsConnectionId
string
required
The ID of the CMS connection to publish to.
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "publish_blog_post",
    "arguments": {
      "blogPostId": "blg_04ncp5t3p9fa",
      "cmsConnectionId": "cms_09qdr6u4q2gw"
    }
  },
  "id": 11
}

list_cms_connections

Lists all connected CMS integrations for your account. Use the returned connection IDs with publish_blog_post. This tool takes no input parameters.
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "list_cms_connections",
    "arguments": {}
  },
  "id": 12
}
connections
object[]
Array of CMS connections, each with an ID, name, and connection type (e.g. WordPress, Webflow).

get_content_settings

Returns the content generation settings for a domain, including tone of voice, target audience, value proposition, blocked words, and internal link configuration.
domainId
string
Optional domain ID. Defaults to the first domain in your organisation if omitted.
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "get_content_settings",
    "arguments": {
      "domainId": "dom_01j9z3k8p4c2x"
    }
  },
  "id": 13
}

update_content_settings

Updates content generation settings for a domain. Only the fields you provide are changed — all fields are optional except domainId.
domainId
string
Optional domain ID. Defaults to the first domain in your organisation if omitted.
valueProp
string
Value proposition describing what makes the brand unique.
targetAudience
string
Description of the target audience for generated content.
toneOfVoice
string
Writing tone. Accepted values: PROFESSIONAL, CASUAL, AUTHORITATIVE, FRIENDLY, EDUCATIONAL.
contentLanguage
string
Language code for content generation (e.g. en, fr, de).
blockedWords
string
JSON array string of words to exclude from generated content (e.g. '["spam","cheap"]').
JSON array string of internal URLs to include in generated content (e.g. '["https://example.com/pricing"]').
competitorDomains
string
JSON array string of competitor domain URLs to use for content differentiation (e.g. '["competitor.com"]').
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "update_content_settings",
    "arguments": {
      "domainId": "dom_01j9z3k8p4c2x",
      "toneOfVoice": "PROFESSIONAL",
      "targetAudience": "Marketing managers at B2B SaaS companies responsible for pipeline generation"
    }
  },
  "id": 14
}

get_persona

Returns the audience persona configured for a domain. The persona shapes the reading level, terminology, and examples used in generated content.
domainId
string
Optional domain ID. Defaults to the first domain in your organisation if omitted.
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "get_persona",
    "arguments": {
      "domainId": "dom_01j9z3k8p4c2x"
    }
  },
  "id": 15
}
name
string
The persona’s name (e.g. “Growth-Stage Founder”).
description
string
A description of the target audience.
ageRangeMin
number
Minimum age in the target range.
ageRangeMax
number
Maximum age in the target range.
educationLevel
string
Highest education level: HIGH_SCHOOL, BACHELORS, MASTERS, PHD, or SELF_TAUGHT.

upsert_persona

Creates or updates the audience persona for a domain. If a persona already exists for the domain, it is overwritten.
name
string
required
The persona’s name (e.g. “Growth-Stage Founder”).
description
string
required
A description of the target reader, their goals, and their pain points.
domainId
string
Optional domain ID. Defaults to the first domain in your organisation if omitted.
ageRangeMin
number
Minimum age in the target demographic.
ageRangeMax
number
Maximum age in the target demographic.
educationLevel
string
Highest education level of the target reader. Accepted values: HIGH_SCHOOL, BACHELORS, MASTERS, PHD, SELF_TAUGHT.
{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "upsert_persona",
    "arguments": {
      "domainId": "dom_01j9z3k8p4c2x",
      "name": "Growth-Stage Founder",
      "description": "Founders at Series A/B companies evaluating tools to scale their go-to-market motion. Technical enough to evaluate integrations but focused on business outcomes.",
      "ageRangeMin": 28,
      "ageRangeMax": 45,
      "educationLevel": "BACHELORS"
    }
  },
  "id": 16
}