Skip to main content
Glama

SEO GSC Wizard MCP

Detect traffic change points

detect_change_points
Read-only

Use this when the user asks when a property's clicks or impressions moved to a new sustained level (a step, e.g. after a migration, algorithm update or redesign): returns each break's before vs after average and % change, oldest first. Not for one-off spikes: use detect_anomalies; for totals use get_site_summary. Each date is the first day of the new level; breaks at least 14 days apart are found separately. Days without rows count as zero, so a drop to zero (deindexing) is a change point; coverage says how an empty tail was treated. beforeMean and afterMean are the daily means of the full segments either side of the break (to the neighbouring breaks or the series ends), and segmentBefore and segmentAfter date those segments. A gradual trend has no step, so read trendSummary (first vs last 14 days) and, on an empty result, emptyBecause, strongestShift or strongestShiftReason, and any nextStep. Reads the ClickHouse warehouse when available, else the live Search Console API. When a shift starts from a zero baseline (beforeMean 0) it has no percentage: changePercent is 0 by convention, which does not mean no change; describe it as new traffic from zero using afterMean. Each change point has a shape: step (at once), gradual (over rampStartDate to rampEndDate) or ambiguous (the data cannot tell at once from over several weeks); describe a gradual or ambiguous one as nextStep words it, never as a one-day event.

Input Schema

NameRequiredDescriptionDefault
daysNoTrailing days of daily data to analyze (min 14, default 180). Ignored when startDate is given; with endDate alone, the window is `days` long and ends there.
metricNoWhich metric to segment.clicks
endDateNoOptional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string "null".
siteUrlYes
startDateNoOptional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date: omit both startDate and endDate to analyze the trailing `days` window ending at the latest settled date. Pass it with endDate to read a fixed window, for example to reproduce an earlier result; passed alone, the window runs from here to the latest settled date. The window must span 14 to 480 days. Never pass null or the string "null".
sensitivityNoA break is kept when its shift exceeds sensitivity + 1.6 standard errors of the day-to-day noise inside the segments: lower = more sensitive (more change points). Default 2.

Output Schema

NameRequiredDescriptionDefault
noteNo
countNo
rangeNo
metricNo
thenByNo
listKeyNoName of the top-level field that holds the rows sortedBy describes.
siteUrlNo
warningNo
coverageNo
nextStepNo
orderingNo
sortedByNo
sortOrderNo
thenOrderNo
dataSourceNo
partialDaysNo
sensitivityNo
changePointsNo
dataMaturityNo
emptyBecauseNo
methodLimitsNo
trendSummaryNoOverall movement, present even when count is 0: first vs last 14-day means, their ratio (null from zero: fromZero), slopePerDay, direction (up / down past 10% and count noise, else flat) and halfwayDate for a 1.5x+ move.
settledThroughNo
strongestShiftNoAlways present. On an empty result, the strongest split: stdDevs is its score in sensitivity units (the name predates the 2026-10 method), and a rerun with sensitivity stdDevs reports it when nextStep offers that rerun. Null otherwise, with strongestShiftReason saying why.
warehouseLatestDateNo
strongestShiftReasonNoPresent exactly when strongestShift is null: no_data (no rows), too_short (under 14 calendar days), constant (every day equal), change_points_found (the result is not empty), edge_start / edge_end (the strongest split sits on the first or last day a break can fall on, so it cannot be dated), trend (a straight line explains it) or small_shift (under 10%).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed12 schema fields changed
    • changedInput schema / properties / sensitivity / description
      Previous value: -"Mean-shift threshold in std-devs: lower = more sensitive (more change points). Default 2."New value: +"A break is kept when its shift exceeds sensitivity + 1.6 standard errors of the day-to-day noise inside the segments: lower = more sensitive (more change points). Default 2."
    • addedOutput schema / properties / changePoints / items / properties / afterMean / description
      Added value: +"Daily mean of the whole segment from the break on, rounded; segmentAfter dates it."
    • addedOutput schema / properties / changePoints / items / properties / beforeMean / description
      Added value: +"Daily mean of the whole segment before the break, rounded; segmentBefore dates it."
    • addedOutput schema / properties / changePoints / items / properties / rampDays
      Added value: +{
      +  "$ref": "#/properties/sensitivity",
      +  "description": "Gradual only: length in days of the best-fitting transition."
      +}
    • addedOutput schema / properties / changePoints / items / properties / rampEndDate
      Added value: +{
      +  "$ref": "#/properties/siteUrl",
      +  "description": "Gradual only: last day of that transition."
      +}
    • addedOutput schema / properties / changePoints / items / properties / rampStartDate
      Added value: +{
      +  "$ref": "#/properties/siteUrl",
      +  "description": "Gradual only: first day of that transition."
      +}
    • addedOutput schema / properties / changePoints / items / properties / score
      Added value: +{
      +  "$ref": "#/properties/sensitivity",
      +  "description": "Strength of the break in sensitivity units (its shift in standard errors less 1.6, capped at 99): kept because it exceeds the sensitivity."
      +}
    • addedOutput schema / properties / changePoints / items / properties / shape
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "step",
      +        "gradual",
      +        "ambiguous"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "How the level moved: step (at once), gradual (over the ramp dated by rampStartDate to rampEndDate; date is near its middle) or ambiguous (the data cannot tell at once from over several weeks, common on small sites). Word the change accordingly."
      +}
    • removedOutput schema / properties / changePoints / items / properties / windowDays
      Removed value: -{
      -  "$ref": "#/properties/sensitivity",
      -  "description": "Days in each of the beforeMean / afterMean windows, not the whole period."
      -}
    • addedOutput schema / properties / listKey
      Added value: +{
      +  "$ref": "#/properties/siteUrl",
      +  "description": "Name of the top-level field that holds the rows sortedBy describes."
      +}
    • changedOutput schema / properties / strongestShift / description
      Previous value: -"Empty result only: the strongest shift; rerunning with sensitivity stdDevs reports it. Absent when it peaks on the first or last day the detector tests, where it cannot be dated; emptyBecause says so."New value: +"Always present. On an empty result, the strongest split: stdDevs is its score in sensitivity units (the name predates the 2026-10 method), and a rerun with sensitivity stdDevs reports it when nextStep offers that rerun. Null otherwise, with strongestShiftReason saying why."
    • addedOutput schema / properties / strongestShiftReason
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "no_data",
      +        "too_short",
      +        "constant",
      +        "change_points_found",
      +        "edge_start",
      +        "edge_end",
      +        "trend",
      +        "small_shift"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Present exactly when strongestShift is null: no_data (no rows), too_short (under 14 calendar days), constant (every day equal), change_points_found (the result is not empty), edge_start / edge_end (the strongest split sits on the first or last day a break can fall on, so it cannot be dated), trend (a straight line explains it) or small_shift (under 10%)."
      +}
  2. Changed25 schema fields changed
    • changedInput schema / properties / days / description
      Previous value: -"Trailing days of daily data to analyze (min 14, default 180)."New value: +"Trailing days of daily data to analyze (min 14, default 180). Ignored when startDate is given; with endDate alone, the window is `days` long and ends there."
    • addedInput schema / properties / endDate
      Added value: +{
      +  "description": "Optional. Window end as YYYY-MM-DD (e.g. 2026-05-31). You do NOT need to know today's date or the latest available date: omit this and the server uses the latest settled Search Console date (data lags ~2-3 days behind today). Never pass null or the string \"null\".",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
    • addedInput schema / properties / startDate
      Added value: +{
      +  "description": "Optional. Window start as YYYY-MM-DD (e.g. 2026-05-03). You do NOT need to know today's date: omit both startDate and endDate to analyze the trailing `days` window ending at the latest settled date. Pass it with endDate to read a fixed window, for example to reproduce an earlier result; passed alone, the window runs from here to the latest settled date. The window must span 14 to 480 days. Never pass null or the string \"null\".",
      +  "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +  "type": "string"
      +}
    • changedOutput schema / additionalProperties
      Previous value: -falseNew value: +true
    • changedOutput schema / properties / changePoints / items / additionalProperties
      Previous value: -falseNew value: +true
    • addedOutput schema / properties / changePoints / items / properties / segmentAfter
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "properties": {
      +        "days": {
      +          "$ref": "#/properties/sensitivity"
      +        },
      +        "endDate": {
      +          "$ref": "#/properties/siteUrl"
      +        },
      +        "startDate": {
      +          "$ref": "#/properties/siteUrl"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / changePoints / items / properties / segmentBefore
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "properties": {
      +        "days": {
      +          "$ref": "#/properties/sensitivity"
      +        },
      +        "endDate": {
      +          "$ref": "#/properties/siteUrl"
      +        },
      +        "startDate": {
      +          "$ref": "#/properties/siteUrl"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / changePoints / items / properties / segmentMeanAfter
      Added value: +{
      +  "$ref": "#/properties/sensitivity"
      +}
    • addedOutput schema / properties / changePoints / items / properties / segmentMeanBefore
      Added value: +{
      +  "$ref": "#/properties/sensitivity"
      +}
    • addedOutput schema / properties / changePoints / items / properties / windowDays
      Added value: +{
      +  "$ref": "#/properties/sensitivity",
      +  "description": "Days in each of the beforeMean / afterMean windows, not the whole period."
      +}
    • changedOutput schema / properties / coverage / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "calendarDays": {
      -        "$ref": "#/properties/sensitivity"
      -      },
      -      "daysWithData": {
      -        "$ref": "#/properties/sensitivity"
      -      },
      -      "firstDataDate": {
      -        "$ref": "#/properties/siteUrl"
      -      },
      -      "lastDataDate": {
      -        "$ref": "#/properties/siteUrl"
      -      },
      -      "trailingGap": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "lastDataDate": {
      -                "$ref": "#/properties/siteUrl"
      -              },
      -              "missingDays": {
      -                "$ref": "#/properties/sensitivity"
      -              },
      -              "note": {
      -                "$ref": "#/properties/siteUrl"
      -              },
      -              "status": {
      -                "$ref": "#/properties/siteUrl"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "zeroFilledDays": {
      -        "$ref": "#/properties/sensitivity"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "calendarDays": {
      +        "$ref": "#/properties/sensitivity"
      +      },
      +      "daysWithData": {
      +        "$ref": "#/properties/sensitivity"
      +      },
      +      "firstDataDate": {
      +        "$ref": "#/properties/siteUrl"
      +      },
      +      "lastDataDate": {
      +        "$ref": "#/properties/siteUrl"
      +      },
      +      "trailingGap": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": true,
      +            "properties": {
      +              "lastDataDate": {
      +                "$ref": "#/properties/siteUrl"
      +              },
      +              "missingDays": {
      +                "$ref": "#/properties/sensitivity"
      +              },
      +              "note": {
      +                "$ref": "#/properties/siteUrl"
      +              },
      +              "status": {
      +                "$ref": "#/properties/siteUrl"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "zeroFilledDays": {
      +        "$ref": "#/properties/sensitivity"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / dataMaturity / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "dateBasis": {
      -        "$ref": "#/properties/siteUrl"
      -      },
      -      "firstIncompleteDate": {
      -        "$ref": "#/properties/siteUrl"
      -      },
      -      "note": {
      -        "$ref": "#/properties/siteUrl"
      -      },
      -      "probe": {
      -        "anyOf": [
      -          {
      -            "additionalProperties": false,
      -            "properties": {
      -              "dataState": {
      -                "$ref": "#/properties/siteUrl"
      -              },
      -              "endDate": {
      -                "$ref": "#/properties/siteUrl"
      -              },
      -              "searchType": {
      -                "$ref": "#/properties/siteUrl"
      -              },
      -              "startDate": {
      -                "$ref": "#/properties/siteUrl"
      -              }
      -            },
      -            "type": "object"
      -          },
      -          {
      -            "type": "null"
      -          }
      -        ]
      -      },
      -      "settledThrough": {
      -        "$ref": "#/properties/siteUrl"
      -      },
      -      "source": {
      -        "$ref": "#/properties/siteUrl"
      -      },
      -      "warehouseCutoff": {
      -        "$ref": "#/properties/siteUrl"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "dateBasis": {
      +        "$ref": "#/properties/siteUrl"
      +      },
      +      "firstIncompleteDate": {
      +        "$ref": "#/properties/siteUrl"
      +      },
      +      "note": {
      +        "$ref": "#/properties/siteUrl"
      +      },
      +      "probe": {
      +        "anyOf": [
      +          {
      +            "additionalProperties": true,
      +            "properties": {
      +              "dataState": {
      +                "$ref": "#/properties/siteUrl"
      +              },
      +              "endDate": {
      +                "$ref": "#/properties/siteUrl"
      +              },
      +              "searchType": {
      +                "$ref": "#/properties/siteUrl"
      +              },
      +              "startDate": {
      +                "$ref": "#/properties/siteUrl"
      +              }
      +            },
      +            "type": "object"
      +          },
      +          {
      +            "type": "null"
      +          }
      +        ]
      +      },
      +      "settledThrough": {
      +        "$ref": "#/properties/siteUrl"
      +      },
      +      "source": {
      +        "$ref": "#/properties/siteUrl"
      +      },
      +      "warehouseCutoff": {
      +        "$ref": "#/properties/siteUrl"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / emptyBecause
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / methodLimits
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / nextStep
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / ordering
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": {
      +        "additionalProperties": true,
      +        "properties": {
      +          "sortOrder": {
      +            "$ref": "#/properties/siteUrl"
      +          },
      +          "sortedBy": {
      +            "$ref": "#/properties/siteUrl"
      +          },
      +          "thenBy": {
      +            "$ref": "#/properties/siteUrl"
      +          },
      +          "thenOrder": {
      +            "$ref": "#/properties/siteUrl"
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / partialDays
      Added value: +{
      +  "anyOf": [
      +    {
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / range / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "days": {
      -        "$ref": "#/properties/sensitivity"
      -      },
      -      "endDate": {
      -        "$ref": "#/properties/siteUrl"
      -      },
      -      "startDate": {
      -        "$ref": "#/properties/siteUrl"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": true,
      +    "properties": {
      +      "days": {
      +        "$ref": "#/properties/sensitivity"
      +      },
      +      "endDate": {
      +        "$ref": "#/properties/siteUrl"
      +      },
      +      "startDate": {
      +        "$ref": "#/properties/siteUrl"
      +      }
      +    },
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedOutput schema / properties / sortOrder
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / sortedBy
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / strongestShift
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "properties": {
      +        "date": {
      +          "$ref": "#/properties/siteUrl"
      +        },
      +        "stdDevs": {
      +          "$ref": "#/properties/sensitivity"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Empty result only: the strongest shift; rerunning with sensitivity stdDevs reports it. Absent when it peaks on the first or last day the detector tests, where it cannot be dated; emptyBecause says so."
      +}
    • addedOutput schema / properties / thenBy
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / thenOrder
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
    • addedOutput schema / properties / trendSummary
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": true,
      +      "properties": {
      +        "direction": {
      +          "$ref": "#/properties/siteUrl"
      +        },
      +        "excludedUnsettledDays": {
      +          "$ref": "#/properties/sensitivity"
      +        },
      +        "firstMean14d": {
      +          "$ref": "#/properties/sensitivity"
      +        },
      +        "firstWindow": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": true,
      +              "properties": {
      +                "endDate": {
      +                  "$ref": "#/properties/siteUrl"
      +                },
      +                "startDate": {
      +                  "$ref": "#/properties/siteUrl"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "fromZero": {
      +          "type": [
      +            "boolean",
      +            "null"
      +          ]
      +        },
      +        "halfwayDate": {
      +          "$ref": "#/properties/siteUrl"
      +        },
      +        "lastMean14d": {
      +          "$ref": "#/properties/sensitivity"
      +        },
      +        "lastWindow": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": true,
      +              "properties": {
      +                "endDate": {
      +                  "$ref": "#/properties/siteUrl"
      +                },
      +                "startDate": {
      +                  "$ref": "#/properties/siteUrl"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "ratio": {
      +          "$ref": "#/properties/sensitivity"
      +        },
      +        "slopePerDay": {
      +          "$ref": "#/properties/sensitivity"
      +        },
      +        "windowDays": {
      +          "$ref": "#/properties/sensitivity"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Overall movement, present even when count is 0: first vs last 14-day means, their ratio (null from zero: fromZero), slopePerDay, direction (up / down past 10% and count noise, else flat) and halfwayDate for a 1.5x+ move."
      +}
    • addedOutput schema / properties / warning
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
  3. Changed2 schema fields changed
    • addedOutput schema / properties / coverage
      Added value: +{
      +  "anyOf": [
      +    {
      +      "additionalProperties": false,
      +      "properties": {
      +        "calendarDays": {
      +          "$ref": "#/properties/sensitivity"
      +        },
      +        "daysWithData": {
      +          "$ref": "#/properties/sensitivity"
      +        },
      +        "firstDataDate": {
      +          "$ref": "#/properties/siteUrl"
      +        },
      +        "lastDataDate": {
      +          "$ref": "#/properties/siteUrl"
      +        },
      +        "trailingGap": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": false,
      +              "properties": {
      +                "lastDataDate": {
      +                  "$ref": "#/properties/siteUrl"
      +                },
      +                "missingDays": {
      +                  "$ref": "#/properties/sensitivity"
      +                },
      +                "note": {
      +                  "$ref": "#/properties/siteUrl"
      +                },
      +                "status": {
      +                  "$ref": "#/properties/siteUrl"
      +                }
      +              },
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "zeroFilledDays": {
      +          "$ref": "#/properties/sensitivity"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / warehouseLatestDate
      Added value: +{
      +  "$ref": "#/properties/siteUrl"
      +}
  4. First observed

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the readOnly/openWorld annotations it discloses data-source fallback (ClickHouse when available, else live Search Console API), the 14-day spacing rule for separate breaks, zero-fill semantics for missing rows, and the changePercent-is-0-from-zero-baseline convention that would otherwise be misread. The shape taxonomy (step/gradual/ambiguous) and instruction never to describe a gradual break as a one-day event is exactly the kind of interpretive guardrail annotations cannot carry.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loading is strong: intent, exclusions, then output semantics. But it is a single dense block that drifts into explaining return fields (beforeMean, segmentAfter, coverage, emptyBecause) that the output schema already documents, so several sentences are duplicative rather than additive.

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?

Covers what an agent needs to call and interpret the tool: window behavior, source fallback, zero-baseline handling, and the gradual-vs-ambiguous caveat. Slight over-completeness given the output schema exists, but no critical gap remains.

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 coverage is 83%, so the schema already defines days, metric, startDate/endDate and sensitivity in detail. The description adds no parameter-specific syntax or defaults beyond implying the 14-day minimum via break spacing; it spends its parameter budget on output interpretation instead.

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 and resource ('detect change points' in clicks/impressions that moved to a sustained level) and immediately names the sibling it is not ('Not for one-off spikes: use detect_anomalies; for totals use get_site_summary'). An agent can route on the first sentence alone.

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?

Gives an explicit triggering user intent ('when the user asks when a property's clicks or impressions moved to a new sustained level'), two named alternatives with the conditions that select them, plus a fallback path when no step exists (read trendSummary, emptyBecause, strongestShiftReason).

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