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

TableJSON 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

TableJSON Schema
NameRequiredDescriptionDefault
dataYes
generated_atYesRFC 3339 time the response was made.
schema_versionYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. 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"
      +]
  2. 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"
      +]
  3. 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"
      +}
  4. 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"
      +}
  5. Added

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds that this is a single aggregated call whose answer metrics can be narrowed by a segment, but discloses nothing further about cost, latency or ordering beyond what structured fields provide.

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?

Three sentences, no filler, and the aggregation scope is front-loaded ahead of the alternative-routing sentence. The first sentence is long and comma-chained, but every listed metric carries information rather than repetition.

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 described, and the annotations cover safety; the description supplies scope, sibling routing and the segment effect, which is enough for correct invocation. Minor gaps such as retention/plan-limit behavior are already handled inside the parameter schema, so nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so date, brand and segment semantics (defaults, 180-day window, ID-or-name resolution) are already fully documented in the schema; the baseline is 3. The only added meaning is 'A segment filters the answer metrics', a marginal clarification of the segment parameter's effect.

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 verb+resource ('The brand's Overview in one call') and enumerates the returned dimensions: visibility, share of voice, recommendation, competitor standing, readiness, traffic, inbox and Content Studio status. It explicitly names the siblings it is not (get_perception, list_citations, get_ai_traffic, get_readiness), so an agent can distinguish aggregation from single-slice tools 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?

Gives explicit routing: 'For one slice in depth use get_perception, list_citations, get_ai_traffic or get_readiness' — the condition (single-slice depth vs. all-in-one) that selects the alternative is named. It does not state a when-not case or prerequisites, which keeps it 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.

Resources