{"$schema":"https://ui.shadcn.com/schema/registry.json","name":"branded-seo-page-builder","type":"registry:item","title":"Branded SEO Page Builder","description":"Generate an on-brand, SEO-optimized HTML page from a domain using Context.dev brand, content, and styleguide data.","author":"TommyBez","categories":["marketing"],"dependencies":["ai@^7.0.38","eve@^0.31.3"],"meta":{"slug":"branded-seo-page-builder","category":"marketing","createdAt":"2026-06-27T07:44:00.000Z","updatedAt":"2026-08-10T00:00:00.000Z","docs":{"overview":["Branded SEO Page Builder is an eve agent that turns a bare domain into one complete, SEO-optimized HTML page. You interact with it in chat: ask for a page from a domain such as linear.app, or point it at a specific source URL and a target topic, and it returns a full static document with metadata, Open Graph and Twitter card tags, semantic sections, and JSON-LD structured data.","What makes it useful is grounding. The agent connects to Context.dev's hosted MCP server at context-dev.stlmcp.com to resolve real brand data for the domain: company name, description, colors, logos, industry labels, homepage content as markdown, and optional styleguide signals like typography and spacing. Every user-facing claim in the generated page comes from that data or your explicit request, never invented statistics, testimonials, or pricing.","Two vendored skills shape the output. The seo-audit skill enforces on-page fundamentals such as one h1, canonical tags, descriptive alt text, and intent-matched schema types, while the ai-seo skill structures copy into extractable answer blocks and FAQ sections so answer engines like ChatGPT, Perplexity, and Google AI Overviews can cite the page, not only rank it."],"howItWorks":["You ask for a page in chat, for example 'Create an SEO-optimized landing page for linear.app'; if no domain is given, the agent stops and asks for one before doing any generation work.","It loads the bundled seo-audit skill to plan page structure, metadata, headings, canonical tags, image alt text, and schema, then loads the ai-seo skill before writing body copy so sections stay extractable and answer-oriented.","Through the context-dev MCP connection it discovers Context.dev tools via connection_search, consults search_docs for exact SDK method names, and calls execute to fetch brand data, page markdown, and styleguide details for the domain.","It infers the most useful page intent from the request and the retrieved data, choosing between homepage, landing, feature, comparison, local, or product page, and only asks a follow-up when the data cannot support a sensible choice.","It generates one complete HTML document with inline CSS reflecting the brand's colors and typography, a single h1, Open Graph and Twitter card tags, an FAQ section when it fits, and JSON-LD using Organization, WebPage, FAQPage, Product, or Service.","It returns the document in a single fenced html block followed by SEO notes covering search intent, primary keyword, secondary topics, schema types, and Context.dev source URLs, plus an assumptions list whenever copy relied on inference; two bundled evals verify the missing-domain guard and this page-structure contract."],"useCases":[{"title":"Landing page from a domain in minutes","body":"Give the agent a prospect's or your own domain and get a launch-ready static landing page whose copy, colors, and typography match the live brand, complete with metadata and structured data for immediate deployment."},{"title":"Programmatic SEO page drafts","body":"Generate grounded first drafts for feature, comparison, or product pages by pointing the agent at a specific source URL and target keyword, such as building a product page targeting AI support automation."},{"title":"AI answer engine visibility","body":"Produce pages structured for citation by ChatGPT, Perplexity, and Google AI Overviews, with extractable answer blocks, FAQ sections, and FAQPage schema, while staying people-first to avoid scaled content abuse penalties."},{"title":"On-brand pages for agency clients","body":"Agencies can prototype an SEO page for any client domain without collecting brand assets manually; Context.dev supplies logos, colors, industry labels, and homepage copy so the draft looks like the client made it."}],"requirements":[{"name":"CONTEXT_DEV_API_KEY","body":"Context.dev API key used to authenticate the hosted MCP server at context-dev.stlmcp.com via the x-context-dev-api-key header. Create one in your Context.dev account; keys look like ctxt_secret_. The agent refuses to run brand lookups without it."},{"name":"CONTEXT_API_KEY","body":"Optional fallback variable read when CONTEXT_DEV_API_KEY is unset, for projects that already use this name. CONTEXT_DEV_API_KEY is the documented standard; set only one of the two."},{"name":"eve@^0.31.3","body":"The eve framework runtime that hosts the agent, its MCP client connection, skills, and evals. Installed as the registry item's dependency; the agent package requires Node 24 or newer."},{"name":"ai@^7.0.38","body":"The Vercel AI SDK runtime required by eve ^0.31.3. It is installed automatically with this registry item; no separate manual setup is required."}],"faqs":[{"question":"How do I install and run it?","answer":"Run npx shadcn@latest add @evex/branded-seo-page-builder in your eve app, copy .env.example and set CONTEXT_DEV_API_KEY, then start with pnpm dev and ask the agent in chat for a page from any domain."},{"question":"Which model does the agent use?","answer":"It is configured with zai/glm-5.2-fast in agent/agent.ts. You can swap the model by editing the defineAgent call; the instructions, skills, and Context.dev connection work independently of the model choice."},{"question":"What output do I actually get?","answer":"One complete HTML document in a single fenced html block with inline CSS and no JavaScript unless requested, followed by SEO notes listing search intent, primary keyword, secondary topics, schema types, and Context.dev source URLs, plus assumptions when copy was inferred."},{"question":"What happens if Context.dev has little data for a domain, or the API fails?","answer":"The agent will not fabricate brand facts. On a missing or invalid key, a 401, or a 429 rate limit it stops and reports the failure; with thin brand data it asks for more source copy or a specific page URL instead of inventing claims."},{"question":"Can I customize the visual style or page type?","answer":"Yes. By default the agent applies Context.dev styleguide data for colors, typography, spacing, and shadows. You can pass a specific source page URL, request a particular intent like a comparison or product page, or ask it to skip styleguide data entirely."}]}},"files":[{"path":"agent/agent.ts","type":"registry:file","target":"~/agent/agent.ts","content":"import { defineAgent } from \"eve\";\n\nexport default defineAgent({\n  model: \"zai/glm-5.2-fast\",\n});\n"},{"path":"agent/connections/context-dev.ts","type":"registry:file","target":"~/agent/connections/context-dev.ts","content":"import { defineMcpClientConnection } from \"eve/connections\";\n\nexport default defineMcpClientConnection({\n  url: \"https://context-dev.stlmcp.com\",\n  description:\n    \"Context.dev hosted MCP for resolving brand data, scraping webpages, crawling sites, and extracting styleguides from domains. Use it to gather the brand, content, and design context needed before generating SEO HTML.\",\n  headers: {\n    \"x-context-dev-api-key\": readContextDevApiKey,\n  },\n  tools: {\n    allow: [\"search_docs\", \"execute\"],\n  },\n});\n\nfunction readContextDevApiKey(): string {\n  const apiKey =\n    process.env.CONTEXT_DEV_API_KEY?.trim() || process.env.CONTEXT_API_KEY?.trim();\n\n  if (!apiKey) {\n    throw new Error(\n      \"Missing CONTEXT_DEV_API_KEY or CONTEXT_API_KEY for Context.dev MCP access.\",\n    );\n  }\n\n  return apiKey;\n}\n"},{"path":"agent/instructions.md","type":"registry:file","target":"~/agent/instructions.md","content":"# Mission\nBuild an SEO-optimized, on-brand HTML page from a user-provided domain.\n\n# Workflow\n1. If the user has not provided a domain, ask for the domain before doing any\n   generation work.\n2. Load the `seo-audit` skill before planning page structure, metadata, headings,\n   canonical tags, internal-link recommendations, image alt text, and schema.\n3. Load the `ai-seo` skill before writing the page body so the content is\n   extractable, answer-oriented, and useful for AI search systems without making\n   spammy AI-only content.\n4. Use the `context-dev` MCP connection through `connection_search` to discover\n   the Context.dev tools. Use `search_docs` when you need the exact SDK method or\n   parameter names, then use `execute` to gather the source data.\n5. Through Context.dev MCP, retrieve at minimum:\n   - brand data for the domain, including name, description, colors, logos,\n     industry labels, and social/profile fields when available;\n   - homepage or provided page markdown;\n   - styleguide/design-system data for colors, typography, spacing, shadows, and\n     component cues when available.\n6. Treat Context.dev brand, content, and styleguide outputs as the source of truth\n   for brand name, positioning, industry, colors, typography cues, social proof,\n   logos, and factual claims.\n7. If the Context.dev MCP connection fails because the API key is missing,\n   invalid, rate-limited, or unavailable, stop and report the configuration or API\n   failure. Do not fabricate brand facts.\n8. Infer the most useful page intent from the user request and Context.dev data:\n   homepage, landing page, feature page, comparison page, local page, or product\n   page. Ask a follow-up only when the domain data is not enough to choose a\n   sensible intent.\n9. Produce one complete HTML document, not a framework component. Include inline\n   CSS that reflects the Context.dev brand/styleguide output. Keep JavaScript out\n   unless the user explicitly asks for it.\n\n# HTML requirements\n- Include `<!doctype html>`, `<html lang=\"...\">`, `<head>`, and `<body>`.\n- Add a concise `<title>`, meta description, canonical URL, Open Graph tags, and\n  Twitter card tags.\n- Use one clear `<h1>`, logical heading hierarchy, semantic sections, and\n  descriptive link text.\n- Include an FAQ or answer-focused section when it fits the page intent.\n- Include JSON-LD structured data in `application/ld+json`. Prefer\n  `Organization`, `WebPage`, `FAQPage`, `Product`, or `Service` based on the\n  Context.dev data and page intent.\n- Use only claims grounded in the Context.dev result, the scraped homepage\n  markdown, or the user's explicit request. Mark reasonable but unverified\n  copywriting assumptions as comments after the HTML, not inside metadata.\n- Include accessible alt text for any image/logo URL used from Context.dev.\n- Optimize for fast static delivery: no remote scripts, no heavy animation, no\n  layout shift from missing dimensions when image dimensions are known.\n\n# Output contract\nReturn:\n1. The complete HTML document in a single fenced `html` block.\n2. A short \"SEO notes\" section with target search intent, primary keyword,\n   secondary topics, schema types used, and Context.dev source URLs.\n3. A short \"Assumptions\" section only if any user-facing copy relies on inference\n   rather than explicit source data.\n\n# Guardrails\n- Do not invent statistics, awards, customer names, pricing, certifications, or\n  testimonials.\n- Do not expose the Context.dev API key or any environment variables.\n- Do not call Context.dev directly from browser-side code in the generated page.\n- Do not perform an SEO audit report instead of generating HTML unless the user\n  explicitly asks for an audit.\n"},{"path":"agent/skills/ai-seo/references/content-patterns.md","type":"registry:file","target":"~/agent/skills/ai-seo/references/content-patterns.md","content":"# AEO and GEO Content Patterns\n\nReusable content block patterns optimized for answer engines and AI citation.\n\n---\n\n## Contents\n- Answer Engine Optimization (AEO) Patterns (Definition Block, Step-by-Step Block, Comparison Table Block, Pros and Cons Block, FAQ Block, Listicle Block)\n- Generative Engine Optimization (GEO) Patterns (Statistic Citation Block, Expert Quote Block, Authoritative Claim Block, Self-Contained Answer Block, Evidence Sandwich Block)\n- Domain-Specific GEO Tactics (Technology Content, Health/Medical Content, Financial Content, Legal Content, Business/Marketing Content)\n- Voice Search Optimization (Question Formats for Voice, Voice-Optimized Answer Structure)\n\n## Answer Engine Optimization (AEO) Patterns\n\nThese patterns help content appear in featured snippets, AI Overviews, voice search results, and answer boxes.\n\n### Definition Block\n\nUse for \"What is [X]?\" queries.\n\n```markdown\n## What is [Term]?\n\n[Term] is [concise 1-sentence definition]. [Expanded 1-2 sentence explanation with key characteristics]. [Brief context on why it matters or how it's used].\n```\n\n**Example:**\n```markdown\n## What is Answer Engine Optimization?\n\nAnswer Engine Optimization (AEO) is the practice of structuring content so AI-powered systems can easily extract and present it as direct answers to user queries. Unlike traditional SEO that focuses on ranking in search results, AEO optimizes for featured snippets, AI Overviews, and voice assistant responses. This approach has become essential as over 60% of Google searches now end without a click.\n```\n\n### Step-by-Step Block\n\nUse for \"How to [X]\" queries. Optimal for list snippets.\n\n```markdown\n## How to [Action/Goal]\n\n[1-sentence overview of the process]\n\n1. **[Step Name]**: [Clear action description in 1-2 sentences]\n2. **[Step Name]**: [Clear action description in 1-2 sentences]\n3. **[Step Name]**: [Clear action description in 1-2 sentences]\n4. **[Step Name]**: [Clear action description in 1-2 sentences]\n5. **[Step Name]**: [Clear action description in 1-2 sentences]\n\n[Optional: Brief note on expected outcome or time estimate]\n```\n\n**Example:**\n```markdown\n## How to Optimize Content for Featured Snippets\n\nEarning featured snippets requires strategic formatting and direct answers to search queries.\n\n1. **Identify snippet opportunities**: Use tools like Semrush or Ahrefs to find keywords where competitors have snippets you could capture.\n2. **Match the snippet format**: Analyze whether the current snippet is a paragraph, list, or table, and format your content accordingly.\n3. **Answer the question directly**: Provide a clear, concise answer (40-60 words for paragraph snippets) immediately after the question heading.\n4. **Add supporting context**: Expand on your answer with examples, data, and expert insights in the following paragraphs.\n5. **Use proper heading structure**: Place your target question as an H2 or H3, with the answer immediately following.\n\nMost featured snippets appear within 2-4 weeks of publishing well-optimized content.\n```\n\n### Comparison Table Block\n\nUse for \"[X] vs [Y]\" queries. Optimal for table snippets.\n\n```markdown\n## [Option A] vs [Option B]: [Brief Descriptor]\n\n| Feature | [Option A] | [Option B] |\n|---------|------------|------------|\n| [Criteria 1] | [Value/Description] | [Value/Description] |\n| [Criteria 2] | [Value/Description] | [Value/Description] |\n| [Criteria 3] | [Value/Description] | [Value/Description] |\n| [Criteria 4] | [Value/Description] | [Value/Description] |\n| Best For | [Use case] | [Use case] |\n\n**Bottom line**: [1-2 sentence recommendation based on different needs]\n```\n\n### Pros and Cons Block\n\nUse for evaluation queries: \"Is [X] worth it?\", \"Should I [X]?\"\n\n```markdown\n## Advantages and Disadvantages of [Topic]\n\n[1-sentence overview of the evaluation context]\n\n### Pros\n\n- **[Benefit category]**: [Specific explanation]\n- **[Benefit category]**: [Specific explanation]\n- **[Benefit category]**: [Specific explanation]\n\n### Cons\n\n- **[Drawback category]**: [Specific explanation]\n- **[Drawback category]**: [Specific explanation]\n- **[Drawback category]**: [Specific explanation]\n\n**Verdict**: [1-2 sentence balanced conclusion with recommendation]\n```\n\n### FAQ Block\n\nUse for topic pages with multiple common questions. Essential for FAQ schema.\n\n```markdown\n## Frequently Asked Questions\n\n### [Question phrased exactly as users search]?\n\n[Direct answer in first sentence]. [Supporting context in 2-3 additional sentences].\n\n### [Question phrased exactly as users search]?\n\n[Direct answer in first sentence]. [Supporting context in 2-3 additional sentences].\n\n### [Question phrased exactly as users search]?\n\n[Direct answer in first sentence]. [Supporting context in 2-3 additional sentences].\n```\n\n**Tips for FAQ questions:**\n- Use natural question phrasing (\"How do I...\" not \"How does one...\")\n- Include question words: what, how, why, when, where, who, which\n- Match \"People Also Ask\" queries from search results\n- Keep answers between 50-100 words\n\n### Listicle Block\n\nUse for \"Best [X]\", \"Top [X]\", \"[Number] ways to [X]\" queries.\n\n```markdown\n## [Number] Best [Items] for [Goal/Purpose]\n\n[1-2 sentence intro establishing context and selection criteria]\n\n### 1. [Item Name]\n\n[Why it's included in 2-3 sentences with specific benefits]\n\n### 2. [Item Name]\n\n[Why it's included in 2-3 sentences with specific benefits]\n\n### 3. [Item Name]\n\n[Why it's included in 2-3 sentences with specific benefits]\n```\n\n---\n\n## Generative Engine Optimization (GEO) Patterns\n\nThese patterns optimize content for citation by AI assistants like ChatGPT, Claude, Perplexity, and Gemini.\n\n### Statistic Citation Block\n\nStatistics increase AI citation rates by 15-30%. Always include sources.\n\n```markdown\n[Claim statement]. According to [Source/Organization], [specific statistic with number and timeframe]. [Context for why this matters].\n```\n\n**Example:**\n```markdown\nMobile optimization is no longer optional for SEO success. According to Google's 2024 Core Web Vitals report, 70% of web traffic now comes from mobile devices, and pages failing mobile usability standards see 24% higher bounce rates. This makes mobile-first indexing a critical ranking factor.\n```\n\n### Expert Quote Block\n\nNamed expert attribution adds credibility and increases citation likelihood.\n\n```markdown\n\"[Direct quote from expert],\" says [Expert Name], [Title/Role] at [Organization]. [1 sentence of context or interpretation].\n```\n\n**Example:**\n```markdown\n\"The shift from keyword-driven search to intent-driven discovery represents the most significant change in SEO since mobile-first indexing,\" says Rand Fishkin, Co-founder of SparkToro. This perspective highlights why content strategies must evolve beyond traditional keyword optimization.\n```\n\n### Authoritative Claim Block\n\nStructure claims for easy AI extraction with clear attribution.\n\n```markdown\n[Topic] [verb: is/has/requires/involves] [clear, specific claim]. [Source] [confirms/reports/found] that [supporting evidence]. This [explains/means/suggests] [implication or action].\n```\n\n**Example:**\n```markdown\nE-E-A-T is the cornerstone of Google's content quality evaluation. Google's Search Quality Rater Guidelines confirm that trust is the most critical factor, stating that \"untrustworthy pages have low E-E-A-T no matter how experienced, expert, or authoritative they may seem.\" This means content creators must prioritize transparency and accuracy above all other optimization tactics.\n```\n\n### Self-Contained Answer Block\n\nCreate quotable, standalone statements that AI can extract directly.\n\n```markdown\n**[Topic/Question]**: [Complete, self-contained answer that makes sense without additional context. Include specific details, numbers, or examples in 2-3 sentences.]\n```\n\n**Example:**\n```markdown\n**Ideal blog post length for SEO**: The optimal length for SEO blog posts is 1,500-2,500 words for competitive topics. This range allows comprehensive topic coverage while maintaining reader engagement. HubSpot research shows long-form content earns 77% more backlinks than short articles, directly impacting search rankings.\n```\n\n### Evidence Sandwich Block\n\nStructure claims with evidence for maximum credibility.\n\n```markdown\n[Opening claim statement].\n\nEvidence supporting this includes:\n- [Data point 1 with source]\n- [Data point 2 with source]\n- [Data point 3 with source]\n\n[Concluding statement connecting evidence to actionable insight].\n```\n\n---\n\n## Domain-Specific GEO Tactics\n\nDifferent content domains benefit from different authority signals.\n\n### Technology Content\n- Emphasize technical precision and correct terminology\n- Include version numbers and dates for software/tools\n- Reference official documentation\n- Add code examples where relevant\n\n### Health/Medical Content\n- Cite peer-reviewed studies with publication details\n- Include expert credentials (MD, RN, etc.)\n- Note study limitations and context\n- Add \"last reviewed\" dates\n\n### Financial Content\n- Reference regulatory bodies (SEC, FTC, etc.)\n- Include specific numbers with timeframes\n- Note that information is educational, not advice\n- Cite recognized financial institutions\n\n### Legal Content\n- Cite specific laws, statutes, and regulations\n- Reference jurisdiction clearly\n- Include professional disclaimers\n- Note when professional consultation is advised\n\n### Business/Marketing Content\n- Include case studies with measurable results\n- Reference industry research and reports\n- Add percentage changes and timeframes\n- Quote recognized thought leaders\n\n---\n\n## Voice Search Optimization\n\nVoice queries are conversational and question-based. Optimize for these patterns:\n\n### Question Formats for Voice\n- \"What is...\"\n- \"How do I...\"\n- \"Where can I find...\"\n- \"Why does...\"\n- \"When should I...\"\n- \"Who is...\"\n\n### Voice-Optimized Answer Structure\n- Lead with direct answer (under 30 words ideal)\n- Use natural, conversational language\n- Avoid jargon unless targeting expert audience\n- Include local context where relevant\n- Structure for single spoken response\n"},{"path":"agent/skills/ai-seo/references/content-types.md","type":"registry:file","target":"~/agent/skills/ai-seo/references/content-types.md","content":"# AI SEO by Content Type\n\nTactical guidance for optimizing specific content types for AI search citation. These tactics work for non-Google AI engines (ChatGPT, Claude, Perplexity, Copilot) and don't hurt Google AI Overviews / AI Mode.\n\nFor the cross-cutting strategy, see [SKILL.md](../SKILL.md).\n\n---\n\n## SaaS Product Pages\n\n**Goal:** Get cited in \"What is [category]?\" and \"Best [category]\" queries.\n\n**Optimize:**\n- Clear product description in first paragraph (what it does, who it's for)\n- Feature comparison tables (you vs. category, not just competitors)\n- Specific metrics (\"processes 10,000 transactions/sec\" not \"blazing fast\")\n- Customer count or social proof with numbers\n- Pricing transparency (AI cites pages with visible pricing) — add a `/pricing.md` file so AI agents can parse your plans without rendering your page (see \"Machine-Readable Files\" in the main skill)\n- FAQ section addressing common buyer questions\n\n---\n\n## Blog Content\n\n**Goal:** Get cited as an authoritative source on topics in your space.\n\n**Optimize:**\n- One clear target query per post (match heading to query)\n- Definition in first paragraph for \"What is\" queries\n- Original data, research, or expert quotes\n- \"Last updated\" date visible\n- Author bio with relevant credentials\n- Internal links to related product/feature pages\n\n---\n\n## Comparison / Alternative Pages\n\n**Goal:** Get cited in \"[X] vs [Y]\" and \"Best [X] alternatives\" queries.\n\n**Optimize:**\n- Structured comparison tables (not just prose)\n- Fair and balanced (AI penalizes obviously biased comparisons)\n- Specific criteria with ratings or scores\n- Updated pricing and feature data\n- Ground every comparison in current source data and cite each source inline\n\n---\n\n## Documentation / Help Content\n\n**Goal:** Get cited in \"How to [X] with [your product]\" queries.\n\n**Optimize:**\n- Step-by-step format with numbered lists\n- Code examples where relevant\n- HowTo schema markup\n- Screenshots with descriptive alt text\n- Clear prerequisites and expected outcomes\n\n---\n\n## Local Business / Ecom (Google emphasis)\n\nGoogle's AI features pull from product feeds and business profiles for local + ecom queries. Optimize:\n\n- **Merchant Center feeds** kept current with accurate inventory, pricing, attributes\n- **Google Business Profile** complete with hours, services, photos, posts, Q&A answered\n- **Reviews** — recent + sufficient volume; respond to reviews to signal active management\n- **Service area schema** for local services\n- **Business Agent** (where available) for conversational customer engagement\n"},{"path":"agent/skills/ai-seo/references/okf.md","type":"registry:file","target":"~/agent/skills/ai-seo/references/okf.md","content":"# Open Knowledge Format (OKF)\n\nGoogle's v0.1 markdown spec for representing site content as an agent-readable bundle. Introduced on the [Google Cloud blog](https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing) on 2026-06-12 and shipped inside Knowledge Catalog.\n\n## What it is\n\nOKF is a directory of cross-linked markdown files. Each file has:\n\n- A YAML frontmatter block (`type` required; `title`, `description`, `resource`, `tags`, `timestamp` recommended)\n- A standard Markdown body\n- Standard Markdown links to other files in the bundle (which the spec treats as concept relationships)\n\nAn optional `index.md` lists the files for progressive disclosure. The bundle can be distributed as a git repo (recommended), a tarball/zip, or a subdirectory of a larger repo.\n\nThe [full spec](https://github.com/GoogleCloudPlatform/knowledge-catalog/blob/HEAD/okf/SPEC.md) fits on one page. The repo lives under `GoogleCloudPlatform` (the \"not an official Google product\" disclaimer is Google's standard open-source boilerplate, not a denial — it appears on most of Google's open-source repos including their main AI samples repo).\n\n### A minimal concept file\n\n```markdown\n---\ntype: Article\ntitle: How to Connect the Ahrefs MCP Server to Manus\ndescription: The official MCP servers, why they did not connect, and the fix.\nresource: https://yoursite.com/blog/ahrefs-mcp-manus/\ntags: [mcp, ahrefs]\n---\n\n# How to Connect the Ahrefs MCP Server to Manus\n\nThe body of the post, as clean Markdown.\n```\n\nAdd an `index.md` that lists all files so an agent can see the bundle's shape before opening each file, and that is the entire format.\n\n## Honest framing\n\n**Google built OKF for data teams sharing catalog metadata** — BigQuery tables, API endpoints, metrics, playbooks. Most of the spec's examples are data-team artifacts, not blog posts. Google's blog post framing: \"improve data sharing\" and \"standardized documentation\" for collaboration across teams.\n\nPointing OKF at a marketing site is a **clever repurposing** popularized by [Suganthan Mohanadasan](https://suganthan.com/blog/open-knowledge-format/). It's a legitimate use case for the format but not Google's primary one. Frame it accurately when explaining it to founders or marketing teams.\n\n## What it does for AI search today\n\nAs of 2026-06-27, there is no known broad web crawling support for OKF bundles: the spec is still new, no major AI engine has announced public integration, and Knowledge Catalog ingests bundles only for paying enterprise customers' data teams.\n\nTreat OKF as **protocol-layer registration** — the same shape of bet as early `schema.org` adoption was a decade ago. Schema took the better part of ten years to pay off; people who shipped it early are still glad they did.\n\nA secondary benefit that pays off today regardless: **generating the bundle is itself an internal-linking audit**. Suganthan's tool draws every page as a node and every internal link as an edge, so islands and orphans become obvious at a glance.\n\n## Where OKF fits in the agent-readable stack\n\n| Layer | Purpose |\n|---|---|\n| `sitemap.xml` | Tells a crawler which URLs exist |\n| `robots.txt` (with AI bot rules) | Permits or blocks AI crawlers |\n| `llms.txt` | Points an agent at the handful of pages you most want read |\n| `/pricing.md` | Structured pricing for agent-buyer comparisons |\n| **`/okf/` bundle** | Hands over the content itself as cross-linked concepts |\n| Schema markup | Per-page structured data (Article, FAQPage, Product, etc.) |\n\nThese stack rather than compete. `llms.txt` is a signpost, OKF is the library.\n\n## How to ship one\n\nThree options, ordered by how much effort they take:\n\n### 1. Suganthan's free web tool (recommended for most sites)\n\n[suganthan.com/okf-generator](https://suganthan.com/okf-generator/) — paste a URL or sitemap, crawls up to 100 pages, returns a downloadable bundle. Also draws the resulting page graph so you can spot disconnected pages before publishing.\n\n### 2. WordPress plugin (pending wp.org approval)\n\nSuganthan's plugin (free, GPL, awaiting wp.org approval at time of writing) installs in a minute, serves the bundle at `/okf/`, and rebuilds on every publish or edit so it stays in sync. Direct download link is in [his blog post](https://suganthan.com/blog/open-knowledge-format/). Requires WordPress 6.0+ and PHP 7.4+. Read-only — never edits posts or settings.\n\n### 3. By hand\n\nOnly practical for a handful of pages. Each post becomes a markdown file with frontmatter that you cross-link manually. Miserable for a whole site.\n\n## Hosting & discovery\n\nServe the bundle at `yoursite.com/okf/`, starting with `yoursite.com/okf/index.md`:\n\n- **Static hosts / Cloudflare**: drag and drop\n- **WordPress**: Suganthan's plugin handles the serving\n- **Static sites with custom paths**: upload the directory to `/okf/`\n- **Closed platforms (Wix, Squarespace, most page-builders)**: you usually can't serve files at custom paths — skip OKF entirely\n\nAfter it's serving, add a line to `llms.txt` pointing to the bundle so agents that read `llms.txt` (today) can discover the bundle (later).\n\n## When to skip\n\n- Site is <10 pages — overhead exceeds payoff\n- Site is on a closed platform that won't allow custom paths\n- You're not maintaining `llms.txt`, schema markup, or other machine-readable files (OKF compounds with those; alone it does nothing)\n- You can't budget the 30 minutes a quarter to refresh the bundle as content changes\n\n## What to watch\n\nOKF is v0.1, weeks old. Worth tracking, not worth obsessing over:\n\n- Whether Google announces OKF support in AI Overviews / Knowledge Graph (currently no signal)\n- Whether non-Google engines (ChatGPT, Perplexity, Claude) announce OKF reading\n- Whether the spec moves to v1.0 (breaking changes are possible at <1.0)\n- Whether Knowledge Catalog adds public ingestion endpoints\n- Adoption signals — search GitHub for `okf/index.md` to see who's shipping bundles\n"},{"path":"agent/skills/ai-seo/references/platform-ranking-factors.md","type":"registry:file","target":"~/agent/skills/ai-seo/references/platform-ranking-factors.md","content":"# How Each AI Platform Picks Sources\n\nEach AI search platform has its own search index, ranking logic, and content preferences. This guide covers what matters for getting cited on each one.\n\nSources cited throughout: Princeton GEO study (KDD 2024), SE Ranking domain authority study, ZipTie content-answer fit analysis.\n\n---\n\n## The Fundamentals\n\nEvery AI platform shares three baseline requirements:\n\n1. **Your content must be in their index** — Each platform uses a different search backend (Google, Bing, Brave, or their own). If you're not indexed, you can't be cited.\n2. **Your content must be crawlable** — AI bots need access via robots.txt. Block the bot, lose the citation.\n3. **Your content must be extractable** — AI systems pull passages, not pages. Clear structure and self-contained paragraphs win.\n\nBeyond these basics, each platform weights different signals. Here's what matters and where.\n\n---\n\n## Google AI Overviews\n\nGoogle AI Overviews pull from Google's own index and lean heavily on E-E-A-T signals (Experience, Expertise, Authoritativeness, Trustworthiness). They appear in roughly 45% of Google searches.\n\n**What makes Google AI Overviews different:** They already have your traditional SEO signals — backlinks, page authority, topical relevance. The additional AI layer adds a preference for content with cited sources and structured data. Research shows that including authoritative citations in your content correlates with a 132% visibility boost, and writing with an authoritative (not salesy) tone adds another 89%.\n\n**Importantly, AI Overviews don't just recycle the traditional Top 10.** Only about 15% of AI Overview sources overlap with conventional organic results. Pages that wouldn't crack page 1 in traditional search can still get cited if they have strong structured data and clear, extractable answers.\n\n**What to focus on:**\n- Schema markup is the single biggest lever — Article, FAQPage, HowTo, and Product schemas give AI Overviews structured context to work with (30-40% visibility boost)\n- Build topical authority through content clusters with strong internal linking\n- Include named, sourced citations in your content (not just claims)\n- Author bios with real credentials matter — E-E-A-T is weighted heavily\n- Get into Google's Knowledge Graph where possible (an accurate Wikipedia entry helps)\n- Target \"how to\" and \"what is\" query patterns — these trigger AI Overviews most often\n\n**Watch for OKF.** In June 2026 Google introduced the [Open Knowledge Format](https://cloud.google.com/blog/products/data-analytics/how-the-open-knowledge-format-can-improve-data-sharing) — a markdown spec for agent-readable site bundles. There is no confirmed signal that AI Overviews factor it in today, but the spec is published, the GitHub repo lives under `GoogleCloudPlatform`, and it ships inside Knowledge Catalog. For protocol-layer \"register early\" plays, it has the same shape as early schema.org adoption did a decade ago. See **Machine-Readable Files for AI Agents** in the main `SKILL.md` for how to generate and serve a bundle.\n\n---\n\n## ChatGPT\n\nChatGPT's web search draws from a Bing-based index. It combines this with its training knowledge to generate answers, then cites the web sources it relied on.\n\n**What makes ChatGPT different:** Domain authority matters more here than on other AI platforms. An SE Ranking analysis of 129,000 domains found that authority and credibility signals account for roughly 40% of what determines citation, with content quality at about 35% and platform trust at 25%. Sites with very high referring domain counts (350K+) average 8.4 citations per response, while sites with slightly lower trust scores (91-96 vs 97-100) drop from 8.4 to 6 citations.\n\n**Freshness is a major differentiator.** Content updated within the last 30 days gets cited about 3.2x more often than older content. ChatGPT clearly favors recent information.\n\n**The most important signal is content-answer fit** — a ZipTie analysis of 400,000 pages found that how well your content's style and structure matches ChatGPT's own response format accounts for about 55% of citation likelihood. This is far more important than domain authority (12%) or on-page structure (14%) alone. Write the way ChatGPT would answer the question, and you're more likely to be the source it cites.\n\n**Where ChatGPT looks beyond your site:** Wikipedia accounts for 7.8% of all ChatGPT citations, Reddit for 1.8%, and Forbes for 1.1%. Brand official sites are cited frequently but third-party mentions carry significant weight.\n\n**What to focus on:**\n- Invest in backlinks and domain authority — it's the strongest baseline signal\n- Update competitive content at least monthly\n- Structure your content the way ChatGPT structures its answers (conversational, direct, well-organized)\n- Include verifiable statistics with named sources\n- Clean heading hierarchy (H1 > H2 > H3) with descriptive headings\n\n---\n\n## Perplexity\n\nPerplexity always cites its sources with clickable links, making it the most transparent AI search platform. It combines its own index with Google's and runs results through multiple reranking passes — initial relevance retrieval, then traditional ranking factor scoring, then ML-based quality evaluation that can discard entire result sets if they don't meet quality thresholds.\n\n**What makes Perplexity different:** It's the most \"research-oriented\" AI search engine, and its citation behavior reflects that. Perplexity maintains curated lists of authoritative domains (Amazon, GitHub, major academic sites) that get inherent ranking boosts. It uses a time-decay algorithm that evaluates new content quickly, giving fresh publishers a real shot at citation.\n\n**Perplexity has unique content preferences:**\n- **FAQ Schema (JSON-LD)** — Pages with FAQ structured data get cited noticeably more often\n- **PDF documents** — Publicly accessible PDFs (whitepapers, research reports) are prioritized. If you have authoritative PDF content gated behind a form, consider making a version public.\n- **Publishing velocity** — How frequently you publish matters more than keyword targeting\n- **Self-contained paragraphs** — Perplexity prefers atomic, semantically complete paragraphs it can extract cleanly\n\n**What to focus on:**\n- Allow PerplexityBot in robots.txt\n- Implement FAQPage schema on any page with Q&A content\n- Host PDF resources publicly (whitepapers, guides, reports)\n- Add Article schema with publication and modification timestamps\n- Write in clear, self-contained paragraphs that work as standalone answers\n- Build deep topical authority in your specific niche\n\n---\n\n## Microsoft Copilot\n\nCopilot is embedded across Microsoft's ecosystem — Edge, Windows, Microsoft 365, and Bing Search. It relies entirely on Bing's index, so if Bing hasn't indexed your content, Copilot can't cite it.\n\n**What makes Copilot different:** The Microsoft ecosystem connection creates unique optimization opportunities. Mentions and content on LinkedIn and GitHub provide ranking boosts that other platforms don't offer. Copilot also puts more weight on page speed — sub-2-second load times are a clear threshold.\n\n**What to focus on:**\n- Submit your site to Bing Webmaster Tools (many sites only submit to Google Search Console)\n- Use IndexNow protocol for faster indexing of new and updated content\n- Optimize page speed to under 2 seconds\n- Write clear entity definitions — when your content defines a term or concept, make the definition explicit and extractable\n- Build presence on LinkedIn (publish articles, maintain company page) and GitHub if relevant\n- Ensure Bingbot has full crawl access\n\n---\n\n## Claude\n\nClaude uses Brave Search as its search backend when web search is enabled — not Google, not Bing. This is a completely different index, which means your Brave Search visibility directly determines whether Claude can find and cite you.\n\n**What makes Claude different:** Claude is extremely selective about what it cites. While it processes enormous amounts of content, its citation rate is very low — it's looking for the most factually accurate, well-sourced content on a given topic. Data-rich content with specific numbers and clear attribution performs significantly better than general-purpose content.\n\n**What to focus on:**\n- Verify your content appears in Brave Search results (search for your brand and key terms at search.brave.com)\n- Allow ClaudeBot and anthropic-ai user agents in robots.txt\n- Maximize factual density — specific numbers, named sources, dated statistics\n- Use clear, extractable structure with descriptive headings\n- Cite authoritative sources within your content\n- Aim to be the most factually accurate source on your topic — Claude rewards precision\n\n---\n\n## Allowing AI Bots in robots.txt\n\nIf your robots.txt blocks an AI bot, that platform can't cite your content. Here are the user agents to allow:\n\n```text\nUser-agent: GPTBot           # OpenAI — powers ChatGPT search\nUser-agent: ChatGPT-User     # ChatGPT browsing mode\nUser-agent: PerplexityBot    # Perplexity AI search\nUser-agent: ClaudeBot        # Anthropic Claude\nUser-agent: anthropic-ai     # Anthropic Claude (alternate)\nUser-agent: Google-Extended   # Google Gemini and AI Overviews\nUser-agent: Bingbot          # Microsoft Copilot (via Bing)\nAllow: /\n```\n\n**Training vs. search:** Some AI bots are used for both model training and search citation. If you want to be cited but don't want your content used for training, your options are limited — GPTBot handles both for OpenAI. However, you can safely block **CCBot** (Common Crawl) without affecting any AI search citations, since it's only used for training dataset collection.\n\n---\n\n## Where to Start\n\nIf you're optimizing for AI search for the first time, focus your effort where your audience actually is:\n\n**Start with Google AI Overviews** — They reach the most users (45%+ of Google searches) and you likely already have Google SEO foundations in place. Add schema markup, include cited sources in your content, and strengthen E-E-A-T signals.\n\n**Then address ChatGPT** — It's the most-used standalone AI search tool for tech and business audiences. Focus on freshness (update content monthly), domain authority, and matching your content structure to how ChatGPT formats its responses.\n\n**Then expand to Perplexity** — Especially valuable if your audience includes researchers, early adopters, or tech professionals. Add FAQ schema, publish PDF resources, and write in clear, self-contained paragraphs.\n\n**Copilot and Claude are lower priority** unless your audience skews enterprise/Microsoft (Copilot) or developer/analyst (Claude). But the fundamentals — structured content, cited sources, schema markup — help across all platforms.\n\n**Actions that help everywhere:**\n1. Allow all AI bots in robots.txt\n2. Implement schema markup (FAQPage, Article, Organization at minimum)\n3. Include statistics with named sources in your content\n4. Update content regularly — monthly for competitive topics\n5. Use clear heading structure (H1 > H2 > H3)\n6. Keep page load time under 2 seconds\n7. Add author bios with credentials\n"},{"path":"agent/skills/ai-seo/SKILL.md","type":"registry:file","target":"~/agent/skills/ai-seo/SKILL.md","content":"---\nname: ai-seo\ndescription: Make page content citable by AI search — extractable structure, authority signals, and machine-readable files. Use when writing page body copy for AI visibility.\n---\n\n# AI SEO\n\nOptimize page content so AI systems can **cite** it — not just rank it. Traditional\nSEO gets you ranked; AI SEO gets you **cited** in generated answers.\n\n## Before writing\n\nGround copy in Context.dev brand and page data. Do not write separate \"AI-only\"\ncontent — that risks scaled content abuse. Write for people; organize for clarity.\n\n## Cited vs ranked\n\n| Traditional SEO | AI SEO |\n|-----------------|--------|\n| Rank on page 1 | Get cited as a source |\n| Keyword placement | Extractable answer blocks |\n| Backlinks | Authority signals + structure |\n\n**Google AI Overviews** follow core Search quality — helpful, people-first content\nwith strong E-E-A-T. **Other engines** (ChatGPT, Perplexity, Claude) reward\nextractable structure, FAQs, comparison tables, and machine-readable files.\n\nWhen in doubt: write for people, organize for clarity. That satisfies both.\n\n## Three pillars\n\nApply all three before returning HTML. **Done when** every pillar is addressed.\n\n### 1. Structure — make it extractable\n\nAI systems extract passages, not pages. Every key claim should work standalone.\n\n- Lead each section with a direct answer\n- Keep key answer passages to 40–60 words\n- Use headings that match how people phrase queries\n- Tables beat prose for comparisons; numbered lists beat paragraphs for processes\n- Include an FAQ or answer-focused section when it fits page intent\n\nFor block templates, see [content-patterns](./references/content-patterns.md).\n\n### 2. Authority — make it citable\n\n- Cite sources with links where claims need backing\n- Include specific statistics with dates when source data provides them\n- Name authors or expertise when available from source data\n- Do not invent statistics, awards, customers, or testimonials\n\n### 3. Presence — machine-readable files\n\nWhen the generated site should expose agent-readable context:\n\n- `/llms.txt` — product overview and key page links\n- `/pricing.md` or `/pricing.txt` — structured pricing when pricing exists in\n  source data\n\nFor platform-specific ranking factors and robots.txt bot lists, see\n[platform-ranking-factors](./references/platform-ranking-factors.md). For OKF\nbundles, see [okf](./references/okf.md).\n\n## Extractability checklist\n\nFor each priority section, verify:\n\n| Check | Pass when |\n|-------|-----------|\n| Clear definition in first paragraph | Reader knows what the section covers immediately |\n| Self-contained answer blocks | Block makes sense without surrounding context |\n| FAQ with natural-language questions | Present when page intent warrants it |\n| Schema markup | JSON-LD matches visible content |\n| Claims grounded | Every fact traceable to Context.dev or user input |\n\n## Schema for AI\n\nStructured data helps AI systems understand content:\n\n| Content | Schema |\n|---------|--------|\n| Page | `WebPage`, `Organization` |\n| FAQ section | `FAQPage` |\n| Product page | `Product` |\n| How-to section | `HowTo` |\n\nSchema is not required for Google generative AI, but helps non-Google engines.\nAlign schema with the on-page SEO checklist in the `seo-audit` skill.\n\n## What not to do\n\n1. Write separate content \"for AI\" — serve people and AI from the same copy\n2. Chunk pages into AI-bait fragments — use normal headings and paragraphs\n3. Keyword stuff — it reduces AI visibility\n4. Block AI search bots if you want citation (`GPTBot`, `PerplexityBot`, `ClaudeBot`,\n   `Google-Extended`)\n5. Hide main content behind JS that does not render\n\nFor content-type tactics (comparison pages, docs, local), see\n[content-types](./references/content-types.md).\n"},{"path":"agent/skills/seo-audit/references/ai-writing-detection.md","type":"registry:file","target":"~/agent/skills/seo-audit/references/ai-writing-detection.md","content":"# AI Writing Detection\n\nWords, phrases, and punctuation patterns commonly associated with AI-generated text. Avoid these to ensure writing sounds natural and human.\n\nSources: Grammarly (2025), Microsoft 365 Life Hacks (2025), GPTHuman (2025), Walter Writes (2025), Textero (2025), Plagiarism Today (2025), Rolling Stone (2025), MDPI Blog (2025)\n\n---\n\n## Contents\n- Em Dashes: The Primary AI Tell\n- Overused Verbs\n- Overused Adjectives\n- Overused Transitions and Connectors\n- Phrases That Signal AI Writing (Opening Phrases, Transitional Phrases, Concluding Phrases, Structural Patterns)\n- Filler Words and Empty Intensifiers\n- Academic-Specific AI Tells\n- How to Self-Check\n\n## Em Dashes: The Primary AI Tell\n\n**The em dash (—) has become one of the most reliable markers of AI-generated content.**\n\nEm dashes are longer than hyphens (-) and are used for emphasis, interruptions, or parenthetical information. While they have legitimate uses in writing, AI models drastically overuse them.\n\n### Why Em Dashes Signal AI Writing\n- AI models were trained on edited books, academic papers, and style guides where em dashes appear frequently\n- AI uses em dashes as a shortcut for sentence variety instead of commas, colons, or parentheses\n- Most human writers rarely use em dashes because they don't exist as a standard keyboard key\n- The overuse is so consistent that it has become the unofficial signature of ChatGPT writing\n\n### What To Do Instead\n\n| Instead of | Use |\n|------------|-----|\n| The results—which were surprising—showed... | The results, which were surprising, showed... |\n| This approach—unlike traditional methods—allows... | This approach, unlike traditional methods, allows... |\n| The study found—as expected—that... | The study found, as expected, that... |\n| Communication skills—both written and verbal—are essential | Communication skills (both written and verbal) are essential |\n\n### Guidelines\n- Use commas for most parenthetical information\n- Use colons to introduce explanations or lists\n- Use parentheses for supplementary information\n- Reserve em dashes for rare, deliberate emphasis only\n- If you find yourself using more than one em dash per page, revise\n\n---\n\n## Overused Verbs\n\n| Avoid | Use Instead |\n|-------|-------------|\n| delve (into) | explore, examine, investigate, look at |\n| leverage | use, apply, draw on |\n| optimise | improve, refine, enhance |\n| utilise | use |\n| facilitate | help, enable, support |\n| foster | encourage, support, develop, nurture |\n| bolster | strengthen, support, reinforce |\n| underscore | emphasise, highlight, stress |\n| unveil | reveal, show, introduce, present |\n| navigate | manage, handle, work through |\n| streamline | simplify, make more efficient |\n| enhance | improve, strengthen |\n| endeavour | try, attempt, effort |\n| ascertain | find out, determine, establish |\n| elucidate | explain, clarify, make clear |\n\n---\n\n## Overused Adjectives\n\n| Avoid | Use Instead |\n|-------|-------------|\n| robust | strong, reliable, thorough, solid |\n| comprehensive | complete, thorough, full, detailed |\n| pivotal | key, critical, central, important |\n| crucial | important, key, essential, critical |\n| vital | important, essential, necessary |\n| transformative | significant, important, major |\n| cutting-edge | new, advanced, recent, modern |\n| groundbreaking | new, original, significant |\n| innovative | new, original, creative |\n| seamless | smooth, easy, effortless |\n| intricate | complex, detailed, complicated |\n| nuanced | subtle, complex, detailed |\n| multifaceted | complex, varied, diverse |\n| holistic | complete, whole, comprehensive |\n\n---\n\n## Overused Transitions and Connectors\n\n| Avoid | Use Instead |\n|-------|-------------|\n| furthermore | also, in addition, and |\n| moreover | also, and, besides |\n| notwithstanding | despite, even so, still |\n| that being said | however, but, still |\n| at its core | essentially, fundamentally, basically |\n| to put it simply | in short, simply put |\n| it is worth noting that | note that, importantly |\n| in the realm of | in, within, regarding |\n| in the landscape of | in, within |\n| in today's [anything] | currently, now, today |\n\n---\n\n## Phrases That Signal AI Writing\n\n### Opening Phrases to Avoid\n- \"In today's fast-paced world...\"\n- \"In today's digital age...\"\n- \"In an era of...\"\n- \"In the ever-evolving landscape of...\"\n- \"In the realm of...\"\n- \"It's important to note that...\"\n- \"Let's delve into...\"\n- \"Imagine a world where...\"\n\n### Transitional Phrases to Avoid\n- \"That being said...\"\n- \"With that in mind...\"\n- \"It's worth mentioning that...\"\n- \"At its core...\"\n- \"To put it simply...\"\n- \"In essence...\"\n- \"This begs the question...\"\n\n### Concluding Phrases to Avoid\n- \"In conclusion...\"\n- \"To sum up...\"\n- \"By [doing X], you can [achieve Y]...\"\n- \"In the final analysis...\"\n- \"All things considered...\"\n- \"At the end of the day...\"\n\n### Structural Patterns to Avoid\n- \"Whether you're a [X], [Y], or [Z]...\" (listing three examples after \"whether\")\n- \"It's not just [X], it's also [Y]...\"\n- \"Think of [X] as [elaborate metaphor]...\"\n- Starting sentences with \"By\" followed by a gerund: \"By understanding X, you can Y...\"\n\n---\n\n## Filler Words and Empty Intensifiers\n\nThese words often add nothing to meaning. Remove them or find specific alternatives:\n\n- absolutely\n- actually\n- basically\n- certainly\n- clearly\n- definitely\n- essentially\n- extremely\n- fundamentally\n- incredibly\n- interestingly\n- naturally\n- obviously\n- quite\n- really\n- significantly\n- simply\n- surely\n- truly\n- ultimately\n- undoubtedly\n- very\n\n---\n\n## Academic-Specific AI Tells\n\n| Avoid | Use Instead |\n|-------|-------------|\n| shed light on | clarify, explain, reveal |\n| pave the way for | enable, allow, make possible |\n| a myriad of | many, numerous, various |\n| a plethora of | many, numerous, several |\n| paramount | very important, essential, critical |\n| pertaining to | about, regarding, concerning |\n| prior to | before |\n| subsequent to | after |\n| in light of | because of, given, considering |\n| with respect to | about, regarding, for |\n| in terms of | regarding, for, about |\n| the fact that | that (or rewrite sentence) |\n\n---\n\n## How to Self-Check\n\n1. Read your text aloud. If phrases sound unnatural in speech, revise them\n2. Ask: \"Would I say this in a conversation with a colleague?\"\n3. Check for repetitive sentence structures\n4. Look for clusters of the words listed above\n5. Ensure varied sentence lengths (not all similar length)\n6. Verify each intensifier adds genuine meaning\n"},{"path":"agent/skills/seo-audit/references/international-seo.md","type":"registry:file","target":"~/agent/skills/seo-audit/references/international-seo.md","content":"# International SEO: Evidence & Sources\n\nDetailed evidence backing the International SEO & Localization section of the SEO Audit skill. Organized by topic with source URLs and key quotes.\n\n---\n\n## Hreflang\n\n### Placement Methods\n\nGoogle supports three equivalent methods: HTML `<link>` in `<head>`, HTTP `Link` headers, and XML sitemap `<xhtml:link>` elements. Google confirmed no method is prioritized over another.\n\nGoogle combines signals from both HTML and sitemaps. If the same language-region pair points to different URLs across methods, Google drops that pair rather than guessing.\n\n- [Google Search Central: Localized Versions](https://developers.google.com/search/docs/specialty/international/localized-versions)\n- [SEJ: Google Combines Hreflang Signals](https://www.searchenginejournal.com/google-combines-hreflang-signals-from-html-sitemaps/389219/)\n\n### Reciprocal Requirement\n\nGoogle's docs: \"If page X links to page Y, page Y must link back to page X. If not, those annotations may be ignored or not interpreted correctly.\"\n\nEvery page must include itself (self-referencing) in the hreflang set. Missing self-referencing is the #1 error found by Semrush audits. A study of 374,756 domains found 67% of hreflang implementations had issues.\n\n- [Google Search Central: Localized Versions](https://developers.google.com/search/docs/specialty/international/localized-versions)\n- [Semrush: 9 Common Hreflang Errors](https://www.semrush.com/blog/hreflang-errors/)\n- [SE Land: 31% of International Websites Contain Hreflang Errors](https://searchengineland.com/study-31-of-international-websites-contain-hreflang-errors-395161)\n\n### x-default\n\nIntroduced April 2013. Designates the fallback page for users whose language/region matches no declared variant. Can point to the same URL as one of the language-specific alternates. Must be included in the complete set of annotations on every variant page.\n\n- [Google Blog: x-default hreflang](https://developers.google.com/search/blog/2013/04/x-default-hreflang-for-international-pages)\n- [Google Blog: How x-default can help you (2023)](https://developers.google.com/search/blog/2023/05/x-default)\n\n### Language & Region Codes\n\nLanguage: ISO 639-1 (2-letter). Region: ISO 3166-1 Alpha 2 (2-letter). Format: `language[-script][-region]`.\n\nYou cannot specify a region code alone. Common mistakes: `en-UK` (should be `en-GB`), `es-419` (not ISO 3166-1). A study found 8.9% of sites using hreflang contain invalid language codes.\n\n- [Google Search Central: Localized Versions](https://developers.google.com/search/docs/specialty/international/localized-versions)\n- [SE Land: 31% Study](https://searchengineland.com/study-31-of-international-websites-contain-hreflang-errors-395161)\n\n### Hreflang at Scale (20+ locales)\n\nWith 20 locales, HTML `<head>` hreflang adds ~1.5KB per page for zero user benefit. Sitemap-based hreflang has zero runtime performance impact. `<xhtml:link>` child elements do NOT count toward the 50,000 URL sitemap limit (only `<loc>` elements count).\n\nJohn Mueller recommends focusing hreflang on pages receiving wrong-language traffic, not every page: \"I wouldn't do it for any of the other pages of the site because it's so complex & hard to manage.\"\n\n- [SERoundtable: Child Elements Don't Count](https://www.seroundtable.com/google-child-elements-dont-count-towards-sitemap-url-limit-34377.html)\n- [SERoundtable: Where To Focus Hreflang](https://www.seroundtable.com/using-hreflang-34127.html)\n- [Yoast: hreflang Ultimate Guide](https://yoast.com/hreflang-ultimate-guide/)\n\n### Google vs Bing\n\nBing treats hreflang as a \"weak signal.\" Bing relies on `content-language` meta tag, HTML `lang` attribute, ccTLDs, and server location. Yandex supports hreflang like Google.\n\nFor both engines: implement hreflang (Google/Yandex) + `<html lang=\"...\">` + `<meta http-equiv=\"content-language\">` (Bing).\n\n- [Digital Ready Marketing: Bing Doesn't Use Hreflang](https://digitalreadymarketing.com/bing-doesnt-use-hreflang-annotation-what-does-it-use/)\n- [Yoast: hreflang Ultimate Guide](https://yoast.com/hreflang-ultimate-guide/)\n\n---\n\n## Canonicalization & i18n\n\n### Self-Referencing Canonicals\n\nEach locale page must canonical to itself. John Mueller: \"Don't use a rel=canonical across languages/countries, only use it on a per-country/language basis.\"\n\nGoogle's docs: \"Specify a canonical page in the same language, or the best possible substitute language if a canonical doesn't exist for the same language.\"\n\n- [John Mueller: hreflang canonical](https://johnmu.com/hreflang-canonical/)\n- [Google: Consolidate Duplicate URLs](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)\n\n### Canonical Overrides Hreflang\n\nMueller: \"If your canonical is pointing somewhere else, Google will follow that and ignore your hreflang annotation.\" The canonical URL must be one of the URLs in the hreflang set, or all hreflang markup is ignored.\n\nGoogle also states: \"Google prefers URLs that are part of hreflang clusters for canonicalization\" -- when signals align, hreflang strengthens canonical selection.\n\n- [John Mueller: hreflang canonical](https://johnmu.com/hreflang-canonical/)\n- [SEJ: Hreflang Tags Are Hints](https://www.searchenginejournal.com/google-reminds-that-hreflang-tags-are-hints-not-directives/546428/)\n- [Google: Consolidate Duplicate URLs](https://developers.google.com/search/docs/crawling-indexing/consolidate-duplicate-urls)\n\n### Near-Duplicate Regional Variants\n\nMueller (2023 Office Hours): \"If the content is completely the same, and we can't tell any difference, then for simplicity and user experience we may just show one version -- even if hreflang is present.\"\n\nGoogle's duplicate detection runs BEFORE hreflang evaluation. To keep both versions indexed, you need substantive content differences beyond currency symbols.\n\n- [International Web Mastery: Same-Language Duplicate Pages](https://internationalwebmastery.com/blog/how-google-handles-canonicalization-of-same-language-duplicate-near-duplicate-pages/)\n- [Google: Managing Multi-Regional Sites](https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites)\n\n### Pagination Across Locales\n\nGoogle: \"Don't use the first page of a paginated sequence as the canonical page. Instead, give each page its own canonical URL.\" Each paginated page in each locale gets self-referencing canonical. `rel=\"next/prev\"` deprecated March 2019.\n\n- [Google: Pagination Best Practices](https://developers.google.com/search/docs/specialty/ecommerce/pagination-and-incremental-page-loading)\n\n---\n\n## International Sitemaps\n\n### Structure\n\nEach `<url>` entry includes `<xhtml:link>` alternates for every locale. Requires `xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"` namespace.\n\nSplit sitemaps by content type, not by locale. Splitting by locale creates maintenance problems because every locale sitemap must reference every other locale (reciprocal requirement).\n\n- [Google Search Central: Localized Versions](https://developers.google.com/search/docs/specialty/international/localized-versions)\n- [Lumar: How Google Handles Hreflang](https://www.lumar.io/office-hours/hreflang/)\n\n### Size Limits\n\n50,000 URLs / 50MB uncompressed per sitemap. Only `<loc>` elements count toward the 50K limit. But with 20 hreflang alternates per entry, the 50MB file size limit becomes the bottleneck. Plan for 2,000-5,000 URLs per sitemap when using full hreflang.\n\n- [Google: Build and Submit a Sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)\n- [SERoundtable: Sitemap 50,000 Limit](https://www.seroundtable.com/google-sitemap-50-000-limit-based-on-location-urls-not-alternative-urls-33843.html)\n\n### Submission\n\nSubmit the sitemap index in Search Console AND reference it in robots.txt. Individual child sitemaps can be submitted separately for per-sitemap reporting.\n\n- [Google: Build and Submit a Sitemap](https://developers.google.com/search/docs/crawling-indexing/sitemaps/build-sitemap)\n\n### Next.js Caveat\n\nNext.js `alternates.languages` does NOT automatically include a self-referencing `<xhtml:link>` for the `<loc>` URL. You must explicitly include the `<loc>` URL's own language in the `languages` object.\n\n- [Next.js Docs: sitemap.xml](https://nextjs.org/docs/app/api-reference/file-conventions/metadata/sitemap)\n\n---\n\n## URL Structure\n\n### Strategies Compared\n\nGoogle treats subdirectories and subdomains equivalently. Mueller: \"From our point of view...they say subdomains and subdirectories are essentially equivalent.\"\n\nURL parameters (`?lang=en`) are explicitly \"Not recommended\" per Google docs.\n\n- [Google: Managing Multi-Regional Sites](https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites)\n\n### Default Language\n\nMueller recommends: set `/` as x-default, put each language in its own prefix. Without marking `/` as x-default, \"to Google it can look like '/' is a separate page from the others.\"\n\n- [Google Blog: x-default](https://developers.google.com/search/blog/2023/05/x-default)\n- [Google Blog: Creating the Right Homepage](https://developers.google.com/search/blog/2014/05/creating-right-homepage-for-your)\n\n### Content Negotiation / IP Redirects\n\nGoogle strongly advises against locale-adaptive pages. Googlebot crawls from US IPs and does not send Accept-Language headers. Separate URLs + hreflang are required.\n\n- [Google: Locale-Adaptive Pages](https://developers.google.com/search/docs/specialty/international/locale-adaptive-pages)\n\n### Trailing Slash Consistency\n\nMueller: trailing slash is \"a significant part of the URL and will change the URL if it's there or not.\" Pick one format for all locale paths, internal links, canonicals, hreflang, and sitemaps.\n\nMueller (2025): \"Consistency is the biggest technical SEO factor.\"\n\n- [SERoundtable: Consistency Is The Biggest Technical SEO Factor](https://www.seroundtable.com/google-consistency-seo-40427.html)\n\n### Search Console Geotargeting\n\nThe International Targeting report is deprecated. Google now relies entirely on hreflang, content language analysis, and linking patterns. You can add subdirectory properties for per-locale reporting.\n\n- [Google Support: International Targeting Deprecated](https://support.google.com/webmasters/answer/12474899?hl=en)\n\n### Framework Locale Modes\n\nUse `localePrefix: 'always'` (next-intl) or equivalent. Never hide locale from URLs -- Google needs unique URLs per language. Using `'never'` mode disables alternate links entirely.\n\n- [next-intl: Routing Configuration](https://next-intl.dev/docs/routing/configuration)\n- [Next.js Discussion #18419](https://github.com/vercel/next.js/discussions/18419)\n\n---\n\n## Content Quality Across Locales\n\n### Auto-Translated Content (2025 Stance)\n\nGoogle removed longstanding guidance advising against auto-translated content in mid-2025. Current stance: \"Our policies do not strictly define content that has been translated by AI as spam.\" The scaled content abuse policy mentions translation as a possible vector, but does not ban it.\n\nReddit scaled AI translations to 35+ languages with Google's knowledge. The key distinction is intent and quality, not the method.\n\n- [Google Spam Policies](https://developers.google.com/search/docs/essentials/spam-policies)\n- [Glenn Gabe: Auto-Translating Content](https://www.gsqi.com/marketing-blog/auto-translating-content-google-scaled-content-abuse/)\n- [SE Land: Reddit AI Translations](https://searchengineland.com/google-comments-on-reddits-use-of-ai-to-translate-its-pages-456908)\n\n### Thin Locale Pages\n\nGoogle: \"Localized versions of a page are only considered duplicates if the main content of the page remains untranslated.\" Pages with only translated boilerplate get clustered as duplicates.\n\nDo NOT use noindex for unwanted locale pages (wastes crawl budget). Do NOT canonical cross-locale (conflicts with hreflang). Best approach: don't create locale pages you can't make genuinely helpful.\n\n- [Google: Localized Versions](https://developers.google.com/search/docs/specialty/international/localized-versions)\n- [Google: Crawl Budget Management](https://developers.google.com/search/docs/crawling-indexing/large-site-managing-crawl-budget)\n\n### Helpful Content System Impact\n\nMerged into core ranking March 2024. Site-wide signal: \"any content -- not just unhelpful content -- on sites determined to have relatively high amounts of unhelpful content overall is less likely to perform well in Search.\"\n\nLow-quality translated pages can drag down the entire site. This is the strongest argument against creating locale pages that aren't genuinely helpful.\n\n- [Google Blog: Helpful Content Update](https://developers.google.com/search/blog/2022/08/helpful-content-update)\n- [Amsive: What Changed in 2024](https://www.amsive.com/insights/seo/googles-helpful-content-update-ranking-system-what-happened-and-what-changed-in-2024/)\n\n### Partial Translation\n\nGoogle: \"Translating only the boilerplate text of your pages while keeping the bulk of your content in a single language...can create a bad user experience.\" Google uses visible content (not lang attribute) to determine page language.\n\nTranslate ALL content on a page if you create a locale version. Untranslated metadata (title, description) in the wrong language reduces CTR.\n\n- [Google: Managing Multi-Regional Sites](https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites)\n\n### Crawl Budget\n\nOnly a concern for 1M+ pages or 10K+ pages changing daily. But alternate URLs (hreflang targets) do consume crawl budget. Broken hreflang links waste budget AND invalidate signals.\n\n- [Google: Crawl Budget Management](https://developers.google.com/search/docs/crawling-indexing/large-site-managing-crawl-budget)\n- [Google Blog: Crawl Budget](https://developers.google.com/search/blog/2017/01/what-crawl-budget-means-for-googlebot)\n\n### Locale-Specific Signals\n\nGoogle identifies audience via: \"local addresses and phone numbers on the pages, the use of local language and currency, links from other local sites, or signals from your Business Profile.\"\n\n- [Google: Managing Multi-Regional Sites](https://developers.google.com/search/docs/specialty/international/managing-multi-regional-sites)\n"},{"path":"agent/skills/seo-audit/SKILL.md","type":"registry:file","target":"~/agent/skills/seo-audit/SKILL.md","content":"---\nname: seo-audit\ndescription: Apply on-page SEO checks when building a single branded HTML page — metadata, headings, schema, links, and images.\n---\n\n# Page SEO checklist\n\nUse when planning or reviewing metadata, headings, canonical tags, internal links,\nimage alt text, and schema for a page this agent is **building** — not for full-site\naudit reports unless the user explicitly asks.\n\n## Schema detection limitation\n\n`web_fetch` and `curl` cannot reliably detect structured data. Many CMS plugins inject\nJSON-LD via client-side JavaScript — it will not appear in static HTML or `web_fetch`\noutput (which strips `<script>` tags).\n\nDo not report \"no schema found\" from `web_fetch` or `curl` alone. When validating\nschema on a live site, use the browser tool, Google Rich Results Test, or Screaming\nFrog.\n\n## Priority order for page building\n\n1. **Indexability** — page is meant to be indexed; no accidental `noindex`\n2. **On-page metadata** — title, description, canonical, Open Graph, Twitter cards\n3. **Heading structure** — one `<h1>`, logical hierarchy, keyword-aligned sections\n4. **Content quality** — answers search intent; claims grounded in source data\n5. **Schema** — JSON-LD matching page intent (`WebPage`, `Organization`, `FAQPage`,\n   `Product`, or `Service`)\n\n## On-page checks\n\nApply every check before returning HTML. **Done when** each item is addressed or\nmarked N/A with a reason.\n\n### Title and meta\n\n- Unique `<title>` with primary keyword near the start (50–60 visible chars)\n- Unique meta description with value proposition (150–160 chars)\n- Self-referencing canonical URL on the page being built\n- Open Graph and Twitter card tags aligned with title and description\n\n### Headings and content\n\n- Exactly one `<h1>` containing the primary keyword\n- Logical hierarchy (`h1` → `h2` → `h3`); no skipped levels\n- Primary keyword in the first 100 words when natural\n- Descriptive link text — never \"click here\" or bare URLs\n- Accessible `alt` on every image; decorative images use `alt=\"\"`\n\n### Structured data\n\n- JSON-LD in `application/ld+json` matching page intent\n- Claims in schema match visible page content and source data\n- FAQ schema only when an FAQ section exists on the page\n\n### Technical notes for generated pages\n\n- `<html lang=\"...\">` set correctly\n- No remote scripts unless the user explicitly asked\n- Image dimensions set when known to avoid layout shift\n\n## Out of scope\n\nUnless the user explicitly requests an audit report, do not produce a full-site\ntechnical SEO audit. For deep dives on international SEO or AI-writing patterns, see\n[international-seo](./references/international-seo.md) and\n[ai-writing-detection](./references/ai-writing-detection.md).\n\n## Output when building\n\nReturn SEO notes with: target search intent, primary keyword, secondary topics,\nschema types used, and source URLs — per the agent output contract.\n"},{"path":"evals/evals.config.ts","type":"registry:file","target":"~/evals/evals.config.ts","content":"import { defineEvalConfig } from \"eve/evals\";\n\nexport default defineEvalConfig({\n  timeoutMs: 120_000,\n});\n"},{"path":"evals/missing-domain-asks.eval.ts","type":"registry:file","target":"~/evals/missing-domain-asks.eval.ts","content":"import { defineEval } from \"eve/evals\";\nimport { equals } from \"eve/evals/expect\";\n\nexport default defineEval({\n  description:\n    \"Asks for the domain before doing any generation or Context.dev work when none is provided.\",\n  async test(t) {\n    await t.send(`\nBuild me an SEO-optimized landing page.\n\nNo domain has been provided. Proceed according to your instructions: ask for the domain before doing any generation work. Do not call any Context.dev tools and do not produce any HTML yet.\n`);\n\n    t.succeeded();\n    t.noFailedActions();\n    const reply = t.reply ?? \"\";\n    t.check(reply.toLowerCase().includes(\"domain\"), equals(true).gate());\n    t.check(reply.includes(\"?\"), equals(true).gate());\n    t.check(reply.toLowerCase().includes(\"<!doctype\"), equals(false).gate());\n  },\n});\n"},{"path":"evals/page-structure-contract.eval.ts","type":"registry:file","target":"~/evals/page-structure-contract.eval.ts","content":"import { defineEval } from \"eve/evals\";\nimport { equals, includes } from \"eve/evals/expect\";\n\nexport default defineEval({\n  description:\n    \"Builds a complete on-brand HTML page from provided Context.dev data with the mandated SEO structure, without inventing testimonials, pricing, or statistics.\",\n  timeoutMs: 300_000,\n  async test(t) {\n    await t.send(`\nBuild the SEO page for acme.dev as a homepage.\n\nThe Context.dev brand lookup for acme.dev already returned:\n\n{\n  \"name\": \"Acme Dev Tools\",\n  \"description\": \"Acme Dev Tools ships a CLI and dashboard that help teams catch flaky tests before deploys.\",\n  \"industry\": \"developer tools\",\n  \"colors\": { \"primary\": \"#1D4ED8\", \"background\": \"#F8FAFC\", \"text\": \"#0F172A\" },\n  \"fonts\": { \"heading\": \"Inter\", \"body\": \"Inter\" }\n}\n\nThe homepage markdown returned only a short tagline: \"Catch flaky tests before your users do.\" No testimonials, customer names, statistics, awards, or pricing information is available.\n\nAll the Context.dev data you need is provided above, so do not call Context.dev tools again in this run. Proceed according to your instructions: produce one complete HTML document in a single fenced html code block, grounded only in the data above — do not invent testimonials, customer names, statistics, awards, or pricing. Include the SEO notes section after the page.\n`);\n\n    t.succeeded();\n    t.noFailedActions();\n\n    const reply = t.reply ?? \"\";\n    const replyLower = reply.toLowerCase();\n    t.check(replyLower, includes(\"<!doctype html\").gate());\n    t.check(replyLower, includes(\"<html lang\").gate());\n    t.check(replyLower, includes(\"<title\").gate());\n    t.check(replyLower, includes('name=\"description\"').gate());\n    const h1Count = replyLower.split(\"<h1\").length - 1;\n    t.check(h1Count === 1, equals(true).gate());\n    t.check(replyLower, includes('rel=\"canonical\"').soft());\n    t.check(replyLower, includes(\"application/ld+json\").soft());\n    t.check(replyLower, includes(\"seo notes\").soft());\n    t.check(replyLower.includes(\"<script src=\\\"http\"), equals(false).gate());\n    t.check(reply, includes(\"Acme Dev Tools\").gate());\n  },\n});\n"},{"path":"README.md","type":"registry:file","target":"~/agent/README.md","content":"# Branded SEO Page Builder\n\nAn on-demand Eve agent that turns a domain into a complete SEO-optimized HTML\npage. It connects to Context.dev's hosted MCP server to resolve brand metadata,\nscrape homepage content, and extract design-system signals, then applies the\nbundled `seo-audit` and `ai-seo` skills to produce search-ready static HTML.\n\n## What it does\n\n1. **Connects to Context.dev MCP** — uses the hosted MCP server at\n   `https://context-dev.stlmcp.com`, authenticated with the\n   `x-context-dev-api-key` header.\n2. **Resolves brand data with Context.dev** — pulls company name, description,\n   colors, logos, industry labels, and related metadata from a domain.\n3. **Scrapes source content** — reads the homepage or a user-provided page URL as\n   clean markdown so the generated copy is grounded in existing brand language.\n4. **Extracts style cues** — optionally pulls Context.dev styleguide data for\n   colors, typography, spacing, shadows, and component cues.\n5. **Generates SEO HTML** — returns one complete HTML document with semantic\n   sections, metadata, Open Graph tags, Twitter card tags, accessible image alt\n   text, and JSON-LD schema.\n6. **Optimizes for AI search** — loads the bundled `ai-seo` skill so the page is\n   extractable and citable by answer engines while staying people-first.\n\n## Skills\n\n- **seo-audit** — technical and on-page SEO checks for metadata, headings,\n  canonicalization, schema, accessibility, and crawlability.\n- **ai-seo** — answer engine optimization patterns for extractable sections,\n  answer blocks, FAQs, and LLM-friendly structure.\n\nBoth skills are vendored from\n`https://github.com/coreyhaines31/marketingskills/tree/main/skills`.\n\n## Installation\n\n```bash\nnpx shadcn@latest add @evex/branded-seo-page-builder\n```\n\nInstall the public runtime dependencies listed by the registry item if your Eve\napp does not already have them.\n\n## Configuration\n\nCopy `.env.example` into your Eve app environment and fill in the Context.dev\ncredential.\n\n```env\nCONTEXT_DEV_API_KEY=ctxt_secret_...\n```\n\n`CONTEXT_API_KEY` is also supported as a fallback for projects that already use\nthat name, but `CONTEXT_DEV_API_KEY` is the documented Context.dev standard. The\nEve MCP connection sends the resolved key as the `x-context-dev-api-key` header.\n\nNever expose the Context.dev key to browser-side code. This agent sends it only\nfrom the Eve MCP connection runtime.\n\n## Usage\n\nAsk the agent for a page from a domain:\n\n```text\nCreate an SEO-optimized landing page for linear.app.\n```\n\nYou can also provide a specific source page:\n\n```text\nBuild a product page from https://example.com/product and target \"AI support automation\".\n```\n\nThe agent returns:\n\n1. A complete HTML document in one fenced `html` block.\n2. SEO notes with search intent, primary keyword, secondary topics, schema types,\n   and Context.dev source URLs.\n3. Assumptions when any copy was inferred instead of directly sourced.\n\n## Smoke test\n\n1. Set `CONTEXT_DEV_API_KEY` in the Eve app environment.\n2. Start the app in development:\n\n   ```bash\n   pnpm dev\n   ```\n\n3. In your Eve chat/client, ask:\n\n   ```text\n   Generate an SEO HTML homepage for stripe.com.\n   ```\n\n4. Confirm the agent uses the `context-dev` MCP connection, then returns a full\n   `<!doctype html>` document with metadata, JSON-LD, semantic sections, and SEO\n   notes listing Context.dev source URLs.\n\n## Troubleshooting\n\n- **`CONTEXT_DEV_API_KEY is required`** — set `CONTEXT_DEV_API_KEY` in the Eve app\n  environment and restart the server.\n- **`Context.dev API 401`** — the key is missing, revoked, or copied incorrectly.\n- **`Context.dev API 408` or `429`** — the MCP call hit a cold-start timeout or\n  rate limit. Retry later or lower concurrent usage.\n- **No brand facts in the HTML** — Context.dev did not return enough brand data\n  and the agent refused to invent claims. Provide more source copy or a specific\n  page URL.\n- **Unexpected visual style** — pass a specific source page URL or disable\n  styleguide use by asking the agent to call Context without styleguide data.\n\n## Development\n\n```bash\npnpm install\npnpm info\npnpm build\n```\n\nRun `pnpm typecheck` while editing the Context MCP connection.\n"},{"path":".env.example","type":"registry:file","target":"~/.env.example","content":"CONTEXT_DEV_API_KEY=\nCONTEXT_API_KEY=\n"}]}