Skip to main content
Glama

list_cohort_moves

Read-only

List bulk AP migrations

Detected bulk migrations between Access Points, largest first. A cohort is a gap-≤3-day island of (from_provider, to_provider) mover days that clears three thresholds: at least 25 participants, at least 40 % of them on the busiest day (which rejects a steady drip), and at most 20 active days for the pair over the trailing 40 days (which rejects a recurring partnership).

Every day is the PROBE-OBSERVATION day — the day the change scan saw the SMP record change, not the day the migration was executed — so a cohort is always a [first_day, last_day] range and peak_day is the busiest observation day. Render the range, never a single date.

top_country is derived from the ICD prefix of the participant identifiers, not from business-card country fields. merge_suspect marks a cohort large enough (or whose source provider no longer resolves in the directory) to be a provider merge or a renamed provider rather than that many independent customer decisions — the canonical case is Sovos → Sage, 10,574 participants. Such rows are data events, not customer decisions; verify one before quoting it. The flag is a CURRENT judgment, re-evaluated on every recompute, not frozen at detection.

PLATFORM MOVES. A mover is a platform move when the platform that serves the participant stayed and only the certificate Seat changed: it is not a customer decision. The verdict is per DIRECTED provider pair (from → to), over all its movers since 2026-08-02, with one of two reasons (same_host, sub_provider): at least 90% of the movers whose endpoint host can be compared (5 or more, and at least 50% of all movers of the pair) kept their endpoint host, or at least 90% of 25 or more movers still carry, at the new provider, the sub-provider brand of the provider they left. It is a CURRENT judgment, computed again on every rollup cycle. A cohort of such a pair has platform_move: true. It stays in the list. A Vendor's cohorts (provider=v-<slug>) are not changed and have no platform_move.

from/to are OVERLAP bounds (a cohort counts when its range intersects the window), defaulting to the trailing 90 days the detector re-clusters. Mover history begins 2026-07-24, so no cohort predates it. id is a request-lifetime handle for the participant drill-down — never persist one.

Input Schema

NameRequiredDescriptionDefault
toNoInclusive upper bound of the observation window (`YYYY-MM-DD` UTC); a cohort matches when its `first_day` is at or before it. Defaults to today.
fromNoInclusive lower bound of the observation window (`YYYY-MM-DD` UTC); a cohort matches when its `last_day` is at or after it. Defaults to 90 days ago.
limitNoPage size, clamped to [1, 200]. Defaults to 50.
cursorNoOpaque pagination cursor returned as `next_cursor` by the previous page.
providerNoOnly cohorts involving this Provider key (`/v1/aps/{key}`). Matches EITHER side unless `direction` narrows it. A Vendor key (`v-<slug>`) returns the cohorts of that Vendor's movers instead: each item has `kind: "vendor"`, one side of the pair is the Vendor, and the floor is 5 participants. Vendor cohorts are in no other response of this endpoint.
directionNoWhich side of the `provider` filter to take: `in` = cohorts the provider received, `out` = cohorts it lost, `both` = either. Only meaningful together with `provider`.both
merge_suspectNoHow to treat probable provider merges / slug changes: `include` (default), `exclude` for real customer migrations only, or `only` to review the flagged rows.include
min_participantsNoOnly cohorts with at least this many participants. The detector's own floor is 25, so a lower value cannot surface smaller groups. With a Vendor key as `provider` the floor and the default are 5.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / min_participants / description
      Previous value: -"Only cohorts with at least this many participants. The detector's own floor is 25, so a lower value cannot surface smaller groups."New value: +"Only cohorts with at least this many participants. The detector's own floor is 25, so a lower value cannot surface smaller groups. With a Vendor key as `provider` the floor and the default are 5."
    • changedInput schema / properties / provider / description
      Previous value: -"Only cohorts involving this Provider key (`/v1/aps/{key}`). Matches EITHER side unless `direction` narrows it."New value: +"Only cohorts involving this Provider key (`/v1/aps/{key}`). Matches EITHER side unless `direction` narrows it. A Vendor key (`v-<slug>`) returns the cohorts of that Vendor's movers instead: each item has `kind: \"vendor\"`, one side of the pair is the Vendor, and the floor is 5 participants. Vendor cohorts are in no other response of this endpoint."
  2. Added

TDQS

A4.6/5.0
Behavior5/5

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

With only readOnlyHint available, the description carries the full behavioral burden and does so extensively: the three cohort thresholds, PROBE-OBSERVATION day semantics, top_country derivation from ICD prefixes, merge_suspect as a re-evaluated CURRENT judgment with the Sovos→Sage canonical case, per-directed-pair platform_move rules with same_host/sub_provider reasons, and that `id` is request-lifetime and must never be persisted. This far exceeds what the lone annotation provides.

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?

Front-loaded with purpose and ordering before any rule detail, and nearly every sentence carries non-obvious domain semantics rather than filler. It is nonetheless a dense five-paragraph block; a few clauses (e.g., the platform-move threshold math) are heavier than an invocation decision strictly requires.

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 an 8-parameter, no-output-schema, all-optional read tool, the definition covers ordering ('largest first'), pagination via cursor, the item fields an agent must interpret (range, peak_day, top_country, merge_suspect, platform_move, kind), and the vendor-cohort edge case. Nothing needed to call it correctly is 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 already 100%, so the baseline is 3, but the description adds real meaning on top: `from`/`to` are characterized as OVERLAP bounds that intersect the cohort range, mover history's hard floor of 2026-07-24 constrains valid `from` values, and the Vendor-key behavior of `provider` (kind: vendor, floor of 5) is spelled out. Modest but genuine value beyond the schema text.

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?

Opens with a specific verb+resource ('List bulk AP migrations') and immediately defines what the returned entities are ('Detected bulk migrations between Access Points, largest first'), including the cohort formation rule. An agent can distinguish this from sibling listers like list_cohort_move_participants (the drill-down) or get_provider_moves 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 clear operating context: the window defaults to the trailing 90 days the detector re-clusters, merge_suspect rows should be verified before quoting, and 'exclude' is for real customer migrations only. It implies the participant drill-down companion via the request-lifetime `id`, but it never explicitly names an alternative sibling tool or states a when-not-to-use condition, so it stops 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