Skip to main content
Glama

Get brand overview

get_brand_overview
Read-onlyIdempotent

The brand's Overview in one call: visibility, share of voice and recommendation with their basis and change, how the brand and its main competitors stand, and headline readiness, traffic, inbox and Content Studio status. For one slice in depth use get_perception, list_citations, get_ai_traffic or get_readiness. A segment filters the answer metrics.

Input Schema

NameRequiredDescriptionDefault
toNoEnd date, YYYY-MM-DD, inclusive; from equal to to is a single day. Defaults to today; a later date is treated as today.
fromNoStart date, YYYY-MM-DD. Defaults to 30 days before to. Windows are at most 180 days and a from after today is refused; a plan with limited history serves only the days it keeps and says so in retention.
brandYesBrand or study: its ID from list_brands, or its name (exact or a unique prefix).
segmentNoOptional segment ID or name. get_brand_settings lists the brand's segments.

Output Schema

NameRequiredDescriptionDefault
dataYes
generated_atYesRFC 3339 time the response was made.
schema_versionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedOutput schema / properties / data / properties / pages / description
      Previous value: -"Content Studio pages by lane."New value: +"Content Studio pages by status."
    • addedOutput schema / properties / data / properties / pages / properties / drafting
      Added value: +{
      +  "description": "Being written, or revised after going live.",
      +  "type": "integer"
      +}
    • removedOutput schema / properties / data / properties / pages / properties / in_progress
      Removed value: -{
      -  "type": "integer"
      -}
    • removedOutput schema / properties / data / properties / pages / properties / needs_refresh
      Removed value: -{
      -  "type": "integer"
      -}
    • addedOutput schema / properties / data / properties / pages / properties / sent
      Added value: +{
      +  "description": "Sent to the CMS, not yet seen live.",
      +  "type": "integer"
      +}
    • changedOutput schema / properties / data / properties / pages / required
      Previous value: -[
      -  "in_progress",
      -  "live",
      -  "needs_refresh"
      -]New value: +[
      +  "drafting",
      +  "sent",
      +  "live"
      +]
  2. Changed1 schema field changed
    • changedOutput schema / properties / data / properties / collection / properties / next_collection_at / description
      Previous value: -"When the brand's prompts are next collected (00:00 UTC on Mondays, Wednesdays and Fridays). Absent when nothing is set to collect."New value: +"When the brand's prompts are next collected (00:00 UTC daily). Absent when nothing is set to collect."
  3. Changed15 schema fields changed
    • addedOutput schema / properties / data / properties / recommendation / properties / calibrating
      Added value: +{
      +  "description": "The value rests on fewer than 10 answers, so it may move a lot as answers come in.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / data / properties / recommendation / properties / changed
      Added value: +{
      +  "description": "Whether the change is more than chance: larger than 1.96 standard errors of the difference, with neither period calibrating. When false, call it no real change, whatever change says.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / data / properties / recommendation / properties / high
      Added value: +{
      +  "description": "High end of the range the value likely sits in (95%).",
      +  "type": [
      +    "null",
      +    "number"
      +  ]
      +}
    • addedOutput schema / properties / data / properties / recommendation / properties / low
      Added value: +{
      +  "description": "Low end of the range the value likely sits in (95%). AI answers vary run to run, so quote the range with the value.",
      +  "type": [
      +    "null",
      +    "number"
      +  ]
      +}
    • changedOutput schema / properties / data / properties / recommendation / required
      Previous value: -[
      -  "value",
      -  "change",
      -  "answers",
      -  "models_collecting",
      -  "models_expected",
      -  "period"
      -]New value: +[
      +  "value",
      +  "change",
      +  "changed",
      +  "calibrating",
      +  "answers",
      +  "models_collecting",
      +  "models_expected",
      +  "period"
      +]
    • addedOutput schema / properties / data / properties / share_of_voice / properties / calibrating
      Added value: +{
      +  "description": "The value rests on fewer than 10 answers, so it may move a lot as answers come in.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / data / properties / share_of_voice / properties / changed
      Added value: +{
      +  "description": "Whether the change is more than chance: larger than 1.96 standard errors of the difference, with neither period calibrating. When false, call it no real change, whatever change says.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / data / properties / share_of_voice / properties / high
      Added value: +{
      +  "description": "High end of the range the value likely sits in (95%).",
      +  "type": [
      +    "null",
      +    "number"
      +  ]
      +}
    • addedOutput schema / properties / data / properties / share_of_voice / properties / low
      Added value: +{
      +  "description": "Low end of the range the value likely sits in (95%). AI answers vary run to run, so quote the range with the value.",
      +  "type": [
      +    "null",
      +    "number"
      +  ]
      +}
    • changedOutput schema / properties / data / properties / share_of_voice / required
      Previous value: -[
      -  "value",
      -  "change",
      -  "answers",
      -  "models_collecting",
      -  "models_expected",
      -  "period"
      -]New value: +[
      +  "value",
      +  "change",
      +  "changed",
      +  "calibrating",
      +  "answers",
      +  "models_collecting",
      +  "models_expected",
      +  "period"
      +]
    • addedOutput schema / properties / data / properties / visibility / properties / calibrating
      Added value: +{
      +  "description": "The value rests on fewer than 10 answers, so it may move a lot as answers come in.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / data / properties / visibility / properties / changed
      Added value: +{
      +  "description": "Whether the change is more than chance: larger than 1.96 standard errors of the difference, with neither period calibrating. When false, call it no real change, whatever change says.",
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / data / properties / visibility / properties / high
      Added value: +{
      +  "description": "High end of the range the value likely sits in (95%).",
      +  "type": [
      +    "null",
      +    "number"
      +  ]
      +}
    • addedOutput schema / properties / data / properties / visibility / properties / low
      Added value: +{
      +  "description": "Low end of the range the value likely sits in (95%). AI answers vary run to run, so quote the range with the value.",
      +  "type": [
      +    "null",
      +    "number"
      +  ]
      +}
    • changedOutput schema / properties / data / properties / visibility / required
      Previous value: -[
      -  "value",
      -  "change",
      -  "answers",
      -  "models_collecting",
      -  "models_expected",
      -  "period"
      -]New value: +[
      +  "value",
      +  "change",
      +  "changed",
      +  "calibrating",
      +  "answers",
      +  "models_collecting",
      +  "models_expected",
      +  "period"
      +]
  4. Changed6 schema fields changed
    • changedInput schema / properties / from / description
      Previous value: -"Start date, YYYY-MM-DD. Defaults to 30 days before to; plan retention may shorten it."New value: +"Start date, YYYY-MM-DD. Defaults to 30 days before to. Windows are at most 180 days and a from after today is refused; a plan with limited history serves only the days it keeps and says so in retention."
    • changedInput schema / properties / to / description
      Previous value: -"End date, YYYY-MM-DD. Defaults to today."New value: +"End date, YYYY-MM-DD, inclusive; from equal to to is a single day. Defaults to today; a later date is treated as today."
    • changedOutput schema / properties / data / properties / competitors / description
      Previous value: -"Every tracked brand, including this one, by share of voice."New value: +"This brand and the competitors mentioned in the period, up to 10 of them, by mentions."
    • addedOutput schema / properties / data / properties / competitors_omitted
      Added value: +{
      +  "description": "Tracked competitors not listed: those with no mentions in the period, and any beyond the first 10. get_brand_settings lists them all.",
      +  "type": "integer"
      +}
    • addedOutput schema / properties / data / properties / competitors_total
      Added value: +{
      +  "description": "Competitors the brand tracks, mentioned or not.",
      +  "type": "integer"
      +}
    • changedOutput schema / properties / data / required
      Previous value: -[
      -  "brand",
      -  "kind",
      -  "segment",
      -  "period",
      -  "visibility",
      -  "share_of_voice",
      -  "recommendation",
      -  "by_model",
      -  "competitors",
      -  "outcomes",
      -  "top_cited_domains",
      -  "readiness",
      -  "collection",
      -  "traffic",
      -  "opportunities",
      -  "pages",
      -  "latest_reports",
      -  "retention"
      -]New value: +[
      +  "brand",
      +  "kind",
      +  "segment",
      +  "period",
      +  "visibility",
      +  "share_of_voice",
      +  "recommendation",
      +  "by_model",
      +  "competitors",
      +  "competitors_total",
      +  "competitors_omitted",
      +  "outcomes",
      +  "top_cited_domains",
      +  "readiness",
      +  "collection",
      +  "traffic",
      +  "opportunities",
      +  "pages",
      +  "latest_reports",
      +  "retention"
      +]
  5. Changed1 schema field changed
    • addedOutput schema / properties / data / properties / collection / properties / next_collection_at
      Added value: +{
      +  "description": "When the brand's prompts are next collected (00:00 UTC on Mondays, Wednesdays and Fridays). Absent when nothing is set to collect.",
      +  "type": "string"
      +}
  6. Changed6 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • addedInput schema / properties / brand / minLength
      Added value: +1
    • addedInput schema / properties / from / format
      Added value: +"date"
    • removedInput schema / properties / model
      Removed value: -{
      -  "description": "Optional model filter.",
      -  "type": "string"
      -}
    • addedInput schema / properties / to / format
      Added value: +"date"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "data": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "brand": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "id": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            },
      +            "url": {
      +              "description": "The brand's website, or empty when none is set.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "name",
      +            "url"
      +          ],
      +          "type": "object"
      +        },
      +        "by_model": {
      +          "description": "Mention rate per AI model, highest first. Models missing here returned no answers in the period.",
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "mention_rate": {
      +                "description": "Percentage of the model's answers that mention the brand.",
      +                "type": "number"
      +              },
      +              "model": {
      +                "description": "Model family key, as list_answers' model filter takes it.",
      +                "type": "string"
      +              },
      +              "model_name": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "model",
      +              "model_name",
      +              "mention_rate"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "collection": {
      +          "additionalProperties": false,
      +          "description": "Brand-wide; not filtered by segment.",
      +          "properties": {
      +            "active_prompts": {
      +              "type": "integer"
      +            },
      +            "active_segments": {
      +              "type": "integer"
      +            },
      +            "failed": {
      +              "description": "Failed captures, plus each expected model that returned nothing for an active segment.",
      +              "type": "integer"
      +            },
      +            "models_collecting": {
      +              "description": "AI models that answered in the period.",
      +              "type": "integer"
      +            },
      +            "models_expected": {
      +              "description": "AI models the plan tracks.",
      +              "type": "integer"
      +            },
      +            "state": {
      +              "description": "ready: complete. partial: some captures failed or some models returned nothing. stale: nothing new in the period. insufficient: nothing to collect.",
      +              "type": "string"
      +            },
      +            "unaccounted": {
      +              "description": "Captures that were expected but neither succeeded nor failed.",
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "state",
      +            "active_segments",
      +            "active_prompts",
      +            "failed",
      +            "unaccounted",
      +            "models_expected",
      +            "models_collecting"
      +          ],
      +          "type": "object"
      +        },
      +        "competitors": {
      +          "description": "Every tracked brand, including this one, by share of voice.",
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "brand": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "id": {
      +                    "type": "string"
      +                  },
      +                  "name": {
      +                    "type": "string"
      +                  },
      +                  "url": {
      +                    "description": "The brand's website, or empty when none is set.",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "id",
      +                  "name",
      +                  "url"
      +                ],
      +                "type": "object"
      +              },
      +              "is_you": {
      +                "description": "True for the brand being tracked.",
      +                "type": "boolean"
      +              },
      +              "mentions": {
      +                "type": "integer"
      +              },
      +              "share_of_voice": {
      +                "type": [
      +                  "null",
      +                  "number"
      +                ]
      +              },
      +              "visibility": {
      +                "type": [
      +                  "null",
      +                  "number"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "brand",
      +              "is_you",
      +              "visibility",
      +              "share_of_voice",
      +              "mentions"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "kind": {
      +          "type": "string"
      +        },
      +        "latest_reports": {
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "id": {
      +                "type": "string"
      +              },
      +              "name": {
      +                "type": "string"
      +              },
      +              "period": {
      +                "additionalProperties": false,
      +                "properties": {
      +                  "from": {
      +                    "description": "First day, YYYY-MM-DD.",
      +                    "type": "string"
      +                  },
      +                  "to": {
      +                    "description": "Last day, YYYY-MM-DD.",
      +                    "type": "string"
      +                  }
      +                },
      +                "required": [
      +                  "from",
      +                  "to"
      +                ],
      +                "type": "object"
      +              }
      +            },
      +            "required": [
      +              "id",
      +              "name",
      +              "period"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "opportunities": {
      +          "additionalProperties": false,
      +          "description": "Brand-wide; not filtered by segment.",
      +          "properties": {
      +            "high_priority": {
      +              "description": "Opportunities in Now scoring 75 or more.",
      +              "type": "integer"
      +            },
      +            "now": {
      +              "description": "Opportunities in the Now stage, as list_opportunities counts them.",
      +              "type": "integer"
      +            },
      +            "top": {
      +              "additionalProperties": false,
      +              "description": "The highest-ranked opportunity in Now; null when Now is empty.",
      +              "properties": {
      +                "id": {
      +                  "description": "Opportunity ID for get_opportunity.",
      +                  "type": "string"
      +                },
      +                "kind": {
      +                  "type": "string"
      +                },
      +                "score": {
      +                  "type": "integer"
      +                },
      +                "title": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "kind",
      +                "title",
      +                "score"
      +              ],
      +              "type": [
      +                "null",
      +                "object"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "now",
      +            "high_priority",
      +            "top"
      +          ],
      +          "type": "object"
      +        },
      +        "outcomes": {
      +          "description": "How answers treated the brand.",
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "answers": {
      +                "type": "integer"
      +              },
      +              "outcome": {
      +                "type": "string"
      +              },
      +              "share": {
      +                "description": "Percentage of classified answers.",
      +                "type": [
      +                  "null",
      +                  "number"
      +                ]
      +              }
      +            },
      +            "required": [
      +              "outcome",
      +              "answers",
      +              "share"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "pages": {
      +          "additionalProperties": false,
      +          "description": "Content Studio pages by lane.",
      +          "properties": {
      +            "in_progress": {
      +              "type": "integer"
      +            },
      +            "live": {
      +              "type": "integer"
      +            },
      +            "needs_refresh": {
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "in_progress",
      +            "live",
      +            "needs_refresh"
      +          ],
      +          "type": "object"
      +        },
      +        "period": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "from": {
      +              "description": "First day, YYYY-MM-DD.",
      +              "type": "string"
      +            },
      +            "to": {
      +              "description": "Last day, YYYY-MM-DD.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "from",
      +            "to"
      +          ],
      +          "type": "object"
      +        },
      +        "readiness": {
      +          "additionalProperties": false,
      +          "description": "Brand-wide; not filtered by segment.",
      +          "properties": {
      +            "change": {
      +              "description": "Change on the previous comparable scan, in points; null when not comparable.",
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            },
      +            "critical": {
      +              "description": "Open critical findings.",
      +              "type": "integer"
      +            },
      +            "major": {
      +              "description": "Open major findings.",
      +              "type": "integer"
      +            },
      +            "scan_id": {
      +              "type": "string"
      +            },
      +            "scanned_at": {
      +              "type": "string"
      +            },
      +            "score": {
      +              "description": "Readiness score, 0-100.",
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            },
      +            "status": {
      +              "type": "string"
      +            },
      +            "verdict": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "scan_id",
      +            "status",
      +            "score",
      +            "change",
      +            "verdict",
      +            "critical",
      +            "major",
      +            "scanned_at"
      +          ],
      +          "type": [
      +            "null",
      +            "object"
      +          ]
      +        },
      +        "recommendation": {
      +          "additionalProperties": false,
      +          "description": "Share of analysed answers that recommend the brand, 0-100.",
      +          "properties": {
      +            "answers": {
      +              "description": "AI answers the value is based on.",
      +              "type": "integer"
      +            },
      +            "change": {
      +              "description": "Change on the previous period of the same length, in percentage points; null when either period has no evidence.",
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            },
      +            "mentions": {
      +              "description": "Brand mentions the value is based on (share of voice).",
      +              "type": [
      +                "null",
      +                "integer"
      +              ]
      +            },
      +            "models_collecting": {
      +              "description": "AI models that answered in the period.",
      +              "type": "integer"
      +            },
      +            "models_expected": {
      +              "description": "AI models the plan tracks. Fewer collecting than expected means the value covers only part of the AI landscape.",
      +              "type": "integer"
      +            },
      +            "period": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "from": {
      +                  "description": "First day, YYYY-MM-DD.",
      +                  "type": "string"
      +                },
      +                "to": {
      +                  "description": "Last day, YYYY-MM-DD.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "from",
      +                "to"
      +              ],
      +              "type": "object"
      +            },
      +            "value": {
      +              "description": "Percentage, rounded to one decimal place; null when there is no evidence.",
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "value",
      +            "change",
      +            "answers",
      +            "models_collecting",
      +            "models_expected",
      +            "period"
      +          ],
      +          "type": "object"
      +        },
      +        "retention": {
      +          "additionalProperties": false,
      +          "description": "Set when the plan's history limit shortened the period.",
      +          "properties": {
      +            "effective_from": {
      +              "type": "string"
      +            },
      +            "message": {
      +              "type": "string"
      +            },
      +            "requested_from": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "requested_from",
      +            "effective_from",
      +            "message"
      +          ],
      +          "type": [
      +            "null",
      +            "object"
      +          ]
      +        },
      +        "segment": {
      +          "additionalProperties": false,
      +          "description": "The segment the answer metrics are filtered to; null for all segments.",
      +          "properties": {
      +            "id": {
      +              "type": "string"
      +            },
      +            "name": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "name"
      +          ],
      +          "type": [
      +            "null",
      +            "object"
      +          ]
      +        },
      +        "share_of_voice": {
      +          "additionalProperties": false,
      +          "description": "The brand's share of all tracked-brand mentions, 0-100.",
      +          "properties": {
      +            "answers": {
      +              "description": "AI answers the value is based on.",
      +              "type": "integer"
      +            },
      +            "change": {
      +              "description": "Change on the previous period of the same length, in percentage points; null when either period has no evidence.",
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            },
      +            "mentions": {
      +              "description": "Brand mentions the value is based on (share of voice).",
      +              "type": [
      +                "null",
      +                "integer"
      +              ]
      +            },
      +            "models_collecting": {
      +              "description": "AI models that answered in the period.",
      +              "type": "integer"
      +            },
      +            "models_expected": {
      +              "description": "AI models the plan tracks. Fewer collecting than expected means the value covers only part of the AI landscape.",
      +              "type": "integer"
      +            },
      +            "period": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "from": {
      +                  "description": "First day, YYYY-MM-DD.",
      +                  "type": "string"
      +                },
      +                "to": {
      +                  "description": "Last day, YYYY-MM-DD.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "from",
      +                "to"
      +              ],
      +              "type": "object"
      +            },
      +            "value": {
      +              "description": "Percentage, rounded to one decimal place; null when there is no evidence.",
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "value",
      +            "change",
      +            "answers",
      +            "models_collecting",
      +            "models_expected",
      +            "period"
      +          ],
      +          "type": "object"
      +        },
      +        "top_cited_domains": {
      +          "description": "The domains AI answers cited most.",
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "citations": {
      +                "type": "integer"
      +              },
      +              "domain": {
      +                "type": "string"
      +              },
      +              "ownership": {
      +                "description": "own, competitor, or third_party.",
      +                "type": "string"
      +              },
      +              "share": {
      +                "description": "Percentage of all citations.",
      +                "type": "number"
      +              }
      +            },
      +            "required": [
      +              "domain",
      +              "ownership",
      +              "citations",
      +              "share"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "traffic": {
      +          "additionalProperties": false,
      +          "description": "Brand-wide; not filtered by segment.",
      +          "properties": {
      +            "ai_referrals": {
      +              "description": "Visits from people who clicked through from an AI answer.",
      +              "type": "integer"
      +            },
      +            "ai_visits": {
      +              "description": "AI crawler visits plus AI referrals.",
      +              "type": "integer"
      +            },
      +            "connected": {
      +              "description": "Whether site tracking is set up; when false the counts are 0 because nothing is measured.",
      +              "type": "boolean"
      +            },
      +            "crawler_visits": {
      +              "type": "integer"
      +            },
      +            "latest_visit_at": {
      +              "type": "string"
      +            },
      +            "pages_reached": {
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "connected",
      +            "ai_visits",
      +            "crawler_visits",
      +            "ai_referrals",
      +            "pages_reached",
      +            "latest_visit_at"
      +          ],
      +          "type": "object"
      +        },
      +        "visibility": {
      +          "additionalProperties": false,
      +          "description": "How visible the brand is in AI answers, 0-100: how often answers mention it, weighted by how early.",
      +          "properties": {
      +            "answers": {
      +              "description": "AI answers the value is based on.",
      +              "type": "integer"
      +            },
      +            "change": {
      +              "description": "Change on the previous period of the same length, in percentage points; null when either period has no evidence.",
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            },
      +            "mentions": {
      +              "description": "Brand mentions the value is based on (share of voice).",
      +              "type": [
      +                "null",
      +                "integer"
      +              ]
      +            },
      +            "models_collecting": {
      +              "description": "AI models that answered in the period.",
      +              "type": "integer"
      +            },
      +            "models_expected": {
      +              "description": "AI models the plan tracks. Fewer collecting than expected means the value covers only part of the AI landscape.",
      +              "type": "integer"
      +            },
      +            "period": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "from": {
      +                  "description": "First day, YYYY-MM-DD.",
      +                  "type": "string"
      +                },
      +                "to": {
      +                  "description": "Last day, YYYY-MM-DD.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "from",
      +                "to"
      +              ],
      +              "type": "object"
      +            },
      +            "value": {
      +              "description": "Percentage, rounded to one decimal place; null when there is no evidence.",
      +              "type": [
      +                "null",
      +                "number"
      +              ]
      +            }
      +          },
      +          "required": [
      +            "value",
      +            "change",
      +            "answers",
      +            "models_collecting",
      +            "models_expected",
      +            "period"
      +          ],
      +          "type": "object"
      +        }
      +      },
      +      "required": [
      +        "brand",
      +        "kind",
      +        "segment",
      +        "period",
      +        "visibility",
      +        "share_of_voice",
      +        "recommendation",
      +        "by_model",
      +        "competitors",
      +        "outcomes",
      +        "top_cited_domains",
      +        "readiness",
      +        "collection",
      +        "traffic",
      +        "opportunities",
      +        "pages",
      +        "latest_reports",
      +        "retention"
      +      ],
      +      "type": "object"
      +    },
      +    "generated_at": {
      +      "description": "RFC 3339 time the response was made.",
      +      "type": "string"
      +    },
      +    "schema_version": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "schema_version",
      +    "generated_at",
      +    "data"
      +  ],
      +  "type": "object"
      +}
  7. Added

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld), so the bar is lower; the description still adds real behavioral context by disclosing that this is a multi-metric roll-up in one call and that a segment 'filters the answer metrics' rather than everything. It stops short of describing retention/latency behavior, but the schema already handles date-window and retention caveats.

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?

Two sentences, front-loaded with what the call returns and followed by the routing rule and the segment caveat. The first sentence is a long enumeration but every item corresponds to actual returned content, so it earns its length; only minor tightening is possible.

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

Completeness5/5

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

For a read-only aggregate tool with a 100%-documented schema and an output schema covering return values, the description supplies everything an agent needs: content scope, alternative tools, and the segment filtering nuance. Nothing required for correct invocation appears to be missing.

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 baseline is 3; the description goes beyond the schema by clarifying the scope of the optional segment parameter ('filters the answer metrics'), which is a behavior the schema description does not state. The brand/date parameters add no extra meaning in the prose, but nothing is misleading.

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?

States a specific resource (the brand Overviewe) and enumerates exactly what it returns: visibility, share of voice, recommendation with basis and change, competitor standing, and readiness/traffic/inbox/Content Studio status. It also names the sibling tools it is not, so an agent can separate the aggregate view from the single-slice tools without reading schemas.

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

Usage Guidelines5/5

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

Explicitly routes to alternatives: 'For one slice in depth use get_perception, list_citations, get_ai_traffic or get_readiness.' That is a clear when-not-this condition paired with the correct substitutes, leaving little to inference beyond the obvious 'use this for the overall picture'.

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.

Resources