Gamebeast
Server Details
Analytics, A/B tests, remote configs and player sentiment for games and apps, run by your AI agent.
- Status
- Healthy
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 85 tools
Most tools map to distinct resource+action pairs thanks to very detailed descriptions, but the surface is so large that near-neighbors exist: run_insight_query vs execute_query vs create_insight_query, get_query vs list_queries, get_community_pulse vs query_sentiment, and four parallel query-type families that differ only by query type. An agent can tell them apart with careful reading, but misselection risk is real in a set this size.
Names are uniformly snake_case verb_noun (list_, get_, create_, update_, delete_, run_, add_, remove_), with parallel families per query type and resource. Minor deviations like ensure_sdk_key, describe_event_types, and preview_* verbs break the strictest pattern but remain readable and predictable.
85 tools is far beyond the 3-15 sweet spot and beyond even the 25+ 'too many' band. The four query types alone generate run/create/update/delete quads, plus dashboards, panels, folders, experiments, cohorts, configs, sentiment, docs, and deeplinks, so tool choice is a search problem rather than a lookup.
Coverage is unusually broad and lifecycle-complete: full CRUD on dashboards, panels, folders, queries, formulas, configurations, cohorts, experiments (create/update/terminate), plus read-only analytics, sentiment, deeplinks, docs, and tracking plans. Minor gaps exist (no experiment delete/edit, heatmaps are read-only by design, no deeplink management), but agents can work around them.
Available Tools
85 toolsadd_heading_panelAInspect
Add a section heading to a dashboard: one line of plain text, drawn without a card, that titles the panels below it (default 24x1, the full width). Appended in reading order unless gridPos places it. Saved when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The heading, as plain text (no markdown), e.g. 'Economy' or 'Week-1 retention'. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| gridPos | No | Position and size on the 24-column grid. Sizing guide: KPI stat 6x4, wide chart 16x9, table 8x9, two charts side by side 12x8 each, section heading 24x1 (markdown heading). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The dashboard to add the section heading to. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare write/non-idempotent/non-destructive; the description adds real value beyond that by saying the change is saved immediately when the tool runs and that a human-readable reason appears on an approval card. It does not describe post-write response shape, but the persistence and approval semantics are useful disclosures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with the core purpose front-loaded, followed by layout and prerequisite details. Every clause carries information, though the middle sentence packs default sizing, append order, save-on-run, and the reason field together in a slightly run-on way.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating dashboard-panel tool with 6 parameters (including nested gridPos) and no output schema, the description covers the prerequisite skill, default layout, immediate persistence, and approval-card reason. Nothing essential for correct invocation is missing, though an explicit contrast with add_markdown_panel would complete the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 still adds meaning beyond the schema by stating the default size (24x1, full width), the default placement (appended in reading order), and that text is plain text without markdown — clarifying how the optional and required string parameters behave, not just their types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Add a section heading to a dashboard') and then defines exactly what that resource is: 'one line of plain text, drawn without a card, that titles the panels below it.' That visual/structural definition cleanly separates it from add_markdown_panel and add_query_to_dashboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear pre-condition (load the manage-dashboards skill via load_skill first) and explains placement behavior: appended in reading order unless gridPos overrides it. It does not explicitly contrast itself with add_markdown_panel, which is the closest ambiguous alternative, so it stops short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_markdown_panelAInspect
Add a markdown text panel to a dashboard: a card of notes explaining the charts around it (default 6x8). For a section title use add_heading_panel instead. Appended in reading order unless gridPos places it. Saved when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| content | Yes | Markdown text. Headings, lists, links, tables and bold/italic render; raw HTML does not. Images must be uploaded dashboard images (board-image:<id>, from an existing image panel). | |
| gridPos | No | Position and size on the 24-column grid. Sizing guide: KPI stat 6x4, wide chart 16x9, table 8x9, two charts side by side 12x8 each, section heading 24x1 (markdown heading). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The dashboard to add the text panel to. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes beyond the annotations by disclosing placement behavior ("Appended in reading order unless gridPos places it") and persistence ("Saved when this runs"), plus the human-facing effect of reason on an approval card. With readOnlyHint=false and idempotentHint=false already declared, this is meaningful added context, though it doesn't say what is returned or what happens on a failed/invalid content save.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, each doing distinct work: purpose, sibling exclusion, placement default, persistence plus reason guidance, and the skill prerequisite. Purpose and the exclusion are front-loaded, and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with a nested gridPos object, the description covers purpose, alternative, placement defaults, persistence, and the required skill. The only gap is the absence of any return-value note, which matters slightly since there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema lacks: the default 6x8 panel size and the default placement order that applies when gridPos is omitted. That clarifies the optionality and consequences of gridPos beyond its own field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Add a markdown text panel to a dashboard") and immediately clarifies what that resource is ("a card of notes explaining the charts around it"). It also names the sibling it is not — add_heading_panel — so an agent can distinguish the two without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when-not guidance: "For a section title use add_heading_panel instead." Adds a prerequisite (load the manage-dashboards skill first) and a call-convention (explain it in reason), covering both selection and invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_query_to_dashboardAIdempotentInspect
Show an existing saved query on a dashboard as a panel (a query can be on several dashboards). Defaults to a 12x8 panel appended in reading order; position inserts it among the query panels, gridPos places and sizes it. To save a new chart, use create__query with dashboardId instead. Saved when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| gridPos | No | Position and size on the 24-column grid. Sizing guide: KPI stat 6x4, wide chart 16x9, table 8x9, two charts side by side 12x8 each, section heading 24x1 (markdown heading). | |
| queryId | Yes | An existing saved query (from list_queries). | |
| position | No | 0-based position among the dashboard's query panels in reading order (0 = first). Omit to append. A query already on the dashboard is moved here. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The dashboard to add the query to. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses that the change is persisted immediately ('Saved when this runs'), that the user will see a reason on an approval card, and that re-adding an existing query moves it rather than duplicating — which is exactly what makes the idempotent hint meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then defaults, then the alternative tool, then the prerequisite — a logical order with no filler. It is dense (multiple clauses packed into two sentences), but every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating, nested-parameter tool with no output schema, the description covers prerequisites, persistence semantics, placement defaults, and the competing tool. The only small gap is that it doesn't hint at what the call yields (e.g. the created panel identifier), which matters slightly more given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns extra credit by explaining the interaction between the optional parameters: position inserts among query panels in reading order, gridPos overrides placement and sizing, and omitting everything gives a default 12x8 appended panel. That precedence is not stated anywhere in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Show an existing saved query on a dashboard as a panel') and immediately clarifies the one-to-many relationship. It is clearly distinguishable from create_<queryType>_query and remove_query_from_dashboard without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent away from this tool when a new chart is needed ('To save a new chart, use create_<queryType>_query with dashboardId instead') and states a prerequisite ('Load the manage-dashboards skill ... first'). It also explains the default versus explicit placement behavior, so the agent knows which path to take.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assign_experiment_unitAIdempotentInspect
Change one unit's (player's or server's) place in an experiment: pin it to a group (assign), remove a pin (clear_override), take it out of the experiment (unenroll), or put it back (reactivate). Use for QA (put a tester in the treatment) or to exclude a unit. Applies when this runs and takes effect on the unit's next configuration fetch. Only works on scheduled or active experiments. Check the unit's current state with list_experiment_members first. Load the manage-experiments skill (load_skill("manage-experiments")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | `assign`: pin the unit to groupId, overriding the automatic group. `clear_override`: remove a pin so the automatic group applies again. `unenroll`: take the unit out of the experiment (it gets the base configuration). `reactivate`: undo an unenroll. | |
| reason | Yes | Why this is being done, in one or two sentences a reviewer can judge it by. Shown to the approver. | |
| groupId | No | Required for `assign` only. | |
| unitType | Yes | Must match the experiment's unit type. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| distinctId | Yes | The unit id: the player's user id for user experiments, the server's JobId for server ones. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| experimentId | Yes | ||
| ignoreExclusion | No | For `assign` and `reactivate`: place the unit even though it is enrolled across an experiment-exclusion boundary. Only when the user explicitly asks to override it. | |
| ignoreTargeting | No | For `assign`: pin the unit even if it does not match the targeting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare write, idempotent, non-destructive, but say nothing about timing or preconditions. The description adds that the change applies immediately but takes effect on the unit's next configuration fetch, restricts to scheduled/active experiments, and implies an approval workflow via the reviewer-facing reason field — all behavior an agent needs and none of it is in the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and its four modes, then prerequisites, then timing. Every sentence carries information, though the action enumeration partially duplicates the enum descriptions already present in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 parameters, no output schema, and a mutation that affects live experiment membership, the description covers preconditions, propagation timing, and the workflow entry points. It leaves unstated what the caller gets back and how failures (e.g. unit type mismatch, wrong experiment state) surface, which is the main residual gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 90% and the schema already defines the action enum, groupId's 'required for assign only' rule, the unitType/environment constraints, and the ignore* flags. The description restates the action modes compactly but adds no meaning to the one undocumented parameter (experimentId) and no format details beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Change one unit's place in an experiment') and then enumerates the four distinct modes (assign, clear_override, unenroll, reactivate) in plain language. An agent can distinguish this from siblings like update_experiment_rollout or terminate_experiment without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete use cases ('Use for QA (put a tester in the treatment) or to exclude a unit'), a precondition ('Only works on scheduled or active experiments'), a prerequisite read ('Check the unit's current state with list_experiment_members first'), and a required skill load. When-to-use and alternatives are explicit rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_cohortAInspect
Save a new cohort (player segment) in the current project, with an optional description of who is in it. Check list_cohorts first (names are unique) and dry-run the definition with run_cohort_definition so you can report its member count. Saved when this runs; explain it in reason. Load the manage-cohorts, cohorts skills (load_skill("manage-cohorts"), load_skill("cohorts")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Cohort name, unique within the project (e.g. 'Whales — 5+ purchases ever'). | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| definition | Yes | The cohort definition AST — blocks (OR'd) of groups (AND'd) of conditions. See the cohorts skill. | |
| description | No | Plain-language description of who is in the cohort (including the time window) and what it is for, in one or two sentences. Always write one from the definition, even when the user did not ask for it. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=false, and the description reinforces this with 'Saved when this runs', so the mutation is explicit. It also discloses the uniqueness constraint on names (a failure mode) and that reason is surfaced on an approval card. It stops short of covering permissions, error behavior on duplicate names, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four front-loaded sentences, with the save action and the uniqueness/dry-run prerequisites leading. The final sentence stacking two load_skill calls is slightly cluttered but every sentence carries actionable instruction.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The definition parameter is a deeply nested AST, so the description wisely delegates to the cohorts skill and the dry-run tool instead of restating the schema, which is appropriate. With no output schema, it still tells the agent to derive the member count via run_cohort_definition, leaving little an agent needs missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents name, reason, projectId, definition, description and environment in detail. The description adds only marginal framing ('explain it in reason', 'optional description'), and calling description 'optional' sits slightly against the schema's 'Always write one', which muddies rather than clarifies. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Save a new cohort (player segment) in the current project'. The word 'new' implicitly separates it from the sibling update_cohort, and the parenthetical gloss makes the domain object unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit pre-flight workflow: check list_cohorts first because names are unique, then dry-run with run_cohort_definition to obtain the member count, and load the manage-cohorts/cohorts skills before calling. That is real when-to-use and how-to-prepare guidance rather than an implied usage note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_configurationAInspect
Create a new configuration in this project environment, optionally with initial JSON content. Names must be unique — call list_configurations first. The new configuration is not primary, so nothing reaches game servers until it is made primary (set_primary_configuration) or read by alias. Private keys can be set with privateKeys (hidden from game clients, not from the dashboard — for values like a random seed, not secrets); comments cannot. The configuration is created when this runs. Always explain the change in reason; it is recorded with the change.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the new configuration. Must be unique within the project environment. | |
| reason | Yes | Why this change is being made, in one or two sentences a reviewer can judge it by. Shown to the approver. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| description | No | Description shown in the dashboard: what the configuration controls and what it is for, in one or two sentences. Always write one, even when the user did not ask for it. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| privateKeys | No | Up to 50 key paths in the initial content to mark private (hidden from game clients, not from the dashboard). | |
| configuration | No | Initial JSON content. The top level must be an object. Defaults to {}. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the key lifecycle fact that the new configuration is not primary and therefore does not reach game servers until promoted or read by alias. It also bounds the security meaning of privateKeys (hidden from game clients but visible in the dashboard, unsuitable for real secrets) and notes the audit behavior of 'reason'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Dense but front-loaded: creation, uniqueness, primary-status consequence, privateKeys caveat, then the reason requirement. Nearly every clause earns its place, though 'The configuration is created when this runs' is close to tautological and could be folded into the primary-status sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation with full schema coverage and no output schema, the description covers the important operational context: uniqueness, activation gate, private-key scope, and audit reason. The only gap is that it never hints at what comes back (e.g. the new configuration's identifier) for use in follow-up calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description earns above that by adding constraints the schema does not state, such as 'comments cannot' be private and that privateKeys is for values like a random seed rather than secrets. It adds the naming uniqueness contract and the mandate to always write a description even when unasked.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new configuration in this project environment, optionally with initial JSON content') and implicitly separates it from update_configuration, get_configuration, and list_configurations by describing creation-time semantics. An agent can tell what it produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite ('Names must be unique — call list_configurations first') and explains the downstream alternative for activation ('set_primary_configuration'). It does not explicitly contrast create vs. update/duplicate for an existing configuration, so it falls short of a full when/when-not guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dashboardAInspect
Create a new analytics dashboard, optionally showing existing saved queries (in order). Check list_dashboards first so the name is not taken. To put new charts on it, create the dashboard, then save each chart with create_insight_query / create_funnel_query / create_retention_query and its dashboardId. Created when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | Lucide icon name in kebab-case, e.g. 'chart-line', 'coins', 'users', 'rocket'. | |
| name | Yes | Dashboard name. Must be unique in the project. | |
| color | No | Hex color, e.g. '#3b82f6'. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| folderId | No | Folder to create it in (from list_dashboard_folders). Omit for the top level. | |
| queryIds | No | Existing saved queries to show on it, in display order. Omit for an empty dashboard. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| description | No | Plain-language description of what question the dashboard answers and who it is for, in one or two sentences. Always write one, even when the user did not ask for it. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-read-only, non-idempotent, non-destructive write. The description adds useful context beyond that: creation happens when this runs, the name must be unique, and the 'reason' surfaces on an approval card the user will read. It doesn't cover failure modes or whether the new dashboard is returned, but the added operational context is meaningful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and the collision-avoidance rule are front-loaded, followed by the chart workflow and the skill prerequisite. It's dense with four short sentences but each carries actionable content; the skill-load instruction could arguably be trimmed into the first line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation with no output schema, the description covers prerequisites (list_dashboards, load_skill), the post-creation chart workflow, and the reason field's purpose. Only the return value or confirmation behavior is unaddressed, which is minor given the depth of guidance provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each of the 9 parameters is already documented. The description reinforces the ordering of queryIds and the uniqueness of name, but adds little semantic detail beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new analytics dashboard') and adds scope detail about optionally attaching existing saved queries in order. The agent can distinguish it immediately from siblings like update_dashboard or duplicate_dashboard.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to check list_dashboards first to avoid name collisions, mandates loading the manage-dashboards skill before proceeding, and spells out the follow-up workflow using create_insight_query / create_funnel_query / create_retention_query with dashboardId. This is genuine when-and-how guidance, not an implied hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dashboard_folderAInspect
Create a dashboard folder, optionally nested in another (max 6 levels). Created when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | Lucide icon name in kebab-case, e.g. 'chart-line', 'coins', 'users', 'rocket'. | |
| name | Yes | Folder name, e.g. 'Economy' or 'Live ops'. | |
| color | No | Hex color, e.g. '#3b82f6'. | |
| index | No | 0-based position among the folder's children (folders and dashboards). Omit to append. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| parentId | No | Folder to nest it in (max 6 levels). Omit or null for the top level. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a non-read-only, non-idempotent, non-destructive mutation, and the description adds real context beyond that: the folder is created immediately when the call runs, and the reason string appears on a user-facing approval card, implying a human-in-the-loop gate. The 6-level nesting constraint adds another behavioral limit. It stops short of describing the return value or collision behavior on duplicate names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and constraint, then the mutation/approval note, then the prerequisite. Very little waste; the middle sentence is slightly compressed but still readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation with no output schema but full schema coverage, the description supplies purpose, the nesting depth cap, the approval-card semantics of reason, and the required skill prerequisite. What is missing is minor: whether the new folder id is returned and how name conflicts are handled.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains name, color, icon, index, parentId, projectId, and environment in detail. The description only restates that nesting is capped at 6 levels (already in the parentId description) and that reason should be one explanatory sentence (already in the reason description). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Create a dashboard folder,' plus the key qualifier that it may be nested (max 6 levels). This is clearly distinct from create_dashboard and update_dashboard_folder by resource and operation, though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a genuine workflow prerequisite ('Load the manage-dashboards skill first'), which tells the agent when in the process to call this. However, there is no guidance on when to use create_dashboard_folder versus create_dashboard or update_dashboard_folder, nor any exclusion or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_experimentADestructiveInspect
Create an A/B experiment on a configuration. Each group applies its own changes (set / add / delete on configuration paths) to the units assigned to it; weights split eligible units between groups. The experiment starts at startsAt (default: now) and cannot be edited after creation, only terminated. Its changed paths are locked against other experiments and configuration edits until it ends. Read the base configuration's exact current values first (get_configuration or search_configuration) and pass them as each operation's baseValue; check list_experiment_locks for paths already taken. The experiment is created when this runs; explain it in reason, which is recorded with the change. Load the manage-experiments skill (load_skill("manage-experiments")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why this is being done, in one or two sentences a reviewer can judge it by. Shown to the approver. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| experiment | Yes | ||
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructive/non-idempotent annotations, the description discloses the side effects that matter: changed paths are locked against other experiments and configuration edits until the experiment ends, creation happens immediately on this call, the reason is recorded with the change, and a default start time applies. What it omits is what the call returns and what happens on validation failure (e.g. mismatched baseValue), so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and organized from mechanics to prerequisites to guardrails, with no filler sentences. It is dense at roughly seven sentences, and 'The experiment is created when this runs' restates the obvious mutation, but every other sentence carries load-bearing guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter but deeply nested request with no output schema, the description covers the failure-prone parts (fresh baseValue, lock conflicts, skill prerequisite, immutability) that an agent would otherwise get wrong. The remaining gap is the absence of any mention of the response or what identifiers come back after creation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the schema itself documents many fields, yet the description still adds meaning the schema does not: baseValue must equal the real current value in the base configuration, weights must total 100, and reason is what the approver reads. It does not elaborate on rollout, targeting, or assignmentMode, leaving those entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create an A/B experiment on a configuration') and immediately explains the mechanism (groups apply set/add/delete operations to assigned units, weights split eligible units), which separates it cleanly from preview_experiment, get_experiment, terminate_experiment, and update_experiment_rollout.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisite sequencing: load the manage-experiments skill first, read exact current values via get_configuration or search_configuration and pass them as baseValue, and check list_experiment_locks for already-taken paths. It also states the lifecycle constraint (cannot be edited after creation, only terminated), which tells the agent when this tool is the right one versus a later update path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_funnel_queryAInspect
Save a new funnel query as a chart and optionally add it to a dashboard. Pass the exact spec you already ran successfully with run_funnel_query — run it first so you know it works. Adding to a dashboard also requires permission to edit dashboards. The query is saved when this runs; explain it in reason. Load the manage-dashboards, funnel-queries skills (load_skill("manage-dashboards"), load_skill("funnel-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short chart title, e.g. 'Daily active players'. No time range. | |
| spec | Yes | The funnel definition — exactly the spec you ran with run_funnel_query. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | No | Dashboard to add the new query to (appended at the end). Omit to save it unattached. | |
| description | No | Plain-language description of what the chart measures: the events, the aggregation, and any filter, cohort, or breakdown that changes its meaning, in one or two sentences. No time range. Always write one, even when the user did not ask for it. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is not read-only and not destructive, and the description adds real value: the query is persisted the moment this runs, dashboard attachment requires edit permission, and the call surfaces an approval card to the user. It does not warn that the call is non-idempotent and could create duplicate charts if retried, which is the main missing behavioral note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and the critical prerequisite are front-loaded, and every sentence carries instructions. The final skill-loading sentence is a bit of an appendix, but it is actionable rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with a deeply nested spec and no output schema, the description never says what comes back — notably the created chart/query id an agent would need to update or attach it later. Permissions, prerequisites, and approval behavior are covered well, so the gap is narrow but real.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all seven parameters are already documented, including reason, dashboardId append behavior, and description. The description mostly restates that spec must match the run_funnel_query spec, adding only marginal meaning over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Save a new funnel query as a chart') plus the optional side effect of dashboard attachment. It also implicitly distinguishes itself from run_funnel_query, which executes rather than persists, and from update_funnel_query, which modifies an existing chart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly prescribes the prerequisite ('run it first so you know it works'), names the exact spec source (run_funnel_query), states the extra permission needed for dashboard attachment, and directs the agent to load the manage-dashboards and funnel-queries skills before calling. This is near-complete when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_heatmap_queryAInspect
Save a new heatmap query as a chart and optionally add it to a dashboard. Pass the exact spec you already ran successfully with run_heatmap_query — run it first so you know it works. Adding to a dashboard also requires permission to edit dashboards. The query is saved when this runs; explain it in reason. Load the manage-dashboards, heatmap-queries skills (load_skill("manage-dashboards"), load_skill("heatmap-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short chart title, e.g. 'Daily active players'. No time range. | |
| spec | Yes | The heatmap definition — exactly the spec you ran with run_heatmap_query. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | No | Dashboard to add the new query to (appended at the end). Omit to save it unattached. | |
| description | No | Plain-language description of what the chart measures: the events, the aggregation, and any filter, cohort, or breakdown that changes its meaning, in one or two sentences. No time range. Always write one, even when the user did not ask for it. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare a non-readonly, non-idempotent, non-destructive write, so the description adds genuinely new context: dashboard attachment requires edit-dashboard permission, the query is persisted on invocation, and reason surfaces on an approval card. It does not describe the returned identifier or confirmation, but the added operational and authorization context is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and dashboard attachment, then moves to prerequisites and permissions in decreasing order of importance. The trailing skill-loading sentence is useful but slightly cluttered by the repeated inline function syntax.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with a deeply nested heatmap spec, the description covers the workflow, the permission requirement, and the persistence side effect well. With no output schema, it leaves unstated what comes back (chart or query id) and how to later modify the saved chart via update_heatmap_query, which is the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents spec, dashboardId, reason, name, projectId, and environment thoroughly. The description reinforces that spec must be the exact previously-executed payload and that reason must explain the change, but those points largely restate the schema's own descriptions, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — save a new heatmap query as a chart, optionally attaching it to a dashboard — and implicitly contrasts with run_heatmap_query (execute) versus update_heatmap_query (modify). An agent can distinguish this from the other create_*_query siblings because it names the heatmap resource explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete precondition for invocation: run run_heatmap_query first and pass that exact spec, plus load the manage-dashboards and heatmap-queries skills beforehand. It lacks an explicit when-not statement (e.g. 'use update_heatmap_query to modify an existing saved heatmap query'), which is the only gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_insight_queryAInspect
Save a new insight query as a chart and optionally add it to a dashboard. Pass the exact spec you already ran successfully with run_insight_query — run it first so you know it works. Adding to a dashboard also requires permission to edit dashboards. The query is saved when this runs; explain it in reason. Load the manage-dashboards, insight-queries skills (load_skill("manage-dashboards"), load_skill("insight-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short chart title, e.g. 'Daily active players'. No time range. | |
| spec | Yes | The insight definition — exactly the spec you ran with run_insight_query. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | No | Dashboard to add the new query to (appended at the end). Omit to save it unattached. | |
| description | No | Plain-language description of what the chart measures: the events, the aggregation, and any filter, cohort, or breakdown that changes its meaning, in one or two sentences. No time range. Always write one, even when the user did not ask for it. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and idempotentHint=false, so the write/repeat-run nature is partly covered. The description adds value beyond that by stating the query is persisted when this runs and that attaching to a dashboard requires dashboard-edit permission — a real auth constraint not visible in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and followed by prerequisites and permission notes; nothing is padded. The skill-loading sentence is slightly boilerplate but still functional guidance, keeping it just below a top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation tool with a large nested spec, the description covers the workflow, the spec-reuse requirement, permission needs, and the optional dashboard link. The only notable gap is that it never indicates what comes back on success (e.g. a saved query id), which would help an agent chain further calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description still adds meaningful guidance by telling the agent the spec must be the exact one previously validated via run_insight_query, and that reason is what gets shown on the approval card — context the schema text does not fully carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource — 'Save a new insight query as a chart' — plus the optional dashboard attachment, which cleanly separates it from run_insight_query (execute) and update_insight_query (modify existing). An agent can tell what this creates without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete workflow prerequisite: run the spec with run_insight_query first and reuse the exact spec that succeeded. It also states the dashboard-edit permission requirement and directs loading the manage-dashboards and insight-queries skills first. It stops short of saying when to prefer update_insight_query or add_query_to_dashboard instead, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_retention_queryAInspect
Save a new retention query as a chart and optionally add it to a dashboard. Pass the exact spec you already ran successfully with run_retention_query — run it first so you know it works. Adding to a dashboard also requires permission to edit dashboards. The query is saved when this runs; explain it in reason. Load the manage-dashboards, retention-queries skills (load_skill("manage-dashboards"), load_skill("retention-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short chart title, e.g. 'Daily active players'. No time range. | |
| spec | Yes | The retention definition — exactly the spec you ran with run_retention_query. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | No | Dashboard to add the new query to (appended at the end). Omit to save it unattached. | |
| description | No | Plain-language description of what the chart measures: the events, the aggregation, and any filter, cohort, or breakdown that changes its meaning, in one or two sentences. No time range. Always write one, even when the user did not ask for it. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds real value beyond those: it discloses that the query is persisted immediately on invocation, that dashboard attachment requires edit-dashboard permission, and that it is a creation (hence non-idempotent) operation. It does not spell out what happens on duplicate names, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the prerequisite, permission note, and skill-loading instruction in descending order of importance. Slightly dense with parenthetical function-call syntax, but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a deeply nested spec schema and no output schema, the description correctly offloads spec details to run_retention_query and the skills, and covers the critical preconditions. It stops short of describing what the created chart reference looks like, but the schema depth and sibling guidance compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including name, description, reason, projectId, environment, and dashboardId is already documented in the schema. The description reinforces the spec-provenance constraint and the reason field but mostly restates what the schema says, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Save a new retention query as a chart') plus the optional secondary effect (add to dashboard). An agent can distinguish it from run_retention_query and update_retention_query without inspecting either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit sequencing guidance: run run_retention_query first, pass that exact spec, and load the manage-dashboards and retention-queries skills before calling. It also names the permission precondition for the dashboard path, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_saved_formulaAInspect
Save a reusable formula: an expression plus its own metrics (letters A, B, … are those metrics, in order). Run it first as a self-contained formula metric in run_insight_query. Check list_saved_formulas so you don't duplicate one. Saved when this runs; explain it in reason. Load the insight-queries skill (load_skill("insight-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| definition | Yes | ||
| description | No | ||
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the write/non-idempotent profile is known. The description adds real value beyond that: "Saved when this runs" clarifies the save takes effect immediately on execution, the duplicate-check instruction reinforces the non-idempotent warning, and "explain it in reason" signals the user-facing approval card. It does not say what a duplicate attempt does (reject vs. create another) or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five short sentences, front-loaded with the core identity of the tool before the workflow prerequisites. Nothing is redundant. The phrasing is telegraphic ("Saved when this runs; explain it in reason"), which is efficient but slightly terse for a mutation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation with a deeply nested definition schema, 5 required parameters, and no output schema, the description covers the workflow prerequisites, the expression/metrics linkage, and the user-facing reason. Remaining gaps (return value, duplicate-name behavior, display formatting) are modest against a schema that documents most fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, and the bare `expression` field is just a length-bounded string, so the note that letters A, B, … in the expression refer to the entries of `metrics` in order supplies non-obvious meaning the schema cannot. It also directs the `reason` field's content for the approval card. It says nothing about `name`, `description`, `projectId`, `environment`, or `definition.display`, leaving roughly half the surface to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: "Save a reusable formula: an expression plus its own metrics," and clarifies the internal structure (letters A, B map to metrics in order). It implicitly separates itself from list_saved_formulas and update_saved_formula via the entities involved, though it never names update_saved_formula as the editing counterpart, so sibling differentiation is only partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit ordered workflow: load the insight-queries skill first, dry-run the expression as a self-contained formula metric in run_insight_query, check list_saved_formulas to avoid duplicates, then save. It names the two alternative tools (run_insight_query, list_saved_formulas) and the condition under which each is used before this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_tracking_planAInspect
Save a tracking plan: the analytics events (marker types) the game should send, each with when it fires, why it matters, where in the game it goes, and its typed properties. A coding agent connected to Gamebeast's MCP server then implements it (get_tracking_plan, update_tracking_plan_items), and Gamebeast tracks each event from planned to verified as data arrives in the development environment. Each event's description and property descriptions are also copied into the event list where the event has none yet. Check list_event_types and get_tracking_plan first: continue an open plan rather than starting another, and don't plan events the SDK already sends by default. Up to 60 events; names are exact and case-sensitive. Saved when this runs; explain it in reason. Load the manage-events skill (load_skill("manage-events")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | ||
| title | Yes | Short plan name, e.g. 'Core loop + economy'. | |
| reason | Yes | Why you are proposing this plan, in one sentence the user reads on the card. | |
| summary | No | One or two sentences on what this plan lets the studio answer. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare it as non-read-only, non-idempotent, and non-destructive; the description adds substantial context beyond that, including the hard 60-event cap, exact case-sensitive naming, and a real side effect ('each event's description and property descriptions are also copied into the event list where the event has none yet'). It also explains the post-save lifecycle (Gamebeast tracks events from planned to verified as data arrives), which helps the agent set expectations. It stops short of describing what the call returns or failure behavior, keeping it just under a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action is front-loaded in the first sentence, with prerequisites and constraints following in priority order. Four sentences are all relevant, though the clause about descriptions being copied to the event list is embedded mid-paragraph and could be separated for scanability. No filler or marketing language.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nested, mutating creation tool with no output schema and 83% schema coverage, the description covers prerequisites, limits, side effects, and lifecycle well enough to call correctly. The main remaining gap is that it doesn't tell the agent what happens on success (e.g., an id or plan reference returned), which matters slightly for chaining into update_tracking_plan_items, but that is mitigated by the named follow-up tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 83%, so the schema carries most parameter meaning (title, reason, projectId, environment, nested event fields). The description reinforces a few semantics, notably that reason is user-facing ('Saved when this runs; explain it in reason') and the 60-item cap, but these largely repeat schema constraints rather than adding new meaning. Baseline 3 is appropriate given the high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('Save a tracking plan') and immediately enumerates the payload content: events ('marker types') with when they fire, why they matter, placement, and typed properties. It distinguishes itself from update_tracking_plan_items and get_tracking_plan by naming them as downstream/companion tools rather than alternatives, so an agent can identify the create path without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit preconditions and routing are given: 'Check list_event_types and get_tracking_plan first: continue an open plan rather than starting another, and don't plan events the SDK already sends by default.' It also mandates loading the manage-events skill first, which is a concrete when-to-use gate. Exclusion guidance (no default SDK events, no duplicate plans) is stated directly rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_cohortADestructiveInspect
Permanently delete a saved cohort from the current project. Refused while an active or upcoming experiment targets it. Queries and cohorts that reference it keep a broken reference. Confirm the exact cohort by name with the user first. Deleted when this runs; explain it in reason. Load the manage-cohorts skill (load_skill("manage-cohorts")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| cohortId | Yes | The cohort's id (from list_cohorts). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and non-idempotent, but the description adds what annotations cannot: the referential-integrity consequence (queries and cohorts referencing it keep a broken reference), the server-side guard for active/upcoming experiments, and the required workflow prerequisite (load_skill). That is substantive behavior beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and permanence, then hazards, then workflow. Five short sentences all earn their place, though the reason/confirmation instruction is slightly split across two sentences and could be tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive 4-param tool with no output schema, the description covers the irreversible effect, the blocking conditions, the side effects on referencing objects, and the required pre-call workflow. Nothing an agent needs before invoking it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter is already documented (reason is 'why you are making this change', cohortId from list_cohorts, etc.). The description only reinforces 'explain it in reason' and gives the cohort-name confirmation requirement; it adds little syntax or format meaning beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'Permanently delete' plus resource 'saved cohort' plus scope 'current project'. It is clearly distinguished from update_cohort and create_cohort, and the permanence qualifier separates it from reversible operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use preconditions (confirm exact cohort by name with the user first, load manage-cohorts skill first) and an explicit when-not condition (refused while an active or upcoming experiment targets it), plus the alternative for finding the cohort (from list_cohorts in schema).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_configurationADestructiveIdempotentInspect
Delete a configuration from this project environment. This cannot be undone from here. The project's primary configuration cannot be deleted (make another one primary first), nor can a configuration that a scheduled or running experiment is based on. Game servers that read this configuration by alias stop receiving it. The delete happens when this runs. Always explain the change in reason; it is recorded with the change.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why this change is being made, in one or two sentences a reviewer can judge it by. Shown to the approver. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| configurationId | Yes | The numeric id of the configuration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true and readOnly=false, yet the description still adds substantial value: irreversibility, the two hard preconditions, the downstream effect on game servers resolving the configuration by alias, and that the deletion executes immediately rather than being staged for approval. This is exactly the kind of blast-radius detail annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then consequences, then preconditions, then the reason requirement — a logical order with no filler. "This cannot be undone from here" and "The delete happens when this runs" are close in intent (irreversibility vs synchronous execution) but read slightly redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema operation this covers timing, failure preconditions and side effects well. It omits permission/authorization requirements and what an error response looks like when a precondition blocks the delete, which an agent handling failures would want.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 slightly beyond by telling the agent to always populate reason and that it is recorded with the change, complementing the schema's note that it is shown to the approver. projectId, environment and configurationId are left entirely to the schema, which is acceptable given full coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete a configuration") plus its scope ("from this project environment"), which clearly distinguishes it from get_configuration, list_configurations, update_configuration and create_configuration. An agent can identify the operation without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not conditions: the primary configuration and configurations backing a scheduled or running experiment are off limits, and it supplies the remediation path ("make another one primary first"), implicitly pointing at set_primary_configuration. It does not reference sibling tools by name (e.g. preview_configuration_change, search_configuration for finding an id), so routing is inferred rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dashboardADestructiveIdempotentInspect
Delete a dashboard. The saved queries on it are kept (they stay in list_queries and on any other dashboard); only the dashboard itself goes. This cannot be undone from here. Deleted when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The dashboard to delete. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered; the description adds genuinely new behavior: only the dashboard object is removed, its queries persist elsewhere, and the action is irreversible "from here" and takes effect immediately. It does not address repeat-invocation behavior despite the idempotent hint, which keeps it just under a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and its scope, then the irreversibility warning, then the prerequisite. The clause "Deleted when this runs; explain it in reason" is slightly compressed and awkwardly punctuated, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description covers what an agent needs for a destructive, 4-required-param call: effect scope, irreversibility, required justification, and the skill prerequisite. It does not state what a successful response looks like or how to recover from a wrong dashboardId, a minor gap for an irreversible operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so dashboardId, projectId, environment, and reason are all already documented in the schema. The description only echoes the reason parameter ("explain it in reason") without adding format or approval-card context beyond what the schema states, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete a dashboard") and immediately scopes the blast radius by clarifying that saved queries survive and remain in list_queries. That distinguishes it cleanly from delete_query and delete_dashboard_folder without the agent needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete prerequisite (load the manage-dashboards skill first) and implicitly routes query-only deletions to delete_query by stating the queries are kept. It stops short of naming delete_query explicitly or saying when not to delete, so it is clear context rather than full alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dashboard_folderADestructiveInspect
Delete a dashboard folder. Its dashboards and subfolders move up to its parent folder (or the top level); no dashboard is deleted. Deleted when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| folderId | Yes | The folder to delete. Its dashboards and subfolders move up to its parent; nothing else is deleted. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=false, so the safety profile is known; the description still adds genuine value by disclosing the cascade behavior (children get reparented, not destroyed) and that the delete takes effect immediately. It leaves out reversibility/undo and any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, action front-loaded, with the consequence of the call before the prerequisite. The fragment "Deleted when this runs" is terse to the point of ambiguity but wastes no words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive four-parameter mutation with no output schema, the description covers what happens to child objects, immediacy, the required justification, and a prerequisite skill. Remaining gaps (undo, permissions, return value) are minor given the annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented, including reason and folderId semantics. The description's "explain it in reason" restates the schema rather than adding format or constraint detail, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete a dashboard folder") and immediately delimits scope: dashboards and subfolders move to the parent, "no dashboard is deleted." That contrast distinguishes it from delete_dashboard and delete_query without the agent needing to open a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite workflow (load the manage-dashboards skill first) which is real when-to-use guidance. It does not, however, contrast this with update_dashboard_folder or explain when reparenting-delete is preferable to moving contents manually.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_queryADestructiveIdempotentInspect
Permanently delete a saved analytics query. It disappears from EVERY dashboard that shows it; this cannot be undone from here. To take a query off one dashboard but keep it, use remove_query_from_dashboard instead. Deleted when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| queryId | Yes | The saved query to delete. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint and idempotentHint, but the description adds real context beyond them: deletion is cross-dashboard in scope, irreversible "from here," and gated by a human approval card that surfaces the reason. It does not describe the return value or what happens to panels left empty, but that is a minor gap given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the destructive scope before the alternative and the skill prerequisite. Slight compression loss in "Deleted when this runs; explain it in reason," which reads telegraphically and requires the reader to infer what "it" refers to.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with four required params and no output schema, everything an agent needs is present: scope of destruction, irreversibility, the safer alternative, the approval-reason expectation, and the required skill step. Nothing essential is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters are already documented in detail, including the approval-card semantics of reason. The description only reinforces that reason should explain the deletion; it adds no new syntax, format, or constraint information beyond the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Permanently delete a saved analytics query") and immediately clarifies the blast radius ("disappears from EVERY dashboard"). The final routing sentence distinguishes it from the closely named sibling remove_query_from_dashboard, so an agent can choose without inspecting either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit when-not and the alternative: use remove_query_from_dashboard to remove from one dashboard but keep the query. It also states a precondition — load the manage-dashboards skill first — which is actionable routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_saved_formulaADestructiveInspect
Permanently delete a saved formula. Saved queries linked to it keep showing its last version (with a warning) until someone detaches them. Confirm the formula by name and say how many queries use it (list_saved_formulas with formulaId) first. Deleted when this runs; explain it in reason. Load the insight-queries skill (load_skill("insight-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| formulaId | Yes | The saved formula's id (from list_saved_formulas). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond destructiveHint=true and idempotentHint=false, it discloses the non-obvious downstream effect: linked saved queries keep rendering the last version with a warning until someone detaches them. It also states that deletion happens immediately when this runs and that the reason string is user-facing on the approval card.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, with the permanent-deletion fact front-loaded and the prerequisites following in order. The clause "Deleted when this runs; explain it in reason" is slightly compressed but not wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive mutation with no output schema, the definition covers consequences, side effects on dependents, verification steps and a required skill load. With all four parameters fully described in the schema and safety hints in annotations, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so formulaId, projectId, environment and reason are already documented in the schema. The description only adds a light nudge to explain the deletion in reason, which largely restates the schema's own wording about the approval card.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Permanently delete a saved formula" gives a specific verb plus resource and makes the contrast with update_saved_formula obvious from the name alone. The word "permanently" signals irreversibility right away.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It prescribes concrete preconditions before calling: verify the formula by name and count dependent queries via list_saved_formulas with formulaId, and load the insight-queries skill first. It does not state when a caller should instead use update_saved_formula or detach queries rather than delete, so the alternative path is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_event_typesAIdempotentInspect
Describe analytics event (marker) types and their arguments, and/or hide or show them in the dashboard's query builder. Works for events that have not been sent yet: describe them while instrumenting the game, before shipping, so the descriptions are in place when data arrives. Patches are partial — omitted fields keep their current value; pass null or an empty string to clear a description. Up to 100 types and 500 arguments per call. Saved when this runs; explain it in reason. Load the manage-events skill (load_skill("manage-events")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| types | No | Marker-type changes (at most 100). | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| arguments | No | Argument changes (at most 500). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare a non-read-only, idempotent, non-destructive mutation, and the description goes further by disclosing patch semantics (omitted fields are unchanged, null or empty string clears a value) and per-call caps of 100 types and 500 arguments. This is the kind of context annotations cannot carry. It's weaker on what the call returns and how a partial failure across many types/arguments behaves.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Sentences are front-loaded and each earns its place: what it does, the pre-ship scenario, patch semantics, caps, save behavior, and the skill prerequisite. The phrasing is dense and readable. The only weakness is that the crucial prerequisite appears last rather than up front, and 'and/or hide or show them' is slightly loose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation with no output schema, the description supplies the essential context: that it writes immediately, that it applies partial patches, that it is meant for pre-instrumentation use, that it is capped per call, and that it requires a skill load first plus a human-readable reason. An agent has enough to call it correctly without opening the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already documents reason, projectId, environment, and the omitted-keeps-current / null-clears semantics of each nested field. The description mostly restates that behavior and adds the batch limits (100/500), which the schema expresses structurally as maxItems. It adds confirmation rather than new meaning, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Describe analytics event (marker) types and their arguments, and/or hide or show them in the dashboard's query builder.' It also makes the write semantics clear ('Saved when this runs', 'Patches are partial'), which implicitly distinguishes it from the read-only list_event_types sibling. It stops short of naming that sibling, so sibling differentiation is left to inference rather than stated outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit preparatory scenario (describe events while instrumenting the game, before shipping so the descriptions exist when data arrives) and a hard prerequisite ('Load the manage-events skill first'). What's missing is a negative boundary: it never says when to use list_event_types for reading instead of this tool for writing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
duplicate_dashboardAInspect
Copy a dashboard under a new name. Every query on it is copied too, so editing the copy never changes the original. The dashboard must have at least one query. Copied when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the copy. Must be unique in the project. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The dashboard to copy. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare write/non-idempotent/non-destructive, but the description adds real semantic behavior: queries are deep-copied so the copy is independent of the original, the action happens immediately when invoked, and a user-facing reason is required for the approval card. The minimum-query precondition is likewise behavior an agent could not get from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and scope, then non-obvious constraints. No filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema, it covers side effects, independence of the copy, and preconditions well. The one remaining gap is that it never says what comes back (presumably the new dashboard's id), which an agent would want in order to chain further calls.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so name, reason, projectId, dashboardId and environment are already fully documented. The description only reinforces that the new name is chosen here and that reason is user-facing, which duplicates rather than extends the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb (copy) and resource (a dashboard) with an explicit new name, and the follow-up clarifies that all queries are copied too, which separates it from create_dashboard. It stops short of naming any sibling tool outright, so the routing signal is inferential rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a hard precondition ('must have at least one query') and a workflow prerequisite (load the manage-dashboards skill first), which are the main things that could make a call fail. It does not say when to prefer create_dashboard or update_dashboard over duplication, so alternative selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ensure_sdk_keyAInspect
Create a Gamebeast SDK key (a public key for the game client or server SDK) for this project and environment, and get it back once. Only call this after searching the repo and environment for an existing key (.env files, secret or config modules, an existing Gamebeast:Setup / GamebeastSdk.Setup call) and finding none. The result says where the key must be stored for this platform — on Roblox, server-side only. Never print the key in chat or commit it to a public repository. A second call within a few minutes is refused, since the key is shown only once. Explain why a key is needed in reason; it is recorded on the key.
| Name | Required | Description | Default |
|---|---|---|---|
| label | No | Key name suffix shown in the dashboard, e.g. the repo name. | |
| reason | Yes | Why a key is needed, e.g. 'No Gamebeast key in the repo or environment'. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare non-read-only, non-idempotent, non-destructive; the description adds the key facts those hints cannot convey: the key is shown exactly once, retries are rate-limited/refused, storage is platform-specific (Roblox server-side only), and the reason string is persisted on the key. It does not describe the response shape beyond the storage note, so it stops short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by precondition, result/security, and retry behavior in a logical order. Every sentence carries information, though the security admonition about not printing the key is agent-policy guidance rather than a property of the tool itself.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return contract, and it does partially by saying the result indicates where the key must be stored. Combined with the one-time-visibility and retry-refusal notes, an agent has enough to call this safely, though the actual response fields are not described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 still adds value by explaining that `reason` is recorded on the key (which is why it must justify the need) rather than being a throwaway note. `label`, `projectId`, and `environment` are left entirely to the schema, which already handles them well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a Gamebeast SDK key') plus an immediate gloss of what the resource is ('a public key for the game client or server SDK'), scoped to project and environment, and notes the one-time return. No sibling tool overlaps, and an agent can tell exactly what this produces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition with concrete search targets (.env files, secret/config modules, an existing Gamebeast:Setup / GamebeastSdk.Setup call) and says to call only when none is found. It also warns that a second call within a few minutes is refused, which is real when-to-call guidance an agent would otherwise trip over.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_queryARead-onlyInspect
Execute a saved analytics query (insight, funnel, retention, or heatmap) and return its results. Supports overriding the time range and (except for heatmaps) breakdowns; the result is rendered as a chart for the user automatically. Load the run-analytics-query skill (load_skill("run-analytics-query")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| time | No | Optional time range override. Replaces the saved query's time when provided. | |
| queryId | Yes | The id of the saved query to execute. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| breakdowns | No | Optional breakdown dimensions override. Replaces the saved query's breakdowns when provided. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds real value on top: the automatic chart rendering is a visible side effect the agent should know about, and the heatmap breakdown exclusion is a genuine behavioral limit not encoded in the schema. It still omits error behavior, whether the chart render is suppressible, and what the raw result payload looks like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler, with the core action stated first and constraints following. The skill-loading prerequisite is arguably the most critical instruction yet sits last, which is a minor front-loading weakness rather than a wording problem.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining returns, and 'return its results' plus 'rendered as a chart' is thin for a tool whose payload is the whole point. For a 5-parameter tool with a deeply nested time-range schema, the absence of any guidance on relative-vs-absolute time construction leaves a meaningful gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns above that by clarifying that `time` and `breakdowns` are overrides that replace the saved query's stored values, and by flagging that `breakdowns` does not apply to heatmaps. It does not explain how to choose between the relative and absolute branches of the nested `time` object, which is the most error-prone part of the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Execute a saved analytics query') and enumerates the supported query kinds (insight, funnel, retention, heatmap). The word 'saved' plus the required queryId distinguishes it from the ad-hoc run_insight_query / run_funnel_query / run_retention_query / run_heatmap_query siblings, though it never names them explicitly to confirm the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete prerequisite ('Load the run-analytics-query skill first') and states what can and cannot be overridden (breakdowns unsupported for heatmaps). What it lacks is an explicit routing rule: it never says when to prefer this over the sibling run_*_query tools or get_query, so the agent must infer that this is the path for an already-saved query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cohort_member_countARead-onlyInspect
Return the current member count for a player cohort. Use to size a cohort before sampling members or checking membership.
| Name | Required | Description | Default |
|---|---|---|---|
| cohortId | Yes | The id of the cohort to count. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety and scope are covered. The description adds the qualifier 'current,' hinting that the count is live rather than historical, but never clarifies freshness, whether it is exact or approximate, or what the return value looks like (there is no output schema).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with zero waste: purpose first, then the intended use case. Nothing is repeated and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter read tool with full schema documentation and annotations covering safety, the description covers what is needed to call it correctly. The only real gap is the shape of the return value, since no output schema exists to state that the count is a plain number.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of cohortId, projectId, and environment documented in the schema itself, so the baseline applies. The description adds no parameter-level meaning beyond what the schema already supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Return the current member count for a player cohort.' That distinguishes it in spirit from get_cohort_members and get_cohort_membership, but the description never names those siblings, so the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use to size a cohort before sampling members or checking membership' gives a clear motivating context for calling it. It stops short of naming the alternatives (get_cohort_members, get_cohort_membership) or stating when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cohort_membersARead-onlyInspect
Return a paginated sample of player ids in a cohort. Page through results — do not attempt to dump all members in one call.
| Name | Required | Description | Default |
|---|---|---|---|
| cohortId | Yes | The id of the cohort to sample. | |
| pageSize | No | Members per page (default 25, max 100). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| pageNumber | No | Page number (default 1). | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds meaningful behavior beyond that: results are a *sample*, not an exhaustive list, and must be paginated. It stops short of explaining what kind of sample (random vs. first-N) or whether pagination is stable across pages, which materially affects how an agent interprets results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the core purpose front-loaded and the pagination constraint immediately after. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with no output schema, the description conveys the essential shape of the return value (player ids) and the pagination model, which is what an agent most needs. The only real gap is the undefined nature of the sample and any cap on pages, a minor omission given the fully documented schema and annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with cohortId, projectId, environment, pageSize (default 25, max 100) and pageNumber all documented inline, including pointers to list_projects. The description adds nothing beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: returning a paginated sample of player ids within a cohort. That is clearly distinct from sibling tools like get_cohort_member_count or list_cohorts, though it never explicitly contrasts itself with get_cohort_membership, which an agent might confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives one concrete operational instruction — page through results rather than dumping all members in one call — which is real when-to-use guidance. However, it offers no routing guidance versus siblings (get_cohort_membership, get_cohort_member_count, run_cohort_definition), leaving the agent to infer which cohort tool to pick.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cohort_membershipARead-onlyInspect
Check whether specific player ids belong to a cohort. Use for bulk 'is player X in cohort Y' lookups (up to 250 ids per call).
| Name | Required | Description | Default |
|---|---|---|---|
| userIds | Yes | Player user ids to check (1–250). | |
| cohortId | Yes | The id of the cohort to check. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety and scope are covered by structured data. The description adds only the 250-id cap, which is already in the schema's maxItems. It says nothing about whether non-member ids are omitted or returned as false, or about failure modes for invalid cohort/project ids.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the core purpose is stated first with the usage constraint second. Nothing is redundant or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description leaves the return shape unexplained: an agent cannot tell whether it receives a boolean per id, a subset of matching ids, or per-id status objects. For a simple read-only lookup with full schema coverage and safety annotations, this is the one remaining gap, but it is a real one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (userIds, cohortId, projectId, environment) are already documented, including the 1–250 range and the pointer to list_projects. The description restates the player-id and batch-limit semantics rather than adding new meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a concrete verb and resource: 'Check whether specific player ids belong to a cohort.' An agent can immediately tell this is a membership test rather than a listing or count. It stops short of naming the closely related siblings (get_cohort_members, get_cohort_member_count), so differentiation is implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use for bulk "is player X in cohort Y" lookups (up to 250 ids per call)' gives a clear usage context and the intended batch pattern. However, it never states when NOT to use it or names the alternative tools — notably get_cohort_members, which the agent could easily confuse with this one. Usage is implied more than routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_community_pulseARead-onlyInspect
Get the latest Community Pulse snapshot — the pre-synthesized topic rollup the dashboard's Community Pulse page shows. Returns topic-level summaries with volume, sentiment split (love/hate/neutral counts), trend (hot/active/steady), and LLM-written insight clusters for what players love and hate, with representative quote ids. This is the fastest way to get a high-level picture of player sentiment. Use query_sentiment for live data, drill-downs, or custom time windows. Use query_sentiment({ operation: 'quotes', contentIds }) to resolve quote ids into real messages. Load the understand-community-pulse skill (load_skill("understand-community-pulse")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description is fully consistent with a safe read. Beyond that it discloses the non-obvious behavioral traits: the data is a pre-synthesized snapshot rather than live data (with query_sentiment named as the live alternative), and that quote ids are indirect references requiring a second resolution call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core definition before the routing guidance, and each sentence carries actionable information. The 'fastest way to get a high-level picture of player sentiment' line mildly restates the pre-synthesized framing, a small redundancy in an otherwise tight definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-value burden and does so thoroughly by naming every returned field group and the quote-id indirection. Combined with the sibling routing and skill preloading instruction, nothing an agent needs to invoke and interpret this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (projectId, environment) are documented in the schema itself, including the list_projects discovery hint. The description adds no additional meaning about scoping, defaults, or environment semantics, so it sits at the baseline for a fully documented two-parameter schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the latest Community Pulse snapshot') and immediately defines it as 'the pre-synthesized topic rollup the dashboard's Community Pulse page shows', which anchors it to a concrete artifact. It also enumerates the payload (volume, sentiment split, trend, insight clusters, quote ids), so an agent can distinguish it from query_sentiment without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes between this tool and the sibling: use this for a high-level picture, use query_sentiment for live data, drill-downs, or custom time windows. It even names the exact follow-up call syntax (query_sentiment({ operation: 'quotes', contentIds })) for resolving quote ids, and recommends loading the understand-community-pulse skill first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_configurationARead-onlyInspect
Read a configuration by id. Configurations are large JSON objects rendered as a file tree in the dashboard — nested objects are 'folders', arrays and primitives are 'files'. Use mode 'structure' (default) to get a depth-limited file-tree outline (cheap, always safe at root). Use mode 'values' to read actual values within a 20 KB budget; truncatedPaths in the response lists subpaths that were elided — call again with 'path' set to one of those to drill in. Private keys (hidden from SDK clients, not from the dashboard) are annotated with _hidden: true. contentHash identifies the version you read — pass it as baseContentHash when changing it with update_configuration. The deepLinkPath in the response is a ?path= URL fragment you can share with the user to open that node in the dashboard. description and keyDescriptions are the documentation people wrote for the configuration and its keys (what a key controls, units, valid ranges) — use them to interpret values, and set them with update_configuration_descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | structure (default): file-tree outline showing keys, types, and child counts. values: actual values within a 20 KB byte budget. | |
| path | No | Navigate to a specific nested object (folder) by its key path, e.g. ["settings", "ranked"]. Omit to start at the root. | |
| depth | No | Max nesting depth for structure mode. Default 3. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| configurationId | Yes | The numeric id of the configuration to read. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover readOnlyHint and openWorldHint, but the description adds substantial behavior: a 20 KB byte budget with truncatedPaths reporting elision, _hidden: true marking of private keys that are hidden from SDK clients but not the dashboard, contentHash as a version token for optimistic concurrency, and deepLinkPath as a shareable ?path= fragment. These are exactly the operational facts an agent needs and none are inferable from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence and subsequent sentences cover modes, truncation recovery, hidden keys, versioning, and documentation fields in a logical order. It is dense and mostly earns its length, though the deepLinkPath and description/keyDescriptions sentences could be tightened slightly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and six parameters, the description proactively explains the response payload surface (truncatedPaths, _hidden, contentHash, deepLinkPath, description/keyDescriptions) so the agent can act on the result without a return-type spec. Nothing material for a correct call is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 nevertheless adds cross-parameter meaning the schema lacks — that 'path' is a key array used specifically to drill into truncatedPaths, and that 'structure' is the default mode while 'values' is budget-bound. It does not restate depth semantics in more detail than the schema, so a 4 rather than 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read a configuration by id') and immediately distinguishes the operation from sibling reads (list_configurations, search_configuration) and writes (update_configuration) by describing the two read modes and their cost/safety tradeoff.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: mode 'structure' is default and cheap/safe at root, mode 'values' is for actual values, and when output is truncated the agent should re-call with 'path' set to a truncatedPaths entry. It also names the follow-up tool (update_configuration_descriptions) for editing docs, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dashboardARead-onlyInspect
Fetch a single analytics dashboard (board) by id: its saved queries (type, chart style, events) and every panel on its 24-column grid (query, markdown and image panels, each with id and x/y/w/h). Use after list_dashboards to get the complete detail for a specific board, and before changing its layout.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The id of the dashboard to fetch. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered structurally; the description adds useful context by disclosing exactly what the response contains (query, markdown, and image panel types with geometry). It says nothing about behavior when the dashboard id does not exist or about permission scoping, which would have completed the picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and payload, then the usage rule. The parenthetical list of panel fields is dense but each item earns its place by telling the agent what it can read from the result; minor trimming of "(board)" would tighten it further.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing the return value and does so concretely, including panel types and grid coordinates, which is exactly what an agent needs before calling update_dashboard_layout. Nothing essential for a read-only, three-required-parameter fetch is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with projectId, dashboardId, and environment each documented including discovery via list_projects. The description only restates that lookup is "by id" and adds no scoping or format detail beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource ("Fetch a single analytics dashboard (board) by id") and immediately enumerates the payload: saved queries with type/chart style/events and every panel on a 24-column grid with id and x/y/w/h. This clearly distinguishes it from list_dashboards and from the panel-mutation siblings like add_markdown_panel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use it after list_dashboards for full detail on a specific board and before changing its layout, which gives the agent a clear position in the workflow. It does not state any when-not conditions or mention that update_dashboard_layout is the follow-up mutation tool by name, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_experimentARead-onlyInspect
Fetch one experiment by id: state, unit type, schedule, base configuration, targeting (as readable conditions), and per group its allocation, enrolled-unit count, and the exact configuration changes (set / add / delete, with the base value each replaced). Use list_experiments to find ids. An assignedUnitCount of null means counts could not be read, not that nobody is enrolled. For performance, use get_experiment_results. Load the understand-experiments skill (load_skill("understand-experiments")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| experimentId | Yes | The numeric id of the experiment to fetch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond that: it details the returned fields, explains that assignedUnitCount null means counts could not be read rather than zero enrollment, and points to get_experiment_results for performance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and then enumerates the returned data in a dense but useful first sentence. Every subsequent sentence adds distinct value: id discovery, null-count semantics, the performance alternative, and the skill prerequisite.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining return content, and it does so by listing the major fields and group-level configuration changes. It also covers the important null-count caveat and performance alternative, making the definition complete for a read-only single-experiment fetch.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents projectId, environment, and experimentId. The description only indirectly helps by saying to use list_experiments to find ids; it does not add further meaning about how projectId or environment scoping works.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Fetch one experiment by id'. It enumerates exactly what the result contains, including state, unit type, schedule, base configuration, targeting, group allocations, and configuration changes, which clearly distinguishes it from list_experiments and get_experiment_results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly names list_experiments as the way to find ids and get_experiment_results as the better performing alternative when appropriate. It also states a required prerequisite to load the understand-experiments skill first, leaving little ambiguity about when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_experiment_resultsARead-onlyInspect
Measure how an experiment's groups perform on up to 5 metrics, with statistics. Each metric is computed per enrolled unit over the experiment's run, counting only events after the unit was assigned: conversion (share of units that fired the event), count_per_unit (events per unit), or sum_per_unit (a numeric argument or property summed per unit, e.g. revenue per player). Each non-control group is compared to the control with a two-sided test: relative lift, its 95% CI, p-value, and a verdict (significant_positive / significant_negative / inconclusive / insufficient_data). Also reports a sample-ratio check. Use list_event_types / get_property_values to find event and argument names first. Load the understand-experiments skill (load_skill("understand-experiments")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | Narrow the window. Always clamped to the experiment's own run. | |
| metrics | Yes | ||
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| experimentId | Yes | ||
| controlGroupId | No | The group every other group is compared to. Defaults to the first group. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint; the description adds substantial computation semantics beyond that — counting starts only after unit assignment, denominators are enrolled units over the experiment's run, non-control groups are compared with a two-sided test yielding lift, 95% CI, p-value and one of four verdicts, plus a sample-ratio check. That is exactly the kind of behavior an agent needs to trust the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then prerequisites, then result shape; no sentence is filler. It is one dense block though — the metric-kind enumeration would scan better as a list, which is the only structural weakness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description takes on the burden of describing results and does so completely (lift, CI, p-value, verdict values, sample-ratio check), and it covers result-window semantics for the range parameter. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The hardest parameter, `metrics`, is fully disambiguated: all three `kind` variants are defined, and `sum_per_unit`'s `value` (argument vs property) is explained with a concrete example ('revenue per player'). The remaining parameters (range, projectId, environment, controlGroupId) already carry schema descriptions, so the description's silence there is acceptable at 67% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Starts with a specific verb and resource: 'Measure how an experiment's groups perform on up to 5 metrics, with statistics.' The scope (per-group, up to 5 metrics, statistical comparison vs control) is precise enough to distinguish it from get_experiment or preview_experiment without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit prerequisites: resolve event/argument names via list_event_types / get_property_values first, and load the understand-experiments skill before calling. It does not, however, contrast this tool with named siblings such as preview_experiment or execute_query, so the when-not path is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_heatmap_imageARead-onlyInspect
Fetch a heatmap's background image: the top-down map of the game region the SDK uploaded, scaled to at most 1024px. Use it to see the layout and name places when explaining heatmap query hotspots. It is the bare map — query results are not drawn on it. Horizontal is world X, vertical is world Z, across the heatmap's bounds. Load the heatmap-queries skill (load_skill("heatmap-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| heatmapId | Yes | The heatmap's id, from list_heatmaps. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description does not contradict that. It adds real behavioral context beyond the annotations: a 1024px maximum scale, the fact that the image is the bare map with no query overlay, and the X/Z orientation across the heatmap bounds. It does not cover return format, error behavior for a missing or not-yet-uploaded background image, or caching, which keeps it at a solid 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the use case, then the key caveat, then the coordinate convention and prerequisite — every sentence adds a distinct piece of information with no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the work of describing the returned image (bare top-down map, max 1024px, X horizontal / Z vertical) and includes the required skill prerequisite, which is good. It still omits what happens when a heatmap has no uploaded background image and whether the response is a URL or binary payload, leaving a gap for an agent handling edge cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each parameter already documents its source (list_heatmaps, list_projects), so the schema carries the burden. The description mentions the heatmap's bounds, which loosely relates to heatmapId but adds no syntax, format, or constraint detail beyond what the schema provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("Fetch a heatmap's background image") and immediately narrows it with concrete identifying detail: the top-down map of the game region uploaded by the SDK, capped at 1024px. This separates it cleanly from data-returning siblings like run_heatmap_query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the use case explicitly — see layout and name places when explaining heatmap query hotspots — and rules out a misreading by noting query results are not drawn on the map. It also gives an ordering prerequisite (load the heatmap-queries skill first) but never names the sibling tool an agent should call instead when it actually wants hotspot data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_property_valuesARead-onlyInspect
Discover distinct values for a specific event property or argument — use before building string or number filters to know which values exist (e.g. country codes, platform names, item ids).
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Whether to look up a property or argument. | |
| name | Yes | The property or argument name. | |
| event | No | Optional marker/event name filter to scope the search. | |
| search | No | Optional substring filter on returned values. | |
| dataType | Yes | The data type of the attribute. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered and the description only adds the downstream purpose of the result. It says nothing about result size, ordering, truncation, or scoping behavior beyond the schema, so genuine behavioral context is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the core action front-loaded and the usage rationale immediately after. Nothing is redundant and the parenthetical examples are compact.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only lookup with 7 parameters (5 required) and no output schema, the description covers what the tool returns conceptually ('distinct values') but omits how many values come back, whether results are bounded, and how the optional event/search parameters shape output. Adequate but leaves real gaps for a multi-scope query tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter including the enums for kind and dataType is already documented in the schema; baseline 3 applies. The description's value examples (country codes, platform names, item ids) add only illustrative color, not new meaning for any parameter such as the optional event or search filters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource: 'Discover distinct values for a specific event property or argument', and even clarifies the two lookup modes (property vs argument) that map to the 'kind' enum. It is clearly distinct from siblings like list_event_types or describe_event_types, though it never names those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a concrete when-to-use condition: 'use before building string or number filters to know which values exist', which tells the agent to call this as a discovery step prior to filter construction. It stops short of explicit when-not guidance or naming sibling tools to use instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_queryARead-onlyInspect
Fetch one saved analytics query by id with its full definition as an editable spec (the same spec format run_insight_query / run_funnel_query / run_retention_query take, tagged with queryType) and the dashboards it appears on. Read a query with this before changing it: pass the edited spec (without queryType) to update__query, or use update_query to only rename it. When the query uses options agents cannot author, spec is omitted and notEditable says why. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| queryId | Yes | The id of the saved query (from list_queries or get_dashboard). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: a conditional response shape where `spec` is omitted for options agents cannot author, plus a `notEditable` field explaining why, and a skill-loading prerequisite. It stops short of describing error behavior or the dashboard-list shape, keeping it at a 4.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and return contents are front-loaded in the first sentence, with editing workflow and the editability caveat following in priority order. It is dense but nearly every clause carries actionable information; the skill-loading note at the end is slightly tacked on but useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe the return values, and it does: the editable spec tagged with queryType, the dashboards it appears on, and the notEditable degradation case. Combined with the prerequisite and the follow-up update path, an agent has everything needed for a 3-required-param read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter carries a description pointing to discovery tools (list_queries, get_dashboard, list_projects), so the schema does the heavy lifting. The description adds only indirect meaning ("by id", "without queryType") and says nothing about projectId or environment scoping.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: "Fetch one saved analytics query by id with its full definition as an editable spec ... and the dashboards it appears on." It also disambiguates from siblings by naming the exact spec format that run_insight_query / run_funnel_query / run_retention_query consume and by naming update_query separately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance ("Read a query with this before changing it") and routes to the correct alternatives: pass the edited spec to update_<queryType>_query, or use update_query for rename-only. It also states a prerequisite (load the manage-dashboards skill first) rather than leaving it to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tracking_planARead-onlyInspect
Read a tracking plan: every planned analytics event with its description, placement hint, typed properties, and status (planned → implemented → received → verified, or mismatch), plus what to do next. Statuses are brought up to date with the events received so far. Pass planId when you were given one; omit it for the project's latest open plan. Read the whole plan before changing any code.
| Name | Required | Description | Default |
|---|---|---|---|
| planId | No | Plan id. Omit to get the project's most recent open plan. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description then adds genuinely non-obvious behavioral context: statuses are refreshed against events received so far (data freshness semantics), the possible status values including mismatch, and that the response carries "what to do next." It stops short of discussing pagination or size limits for large plans.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each doing distinct work: what is returned, how status is maintained, how to choose planId, and the workflow prerequisite. The return payload is front-loaded before the parameter guidance, so an agent can decide to call the tool before parsing the details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, three-parameter tool with no output schema, the description covers the response shape in enough detail that an agent knows what it will get back and how to act on it. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented in the schema, including the alternate meaning of an omitted planId. The description's planId sentence largely restates the schema text, adding only the mild framing "when you were given one," and says nothing extra about projectId or environment. Baseline 3 is appropriate when the schema carries the load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("Read a tracking plan") and then enumerates exactly what is returned: events, descriptions, placement hints, typed properties, and lifecycle status. Because the sibling set contains create_tracking_plan and update_tracking_plan_items, the read-oriented framing makes the distinction between this tool and its write siblings unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete when-to guidance for the optional parameter ("Pass planId when you were given one; omit it for the project's latest open plan") and a workflow rule ("Read the whole plan before changing any code"). What it does not do is explicitly route the agent to update_tracking_plan_items or create_tracking_plan as the follow-on alternatives; the exclusion is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_cohortsARead-onlyInspect
List player cohorts (dynamic player segments) in the current project, or fetch one cohort by id. Each result includes its 'description' (who is in it and what it is for, when set) and a 'summary' with block/condition counts and referenced event names — use them for a quick shape of the definition. Use 'search' to find cohorts by name or description. Load the cohorts skill (load_skill("cohorts")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default 25, max 100). | |
| search | No | Filter and rank results by cohort name and description. | |
| cohortId | No | When set, fetch this single cohort instead of listing. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| includeDefinitions | No | When listing, include each cohort's raw definition JSON. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered structurally. The description adds genuine value by describing the return payload — a 'description' field and a 'summary' with block/condition counts and referenced event names — plus the prerequisite skill load. It stops short of covering pagination behavior or what happens when cohortId does not resolve.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and mode, followed by result shape, then search, then the skill prerequisite. Three sentences with little waste, though the clause 'use them for a quick shape of the definition' is mildly redundant after already describing the fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so adequately by naming the description and summary fields. Combined with the skill-load instruction and mode explanation, an agent has enough to call it correctly; only pagination and error behavior are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds intent beyond the schema: it frames 'search' as a discovery mechanism and cohortId as a mode switch between listing and single fetch. It omits any mention of includeDefinitions, so the raw-definition toggle is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List player cohorts'), parenthetically disambiguates the resource ('dynamic player segments'), and covers the two modes (list vs. fetch one by id). An agent can distinguish it from create_cohort, update_cohort, and get_cohort_members without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: use 'search' to locate cohorts by name or description, set cohortId to fetch a single cohort, and load the cohorts skill first. It does not explicitly name sibling alternatives (e.g., get_cohort_members for membership, create_cohort for creation), so routing guidance is contextual rather than exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_configurationsARead-onlyInspect
List the remote configurations for the current project and environment. Returns each configuration's id, name, alias, whether it is the primary config (the one SDKs receive), and a structure summary (top-level keys, total node count, max nesting depth) so you can decide which config to read and how large it is before requesting content. Use 'search' to filter by name. Omit it to get all configurations.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Filter configurations by name (case-insensitive substring match). Omit for all. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint/openWorldHint annotations already establish the safety profile, so the description's job is to add operational context. It does add useful detail about what is returned, including the semantic meaning of the primary flag ('the one SDKs receive') and why the structure summary exists, but it says nothing about result ordering, whether results are capped, or behavior on an invalid project/environment.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is front-loaded with purpose and return contents, and every clause is functional. The final two sentences about search duplicate what the schema already says, which is the only wasted space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing return values, and it does so thoroughly, including the primary flag and the structure summary fields. The remaining gaps (ordering, result caps, error behavior) are minor for a simple read-only list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, including that search is a case-insensitive substring match and that list_projects discovers valid ids. The description's sentence about search restates the schema almost verbatim and adds no new semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('List the remote configurations') and scopes it to 'the current project and environment', then enumerates exactly what each row contains (id, name, alias, primary flag, structure summary). It implicitly distinguishes itself from get_configuration by framing the result as a way to 'decide which config to read ... before requesting content', but it never distinguishes itself from the sibling search_configuration, and its 'Use search' phrasing refers to a parameter in a way that could be misread as naming that sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is clear when-to-use guidance: call this to survey configurations and gauge size before requesting content with get_configuration. It also explains the search parameter's optionality ('Omit it to get all configurations'). It stops short of stating when to prefer search_configuration over this tool, which is the one routing decision an agent still has to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dashboard_foldersARead-onlyInspect
List the project's dashboard folders (nested, up to 6 levels) with each folder's path and the dashboards in it, plus the dashboards at the top level. Use before creating, moving, or organizing dashboards. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real value beyond them by disclosing the result shape (folder paths, contained dashboards, top-level dashboards) and a depth bound of 6 levels, which matters for organizing operations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero waste: the returned content and depth limit come first, followed by usage timing and the skill prerequisite. Nothing is buried or repeated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only list tool with no output schema, the description covers what is returned, the hierarchy depth, and the calling context. An agent has everything needed to call it correctly without guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both projectId and environment fully documented, including how to discover valid values via list_projects. The description adds no parameter-level meaning beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (dashboard folders) and adds precise scope: nested up to 6 levels, each folder's path, contained dashboards, plus top-level dashboards. This distinguishes it clearly from list_dashboards, which would not return folder paths or hierarchy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance ('before creating, moving, or organizing dashboards') and a prerequisite ('Load the manage-dashboards skill first'). It does not explicitly name sibling alternatives such as list_dashboards or get_dashboard for narrower needs, so 4 rather than 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dashboardsARead-onlyInspect
List the analytics dashboards (boards) in the current project, including the saved queries on each. Use 'search' to find dashboards whose name or any query name matches a topic (e.g. 'FTUE funnel'). Use to answer questions about which dashboards exist, what queries they contain, or to locate a specific dashboard.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Filter dashboards by name or by the names of their queries. A board matches if its own name OR any query name contains this text. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| includeQueries | No | Whether to inline each dashboard's query list (id, name, queryType). Defaults to true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: project scoping, the fact that queries are returned inline by default, and the OR-matching rule for search. It omits result-size limits, pagination, or ordering, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, then search semantics, then use cases — nothing wasted. There is mild redundancy between "including the saved queries on each" and "what queries they contain," which keeps it off a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully sketches what comes back (dashboards with their saved queries) and how filtering works. It leaves the includeQueries=false behavior and any pagination or volume characteristics unstated, a modest gap for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so every parameter including 'search' and 'includeQueries' is already documented in the schema, and the description's search explanation largely restates it. The one added bit is the example topic ('FTUE funnel'), which is marginal. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("List the analytics dashboards (boards) in the current project") and adds scope detail (queries inlined on each). It implicitly distinguishes itself from get_dashboard and list_queries by covering the collection plus its nested queries, but never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the concrete use cases — answering which dashboards exist, what queries they contain, or locating a specific dashboard — and explains when to use the 'search' parameter with a worked example ('FTUE funnel'). It stops short of exclusionary guidance such as "use get_dashboard when you already have an id."
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_deeplinksARead-onlyInspect
List deeplinks created for the current project. Returns id, name, type (roblox_url, roblox_share_url, other, or web_url), slug, redirectUrl, and relevant metadata. web_url links point at a website running the Gamebeast JavaScript SDK; they also return taggedUrl (the destination with UTM values and utm_id=gb_) and their UTM fields. Use list_deeplinks first, then query_deeplink_metrics with the deeplink id for analytics. Load the understand-deeplinks skill (load_skill("understand-deeplinks")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Filter by deeplink type. | |
| search | No | Filter deeplinks by name or description (case-insensitive substring match). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=false), yet the description still adds real behavioral value: the exact return shape, the four type values, and the special case where web_url links additionally return taggedUrl with UTM values and utm_id=gb_<slug>. It does not address ordering or pagination, which are the only obvious behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description front-loads the core action and scope, then moves to return fields, then to workflow routing. Four sentences, all of them informative, though the dense run-on enumeration of return fields is slightly harder to scan than a compact list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must describe the return values, and it does so field by field, including the conditional web_url extras. It also supplies the skill prerequisite and the follow-up tool, which is enough for an agent to call this correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description goes beyond the schema by explaining what the type values actually mean, especially that web_url points at a site running the Gamebeast JavaScript SDK. It does not add anything about the search or projectId/environment parameters beyond the schema, so it stops short of a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List deeplinks created for the current project') with an explicit scope bound to the project. It then enumerates the returned fields, so an agent knows exactly what kind of data comes back, and it implicitly separates itself from query_deeplink_metrics, which is named later.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit sequencing rule ('Use list_deeplinks first, then query_deeplink_metrics with the deeplink id for analytics') and names the alternative tool plus the condition that selects it. It also adds a prerequisite ('Load the understand-deeplinks skill ... first'), so there is no ambiguity about when and how to start.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_event_typesARead-onlyInspect
List the analytics event (marker) types tracked in the current project and environment. Results are sorted by relevance when searching, otherwise by total sent (highest first). Use 'search' to find markers by name. If totalCount exceeds the returned results, call again with a higher limit or a more specific search. defaultProperties are the platform properties every event carries (device, country, …) — use each as a filter or breakdown column with its type (property, or direct for columns like the user id) and dataType. Each event's own properties and arguments are its custom ones. Events and arguments carry a description when one has been set. pendingEventTypes lists events that were described ahead of time but have no data yet; arguments with pending: true were described but not seen on that event yet.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default 25, max 100). | |
| search | No | Filter and rank results by name. Use to find markers relevant to a specific topic. | |
| sortBy | No | Sort results by a specific column. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| sortOrder | No | Sort order. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| includeHidden | No | Include event types that have been hidden from the dashboard. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description goes well beyond them by disclosing sort behavior (relevance when searching, otherwise total sent descending), the pagination/truncation signal via totalCount, and the meaning of pendingEventTypes and pending arguments. It lacks any note on permissions, rate limits, or cost for a potentially large listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by ordering, pagination, and result-shape semantics in a logical order with no filler. The backtick-heavy run of sentences about defaultProperties, properties, arguments, and pendingEventTypes is dense but each carries distinct information the schema cannot.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the return-shape burden and does it: it explains defaultProperties versus an event's own properties/arguments, the type/dataType fields usable as filters or breakdowns, and the pending flags for described-but-unseen data. For a 7-parameter read-only listing tool, an agent has enough to call it and interpret the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, but the description adds genuine meaning: 'search' is described as filtering AND ranking by relevance, and limit is tied to a re-call strategy when totalCount is exceeded. It does not clarify includeHidden, sortBy, or sortOrder beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: 'List the analytics event (marker) types tracked in the current project and environment', naming both scoping dimensions. It is clear what the tool returns, but it never distinguishes itself from the sibling describe_event_types, so an agent must infer the split between listing and describing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives actionable in-tool guidance: use 'search' to find markers by name, and call again with a higher limit or narrower search when totalCount exceeds the returned results. It does not state when to prefer this over describe_event_types or explain what happens with includeHidden, so alternatives are left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_experiment_locksARead-onlyInspect
List configuration paths reserved by scheduled or active experiments, optionally for one configuration. A reserved path (and anything under it) cannot be changed by another experiment or by a configuration edit until the owning experiment ends. Check this before calling create_experiment, and to explain why a configuration change was refused. Load the understand-experiments skill (load_skill("understand-experiments")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| configurationId | No | Only locks on this configuration. Omit for all configurations. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the description's job is to add meaning beyond that. It does by explaining lock semantics — a reserved path and everything under it cannot be changed by another experiment or a configuration edit until the owning experiment ends. It stops short of describing the fields each lock entry returns, which would have completed the picture.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the definition, then the consequence, then the usage routing and prerequisite. Nothing is redundant with the structured fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does need to convey what comes back, and it identifies the returned concept (reserved paths) and who owns them. It is complete enough to call correctly; only the shape of a lock entry is left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, including descriptions for projectId, environment, and configurationId, so the schema carries parameter meaning. The description's 'optionally for one configuration' merely corroborates the configurationId semantics; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'List configuration paths reserved by scheduled or active experiments, optionally for one configuration.' That is unmistakably distinct from siblings such as list_configurations or preview_configuration_change, so an agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-use guidance: before create_experiment and when explaining a refused configuration change, plus a prerequisite step (load_skill("understand-experiments")). This is exactly the routing information an agent needs, not just implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_experiment_membersARead-onlyInspect
List the units (players or servers) assigned to an experiment, newest first, with each unit's current group, how it got there (weightedHash / roundRobin / manual), and whether it is still enrolled. Filter by group, status, or source, or search by unit id — e.g. to check which group a specific player is in before changing it with assign_experiment_unit. Load the understand-experiments skill (load_skill("understand-experiments")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| search | No | Substring match on the unit id. | |
| source | No | `manual` lists units pinned to a group by hand. | |
| status | No | `active` (enrolled) or `unenrolled`. Omit for both. | |
| groupId | No | Only units in this group. | |
| pageSize | No | ||
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| experimentId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, and the description adds useful behavior beyond that: newest-first ordering, the assignment-source taxonomy, and the enrollment flag. It doesn't cover pagination behavior or response size limits, which the schema's defaults only partly imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded paragraph that opens with the resource and scope before the filters and workflow example. The dense em-dash phrasing packs in a lot, but every sentence, including the skill prerequisite, carries operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter, non-mutating list tool with no output schema, the description does the heavy lifting on return shape and filtering and adds a workflow pointer. Minor gaps remain around pagination semantics and the required experimentId parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 67% schema coverage the baseline is 3, but the description adds practical meaning: search matches on unit id, the filters are group/status/source, and the source values are explained as how a unit got into its group. The required experimentId and page/pageSize parameters remain undescribed in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (list the units assigned to an experiment) and enumerates the returned fields: current group, assignment source (weightedHash/roundRobin/manual), and enrollment state. This is clearly distinguishable from siblings such as get_cohort_members or get_experiment_results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete when-to-use guidance ('to check which group a specific player is in before changing it with assign_experiment_unit') and a prerequisite (load the understand-experiments skill first). It doesn't explicitly state when not to use it, e.g. that aggregate results belong to get_experiment_results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_experimentsARead-onlyInspect
List A/B experiments in the current project and environment. Returns each experiment's id, name, state (scheduled / active / ended / terminated), unit type (user / server), schedule, groups (id, label), and how many units are enrolled. Defaults to active and scheduled experiments; pass 'state' to include ended or terminated ones. Use get_experiment for targeting and the exact configuration changes, and get_experiment_results for how the groups are performing. enrolledUnits null means the count could not be read, not zero. Load the understand-experiments skill (load_skill("understand-experiments")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default 25, max 100). | |
| state | No | States to include. Defaults to ['active', 'scheduled']. | |
| search | No | Filter and rank results by experiment name. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/openWorldHint annotations, the description discloses the non-obvious default state filter (a silent scoping behavior an agent could otherwise miss) and the 'enrolledUnits null means the count could not be read, not zero' caveat, which prevents a real misinterpretation. It also flags the load_skill prerequisite, which is operationally important.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and return contents, then defaults, then sibling routing, then the skill prerequisite. Most sentences carry distinct information, though the return-field enumeration is somewhat dense and the trailing skill instruction could be positioned earlier for prominence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description carries the burden of explaining return values — and it does so field by field, including the null-count edge case. Combined with default-filter semantics and sibling routing, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning by explaining the default value set for 'state' and its filtering consequence. Minor gap: it lists states as scheduled/active/ended/terminated while the schema enum also includes 'pending', leaving one accepted value unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List A/B experiments') plus the scope ('current project and environment'), then enumerates the returned fields (id, name, state, unit type, schedule, groups, enrolled units). This makes it instantly distinguishable from sibling list_* tools and from get_experiment / get_experiment_results.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent that the default is active+scheduled experiments and that 'state' must be passed to see ended or terminated ones. It also routes to concrete alternatives by name: get_experiment for targeting/configuration and get_experiment_results for group performance, plus a required skill load first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_heatmapsARead-onlyInspect
List the project's heatmaps: map definitions (a world region's bounds, resolution, and background image) that the game registers through the SDK and users manage on the Data page. A heatmap is not a query — its id is what a heatmap query's heatmapId points at (run_heatmap_query, create_heatmap_query). Agents cannot create or edit heatmaps. Load the heatmap-queries skill (load_skill("heatmap-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Filter heatmaps by name (case-insensitive substring match). | |
| heatmapId | No | Return only this heatmap, e.g. to name the heatmap a saved query points at. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered structurally; the description reinforces it by stating agents cannot create or edit heatmaps and explaining how heatmaps come into existence (SDK registration plus Data page management). It adds provenance and id semantics but says nothing about result size, pagination, or ordering, which is what an agent still lacks for a list call with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource definition, then the disambiguation, then the constraint, then the prerequisite — a sensible priority order with no filler. The first sentence is long and packs definitional detail into stacked clauses, which costs a little immediate scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with four documented parameters and no output schema, the description covers what the objects are, why the id matters for downstream query tools, and what an agent cannot do. The remaining gap is return-shape expectations such as pagination or ordering, which matters here because no output schema is present to answer it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds conceptual meaning the schema does not: it explains that the heatmap id is the value a heatmap query's heatmapId points at, which tells an agent why heatmapId filtering exists and how to chain into run_heatmap_query. The search and environment parameters are left entirely to their schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list the project's heatmaps) and then defines the resource itself as map definitions with bounds, resolution and background image, so an agent knows exactly what object class it is enumerating. Crucially it disambiguates from the similarly named heatmap-query siblings by declaring 'A heatmap is not a query' and explaining that its id is the target of a query's heatmapId.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternatives explicitly (run_heatmap_query, create_heatmap_query) and the relationship that routes between them, states a hard exclusion ('Agents cannot create or edit heatmaps'), and gives an ordering prerequisite ('Load the heatmap-queries skill first'). This is the full when/when-not/alternatives pattern.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsARead-onlyInspect
List the organizations (id and name), projects and environment names this connection can reach. Use the returned project ids and environment names for other tool calls.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint=true and openWorldHint=false, so safety is declared. The description adds meaningful scope information beyond that: the results are limited to what "this connection can reach," which tells the agent to expect a connection-scoped, possibly partial inventory. It does not describe ordering or pagination, but with no output schema it still conveys the shape of the return.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, both earning their place: the first declares the returned resources and fields, the second tells the agent what to do with them. The most actionable information (what you get) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only discovery tool with no output schema and no nested structures, the description covers what is returned, the field-level detail for organizations, and the intended downstream use of the results. Nothing an agent needs in order 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4 and there is nothing the description needs to compensate for. It does not waste words re-explaining an empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("List") and enumerates the actual resources returned: organizations with id and name, projects, and environment names. It is slightly broader than the tool name list_projects, but that broadening is clarifying rather than confusing. It does not explicitly distinguish itself from the many list_* siblings (list_dashboards, list_cohorts, etc.), which is why it falls short of 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Use the returned project ids and environment names for other tool calls" gives clear context that this is a discovery/bootstrap call whose outputs feed subsequent operations. It does not state when not to use it or name an alternative, but no obvious alternative exists for this discovery role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_queriesARead-onlyInspect
List the saved analytics queries in the current project. Results include each query's type (insight, funnel, retention, heatmap), chart style, tracked event names, and which dashboards it appears on. Use 'search' to find queries by name or description (e.g. 'FTUE funnel', 'DAU'). If totalCount exceeds the returned results, call again with a more specific search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default 25, max 100). | |
| search | No | Filter and rank results by name or description. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered by structured data. The description adds genuine behavioral context beyond that: it discloses what is returned (query type, chart style, event names, dashboard membership) and describes a truncation/pagination behavior ('if totalCount exceeds the returned results, call again with a more specific search'). It does not mention default page size, but the schema does.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the purpose and followed by return contents and then the narrowing tactic; nothing is padding. Minor risk: "Use 'search' to find queries..." is unquoted-path ambiguous and could momentarily read as a sibling tool reference.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters, two required scoping params (projectId, environment), and no output schema, the description does cover what comes back and how to page. It does not state that results are scoped to the current project/environment combination beyond a passing phrase, nor mention ordering, so an agent must infer some scoping and result-shape details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3, and the description earns above baseline by clarifying that 'search' matches and ranks on name or description with concrete example terms, and by tying 'limit' to a totalCount-driven refine-and-retry loop. It adds meaning about result semantics rather than restating the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('List the saved analytics queries in the current project') and then enumerates the returned fields (type, chart style, tracked event names, dashboards), which lets an agent distinguish this from get_query or the create_*_query siblings. It stops short of explicitly naming a contrasting sibling, so it is clear but not fully differentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is real usage context: use the 'search' argument for name/description lookups (with concrete examples 'FTUE funnel', 'DAU') and refine the search when totalCount exceeds the returned page. However, that guidance is about how to use a parameter rather than when to choose this tool over alternatives like get_query, list_dashboards, or the run_*_query tools, so selection guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saved_formulasARead-onlyInspect
List the project's saved formulas (reusable insight formulas with their own metrics), each with how many saved queries use it, or fetch one by formulaId with the queries that use it. To use one in a chart, add a formula metric with data.savedFormulaId; the query then always computes the saved formula's current definition. Load the insight-queries skill (load_skill("insight-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Filter and rank by name, description or expression. | |
| formulaId | No | When set, fetch this one saved formula, with the queries that use it. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: listing mode returns per-formula usage counts, detail mode returns the queries that use it, and a chart-based formula metric always resolves to the formula's current definition. Return shape itself is not described, but the semantics an agent needs are.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The dual-mode behavior is front-loaded in the first sentence and the prerequisite is placed last, which is the right order. It is dense but nearly every clause carries information; the data.savedFormulaId sentence is slightly tangential to calling this tool, keeping it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, four-parameter listing/detail tool with no output schema, the description covers both modes, the prerequisite skill, and the conceptual meaning of a saved formula. What an agent needs to call it correctly is present; only result-shape and pagination behavior are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so formulaId, search, projectId and environment are already documented in the schema. The description reinforces formulaId's dual behavior but says nothing about the search parameter's matching/ranking or the environment scoping. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ("List the project's saved formulas") and parenthetically defines what a saved formula is, then states the second mode ("fetch one by formulaId with the queries that use it"). An agent can distinguish this from create_saved_formula or update_saved_formula without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the condition that selects each mode: omit formulaId to list, set formulaId to fetch one with its queries. It also gives a usage prerequisite ("Load the insight-queries skill first") and explains the downstream usage path via data.savedFormulaId. It does not name sibling alternatives such as list_queries, 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.
list_sentiment_sourcesARead-onlyInspect
List the community pulse sentiment sources configured for this project. Each source represents a stream of player messages (chat, feedback, bug reports, etc.) that the pipeline classifies and analyzes. Returns the source id, name, content type, active/paused state, and the total number of analyzed messages and unique users in the ClickHouse store. Call this first to understand what data exists before running query_sentiment. Load the understand-community-pulse skill (load_skill("understand-community-pulse")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only give readOnlyHint=true and openWorldHint=false, so the description carries the substantive load: it discloses that counts come from the ClickHouse store, that sources can be active/paused, and what fields come back. It does not mention result size, pagination, or whether paused sources are always included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then a one-line explanation of what a source is, then returns, then call ordering. Four sentences each add something, though the trailing two instructions could be merged for tighter flow.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates the returned fields and adds the prerequisite skill call plus call ordering, which is enough to invoke correctly. Minor gaps remain on whether paused sources are returned or how large the list can get.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already explains both projectId and environment, including the list_projects discovery hint. The description's phrase 'configured for this project' only restates the scoping already documented in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List the community pulse sentiment sources') and immediately scopes it to the project. It distinguishes itself from both query_sentiment and the similarly named get_community_pulse by describing sources as the configuration/metadata layer rather than the analysis result.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to call this first to see what data exists before running query_sentiment, and names the prerequisite skill load. It lacks an explicit 'when not to use' (e.g., if sources are already known), so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_skillARead-onlyInspect
Load a Gamebeast skill: detailed instructions for a task, such as building an insight query or interpreting experiment data. Call this before a task a skill covers (the server instructions list them) and follow what it returns. The same text is also served as the MCP resource skill:///SKILL.md.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The skill name to load. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the bar is lower, but the description still adds real behavior: the tool returns instructional text that the agent is expected to follow, and the same content is mirrored as an MCP resource. That is meaningful context beyond the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with what the tool does, then the invocation rule. Every clause earns its place, with no restating of the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers what it returns (task instructions), how to use the result (follow it), when to call it, and the equivalent resource path. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a 25-value enum, so the baseline is 3, but the description adds discovery context by noting that the server instructions enumerate the available skills. That helps the agent pick a valid enum value rather than guessing at the list.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Load a Gamebeast skill') and clarifies what a skill is ('detailed instructions for a task') with concrete examples (insight queries, experiment data). It does not explicitly distinguish itself from doc-reading siblings like read_doc or search_docs, which an agent might plausibly confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear trigger: 'Call this before a task a skill covers', and points to server instructions as the authoritative list. It also names an alternative access path (the skill://<name>/SKILL.md resource). No explicit when-not-to-use case is given, but the pre-task condition is a strong, actionable rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_dashboardAIdempotentInspect
Move a dashboard into a folder (or to the top level) and/or to a position among its siblings in the project's shared sidebar order. Saved when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| index | No | 0-based position among the folder's children (folders and dashboards). Omit to append. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| folderId | No | Target folder; null = top level. Omit to stay in the current folder. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The dashboard to move in the sidebar. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, idempotent, non-destructive, so the safety bar is partly met. The description adds real context beyond them: the move is persisted immediately ('Saved when this runs') and the reason text surfaces on a user approval card. It does not mention permission requirements or failure behavior for invalid folder/index values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the operation and its scope, followed by the persistence/justification note and the prerequisite. Nothing is padded and no sentence restates the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation with no output schema, this covers the essentials: what changes, that it is saved, why reason matters, and which skill to load first. Minor gaps remain around how index interacts with an unchanged folder and what the tool returns on success.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the per-parameter baseline is 3. The description adds genuine meaning on top by framing folderId and index as independently optional ('and/or'), telling the agent that reordering without refiling, and refiling without reordering, are both valid call shapes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: moving a dashboard into a folder (or top level) and/or repositioning it in the project's shared sidebar order. The phrase 'shared sidebar order' sharply scopes it away from layout/panel siblings like update_dashboard_layout, but no sibling is named explicitly, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an actionable prerequisite (load the manage-dashboards skill first) and instructs the agent to justify the change in reason because it is user-visible and saved. There is no explicit when-not guidance, e.g. how this differs from update_dashboard_folder for folder-level operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_configuration_changeARead-onlyInspect
Dry-run a configuration change without saving it: validates the changes exactly as update_configuration would and returns each change's before/after value, which keys' privacy would flip, whether the configuration is the primary one (live to game servers), and the current contentHash to pass to update_configuration. Optional: use it to check a change, or to show the user the before/after when they want to see it first. update_configuration runs the same validation and saves the change when it runs.
| Name | Required | Description | Default |
|---|---|---|---|
| changes | No | Up to 25 value changes, applied in order. Keep them minimal: only the keys that must change. May be empty when only privacy changes. | |
| privacy | No | Up to 50 keys to make private or public. Private keys are hidden from game clients but not from the dashboard — use them for values clients shouldn't see (a random seed, server-only tuning), not as a secret store. Applied after changes, so a key added by a change can be made private in the same call. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| configurationId | Yes | The numeric id of the configuration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond readOnlyHint=true by explaining the non-persistence explicitly and disclosing the shape of what comes back: per-change before/after values, which keys' privacy would flip, the primary-configuration flag with its meaning (live to game servers), and the contentHash needed to chain into update_configuration. That last detail is behaviorally important and appears nowhere in the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the dry-run framing and the return summary before the usage note. Minor slack in the "Optional: use it to check a change, or to show the user..." phrasing and in restating the update_configuration relationship, but nothing is bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description enumerates the return payload precisely enough (before/after, privacy flips, primary flag, contentHash) that an agent knows what it will get and how to feed the result into update_configuration. For a 5-parameter read-only preview tool this leaves nothing an agent would need missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents changes, privacy, projectId, environment and configurationId in detail, including the set/remove op semantics and the private-key explanation. The description mentions changes and privacy flips only in passing and adds no path syntax, ordering or limits beyond what the schema states. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Dry-run a configuration change without saving it") and immediately distinguishes itself from update_configuration by declaring it runs the same validation but persists nothing. An agent can tell exactly what this does versus its nearest sibling without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative explicitly ("update_configuration runs the same validation and saves the change when it runs") and gives two concrete triggers: checking a change, or showing the user the before/after. The only gap is that it never says when not to reach for it — e.g. use get_configuration to simply read the current state — so the routing is clear against one sibling but not the whole config toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_experimentARead-onlyIdempotentInspect
Dry-run an experiment definition without creating anything. Takes the same experiment object as create_experiment and returns whether it is valid, every problem that would block it (bad weights, stale baseValue, missing paths, name taken, invalid targeting, paths locked by another experiment), and each change alongside the base configuration's current value. exclusionConflicts lists the active experiments experiment exclusion would keep this one apart from (not blocking, but tell the user). Use it to check a definition before create_experiment (which runs the same checks and creates the experiment when it runs), or to show the user the plan when they want to see it first. Load the manage-experiments skill (load_skill("manage-experiments")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| experiment | Yes | ||
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description goes well beyond them: it enumerates the classes of blocking problems (bad weights, stale baseValue, missing paths, name taken, invalid targeting, paths locked by another experiment), explains that each change is returned with the base configuration's current value, and flags `exclusionConflicts` as non-blocking with an instruction to surface it to the user.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core behavior and the create_experiment contrast are front-loaded, and no sentence is pure filler. The parenthetical problem list and the exclusionConflicts clause are dense but each carries distinct information; the skill-loading note could arguably move to a separate line rather than trailing the sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain returns, and it does: validity verdict, blocking problems, per-change base values, and exclusion conflicts with their blocking status. What remains underspecified is the exact shape of the response (e.g., how changes are keyed per group), but the actionable content is complete for a dry-run tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% with a deeply nested object whose leaf fields are already annotated, so the schema carries most of the burden. The description adds one useful cross-reference, that `experiment` is identical to create_experiment's argument, plus an indirect signal about `baseValue` via 'stale baseValue', but gives no detail on projectId or environment beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific verb and resource ('Dry-run an experiment definition without creating anything') and immediately ties it to the sibling it mirrors ('Takes the same `experiment` object as create_experiment'). An agent can tell this apart from create_experiment and preview_configuration_change without inspecting either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use it before create_experiment, note that create_experiment runs the same checks but mutates, and an alternative use case (show the user the plan first). It also states a prerequisite action, loading the manage-experiments skill, so the agent knows setup is required before calling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_deeplink_metricsARead-onlyInspect
Query analytics for deeplinks: clicks, conversions, users, traffic sources, geography, KPI summaries, and LTV cohort curves. Results render as inline charts automatically. For web_url (website) deeplinks, a click is a landing recorded by the JavaScript SDK and a conversion is a session attributed to the link; conversion rate and LTV aren't meaningful. Use list_deeplinks first to find a deeplink id when one is needed. Load the understand-deeplinks skill (load_skill("understand-deeplinks")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | Time window: 7d, 14d (default), 28d, 56d, 90d, or all (all-time). For ltv, all is clamped to 90d automatically. | 14d |
| metric | Yes | Which deeplink metric to query: clicks_over_time (daily click count), conversions_over_time (daily in-game conversion count), users_over_time (new vs returning converted users daily), sources (clicks/conversions/revenue by referrer source), geography (clicks/conversions/revenue by country/region), kpis (summary: clicks, conversions, conversion rate, users, sessions, revenue), ltv (LTV cohort curve by day number; requires ltvType). | |
| ltvType | No | Required when metric='ltv'. 'revenue' = Robux LTV; 'playtime' = session playtime. | |
| userType | No | Optional filter for kpis: restrict to new or returning users only. | |
| breakdown | No | Optional breakdown dimension for kpis and ltv. 'source' splits by referrer category; 'deeplink' compares multiple deeplinks. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| deeplinkId | No | Deeplink id to scope the query. Required for clicks_over_time, conversions_over_time, users_over_time, sources, geography, and ltv. Optional for kpis (omit to aggregate all deeplinks). Use list_deeplinks first to find the id. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds genuinely non-obvious behavior: results render as inline charts automatically, and click/conversion definitions differ for web_url (website) deeplinks, which changes how to interpret output. It omits response shape details and any limits, keeping it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four front-loaded sentences with no filler: capability, rendering behavior, a domain caveat, then prerequisites. Minor redundancy in repeating the list_deeplinks pointer that already appears twice in the schema keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, three required, and no output schema, the description does the necessary work by naming the supported metrics, flagging the ltv-requires-ltvType dependency implicitly, and explaining that output renders as inline charts. A brief note on what each metric's result contains would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema, including range clamping for ltv and deeplinkId's conditional requirement. The description adds only the looser restatement "use list_deeplinks first to find a deeplink id when one is needed," which the schema already says per-parameter. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource ("Query analytics for deeplinks") and enumerates the exact metric families (clicks, conversions, users, sources, geography, KPIs, LTV cohorts) that map one-to-one onto the metric enum. An agent can distinguish it from generic siblings like execute_query or run_insight_query without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives concrete prerequisites: call list_deeplinks first to obtain a deeplink id, and load the understand-deeplinks skill before use. It also scopes the web_url case where conversion rate and LTV "aren't meaningful." The only gap is that it never states when to prefer a different analytics tool over this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_sentimentARead-onlyInspect
Run analytical queries over the community pulse (player sentiment) data. Supports six operations via the 'operation' field: 'overview' (totals: message count, unique users, avg sentiment), 'topics' (per-topic volume + positive/negative split + trend), 'phrases' (top complaint/praise/feature phrases — use phraseColumn='hates' for complaints), 'over_time' (volume and sentiment trend over a time series), 'breakdown' (volume by topic, source, country, device, or language), 'quotes' (sample real player messages; also resolves contentIds from get_community_pulse). All queries are parameterized and scoped to the current project. Load the understand-community-pulse skill (load_skill("understand-community-pulse")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows to return. Effective cap varies by operation: topics ≤ 20 (prefer topicLimit), phrases ≤ 50, over_time (no breakdown) ≤ 500 date buckets; over_time (with breakdown) = max dimensions per date bucket (default 10, all dates always included); breakdown ≤ 50, quotes ≤ 25. | |
| filters | No | Optional shared filters applied to all operations. | |
| breakdown | No | [over_time] Optional breakdown dimension: 'topic' splits each date by topic, 'source' by source_id. | |
| dimension | No | [breakdown] Required. Dimension to group by: 'topic' (topic key), 'source' (source_id), 'country' (metadata.country), 'device' (metadata.device), 'lang' (metadata.lang). | |
| operation | Yes | Which query to run: 'overview' — headline counts (messages, users, threads, avg sentiment); 'topics' — per-topic volume + sentiment split + trend comparison; 'phrases' — top complaint/praise/feature phrases (requires phraseColumn); 'over_time' — volume and sentiment as a time series; 'breakdown' — volume by a dimension (requires dimension); 'quotes' — sample real player messages. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| topicKeys | No | [phrases] When groupByTopic=true, restrict to these topic keys. Omit to include all topics. | |
| contentIds | No | [quotes] Explicit content_id values to resolve (e.g. from get_community_pulse quoteContentIds). When supplied, replaces filter-based sampling with a direct point lookup. | |
| topicLimit | No | [topics] Max topics to return (default 10, max 20). | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| granularity | No | [over_time] Time bucket size: 'day' (default) or 'week'. | |
| groupByTopic | No | [phrases] If true, return the top phrases per topic. If false (default), return a flat ranked list across all topics. | |
| phraseColumn | No | [phrases] Required. Which extracted phrase array to aggregate: 'hates' = complaint phrases (what users dislike), 'loves' = praise phrases (what users enjoy), 'feature_mentions' = named game features referenced. | |
| recentWindowDays | No | [topics] Days used for the 'last window' trend comparison. Defaults to half the lookback. Must be ≤ filters.days. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds that all queries are parameterized and scoped to the current project, and that supplying contentIds swaps filter-based sampling for a point lookup. It says nothing about cost/latency characteristics or result shape beyond the per-operation labels, so the added behavioral value is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the scope sentence, followed by an operation menu where each entry carries its return shape. The enumeration is long but each clause is load-bearing; only the trailing skill-load instruction could arguably move to the front.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 14 parameters, 6 operations and no output schema, the description does real work by sketching what each operation returns (totals, per-topic split, trend series, sample messages). Pagination and the exact response envelope are unaddressed, but per-operation caps are documented in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is a 3; the description earns above that by consolidating the operation-to-parameter contract in one place — 'phrases ... use phraseColumn=hates for complaints', '[phrases] requires phraseColumn', '[breakdown] requires dimension'. That cross-field dependency reasoning is the main thing an agent gets wrong on a 14-parameter dispatcher, and it is surfaced clearly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — 'Run analytical queries over the community pulse (player sentiment) data' — then enumerates all six operations with their output shapes. It is clearly distinguishable from get_community_pulse (which yields quoteContentIds) and list_sentiment_sources (which yields source ids).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete prerequisite ('Load the understand-community-pulse skill ... first') and names sibling touchpoints (get_community_pulse for contentIds, list_sentiment_sources for ids). It does not, however, explicitly say when to reach for get_community_pulse instead of this tool, so the alternative routing is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_docARead-onlyInspect
Read a Gamebeast documentation page as markdown. Pass a path from search_docs (or a docs URL); add section (a heading anchor) to read only that part. The first read of a page lists its headings. Long content comes back in chunks: when the result has nextOffset, call again with offset set to it to continue.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Page path such as '/sdk/roblox/api/configs', or a full docs URL (with #anchor). | |
| offset | No | Continue a long page from a previous result's nextOffset. | |
| section | No | Heading anchor to read just that section, e.g. 'shared-methods'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds non-obvious runtime behavior instead: the first read of a page returns its heading list, and long pages are chunked with a nextOffset cursor. Return-shape details are not spelled out, but the pagination contract is the important part and it is explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the core action, then narrowing, then pagination — no filler or repetition of the schema. Every sentence carries information the agent needs to call the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only three input parameters, no output schema, and annotations covering the safety profile, the description supplies exactly the missing pieces: path provenance, section narrowing, and the chunked-read loop. Nothing an agent needs in order to invoke this correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and each parameter already has an example, so baseline would be 3; the description goes slightly further by explaining the relationship between the parameters — path sourced from search_docs, section as a heading anchor, and offset strictly set from a prior nextOffset. That cross-parameter workflow is meaning the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Read a Gamebeast documentation page as markdown") and immediately positions it against the sibling search_docs by saying the path comes from there. An agent can distinguish this retrieval tool from search_docs without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear prerequisites and workflow: obtain a path from search_docs (or a docs URL), optionally narrow with a section anchor, and continue with offset when nextOffset is returned. It does not explicitly state when not to use it (e.g., prefer search_docs when the path is unknown), but the implied sequencing is strong enough to act on.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_panelADestructiveIdempotentInspect
Remove one panel (query, markdown or image) from a dashboard by panelId. A query panel's saved query is kept (it stays in list_queries). Saved when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| panelId | Yes | The panel to remove (from get_dashboard). A query panel's saved query is kept. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The dashboard the panel is on. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true and readOnly=false, so the safety profile is covered; the description adds genuinely new behavior: the query panel's saved query is preserved in list_queries, and the change is persisted immediately on invocation. It doesn't describe failure behavior for a missing panelId, but the key side effects are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with what is removed and by which identifier, followed by the non-obvious retention fact and the skill prerequisite. The telegraphic 'Saved when this runs; explain it in reason' is terse but not wasteful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive five-required-parameter mutation with no output schema, the description covers the action, the retention side effect, persistence, the approval reason, and the required prerequisite skill. Edge cases such as a nonexistent panelId or authorization requirements are the only meaningful omissions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented, including the reason and panelId fields. The description reinforces that panelId comes from get_dashboard and that reason is user-facing, but adds little semantic detail beyond the schema, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource plus the accepted panel types ('Remove one panel (query, markdown or image) from a dashboard by panelId'), so an agent knows exactly what is being deleted. It also differentiates itself from query-deletion semantics by noting the saved query survives, though it never names the close sibling remove_query_from_dashboard explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a hard prerequisite ('Load the manage-dashboards skill ... first') and clarifies the boundary case where a query panel is removed but the query itself is retained. It stops short of naming an alternative tool or the condition under which an agent should prefer removing the query from the dashboard instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_query_from_dashboardADestructiveIdempotentInspect
Take a saved query off one dashboard. The query itself is kept (it stays in list_queries and on other dashboards). To delete the query everywhere, use delete_query. Saved when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| queryId | Yes | The saved query to remove from it. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The dashboard to take the query off. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so safety is structured. The description adds genuinely useful nuance beyond that: the removal is scoped to one dashboard, the query survives in list_queries and on other dashboards, and the change is applied ('Saved when this runs'). It stops short of mentioning permissions or how the change is confirmed, so not quite top marks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action and its scope, then the alternative, then the persistence note and prerequisite. No filler; every clause carries decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by stating the resulting state (query retained elsewhere, change saved). Combined with the skill prerequisite and the sibling pointer, nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3. The description still adds meaning: it tells the agent to justify the action in 'reason' and clarifies the pairing of dashboard vs. query identity that dashboardId and queryId represent, which reduces mis-targeting among 5 required integer/string params.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Take a saved query off one dashboard') and immediately bounds the effect ('the query itself is kept'). It is clearly separable from delete_query, add_query_to_dashboard, and remove_panel among the many siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit alternative with its selecting condition ('To delete the query everywhere, use delete_query') and a prerequisite ('Load the manage-dashboards skill ... first'). An agent knows when to pick this tool and what must precede it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_cohort_definitionARead-onlyInspect
Build and execute an ad-hoc cohort (player segment) definition. Validates the definition AST, counts matching players, and returns the definition plus a compact summary. Returns { error } on invalid input. Not for querying saved cohorts (use get_cohort_member_count). Load the cohorts skill (load_skill("cohorts")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short, descriptive cohort name (e.g. 'Churned big spenders'). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| definition | Yes | ||
| description | No | One or two plain-language sentences saying who is in the cohort, including the time window (e.g. 'Players who made at least 5 purchases in the last 30 days.'). Pre-fills the description when the cohort is saved. Always set it. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint and openWorldHint, so the description adds real value: it discloses the validate-then-count pipeline, the shape of the response (definition plus a compact summary), and the { error } failure mode on invalid input. The 'compact summary' contents are left vague, and with no output schema the return contract could be spelled out further.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with what the tool does, followed by the failure contract and routing/prerequisite notes. The two separate return-behavior sentences (definition+summary, then { error }) could be merged, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a very deep input schema, no output schema, and 4 required parameters, the description covers purpose, validation behavior, failure mode, sibling routing, and a required skill prerequisite. The remaining gap is what the returned summary actually contains and any limits on definition size.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, and the schema already documents name, projectId, description, and environment, so the baseline of 3 applies. The description references the 'definition AST' but adds no meaning about the deeply nested definition structure, which is the parameter most likely to be mis-invoked.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb chain (build, validate, execute, count) against a specific resource (an ad-hoc cohort/player-segment definition) and explicitly distinguishes the scope from saved-cohort lookups by naming get_cohort_member_count. An agent can tell this apart from create_cohort and update_cohort without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit exclusion (not for saved cohorts, use get_cohort_member_count) and a concrete prerequisite (load_skill("cohorts") first). It does not explicitly say when to use this versus create_cohort for persisting a segment, so the alternative routing is clear for one sibling but not all.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_funnel_queryARead-onlyInspect
Build and execute an ad-hoc funnel analytics query. Returns funnel step data for rendering plus a compact summary for analysis. A global filter or breakdown on a property or argument needs that column, with the same dataType, on every step's event; put a condition that applies to every step in the global filters once (not also per step), and segment players by behavior with a cohort filter or breakdown. Load the funnel-queries skill (load_skill("funnel-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes | ||
| title | Yes | A short, lean chart title describing the funnel (e.g. 'Session to purchase funnel'). Do NOT include the time range. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuine value by describing the return payload (funnel step data for rendering plus a compact summary), which matters because no output schema exists, and by specifying how filters must be applied globally rather than per step.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and nothing is pure filler, but the middle sentence is a dense run-on ("A global filter or breakdown on a property or argument needs that column, with the same dataType, on every step's event; put a condition...") that is hard to parse on a single read. Breaking it into shorter directives would improve usability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a deep, nested four-parameter schema with no output schema, and the description only partially compensates: it covers filters, breakdowns, and return shape, but says nothing about the time window, metrics array constraints (min 2 steps, display.name required), or conversionCriteria. It leans on the funnel-queries skill for those details, which is reasonable but leaves the description itself incomplete for a high-complexity tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 75% schema coverage the schema already documents most parameters, but the description contributes semantics the schema does not: that a global filter or breakdown on a property requires the same column and dataType on every step's event, and that all-step conditions belong in global filters exactly once. That is meaningful guidance for constructing a valid spec.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Build and execute an ad-hoc funnel analytics query" gives a specific verb and resource, and "ad-hoc" implicitly separates it from create_funnel_query. However, it never names the sibling tools it replaces or differs from, so an agent must infer that distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states real construction rules — put cross-step conditions in global filters once rather than per step, keep dataType consistent across steps, and use cohort filters/breakdowns to segment by behavior. It also makes loading the funnel-queries skill a prerequisite. What it lacks is any explicit comparison to create_funnel_query, update_funnel_query, or execute_query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_heatmap_queryARead-onlyInspect
Build and execute an ad-hoc heatmap query: count one event's recorded positions per cell of a heatmap (a map definition from list_heatmaps). Returns the cells for rendering plus a compact summary with the hottest locations in world coordinates. Load the heatmap-queries skill (load_skill("heatmap-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes | ||
| title | Yes | A short, lean chart title naming what is mapped (e.g. 'Deaths on Arena'). Do NOT include the time range. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds genuine behavior beyond that: it returns per-cell data for rendering plus a compact summary of hottest locations in world coordinates, and it flags a mandatory skill-load step. It stops short of noting result size limits or cell-resolution constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each doing work: what it does, what it returns, and the prerequisite. Front-loaded with the action and resource. The skill-load instruction is placed last, which is correct, though it is an operational aside rather than a description of the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The input schema is large and deeply nested, and there is no output schema, so the description usefully compensates by describing the return shape (cells plus a summary with hottest world coordinates). Given the complexity, the main remaining gap is guidance on the heatmap definition itself, which is delegated to list_heatmaps and the skill rather than duplicated here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the important fields (heatmapId, metrics) already carry descriptions in the schema itself. The description reinforces the core semantic — exactly one event whose positions are counted per cell — but adds nothing about time, filters, title, projectId, or environment. Baseline 3 is appropriate when the schema does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair ('Build and execute') and a specific resource ('ad-hoc heatmap query'), then defines the semantics: counting one event's recorded positions per heatmap cell. The 'ad-hoc' framing and the pointer to list_heatmaps for the map definition distinguish it from the saved-query siblings (create_heatmap_query/update_heatmap_query) and from get_heatmap_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite ordering: load the heatmap-queries skill before calling. It also implies the trigger condition (you need cell-level position counts for one event on an existing map). It does not explicitly state when-not to use it versus create_heatmap_query or get_heatmap_image, so a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_insight_queryARead-onlyInspect
Build and execute an ad-hoc insight analytics query. Returns chart data for rendering plus a compact summary for analysis. A global filter or breakdown on a property or argument needs that column, with the same dataType, on every event metric's event; put a condition that applies to every metric in the global filters once (not also per metric), and segment players by behavior with a cohort filter or breakdown. Load the insight-queries skill (load_skill("insight-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes | ||
| title | Yes | A short, lean chart title describing WHAT is measured (e.g. 'Daily active users'). Do NOT include the time range or dates — the chart shows the time range as a separate subtitle. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered. The description adds useful behavioral context beyond annotations: it discloses the return format ('chart data for rendering plus a compact summary for analysis') and specific constraints about how filters and breakdowns must be structured relative to event metrics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose and contains no filler. The middle sentence is long and dense, but every part conveys a specific construction rule or prerequisite, so it remains efficient despite being slightly hard to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's high complexity (nested spec with many constraints), the description appropriately directs the agent to load the insight-queries skill for full guidance. It also covers return values and key filter/breakdown placement rules, though it cannot exhaustively document the deep schema, which is acceptable for this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, so the baseline is 3. The description compensates by adding non-obvious structural semantics for the spec: global filters or breakdowns on a property/argument require matching columns with the same dataType on every event metric's event, conditions applying to all metrics belong in global filters once, and cohort filtering is suggested for behavioral segmentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Build and execute an ad-hoc insight analytics query') and mentions return contents, making the core action clear. However, it does not explicitly differentiate from sibling tools like create_insight_query or execute_query, leaving ambiguity about when this ad-hoc execution path is preferred.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides structural rules for placing filters and breakdowns, and a prerequisite to load the insight-queries skill first. But it does not explicitly say when to use this tool versus create_insight_query or execute_query, so alternatives remain implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_retention_queryARead-onlyInspect
Build and execute an ad-hoc retention analytics query: of the players who did a start event, how many came back and did a return event N days/weeks/months later. Returns retention data for rendering plus a compact summary for analysis. A global filter or breakdown on a property or argument needs that column, with the same dataType, on both events; put a condition that applies to both in the global filters once (not also per event), and segment players by behavior with a cohort filter or breakdown. Load the retention-queries skill (load_skill("retention-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes | ||
| title | Yes | A short, lean chart title describing the retention measured (e.g. 'Day-1 retention'). Do NOT include the time range. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true and openWorldHint=false, so safety is covered, and the description adds valuable behavior beyond that: the call returns retention data for rendering plus a compact summary for analysis, and it mandates a skill load before invocation. It does not discuss execution cost, latency, or result size limits for large time ranges, which is the remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose and return shape are front-loaded in the first two sentences, with the operational rules and the skill prerequisite trailing. The third sentence is dense and slightly parsing-heavy ('A global filter or breakdown on a property or argument needs that column, with the same dataType, on both events'), but every clause carries actionable instruction rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a deeply nested 4-parameter query-builder with no output schema, the description covers purpose, return shape, the two-event model, filter placement rules, and a pointer to a skill that presumably supplies spec examples. An agent has enough to decide to call it and to know what to load before constructing the spec.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% and the nested schema already documents metrics as exactly two events and describes measurement/computeMode/retentionGroup. The description adds semantics the schema cannot express: how a filter or breakdown must reference the same column with the same dataType on both events, and that shared conditions belong in global filters rather than duplicated per event. That is genuine guidance beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb+resource ('Build and execute an ad-hoc retention analytics query') and then defines the retention semantics precisely: players who did a start event and returned to do a return event N days/weeks/months later. The word 'ad-hoc' implicitly separates it from the create/update_retention_query siblings, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real operating context: this is for ad-hoc retention analysis, a global filter or breakdown requires matching columns/dataTypes on both events, and a condition applying to both belongs in the global filters once. It also declares a hard prerequisite (loading the retention-queries skill first). It stops short of naming alternatives such as create_retention_query or run_insight_query, so the when-not case is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_configurationARead-onlyInspect
Search for keys or values inside one or all configurations for this project. Useful for questions like 'where is maxPlayers set?' or 'which configs have a ranked sub-object?'. Omit configurationId to search across all configurations in the current environment. Set isRegex to true to use a regular expression. target controls what to match: 'keys' (key names only), 'values' (primitive values only), 'both' (default), or 'descriptions' (the documentation written for keys — e.g. find which key controls "respawn time" when you don't know its name). Use path to scope the search to a specific sub-object (folder) in the config tree.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Scope search to a specific sub-object by segment path, e.g. ["settings"]. Omit to search the entire configuration. | |
| query | Yes | The search term. Case-insensitive substring match by default; set isRegex for a regex. | |
| target | No | 'keys': match key names only. 'values': match primitive values only. 'both' (default): match either. 'descriptions': match the text of key descriptions; matches include the description. | |
| isRegex | No | Treat query as a JavaScript regex (case-insensitive). Default false. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| configurationId | No | Search only this configuration. Omit to search all configurations in the current environment. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered structurally. The description adds useful behavior beyond that — default case-insensitive substring matching, JS regex semantics, and what a 'descriptions' match returns — but says nothing about result limits, pagination, or ordering, which matter for a potentially broad cross-configuration search.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is front-loaded with purpose and question examples, then moves through parameters in a logical order with no filler sentences. It is on the longer side for seven parameters, but nearly every clause carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a seven-parameter read-only search with no output schema, the description covers scoping, matching mode, and regex behavior well. The remaining gap is that the shape and volume of results are never described, so an agent cannot anticipate truncation or pagination on broad searches across all configurations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description earns an extra point by explaining the intent behind parameters rather than restating them, particularly the 'descriptions' target (matching documentation text and returning the description) and the rationale for omitting configurationId. It adds meaning about matching semantics that the schema only briefly touches.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb and resource ('Search for keys or values inside one or all configurations') and immediately narrows the scope to the current project. The concrete question examples ('where is maxPlayers set?') make it unambiguous that this is a search tool rather than the get/list siblings such as get_configuration or list_configurations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing rules are given for every mode: omit configurationId to fan out across all configurations, set isRegex for regex queries, and use target to switch between keys, values, both, or descriptions. The 'descriptions' guidance even names the scenario (finding a key when you don't know its name), so an agent can pick the right invocation without inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsARead-onlyInspect
Search Gamebeast's public documentation: feature guides (configurations, experiments, analytics, cohorts, jobs, API keys, MCP, …), the Roblox (Luau), Unity, Unreal and Godot SDK reference, the HTTP API reference (every endpoint with its parameters and request/response shapes), the changelog, and newsletters. Returns the best-matching page sections, each with a snippet, path, anchor, and public URL — often enough to answer directly. Call read_doc with a result's path and anchor for the full text. Omit query to list every page (optionally within one section) instead of searching.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (default 8). Ignored when listing pages. | |
| query | No | Keywords to search for, e.g. 'unity experiments', 'OnChanged config listener'. | |
| section | No | Restrict to one part of the docs: docs (feature guides), sdk (Roblox/Unity/Unreal/Godot SDK reference), api (HTTP API reference), changelog, or newsletter. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds real behavioral detail by describing the return shape (snippet, path, anchor, public URL) and warning that results are 'often enough to answer directly,' implying a possible follow-up read. It does not mention result limits beyond the schema default or any rate/coverage caveats for the search index, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and corpus, then the return shape, then the sibling hand-off, then the alternate listing mode — a logical ordering. The long parenthetical enumerating guide topics is slightly heavy but it earns its place by telling the agent what questions this tool can answer.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description supplies the effective one (snippet, path, anchor, URL) and explains how to escalate to read_doc for full text. For a three-optional-parameter read-only search tool, nothing an agent needs in order to call it or interpret results is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds semantic meaning the schema does not: omitting `query` switches the tool into a list-all-pages mode, and that mode can be narrowed to a single section. This explains the interaction between the two parameters rather than restating them.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Search Gamebeast's public documentation') and then enumerates the corpus it covers: feature guides, four SDK references, HTTP API reference, changelog, newsletters. This is unmistakably distinct from sibling tools like search_configuration (project data) and read_doc (single-page fetch).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: 'Call read_doc with a result's path and anchor for the full text' names the alternative and the condition that selects it. It also documents the non-obvious alternate mode — omit `query` to list every page, optionally scoped to one section — so both the search and browse paths are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_primary_configurationADestructiveIdempotentInspect
Make a configuration the project's primary configuration in this environment. This pushes it to every connected game server immediately, replacing the current primary — tell the user which configuration it replaces. Calling it for the configuration that is already primary changes nothing. The switch happens when this runs. Always explain the change in reason; it is recorded with the change.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why this change is being made, in one or two sentences a reviewer can judge it by. Shown to the approver. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| configurationId | Yes | The numeric id of the configuration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive=true and idempotent=true, and the description adds real blast-radius context: the change pushes to every connected game server immediately and replaces the current primary. It also discloses the no-op case and the runtime timing ('the switch happens when this runs'), which annotations alone cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with what the tool does and immediately followed by impact, then the no-op edge case and the reason requirement. Each sentence carries distinct information with no restatement of the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter mutation with no output schema, the description covers effect, blast radius, idempotency, and the reason requirement, which is close to sufficient. It omits that the change appears to go through an approver (implied by the reason parameter's schema text) and says nothing about permissions or whether the switch can be reverted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters, including that reason is shown to the approver. The description only reinforces that reason must always be supplied and is recorded with the change, adding minor meaning over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with explicit scope: make a given configuration the project's primary configuration in a named environment. An agent can distinguish this from update_configuration or create_configuration without opening the schema. It stops short of naming a sibling to contrast with explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: the call is a no-op if the configuration is already primary, and the agent must tell the user which configuration is being replaced. It does not mention alternatives (e.g., use update_configuration for non-primary changes) or prerequisites, so there is a small inference gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
terminate_experimentADestructiveIdempotentInspect
Stop a scheduled or active experiment immediately. Every unit goes back to the base configuration on its next fetch, the experiment's config path locks are released, and it cannot be restarted — a follow-up needs a new experiment. Pass the experiment's exact name from get_experiment as a confirmation, and a reason (recorded with the change). Takes effect as soon as this is called. Load the manage-experiments skill (load_skill("manage-experiments")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why this is being done, in one or two sentences a reviewer can judge it by. Shown to the approver. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| experimentId | Yes | ||
| experimentName | Yes | The experiment's exact name, as get_experiment returned it. Confirms you are terminating the experiment you think you are. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only flag destructive and idempotent; the description goes well beyond them by explaining exactly what destruction means: every unit reverts to the base configuration on its next fetch, config path locks are released, and the experiment is permanently unrestartable. It also notes immediate effect and that the reason is recorded with the change, which is precisely the behavioral context an agent needs before an irreversible call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Effects are front-loaded right after the purpose sentence, which is the correct order for an irreversible operation, and each sentence carries distinct information. The trailing skill-loading instruction is procedural but still earns its place as a prerequisite; the wording is dense but not padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter, all-required destructive tool with no output schema, the description covers irreversibility, timing of effect, lock release, and the confirmation parameter contract. It does not describe the response body or failure modes, but nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 80%, so most parameters are already documented, but the description adds the intent behind experimentName (an exact-name confirmation guard pulled from get_experiment) and ties reason to the recorded change. The only undocumented parameter, experimentId, is left to the schema, which keeps this just below a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("Stop a scheduled or active experiment immediately") and pins the scope to scheduled or active experiments, which implicitly separates it from update_experiment_rollout or create_experiment. An agent can tell what the tool does without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly states the triggering context (stopping a scheduled or active experiment that cannot be restarted, so a follow-up requires a new experiment) and adds a prerequisite to load the manage-experiments skill first. It stops short of naming the sibling alternative (e.g., update_experiment_rollout) that an agent might confuse it with, so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_cohortADestructiveIdempotentInspect
Change a saved cohort's name, description, and/or definition. Partial: omitted fields keep their current value; pass description null or an empty string to clear it. A definition replaces the saved one entirely — start from list_cohorts' definition, change only what the user asked for, and dry-run it with run_cohort_definition first. Saved when this runs; explain it in reason. Load the manage-cohorts, cohorts skills (load_skill("manage-cohorts"), load_skill("cohorts")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Cohort name, unique within the project (e.g. 'Whales — 5+ purchases ever'). | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| cohortId | Yes | The cohort's id (from list_cohorts). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| definition | No | The complete new definition. Replaces the saved one entirely — start from list_cohorts' definition (cohortId set) and change only what the user asked for. Omit to keep it. | |
| description | No | Plain-language description of who is in the cohort and what it is for. Pass null or an empty string to clear it; omit to leave it unchanged. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=true, and the description earns credit beyond them by naming what is destroyed ("a definition replaces the saved one entirely"), clarifying merge-vs-replace semantics (omitted fields are kept), and explaining how to clear a field with null/empty string. It also discloses that the change is persisted immediately and that reason is surfaced on an approval card, which is material context an agent otherwise would not have.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then partial-update rules, then the ordered workflow, then prerequisites. Slight redundancy with the schema text on the description field and a trailing skill-loading instruction that could be a preamble, but no sentence is filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool whose definition argument is a deeply nested AST, the description correctly delegates the structure to the cohorts skill and points at list_cohorts/run_cohort_definition for building and validating it. It never states what the call returns on success, a minor gap given there is no output schema, but the caller's decision-relevant information is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents name, reason, cohortId, projectId, definition, description, and environment, including the omit-to-keep behavior. The description reinforces the partial-update semantics and the "start from list_cohorts' definition" rule, but it adds little about parameters that the schema descriptions do not already state, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Change a saved cohort's name, description, and/or definition" gives a specific verb plus resource and enumerates the mutable surface, which cleanly separates it from create_cohort, delete_cohort, and list_cohorts without needing the schema opened.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies an explicit workflow: load the manage-cohorts/cohorts skills first, start from list_cohorts' definition, and dry-run with run_cohort_definition before saving. What it does not do is state the inverse condition (e.g. "use create_cohort for a brand-new cohort"), so the alternative-selection guidance is strong but not complete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_configurationADestructiveInspect
Change specific values inside an existing configuration. Read the configuration first (get_configuration / search_configuration) and pass the contentHash you read as baseContentHash; the write is rejected if the configuration changed since. Each change is a set (create or overwrite the value at a key path; the parent must exist) or a remove. Keep changes minimal — only the keys that must change — and put every related change for one configuration in a single call. Private keys can be edited and stay private. To make keys private or public, pass privacy (applied after changes, so a new key can be made private in the same call). Private keys are hidden from game clients by the SDK but visible on the dashboard — they keep values like a random seed away from clients; they are not a secret store. The change is saved when this runs (it is not a draft); saving the project's primary configuration pushes it live to connected game servers immediately. Always explain the change in reason; it is recorded with the change.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why this change is being made, in one or two sentences a reviewer can judge it by. Shown to the approver. | |
| changes | No | Up to 25 value changes, applied in order. Keep them minimal: only the keys that must change. May be empty when only privacy changes. | |
| privacy | No | Up to 50 keys to make private or public. Private keys are hidden from game clients but not from the dashboard — use them for values clients shouldn't see (a random seed, server-only tuning), not as a secret store. Applied after changes, so a key added by a change can be made private in the same call. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| baseContentHash | Yes | The contentHash returned by get_configuration / search_configuration for the version you read. The write is rejected if the configuration changed since. | |
| configurationId | Yes | The numeric id of the configuration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say non-read-only and destructive; the description goes much further, disclosing optimistic concurrency (write rejected if the configuration changed), that the change is saved immediately rather than drafted, and that saving the primary configuration pushes live to connected game servers immediately. It also defines privacy semantics and warns that private keys are dashboard-visible and not a secret store, which is exactly the kind of consequence an agent needs before a destructive mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the read-then-write precondition, and every sentence carries operational content. The private-key explanation is stated twice (once in the description, once in the schema) and could be trimmed slightly, but the overall density is justified for a destructive tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-idempotent mutation with no output schema, the description covers the full call contract: precondition read, concurrency token, operation semantics, privacy ordering, immediate persistence and live push, and the mandatory reason. Nothing an agent needs in order to invoke it safely is missing, aside from the optional preview sibling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, but the description still adds meaning: baseContentHash is tied to a prior read and enforces a stale-write rejection, privacy is applied after changes so a newly added key can be privatized in the same call, and reason is recorded with the change. Minor style points lost only because some phrasing mirrors the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Change specific values inside an existing configuration'), which clearly separates it from create_configuration, delete_configuration, and update_configuration_descriptions. It also characterizes the change model (set/remove operations) so the agent knows this is a partial mutation, not a full replace.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to read first via get_configuration / search_configuration and pass the resulting contentHash as baseContentHash, and advises batching related changes into one call. It does not mention the sibling preview_configuration_change, which is the obvious alternative for validating a change before committing, so the routing guidance is incomplete rather than absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_configuration_descriptionsAIdempotentInspect
Write descriptions that document a configuration and its keys: what a key controls, its units, and valid ranges. Set the configuration's own description and/or describe individual keys by path (object keys only, not array items); an empty description removes it. Descriptions are metadata only: this does not change any value, does not change the contentHash, and does not deploy anything to game servers. Read the configuration first (get_configuration) so the paths exist and the descriptions are accurate. Always explain why in reason; it is recorded with the write.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why these descriptions are being written, in one sentence. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| description | No | New description of the configuration as a whole. An empty string clears it. Omit to leave it unchanged. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| configurationId | Yes | The numeric id of the configuration. | |
| keyDescriptions | No | Up to 50 key descriptions to set or remove. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations it discloses that an empty description deletes it, that contentHash is unaffected, that nothing is deployed, and that the reason is recorded with the write. These are exactly the side-effect details an agent needs before mutating metadata that it could not infer from readOnlyHint=false / idempotentHint=true alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the purpose, then constraint, then side-effect profile, then prerequisite. No filler and no repetition of the tool name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation tool with no output schema, the description covers purpose, structural constraint (no array paths), destructive-vs-clearing semantics, side effects on contentHash and deployment, and the discovery prerequisite. Nothing an agent needs 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents path, description, reason, projectId, environment, and configurationId. The description reinforces the object-keys-not-array-items constraint and the empty-string-clears behavior, but adds essentially no new semantics beyond what the schema states — the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Write descriptions that document a configuration and its keys" gives a specific verb and resource, and the metadata-only clause ("does not change any value, does not change the contentHash, and does not deploy anything") cleanly separates it from update_configuration and preview_configuration_change. An agent can identify the tool's scope without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a concrete prerequisite workflow ("Read the configuration first (get_configuration) so the paths exist") and mandates a reason for every call. It stops short of explicitly saying when to prefer update_configuration over this tool, but the metadata-only framing makes the boundary inferable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dashboardADestructiveIdempotentInspect
Rename a dashboard, edit its description, icon or color, and/or set its complete ordered list of saved queries (reorder, or add/remove several at once). Read it with get_dashboard first. Queries left out of queryIds are taken off this dashboard but not deleted; markdown and image panels are kept. To move or resize panels use update_dashboard_layout. For a single add or remove, add_query_to_dashboard / remove_query_from_dashboard are simpler. Saved when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | ||
| name | No | New name. Must be unique in the project. | |
| color | No | ||
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| queryIds | No | The COMPLETE ordered list of saved queries the dashboard should show — use it to reorder, or to add/remove several at once. Start from get_dashboard's list. Queries left out are taken off the dashboard (not deleted). Omit to leave the queries unchanged. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The dashboard to change. | |
| description | No | ||
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description goes beyond them by spelling out exactly what the destruction means: queries omitted from queryIds are detached from the dashboard but the saved queries themselves are not deleted, and markdown/image panels are kept. It also states the change is persisted on run and that reason is shown on an approval card. It stops short of describing return values or failure modes, but for an annotated mutation this is strong disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded with the mutation scope, then prerequisites, then the destructive semantics, then alternatives. Every sentence carries information, though it is dense and the skill-loading instruction plus the approvals note make it longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter destructive mutation with no output schema, the description covers the prerequisite read, the skill requirement, the precise effect on panels and queries, the persistence behavior, and the correct sibling for each related task. Nothing an agent needs to call this safely and correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so several parameters already carry their own docs (name uniqueness, color hex, projectId/environment discovery via list_projects). The description adds semantics the schema can't: queryIds must be the COMPLETE ordered list and omitting it leaves queries unchanged, plus the instruction to explain the change in reason. Minor params like description and icon get no extra treatment here, but their schema text is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a concrete verb and resource ("Rename a dashboard, edit its description, icon or color, and/or set its complete ordered list of saved queries"), enumerates every editable field, and explicitly names the siblings it is not (update_dashboard_layout, add_query_to_dashboard, remove_query_from_dashboard). An agent can distinguish it from create_dashboard, duplicate_dashboard, and move_dashboard without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit preconditions ("Read it with get_dashboard first", load the manage-dashboards skill first) and routes to alternatives with stated conditions: layout work goes to update_dashboard_layout, and "For a single add or remove, add_query_to_dashboard / remove_query_from_dashboard are simpler". This is a full when/when-not/alternative map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dashboard_folderAIdempotentInspect
Rename a dashboard folder, change its icon or color, and/or move it under another folder or to a position among its siblings. Saved when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | ||
| name | No | ||
| color | No | ||
| index | No | 0-based position among the folder's children (folders and dashboards). Omit to append. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| folderId | Yes | The folder to change. | |
| parentId | No | Move under another folder (null = top level). Can't move into its own subtree. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is largely covered. The description adds that the change is persisted immediately and must be justified in 'reason', plus the skill prerequisite, but leaves out what happens if every optional field is omitted, whether permissions or approval are required beyond the approval card hinted at in the schema, and how partial updates treat unmentioned fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, tightly front-loaded: the operation set comes first, and the persistence plus skill prerequisite follow. No redundant restatement of the name or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 9-parameter mutation tool with no output schema, the definition covers the operation set, persistence, and the required workflow prerequisite, and annotations cover the safety profile. The main remaining gap is that all eight mutable attributes are optional yet the description never states whether a call with none of them is valid or a no-op.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67%, with the key parameters (icon, color, index, parentId, folderId, reason, projectId, environment) already documented in the schema; only 'name' lacks an inline description, and its constraints are self-evident. The description's enumeration of updatable attributes mirrors the schema rather than adding new semantics such as whether at least one field must be supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource (a dashboard folder) and enumerates the specific operations: rename, change icon or color, move under another folder, reorder among siblings. This is clearly distinct from siblings such as create_dashboard_folder, delete_dashboard_folder, update_dashboard, and move_dashboard, which targets dashboards rather than folders.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit prerequisite: load the manage-dashboards skill via load_skill("manage-dashboards") before calling. It also states the effect is saved (persisted) when run, which signals this is a real mutation rather than a preview. It stops short of naming when-not-to-use cases or pointing to siblings such as update_dashboard for non-folder changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dashboard_layoutAIdempotentInspect
Move and resize panels on a dashboard's 24-column grid. Pass {panelId, x, y, w, h} for each panel to change (panel ids come from get_dashboard); others keep their box. The server compacts the layout (panels float up, overlaps push down) and returns the final positions. Saved when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| layout | Yes | New positions and sizes, by panelId (from get_dashboard). Panels left out keep their current box. The server compacts the result and returns the final layout. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The dashboard to lay out. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations say only that this is a non-read, non-destructive, idempotent mutation. The description goes well beyond that: the server compacts the layout (panels float up, overlaps push down), the final positions are returned, the change is saved immediately, and the reason text appears on a user-facing approval card. These are exactly the behavioral facts an agent cannot infer from the annotation flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the action, then the payload shape, then the server's compaction behavior, then the mandatory skill prerequisite. No filler and no restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still tells the agent that final positions come back. Between the returned-layout note, the compaction rules, the persistence note and the reason/approval-card context, nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a 3 is the floor. The description still adds real meaning: it spells out the {panelId, x, y, w, h} shape, states that panels left out keep their current box (partial-update semantics that the schema's minItems:1 does not convey), and pins panelId's source to get_dashboard.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource plus the coordinate system: "Move and resize panels on a dashboard's 24-column grid." That cleanly separates it from update_dashboard (metadata), add_markdown_panel/add_query_to_dashboard (creation) and remove_panel (deletion) without requiring a schema read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit prerequisite ("Load the manage-dashboards skill (load_skill(\"manage-dashboards\")) first") and tells the agent where panel ids come from (get_dashboard). It does not name a tool to use instead when the intent is renaming or deleting a dashboard, so no explicit when-not guidance, but the context is clear enough to route correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_experiment_rolloutAInspect
Change a scheduled or active experiment's staged rollout: the share of eligible units allowed to enroll, which follows a smooth curve through its scheduled points. set a percentage, advance to the next scheduled point now, pause or resume the curve, or replaceSteps with new points. Takes effect on the next SDK request. Only changes who may newly enroll: already-enrolled units keep their group, so lowering or pausing stops new enrollment and evicts no one. Group weights never change. Pass the experiment's exact name from get_experiment as a confirmation, and a reason. Load the experiment-rollouts skill (load_skill("experiment-rollouts")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| steps | No | Required for `replaceSteps`, and only `replaceSteps`. Each must raise the current rollout, after now. | |
| action | Yes | `set`: make `percent` the rollout from now (lowering stops new enrollment only and clears remaining steps). `advance`: jump to the next scheduled step now. `pause`: hold at the current percentage. `resume`: continue; remaining steps move later by the pause. `replaceSteps`: replace the remaining schedule with `steps`. | |
| reason | Yes | Why this is being done, in one or two sentences a reviewer can judge it by. Shown to the approver. | |
| percent | No | Required for `set`, and only `set`. 0 stops new enrollment. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. | |
| experimentId | Yes | ||
| experimentName | Yes | The experiment's exact name, as get_experiment returned it. A confirmation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (which only say it's a non-readonly, non-idempotent, non-destructive mutation) by explaining timing ('takes effect on the next SDK request'), the enrollment-only effect ('already-enrolled units keep their group... evicts no one'), and that group weights never change. It also discloses the reason field is 'shown to the approver', which has real workflow consequences.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and keeps the essential safety facts in a compact paragraph. It is dense but nearly every clause earns its place; the only slight redundancy is restating the action semantics that the schema already documents.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter mutation with no output schema and no destructive flag, the description supplies what's needed: side effects, timing, prerequisite skill, confirmation requirement, and the fact that existing assignments are unaffected. Nothing an agent needs to call it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 88%, so the baseline is 3, but the description adds framing beyond the schema: the exact-name-as-confirmation contract, the reason-for-reviewer purpose, and the clarification that lowering or pausing only halts new enrollment. The action mapping largely echoes the enum's own description, which limits the added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb and resource ('Change a scheduled or active experiment's staged rollout') and enumerates the concrete operations (set, advance, pause, resume, replaceSteps). This clearly distinguishes it from siblings like terminate_experiment or preview_experiment, which handle different lifecycle operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear prerequisite ('Load the experiment-rollouts skill first') and requires the exact name from get_experiment as confirmation, which routes the agent to get_experiment before calling. It doesn't explicitly contrast with alternatives (e.g., terminate_experiment for stopping entirely), so it stops short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_funnel_queryADestructiveIdempotentInspect
Replace the definition of a saved funnel query (and optionally rename it). Read it with get_query first, change only what the user asked for, and pass the complete spec back without its queryType — it replaces the saved definition on every dashboard that shows the query. Run the new spec with run_funnel_query first so you know it works. Saved when this runs; explain it in reason. Load the manage-dashboards, funnel-queries skills (load_skill("manage-dashboards"), load_skill("funnel-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| spec | Yes | The complete new funnel definition. Replaces the saved one entirely — start from get_query's spec (without its queryType) and change only what the user asked for. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| queryId | Yes | The saved funnel query to change. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| description | No | New description. Pass one when the new spec makes the saved description wrong, or when the query has none. Omit to keep the current one. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds the blast radius the annotations cannot convey: the write replaces the saved definition on every dashboard that shows the query, and the result is persisted immediately. It also implicitly handles the queryType stripping requirement, which is a real behavioral gotcha.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then the safe-edit workflow in a logical order. The skill-loading sentence is a slight appendage and the get_query/run_funnel_query guidance is dense, but no sentence is filler for a destructive tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, deeply nested mutation with no output schema, the description covers the blast radius, the read-modify-write workflow, the verification step, and the required reasoning field. Nothing essential to calling it safely is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 86%, so the schema does most of the work, but the description adds two useful bits beyond it: that name is an optional rename rather than a required field, and that spec must be the complete definition stripped of queryType. The reason parameter's purpose is only restated, not extended.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource: "Replace the definition of a saved funnel query (and optionally rename it)." That cleanly separates it from create_funnel_query, run_funnel_query, and update_query without the agent needing to open any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit ordering of sibling calls: read with get_query first, change only what the user asked for, verify with run_funnel_query before saving, and load the two named skills beforehand. Alternatives and preconditions are stated rather than inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_heading_panelAIdempotentInspect
Change a section heading's text and/or position and size. Saved when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | The heading, as plain text (no markdown), e.g. 'Economy' or 'Week-1 retention'. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| gridPos | No | Position and size on the 24-column grid. Sizing guide: KPI stat 6x4, wide chart 16x9, table 8x9, two charts side by side 12x8 each, section heading 24x1 (markdown heading). | |
| panelId | Yes | The heading panel to change (from get_dashboard). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The dashboard the panel is on. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower, yet the description still adds meaningful behavior: changes are persisted immediately on invocation and the reason string surfaces on a user-facing approval card. It does not explain whether omitted fields (text or gridPos) are preserved, which is the main remaining behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the mutation scope front-loaded and the skill prerequisite last, where it reads as a pre-flight step. "Saved when this runs; explain it in reason" is dense but slightly telegraphic, and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-required-parameter mutation with full schema coverage, no output schema, and annotations covering safety, the description is close to sufficient: scope, persistence, approval reason, and skill prerequisite are all present. The missing piece is partial-update semantics, i.e. whether passing only text leaves position and size untouched.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, including the grid sizing guide in gridPos, so the baseline of 3 applies. The description adds little beyond the schema, only reinforcing that text and gridPos are independently optional ("and/or") and that reason is user-visible, which the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Change a section heading's text and/or position and size" gives a specific verb plus the exact editable fields of the resource, so an agent knows this mutates an existing heading rather than creating one. It never names add_heading_panel or update_markdown_panel, so the create-vs-edit and heading-vs-markdown distinctions are left to inference from the verb choice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a real procedural prerequisite (load the manage-dashboards skill first), which is more than most definitions offer. However it never states when to prefer this over add_heading_panel, update_markdown_panel, or update_dashboard_layout, nor what to do if the panel is not a heading.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_heatmap_queryADestructiveIdempotentInspect
Replace the definition of a saved heatmap query (and optionally rename it). Read it with get_query first, change only what the user asked for, and pass the complete spec back without its queryType — it replaces the saved definition on every dashboard that shows the query. Run the new spec with run_heatmap_query first so you know it works. Saved when this runs; explain it in reason. Load the manage-dashboards, heatmap-queries skills (load_skill("manage-dashboards"), load_skill("heatmap-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| spec | Yes | The complete new heatmap definition. Replaces the saved one entirely — start from get_query's spec (without its queryType) and change only what the user asked for. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| queryId | Yes | The saved heatmap query to change. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| description | No | New description. Pass one when the new spec makes the saved description wrong, or when the query has none. Omit to keep the current one. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true, and the description earns that by specifying the blast radius — the saved definition is replaced wholesale on every dashboard showing the query, so partial specs are dangerous. It also notes the change is saved immediately when the tool runs and that reason appears on the approval card, which is context the annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the workflow rules follow in order. Dense but nearly every clause is actionable; the explicit load_skill call syntax is mildly verbose but needed for the agent to follow it correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, deeply nested mutation with no output schema, the definition covers the read-modify-write workflow, the removal of queryType, validation via run_heatmap_query, and the replacement scope. It stops short of describing what the call returns or how to confirm the update landed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 86% schema coverage the schema already documents most fields, but the description adds operational meaning: spec must be the complete definition with queryType stripped, and reason must be one sentence written for the approval card. It does not add much beyond the schema for queryId, projectId, environment, or name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
"Replace the definition of a saved heatmap query (and optionally rename it)" gives a specific verb and resource, and it is immediately distinguishable from create_heatmap_query and run_heatmap_query, which are named later in the text as workflow steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description prescribes the exact sequence: read with get_query, change only what the user asked for, dry-run with run_heatmap_query, then call this tool; it also directs the agent to load_skill("manage-dashboards") and load_skill("heatmap-queries") first. When-to-use and the alternatives are both explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_insight_queryADestructiveIdempotentInspect
Replace the definition of a saved insight query (and optionally rename it). Read it with get_query first, change only what the user asked for, and pass the complete spec back without its queryType — it replaces the saved definition on every dashboard that shows the query. Run the new spec with run_insight_query first so you know it works. Saved when this runs; explain it in reason. Load the manage-dashboards, insight-queries skills (load_skill("manage-dashboards"), load_skill("insight-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| spec | Yes | The complete new insight definition. Replaces the saved one entirely — start from get_query's spec (without its queryType) and change only what the user asked for. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| queryId | Yes | The saved insight query to change. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| description | No | New description. Pass one when the new spec makes the saved description wrong, or when the query has none. Omit to keep the current one. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description adds crucial beyond-annotation context: the spec replaces the saved definition on every dashboard showing the query, the write is persisted immediately, and reason surfaces on an approval card. It stops short of stating failure/rollback behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then proceeds through prerequisites in execution order with no filler. The trailing skill-loading instruction is useful but makes the block denser than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, deeply nested-spec mutation with no output schema, the description covers prerequisite reads, verification runs, replacement blast radius, and the reason field's audience — everything an agent needs before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 86% schema coverage the schema carries most param docs, but the description adds non-obvious semantics: spec must be the complete definition with queryType stripped, and it is a full replacement rather than a patch. Minor gap on how name and description interact when omitted.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource plus scope: 'Replace the definition of a saved insight query (and optionally rename it).' This cleanly distinguishes it from create_insight_query, update_query, and the sibling update_funnel_query/update_retention_query tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit ordered workflow: read with get_query, change only what the user asked for, run run_insight_query first to verify, then call this. It names the alternatives to use for each step rather than leaving routing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_markdown_panelAIdempotentInspect
Change a markdown panel's text and/or position and size. Saved when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| content | No | Markdown text. Headings, lists, links, tables and bold/italic render; raw HTML does not. Images must be uploaded dashboard images (board-image:<id>, from an existing image panel). | |
| gridPos | No | Position and size on the 24-column grid. Sizing guide: KPI stat 6x4, wide chart 16x9, table 8x9, two charts side by side 12x8 each, section heading 24x1 (markdown heading). | |
| panelId | Yes | The markdown panel to change (from get_dashboard). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| dashboardId | Yes | The dashboard the panel is on. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write-but-not-destructive, idempotent profile, so the description only needs to add context — and it does: 'Saved when this runs' tells the agent the change persists immediately with no preview or undo, and the reason field surfaces on a user-facing approval card, disclosing an approval gate. It stops short of saying whether content replaces existing text entirely or what happens to an omitted gridPos.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: what it changes, what happens when it runs plus the reason requirement, then the prerequisite. Front-loaded and zero filler, with the skill prerequisite placed last where it does not obscure the core action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter mutation with a nested gridPos object, full schema coverage, and an approval requirement, the description covers the action, the persistence semantics, the required justification, and the skill prerequisite. Remaining gaps — replace-vs-merge behavior on content and fallback for an omitted gridPos — are modest given the thorough schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with content, gridPos sizing guidance, panelId provenance (from get_dashboard), and project/environment discovery all documented in the schema itself. The description only adds a pointer to the reason field, which the schema already explains as the approval-card sentence. Baseline 3 is appropriate when the schema carries this much weight.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource ('Change a markdown panel') and scopes it precisely to 'text and/or position and size', which maps directly onto the content and gridPos parameters. It does not explicitly contrast with siblings such as add_markdown_panel, update_heading_panel, or update_dashboard_layout, so the update-vs-create distinction is only implied by the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a concrete workflow prerequisite: load the manage-dashboards skill via load_skill("manage-dashboards") before calling. It also tells the agent what must accompany every call ('explain it in reason'), but it never names an alternative tool or a condition where a different tool should be chosen instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_queryAIdempotentInspect
Rename a saved analytics query or change its description, on every dashboard that shows it. To change what it measures, use update_insight_query / update_funnel_query / update_retention_query / update_heatmap_query instead. Saved when this runs; explain it in reason. Load the manage-dashboards skill (load_skill("manage-dashboards")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| queryId | Yes | The saved query to change. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| description | No | ||
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavior: the change propagates to every dashboard displaying the query, the change is persisted ('Saved when this runs'), and the reason surfaces on an approval card. It stops short of saying what happens on a name collision or whether both fields can be changed in one call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each load-bearing: scope of the edit, the routing rule to alternatives, and the skill prerequisite. The most important constraint (what this tool does not do) is front-loaded right after the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter mutation with no output schema, the description covers purpose, scope of effect, persistence, required rationale, and the prerequisite skill. Remaining gaps are edge-case behavior (partial updates, name conflicts, error shape), which are minor but would be useful for a write tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, with queryId, projectId, environment and reason already documented in the schema. The description maps 'rename' to the name field and 'change its description' to the description field, which is mild added meaning, but it says nothing extra about the three id/scoping parameters or the length limits. Baseline 3 is appropriate when the schema does most of the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise verb pair and resource: 'Rename a saved analytics query or change its description,' plus the propagation scope 'on every dashboard that shows it.' It explicitly names the sibling tools it is not (update_insight_query / update_funnel_query / update_retention_query / update_heatmap_query), so an agent can separate metadata edits from definition edits 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-not rule ('To change what it measures, use update_insight_query / ... instead') with named alternatives, and a prerequisite ordering ('Load the manage-dashboards skill ... first'). Nothing about tool selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_retention_queryADestructiveIdempotentInspect
Replace the definition of a saved retention query (and optionally rename it). Read it with get_query first, change only what the user asked for, and pass the complete spec back without its queryType — it replaces the saved definition on every dashboard that shows the query. Run the new spec with run_retention_query first so you know it works. Saved when this runs; explain it in reason. Load the manage-dashboards, retention-queries skills (load_skill("manage-dashboards"), load_skill("retention-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| spec | Yes | The complete new retention definition. Replaces the saved one entirely — start from get_query's spec (without its queryType) and change only what the user asked for. | |
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| queryId | Yes | The saved retention query to change. | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| description | No | New description. Pass one when the new spec makes the saved description wrong, or when the query has none. Omit to keep the current one. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, but the description explains the blast radius — the replacement rewrites the saved definition on every dashboard showing the query. It also clarifies that the change is saved immediately on execution (no separate commit step) and that reason appears on an approval card.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and then the workflow; every clause carries an operational instruction. The trailing skill-loading sentence is slightly tacked on but is still actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a deeply nested spec object and no output schema, the description supplies the crucial context: where the spec comes from, that it must be complete, that queryType is stripped, and that the write is destructive across dashboards. It does not say what the call returns, a minor gap for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 86%, so the schema already documents queryId, projectId, environment, reason, and description. The description adds one meaningful constraint beyond the schema: pass the complete spec without its queryType, sourced from get_query. That is useful but narrow added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb and resource: "Replace the definition of a saved retention query (and optionally rename it)." This cleanly separates it from update_query, update_funnel_query, and update_insight_query among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit ordered workflow: read with get_query first, change only what the user asked, run_retention_query to validate, and load the manage-dashboards and retention-queries skills beforehand. Alternatives and their conditions (get_query, run_retention_query) are named directly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_saved_formulaAIdempotentInspect
Rename a saved formula, change its description, or replace its definition (expression and its own metrics). Every saved query linked to it shows the new version immediately — read it with list_saved_formulas (formulaId) first and tell the user how many queries change. Applied when this runs; explain it in reason. Load the insight-queries skill (load_skill("insight-queries")) first.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| reason | Yes | Why you are making this change, in one sentence the user will read on the approval card. | |
| formulaId | Yes | The saved formula's id (from list_saved_formulas). | |
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| definition | No | ||
| description | No | ||
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses blast radius ('Every saved query linked to it shows the new version immediately'), timing ('Applied when this runs'), and an approval-card obligation for the reason field. This is exactly the kind of consequence-level detail annotations cannot convey, and nothing conflicts with them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences, front-loaded with the mutability scope before the workflow instructions. Minor redundancy with structured fields (formulaId source repeated from the schema description), but no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-param, nested-schema mutation with no output schema, the description covers the operation scope, sequencing prerequisites, and user-visible consequences. Its remaining gap is partial-update semantics — whether supplying only name leaves definition untouched — and nothing about the metrics array constraints, which an agent may need to fill correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 57%, and the description compensates by explaining that definition consists of expression and its own metrics, and by pointing formulaId at list_saved_formulas. The name/description/reason parameters are only obliquely covered ('Rename... change its description... explain it in reason'), and it does not say whether omitted fields are preserved, so it is good but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names three concrete operations (rename, change description, replace definition) on a specific resource (saved formula) and clarifies that 'definition' means expression plus its own metrics. It is immediately distinguishable from create_saved_formula and delete_saved_formula without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a clear pre-call workflow: read via list_saved_formulas(formulaId) first, load the insight-queries skill first, and tell the user how many queries will change. It does not explicitly name when to use a different tool (e.g. update_query) or when this tool would be the wrong choice, so it falls short of full when/when-not/alternatives coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_tracking_plan_itemsAIdempotentInspect
Report progress on a tracking plan's events, several per call: implemented once the code is written (with the file or Studio script path), verified only after list_event_types and get_property_values confirm the event arrived with the planned properties, mismatch (with a note saying what's wrong) when the data disagrees with the plan. Marker types must match the plan exactly. An event that hasn't been received in this environment can't be marked verified; such updates come back in rejected while the rest apply. Received is set automatically when data arrives. Up to 60 updates per call.
| Name | Required | Description | Default |
|---|---|---|---|
| planId | Yes | ||
| updates | Yes | ||
| projectId | Yes | The project (application) id to scope this call to. Use list_projects to discover valid ids. | |
| environment | Yes | The environment name to scope this call to (e.g. 'production'). Use list_projects to discover the names available to this token. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the non-destructive, idempotent mutation profile, and the description adds real behavioral detail beyond them: partial failure semantics ('such updates come back in rejected while the rest apply'), a 60-update cap, and the automatic 'received' transition. It does not describe what a successful response contains or whether statuses can be downgraded, which is a gap for a state-mutating tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The operation and batching are front-loaded in the first clause, and nearly every sentence carries a distinct rule (status conditions, rejection behavior, cap). The long run-on sentences mixing status semantics with failure semantics make it denser than necessary, but there is little outright filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a batched mutation tool with no output schema and only 50% parameter coverage, the description supplies the essential lifecycle rules, partial-rejection behavior, and batch limits an agent needs to invoke it safely. The remaining hole is the shape of the response and the exact identity/format of a markerType, which matter for constructing valid updates.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%, and the description largely repeats the status enum description already present in the schema rather than extending it. It does add value for 'note' (used to explain a mismatch) and hints that 'file' is a path or Studio script, but 'markerType' remains undefined beyond 'must match the plan exactly' — an agent cannot tell whether it is an event name, id, or marker label, and 'planId' is never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Report progress on a tracking plan's events, several per call') and scopes the operation to a plan within an environment. It implicitly separates itself from read tools like list_event_types and get_property_values by casting them as preconditions for the 'verified' status rather than alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each status value gets an explicit condition: implemented once code is written, verified only after list_event_types and get_property_values confirm arrival, mismatch when data disagrees. It also warns that marker types must match the plan exactly and that 'received' is auto-set rather than user-assigned, which functions as a when-not-to-use rule for that status. No explicit alternative tool is named for correcting a wrong update, which keeps it from a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
85 tool updates
- First observed
add_heading_panel - First observed
add_markdown_panel - First observed
add_query_to_dashboard - First observed
assign_experiment_unit - First observed
create_cohort - First observed
create_configuration - First observed
create_dashboard - First observed
create_dashboard_folder - First observed
create_experiment - First observed
create_funnel_query - First observed
create_heatmap_query - First observed
create_insight_query - First observed
create_retention_query - First observed
create_saved_formula - First observed
create_tracking_plan - First observed
delete_cohort - First observed
delete_configuration - First observed
delete_dashboard - First observed
delete_dashboard_folder - First observed
delete_query - First observed
delete_saved_formula - First observed
describe_event_types - First observed
duplicate_dashboard - First observed
ensure_sdk_key - First observed
execute_query - First observed
get_cohort_member_count - First observed
get_cohort_members - First observed
get_cohort_membership - First observed
get_community_pulse - First observed
get_configuration - First observed
get_dashboard - First observed
get_experiment - First observed
get_experiment_results - First observed
get_heatmap_image - First observed
get_property_values - First observed
get_query - First observed
get_tracking_plan - First observed
list_cohorts - First observed
list_configurations - First observed
list_dashboard_folders - First observed
list_dashboards - First observed
list_deeplinks - First observed
list_event_types - First observed
list_experiment_locks - First observed
list_experiment_members - First observed
list_experiments - First observed
list_heatmaps - First observed
list_projects - First observed
list_queries - First observed
list_saved_formulas - First observed
list_sentiment_sources - First observed
load_skill - First observed
move_dashboard - First observed
preview_configuration_change - First observed
preview_experiment - First observed
query_deeplink_metrics - First observed
query_sentiment - First observed
read_doc - First observed
remove_panel - First observed
remove_query_from_dashboard - First observed
run_cohort_definition - First observed
run_funnel_query - First observed
run_heatmap_query - First observed
run_insight_query - First observed
run_retention_query - First observed
search_configuration - First observed
search_docs - First observed
set_primary_configuration - First observed
terminate_experiment - First observed
update_cohort - First observed
update_configuration - First observed
update_configuration_descriptions - First observed
update_dashboard - First observed
update_dashboard_folder - First observed
update_dashboard_layout - First observed
update_experiment_rollout - First observed
update_funnel_query - First observed
update_heading_panel - First observed
update_heatmap_query - First observed
update_insight_query - First observed
update_markdown_panel - First observed
update_query - First observed
update_retention_query - First observed
update_saved_formula - First observed
update_tracking_plan_items
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceRemote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.MIT
- AlicenseCqualityBmaintenanceCompetitor Monitor AI - MCP server providing AI-powered tools and automation by MEOK AI Labs115 npm58 PyPIMIT
- AlicenseAqualityCmaintenanceEnables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.1623 npm1MIT

industrylens-mcpofficial
AlicenseNot gradedqualityBmaintenanceBrowse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.