Skip to main content
Glama

Content strategy

content
Read-only

What to write and how, in the site's own voice, from the pages that rank and the user's search data. Pick with mode: brief = A content brief from the pages that rank. Needs keyword, competitors. topics = Search Console queries into topics, with the page that owns each, and keyword gaps. Needs rows[{query, page, clicks, impressions, position, url}]. intent = Your page against the search intent of the pages that rank. voice = Learn how the site writes from its best articles. Needs urls. calendar = A dated calendar of refreshes and new pages, steered by what worked here. draft = A draft against the site's voice, sources and SEO, before approval. Needs html.

Input Schema

NameRequiredDescriptionDefault
urlNoOptional: your existing page for this term.
htmlNoThe draft as HTML, title in <title> or <h1>.
modeNoDefault brief.
rowsNoSearch Console rows by query and page.
urlsNoThe site's own best articles, ones that rank and that the owner likes.
ideasNoTopics without a page yet.
startNoFirst day, YYYY-MM-DD, default today.
weeksNoWeeks to plan, default 8.
detailNobrief = short summary.
keywordNoThe search term the page should rank for.
queriesNoSearch Console rows by query and page, for the site-wide check.
audit_idNoOptional: a finished site audit, for internal link suggestions.
per_weekNoItems per week, default 2.
memory_keyNosite_memory key, records this call.
competitorsNoPages that rank for the term.
webhook_urlNoOptional https Slack or Discord webhook for a Monday reminder; off stops it.
competitor_rowsNoOptional keyword gap: competitors' organic keywords (Ahrefs organic-keywords or Semrush domain_organic for each competitor, or Semrush keyword gap rows).

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / webhook_url
      Added value: +{
      +  "description": "Optional https Slack or Discord webhook for a Monday reminder; off stops it.",
      +  "maxLength": 1000,
      +  "type": "string"
      +}
  2. Changed11 schema fields changed
    • addedInput schema / properties / html
      Added value: +{
      +  "description": "The draft as HTML, title in <title> or <h1>.",
      +  "maxLength": 921600,
      +  "type": "string"
      +}
    • addedInput schema / properties / ideas
      Added value: +{
      +  "description": "Topics without a page yet.",
      +  "items": {
      +    "maxLength": 2000,
      +    "type": "string"
      +  },
      +  "maxItems": 50,
      +  "type": "array"
      +}
    • changedInput schema / properties / mode / enum
      Previous value: -[
      -  "brief",
      -  "topics",
      -  "intent"
      -]New value: +[
      +  "brief",
      +  "topics",
      +  "intent",
      +  "voice",
      +  "calendar",
      +  "draft"
      +]
    • addedInput schema / properties / per_week
      Added value: +{
      +  "description": "Items per week, default 2.",
      +  "maximum": 7,
      +  "minimum": 1,
      +  "type": "number"
      +}
    • removedInput schema / properties / rows / items / properties
      Removed value: -{
      -  "clicks": {
      -    "type": "number"
      -  },
      -  "impressions": {
      -    "type": "number"
      -  },
      -  "keyword": {
      -    "description": "Ahrefs/Semrush name for query.",
      -    "maxLength": 2000,
      -    "type": "string"
      -  },
      -  "page": {
      -    "maxLength": 2048,
      -    "type": "string"
      -  },
      -  "position": {
      -    "type": "number"
      -  },
      -  "query": {
      -    "maxLength": 2000,
      -    "type": "string"
      -  },
      -  "traffic": {
      -    "description": "Estimated monthly traffic, used in place of clicks.",
      -    "minimum": 0,
      -    "type": "number"
      -  },
      -  "url": {
      -    "description": "Ahrefs/Semrush name for page.",
      -    "maxLength": 2048,
      -    "type": "string"
      -  },
      -  "volume": {
      -    "description": "Monthly search volume, used in place of impressions when there is no Search Console data.",
      -    "minimum": 0,
      -    "type": "number"
      -  }
      -}
    • removedInput schema / properties / rows / maxItems
      Removed value: -1000
    • removedInput schema / properties / rows / minItems
      Removed value: -1
    • addedInput schema / properties / start
      Added value: +{
      +  "description": "First day, YYYY-MM-DD, default today.",
      +  "maxLength": 10,
      +  "type": "string"
      +}
    • addedInput schema / properties / urls
      Added value: +{
      +  "description": "The site's own best articles, ones that rank and that the owner likes.",
      +  "items": {
      +    "maxLength": 2048,
      +    "type": "string"
      +  },
      +  "maxItems": 5,
      +  "minItems": 2,
      +  "type": "array"
      +}
    • addedInput schema / properties / weeks
      Added value: +{
      +  "description": "Weeks to plan, default 8.",
      +  "maximum": 52,
      +  "minimum": 1,
      +  "type": "number"
      +}
    • removedOutput schema / description
      Removed value: -"The result as structured data; fields depend on mode."
  3. Changed2 schema fields changed
    • changedInput schema / properties / detail / description
      Previous value: -"brief returns a short summary, default full."New value: +"brief = short summary."
    • changedInput schema / properties / memory_key / description
      Previous value: -"Optional site_memory key, to record this call in the site memory."New value: +"site_memory key, records this call."
  4. Changed1 schema field changed
    • addedInput schema / properties / detail
      Added value: +{
      +  "description": "brief returns a short summary, default full.",
      +  "enum": [
      +    "full",
      +    "brief"
      +  ],
      +  "type": "string"
      +}
  5. Added

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=false, and destructiveHint=false, so the safety profile is covered. The description adds little beyond that — it hints at side effects (webhook Monday reminder, memory_key recording the call, draft 'before approval') but never states permissions, rate limits, or reversibility, so with annotations carrying the burden a 3 is appropriate.

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 opening states the tool's job and then the mode list is dense and front-loaded, with each mode entry pairing a verb with its required inputs. It is longer than average but nearly every clause carries routing or required-parameter information, so little is wasted.

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

Completeness4/5

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

With an output schema present, return values need not be explained, and annotations cover safety. For a 17-parameter, six-mode dispatcher the description supplies the critical mode-to-required-parameter mapping, though it leaves some parameters (detail, start, weeks, per_week, audit_id, ideas) mapped only via the schema, which is acceptable given 100% schema coverage.

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 coverage is 100%, so the schema alone would justify a baseline 3. The description earns above baseline by stating which parameters each mode requires ('Needs keyword, competitors', 'Needs rows[{query, page, clicks, impressions, position, url}]', 'Needs urls', 'Needs html') — information the schema cannot convey, since required is empty and every parameter is optional there.

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 names a concrete deliverable ('What to write and how, in the site's own voice') and then enumerates six distinct modes — brief, topics, intent, voice, calendar, draft — each with its own output. This distinguishes it sharply from siblings like text_quality, answer_readiness, and check_keyword, which an agent can rule out without opening a schema.

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?

'Pick with mode:' plus per-mode needs (brief needs keyword, competitors; topics needs rows[...]; voice needs urls; draft needs html) tells the agent exactly how to route within the tool. What is missing is any when-not-to-use or explicit cross-reference to sibling tools, which is why this falls short of a 5.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.