Skip to main content
Glama

Breakdown

onelence_get_breakdown
Read-onlyIdempotent

Site traffic: visitors and conversions split by one dimension (source, channel, campaign, keyword, affiliate, entry, page, hostname, country, region, city, device, browser, os), largest first. A row's name works as filter_value in onelence_get_performance. A visitor counts in every row they appear in, so rows can add up to more than the site's visitors. compare=previous_period adds each row's visitors and conversions in the period before, with the percent change; use it for "what grew or dropped".

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "dimension": "<dimension>"
    },
    "name": "onelence_get_breakdown"
  }
}

Input Schema

NameRequiredDescriptionDefault
endNoWindow end, inclusive for a date. Defaults to now.
siteNoSite domain (e.g. example.com) or site id. Defaults to the workspace's newest active site.
limitNoItems to return (default 25).
startNoWindow start: a date (YYYY-MM-DD) or ISO 8601 date-time. Defaults to 30 days before end.
cursorNonext_cursor from the previous call, for more.
compareNoprevious_period adds each row's visitors and conversions in the same-length window right before, with the percent change (default none). A row absent from that window counts 0 there, or has unknown (null) previous values when that window held more rows than one read returns.
dimensionYes
filter_valueNo
filter_dimensionNo

Output Schema

NameRequiredDescriptionDefault
dataYes
moreNoHow to fetch the next page, when has_more.
noteYes
siteYes
filterYes
objectYes
windowYes
has_moreYes
dimensionYes
comparisonYes
next_cursorYes
names_hiddenYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / compare
      Added value: +{
      +  "description": "previous_period adds each row's visitors and conversions in the same-length window right before, with the percent change (default none). A row absent from that window counts 0 there, or has unknown (null) previous values when that window held more rows than one read returns.",
      +  "enum": [
      +    "none",
      +    "previous_period"
      +  ],
      +  "type": "string"
      +}
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "comparison": {
      +      "anyOf": [
      +        {
      +          "properties": {
      +            "window": {
      +              "properties": {
      +                "end": {
      +                  "anyOf": [
      +                    {
      +                      "type": "string"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ]
      +                },
      +                "start": {
      +                  "anyOf": [
      +                    {
      +                      "type": "string"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ]
      +                }
      +              },
      +              "required": [
      +                "start",
      +                "end"
      +              ],
      +              "type": "object"
      +            }
      +          },
      +          "required": [
      +            "window"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "data": {
      +      "items": {
      +        "properties": {
      +          "channel": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "conversions": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "conversions_change_pct": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "previous_conversions": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "previous_visitors": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "visitors": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          },
      +          "visitors_change_pct": {
      +            "anyOf": [
      +              {
      +                "type": "number"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ]
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "visitors",
      +          "conversions"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "dimension": {
      +      "enum": [
      +        "country",
      +        "region",
      +        "city",
      +        "hostname",
      +        "page",
      +        "entry",
      +        "source",
      +        "channel",
      +        "campaign",
      +        "keyword",
      +        "affiliate",
      +        "browser",
      +        "os",
      +        "device"
      +      ],
      +      "type": "string"
      +    },
      +    "filter": {
      +      "anyOf": [
      +        {
      +          "properties": {
      +            "dimension": {
      +              "enum": [
      +                "country",
      +                "region",
      +                "city",
      +                "hostname",
      +                "page",
      +                "entry",
      +                "source",
      +                "channel",
      +                "campaign",
      +                "keyword",
      +                "affiliate",
      +                "browser",
      +                "os",
      +                "device"
      +              ],
      +              "type": "string"
      +            },
      +            "value": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "dimension",
      +            "value"
      +          ],
      +          "type": "object"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "has_more": {
      +      "type": "boolean"
      +    },
      +    "more": {
      +      "description": "How to fetch the next page, when has_more.",
      +      "type": "string"
      +    },
      +    "names_hidden": {
      +      "type": "boolean"
      +    },
      +    "next_cursor": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "note": {
      +      "type": "string"
      +    },
      +    "object": {
      +      "const": "list",
      +      "type": "string"
      +    },
      +    "site": {
      +      "properties": {
      +        "domain": {
      +          "type": "string"
      +        },
      +        "id": {
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "domain"
      +      ],
      +      "type": "object"
      +    },
      +    "window": {
      +      "properties": {
      +        "end": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        },
      +        "start": {
      +          "anyOf": [
      +            {
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ]
      +        }
      +      },
      +      "required": [
      +        "start",
      +        "end"
      +      ],
      +      "type": "object"
      +    }
      +  },
      +  "required": [
      +    "object",
      +    "data",
      +    "has_more",
      +    "next_cursor",
      +    "note",
      +    "site",
      +    "window",
      +    "dimension",
      +    "filter",
      +    "names_hidden",
      +    "comparison"
      +  ],
      +  "type": "object"
      +}
  2. First observed

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description adds real behavioral substance on top: the non-additive caveat ('A visitor counts in every row they appear in, so rows can add up to more than the site's visitors') and the null-previous-value behavior when the comparison window exceeds one read. Ordering (largest first) is also disclosed. It doesn't cover rate limits or result caps beyond the schema's limit.

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

Conciseness5/5

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

Three dense sentences, zero filler, and the core capability is front-loaded before the caveat and the compare guidance. The parenthetical dimension list is long but earns its place by matching the enum.

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

Completeness4/5

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

With an output schema present and defaults documented in the schema, the description covers what it must: semantics of the breakdown, the aggregation caveat, the comparison mode, and the cross-tool handoff. The main residual gap is how filter_dimension/filter_value scope the breakdown, which an agent may need to reason about from the enum alone.

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

Parameters4/5

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

Schema coverage is 67%, and the description compensates by explaining that a row's name from this tool is a valid filter_value, and by spelling out what compare=previous_period actually adds to each row (prior-window visitors/conversions plus percent change). The dimension/filter_dimension pair still gets no explicit description of how the two interact (e.g., filtering one dimension while breaking down by another).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Site traffic: visitors and conversions split by one dimension') and enumerates the exact dimensions, plus the ordering rule ('largest first'). The 'split by one dimension' framing distinguishes it from aggregate performance tools like onelence_get_performance or onelence_get_live.

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

Usage Guidelines4/5

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

Gives concrete usage guidance in two places: rows feed 'filter_value in onelence_get_performance' (explicit follow-on routing to a sibling) and compare=previous_period is prescribed for "what grew or dropped" questions. It stops short of stating when to choose this over onelence_get_performance or onelence_compare_sources for a breakdown-style question.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.