Skip to main content
Glama

seo_auto_assign_cta

Automatically assign CTAs to blog articles: matches keywords to side pages and writes CTA header, text, button, link. Skips blogs with existing CTAs or Webflow sync.

Instructions

Optional capstone step — runs AFTER blog articles are published. Auto-suggests a published side-page CTA for each blog article in the batch by matching the article's keywords (cluster + tags + title) against the brand's published side pages, then writes the result to BlogArticle.sidePageInfo (header + ctaText + ctaButtonText + ctaHref). Defaults are safe to re-run: skips blogs that already have a CTA (overwriteExisting=false) and skips Webflow-synced blogs (skipWebflowSynced=true) since CTA edits don't push back to Webflow. Synchronous — returns { updated, skipped, errors, total, results: [{blogId, status, sidePageId?, sidePageSlug?}] } directly; no polling needed. Pass blogIds: "all" to process every blog for the brand, or a list of up to 50 blog IDs. Hard cap of 50 blogs per call. For brands with more uncovered blogs, batch your blogIds arrays in groups of 50. The matcher uses keywords today; reusing an existing CTA header/ctaText body as a matching signal is a planned enhancement.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
blogIdsYesBlog article IDs to process, or the literal "all" for every blog in the brand
brandIdNoBrand ID (defaults to active brand)
overwriteExistingNoOverwrite blogs that already have a sidePageInfo CTA (default false)
skipWebflowSyncedNoSkip blogs with externalProvider=webflow (default true)
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and excels: it discloses synchronous execution, return shape ({ updated, skipped, errors, total, results: [...] }), the skip behavior for Webflow-synced blogs and reason ('CTA edits don't push back to Webflow'), re-run safety (`overwriteExisting=false`), and limitations (keyword-only matcher, planned enhancement). This is highly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but densely packed with pertinent information, well-structured with em-dashes and semicolons. It front-loads the core purpose and then covers defaults, return value, cap, and future plans. Every sentence adds value, though it could be more concise by trimming the future enhancement note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description fully covers what the agent needs to know: when to run, what it does, side effects, return shape, parameter semantics, batch limits, and edge-case skips. It even notes the synchronous nature so no polling is needed. This is complete for a tool of this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds significant value by explaining the 'all' literal for blogIds, the 50-blog cap and batching, and the meaning of `overwriteExisting` and `skipWebflowSynced` in context (safe re-run, why skipping Webflow). This goes beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with specific verb and resource: 'Auto-suggests a published side-page CTA for each blog article in the batch' and writes to BlogArticle.sidePageInfo. It also specifies the matching criteria (keywords: cluster + tags + title) and the exact fields written, distinguishing it from other SEO or side-page tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'runs AFTER blog articles are published,' providing a temporal when-to-use. It also gives practical batching guidance ('Hard cap of 50 blogs per call... batch your blogIds arrays in groups of 50') and explains safe re-running via defaults. However, it does not explicitly mention when not to use or alternatives, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bitsandtea/postking-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server