Use this skill whenever a user wants to turn AI Visibility data into published content — whether they say "find content gaps", "what should we write about", "which topics have low visibility", "help me get cited by AI models", "create a blog post from our AI Visibility gaps", "we're losing to competitors on these prompts", or any variation where they want to go from AI visibility weakness to a draft article, landing page, or FAQ. This skill connects directly to Amplitude AI Visibility data (topics, prompts, visibility scores, citations, competitor data, full LLM responses and sources) and produces a publish-ready content brief plus full article draft. If the user mentions CMS (WordPress, Webflow, Contentful, Sanity, HubSpot, Ghost, Shopify), also trigger this skill to push the draft directly. Trigger even if they just say something vague like "what content should we create?" in an AI Visibility context.
76
70%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Advisory
Suggest reviewing before use
Optimize this skill with Tessl
npx tessl skill review --optimize ./content-marketing-skills/skills/prompt-gap-to-publish/SKILL.mdYou're helping a marketing or content team turn AI Visibility gaps into real published content. The core insight: when AI models answer questions in your product category, your brand's presence is measurable — visibility %, average rank, citation count. Where you're weak is where you should write. This skill finds those gaps and produces a publish-ready article draft — and pushes it straight into the user's CMS as a draft.
Before pulling any data, figure out where content will land. This saves the user from a copy-paste dead end at the finish line.
Look at the tools currently available in your context. Known CMS MCP patterns to check for:
| CMS | MCP tool name patterns to look for |
|---|---|
| Sanity | sanity, create_documents_from_markdown, publish_documents |
| Contentful | contentful, create_entry, publish_entry |
| HubSpot CMS | hubspot, create_blog_post, update_blog_post |
| WordPress | wordpress, wp_create_post |
| Ghost | ghost, create_post |
| Webflow | webflow, create_cms_item |
If a CMS MCP is already connected: Great — confirm with the user in one sentence: "I can see you have [CMS] connected — I'll push the article there as a draft when we're done. Sound good?" Then proceed to Step 1.
If no CMS MCP is detected: Ask the user directly. Keep it short and warm — this is a one-time setup moment:
"Before we dive in — which CMS do you publish to? Once I know, I can push the article there as a draft automatically instead of handing you a block of Markdown to paste."
Offer these options (or let them type their own):
Once you know their CMS, give them a short, specific setup recommendation — then offer to continue anyway while they set it up:
Sanity:
"The Sanity MCP connector is available in the Cowork marketplace. Go to Settings → Plugins → search 'Sanity' and connect it with your project ID and token. Takes about 2 minutes. Want me to continue finding your content gaps while you do that? I'll be ready to push the draft when you're connected."
Contentful:
"There's a Contentful MCP connector available. Go to Settings → Plugins → search 'Contentful' and add your Space ID and Content Management API token. Continue finding gaps now?"
HubSpot CMS:
"HubSpot may already be connected via Glean. If not, search 'HubSpot' in Settings → Plugins. I'll create a blog post draft there when we're done."
WordPress:
"WordPress can connect via MCP (search 'WordPress' in Settings → Plugins, you'll need your site URL and an Application Password from WordPress admin). Alternatively, I can use Chrome to draft the post directly in your WordPress admin — just share the URL. Which works better?"
Webflow:
"Webflow's CMS API is the cleanest path — search 'Webflow' in Settings → Plugins and connect with your API key and Collection ID. I can also automate it via Chrome if you prefer not to set up a plugin."
Ghost:
"Ghost has a well-documented Admin API. Search 'Ghost' in Settings → Plugins and add your Admin API key and site URL. Quick to set up."
"Just Markdown for now":
"No problem — I'll give you a clean Markdown file at the end, formatted to paste straight into any CMS. You can always connect your CMS later and we'll push directly."
After giving the recommendation, don't wait for them to finish the setup — say something like: "I'll start pulling your content gaps now. By the time I have the article ready, you'll be all set." Then proceed to Step 1.
Store which CMS they named and whether it's connected — you'll use this in Step 6.
Use list_ai_visibility_org_brands to fetch available brands, then:
Note the orgBrandId — you'll need it throughout.
Use get_ai_visibility_topics with the selected orgBrandId (omit reportId to get the latest).
For each topic capture: topicId, topicName, visibilityPercentage, averageRank,
relevancyScore, and citation counts.
Opportunity heuristic: topics with relevancy > 60% and visibility < 40% are your goldmine — AI models consider them core to the brand's category but barely mention the brand. Also flag topics where a competitor leads by 20+ points.
For the top 3–5 opportunity topics, use get_ai_visibility_prompts with the topicId. Look for:
If available, use get_ai_visibility_prompt_responses to read the actual LLM-generated answers for
the weakest prompts — this shows exactly what AI models currently say. It's the best possible brief
for writing a better answer.
Present a ranked shortlist of 3–5 content opportunities:
| # | Topic | Representative prompt | Amplitude visibility | Top competitor | Content type |
|---|---|---|---|---|---|
| 1 | ... | "..." | X% | Competitor Y% | Landing page |
Content type guide:
Ask: "Which of these do you want to write first?" Wait for their pick.
Write a full, publish-ready draft for the chosen opportunity. Not a skeleton — real sentences, real content. The user should be able to paste this into a CMS today.
Content brief (upfront):
Article fields:
slug — URL-friendly, keyword-richmetaTitle — 50–60 characters, contains the primary keywordmetaDescription — 140–160 characters, summarizes the article with a CTAArticle body:
Use what you learned in Step 0.
Create a draft directly. Follow this sequence:
draft (never published without explicit
instruction).Sanity — use create_documents_from_markdown with the article content. Set _type to match
the user's blog post schema (ask if unsure: "What's the document type for blog posts in your Sanity
schema?"). Use publish_documents only if the user explicitly asks to publish.
Contentful — use create_entry with contentType matching their blog or article type. Set
fields.title, fields.slug, fields.body. Leave published: false.
HubSpot — use the blog post creation tool with state: DRAFT. Include meta description and
slug in the API call.
WordPress — use wp_create_post with status: draft. Map the H1 to title and article body
to content.
Ghost — use create_post with status: draft. Include slug, title, html or lexical,
and meta_description.
Webflow — use create_cms_item targeting the blog Collection. Map fields to the Collection's
schema (ask the user for field names if the schema isn't obvious from context).
If the user said "just Markdown" or hasn't connected a CMS yet:
"Here's your full article in Markdown — ready to paste into [CMS]. When you're ready to connect [CMS], I can push future articles there automatically."
Output the complete article as a clean, well-structured Markdown block.
Also say: "Want me to help you set up the [CMS] connection now? It takes about 2 minutes." If yes, walk them through the plugin setup from Step 0.
Always output the Markdown fallback — even when CMS creation succeeds — so the user has a local copy they own.
221ffaa
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.