Skip to main content
Glama

GetClientMetrics

Read-onlyIdempotent

Traffic broken down by client for a graph over a time window, as compact CSV. Columns: start timestamp, end exclusive timestamp, client name, client version, operation name, request count, request latency p50 ms, request latency p99 ms, request with error count. Answers which clients call a graph, which client versions are still on the wire, and which client drives errors or latency. Clients that do not report apollographql-client-name/-version come back with empty name and version columns. Ranked by orderBy descending: default REQUEST_COUNT (busiest); REQUEST_WITH_ERROR_COUNT for most error-prone, REQUEST_LATENCY_P99_MS for slowest. variantName and operationName scope to one or more variants or operations by exact name (omit for all). Rows are one per client + version + operation, so a busy graph has far more groups than the other metrics tools: scope by operationName or raise limit when a breakdown looks truncated. Keep the default resolution of ENTIRE_RANGE for totals and top-N, which gives one row per group ranked over the whole window. DAY/HOUR/MINUTE give one row per group per bucket ranked within each bucket, so a window total then needs a per-group sum plus a limit big enough to cover every bucket; too small a limit silently undercounts. Only HOUR and MINUTE accept a to of now, so use them for bursts in the last 24 hours. Avoid MONTH: it labels buckets by calendar month, not by the requested window.

Input Schema

NameRequiredDescriptionDefault
toYesThe ending timestamp for the report. Must be in the format: 2025-01-01T08:00:00Z (ISO 8601). This timestamp cannot exceed your plan's operation-level data retention as defined in the Apollo GraphQL pricing page (https://www.apollographql.com/pricing).
fromYesThe starting timestamp for the report. Must be in the format: 2025-01-01T00:00:00Z (ISO 8601). This timestamp cannot exceed your plan's operation-level data retention as defined in the Apollo GraphQL pricing page (https://www.apollographql.com/pricing).
limitNoMaximum number of records to return (default: 100, max 10000).
graphIdYes
orderByNoREQUEST_COUNT
resolutionNoThe resolution of the time groups for the report. This resolution will affect the range of times that can be used for the 'from' and 'to' timestamps: - For the MINUTE resolution, the total time between 'from' and 'to' must be no more than 1 day, and the 'from' time must be no earlier than 30 days ago. - For the HOUR resolution, the total time between 'from' and 'to' must be no more than 7 days, and the 'from' time must be no earlier than 90 days ago. - For the DAY, MONTH, and ENTIRE_RANGE resolutions, the 'from' time must be no earlier than 549 days ago (approx 18 months), and the 'to' time must be no later than 1 day ago. - These time ranges are further constrained by your plan's operation-level data retention as defined in the Apollo GraphQL pricing page (https://www.apollographql.com/pricing). If these criteria are not met, this will return a REQUEST_INVALID error.ENTIRE_RANGE
variantNameNo
operationNameNo

Output Schema

NameRequiredDescriptionDefault
dataNo
errorsNo
extensionsNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • changedInput schema / properties / from / description
      Previous value: -"The starting timestamp for the report. Must be in the format: 2025-01-01T00:00:00Z (ISO 8601)."New value: +"The starting timestamp for the report. Must be in the format: 2025-01-01T00:00:00Z (ISO 8601). This timestamp cannot exceed your plan's operation-level data retention as defined in the Apollo GraphQL pricing page (https://www.apollographql.com/pricing)."
    • changedInput schema / properties / resolution / description
      Previous value: -"The resolution of the time groups for the report. This resolution will affect the range of times that can be used for the 'from' and\n'to' timestamps:\n- For the MINUTE resolution, the total time between 'from' and 'to' must be no more than 1 day, and the 'from' time must be no earlier than 30 days ago.\n- For the HOUR resolution, the total time between 'from' and 'to' must be no more than 7 days, and the 'from' time must be no earlier than 90 days ago.\n- For the DAY, MONTH, and ENTIRE_RANGE resolutions, the 'from' time must be no earlier than 549 days ago (approx 18 months), and the 'to' time must be no later than 1 day ago.\nIf these criteria are not met, this will return a REQUEST_INVALID error."New value: +"The resolution of the time groups for the report. This resolution will affect the range of times that can be used for the 'from' and\n'to' timestamps:\n- For the MINUTE resolution, the total time between 'from' and 'to' must be no more than 1 day, and the 'from' time must be no earlier than 30 days ago.\n- For the HOUR resolution, the total time between 'from' and 'to' must be no more than 7 days, and the 'from' time must be no earlier than 90 days ago.\n- For the DAY, MONTH, and ENTIRE_RANGE resolutions, the 'from' time must be no earlier than 549 days ago (approx 18 months), and the 'to' time must be no later than 1 day ago.\n- These time ranges are further constrained by your plan's operation-level data retention as defined in the Apollo GraphQL pricing page (https://www.apollographql.com/pricing).\nIf these criteria are not met, this will return a REQUEST_INVALID error."
    • changedInput schema / properties / to / description
      Previous value: -"The ending timestamp for the report. Must be in the format: 2025-01-01T08:00:00Z (ISO 8601)."New value: +"The ending timestamp for the report. Must be in the format: 2025-01-01T08:00:00Z (ISO 8601). This timestamp cannot exceed your plan's operation-level data retention as defined in the Apollo GraphQL pricing page (https://www.apollographql.com/pricing)."
  2. Changed17 schema fields changed
    • addedInput schema / properties / limit / anyOf
      Added value: +[
      +  {
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / limit / default
      Added value: +50
    • removedInput schema / properties / limit / type
      Removed value: -"integer"
    • addedInput schema / properties / operationName / anyOf
      Added value: +[
      +  {
      +    "items": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / operationName / items
      Removed value: -{
      -  "oneOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • removedInput schema / properties / operationName / type
      Removed value: -"array"
    • removedInput schema / properties / orderBy / $ref
      Removed value: -"#/definitions/OperationInsightsTimeseriesReportMetric"
    • addedInput schema / properties / orderBy / anyOf
      Added value: +[
      +  {
      +    "$ref": "#/definitions/OperationInsightsTimeseriesReportMetric"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / orderBy / default
      Added value: +"REQUEST_COUNT"
    • removedInput schema / properties / resolution / $ref
      Removed value: -"#/definitions/TimeseriesReportResolution"
    • addedInput schema / properties / resolution / anyOf
      Added value: +[
      +  {
      +    "$ref": "#/definitions/TimeseriesReportResolution"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / resolution / default
      Added value: +"ENTIRE_RANGE"
    • addedInput schema / properties / variantName / anyOf
      Added value: +[
      +  {
      +    "items": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / variantName / items
      Removed value: -{
      -  "oneOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • removedInput schema / properties / variantName / type
      Removed value: -"array"
    • addedOutput schema / properties / data / properties / graph / anyOf
      Added value: +[
      +  {
      +    "properties": {
      +      "operationInsightsTimeseriesReport": {
      +        "description": " Returns a timeseries of operation metrics across a specified time range for this graph. This will return specified metrics (request count,\n avg latency, etc) grouped by time and the specified dimensions (query ID, query name, client name, etc). This API is rate limited and only\n allows a small number of requests per minute, and will return a RATE_LIMIT_EXCEEDED error if too many requests are made for a graph. If a\nrequest to this field times out, we recommend that you try a shorter time range or fewer dimensions.",
      +        "properties": {
      +          "csv": {
      +            "anyOf": [
      +              {
      +                "type": "string"
      +              },
      +              {
      +                "type": "null"
      +              }
      +            ],
      +            "description": "A CSV representation of the results. This includes a header and rows that have a column for start and end timestamp and all requested dimensions and metrics."
      +          }
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "operationInsightsTimeseriesReport"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / data / properties / graph / oneOf
      Removed value: -[
      -  {
      -    "properties": {
      -      "operationInsightsTimeseriesReport": {
      -        "description": " Returns a timeseries of operation metrics across a specified time range for this graph. This will return specified metrics (request count,\n avg latency, etc) grouped by time and the specified dimensions (query ID, query name, client name, etc). This API is rate limited and only\n allows a small number of requests per minute, and will return a RATE_LIMIT_EXCEEDED error if too many requests are made for a graph. If a\nrequest to this field times out, we recommend that you try a shorter time range or fewer dimensions.",
      -        "properties": {
      -          "csv": {
      -            "description": "A CSV representation of the results. This includes a header and rows that have a column for start and end timestamp and all requested dimensions and metrics.",
      -            "oneOf": [
      -              {
      -                "type": "string"
      -              },
      -              {
      -                "type": "null"
      -              }
      -            ]
      -          }
      -        },
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "operationInsightsTimeseriesReport"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
  3. Added

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, yet the description adds real behavioral context: the exact CSV column set, rows-per-group cardinality, that unknown clients return empty name/version columns, that too small a limit 'silently undercounts' with bucketed resolutions, and that invalid time windows yield REQUEST_INVALID. It stops short of stating retention limits or rate behavior explicitly, deferring to the plan page.

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?

Front-loaded with the definition and return shape, then layered: analytical questions, ranking, scoping, cardinality/limit caveat, resolution guidance. Density is high for an 8-parameter analytics tool but no sentence is filler.

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

Completeness5/5

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

An output schema exists, so return explanation was optional, yet the description still supplies the CSV column order and the row-grouping model, which is genuinely needed to interpret CSV. Combined with resolution constraints and truncation warnings, an agent has everything required to call this correctly.

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

Parameters5/5

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

Despite only 50% schema coverage, the description gives the ranking semantics of orderBy (default REQUEST_COUNT, plus the two alternatives that matter), explains that variantName/operationName are exact-name scopes that should be omitted for all, and describes how resolution changes row cardinality and interacts with limit. That is meaning well beyond the schema.

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?

The opening sentence names a specific resource (traffic), a specific axis (broken down by client), a scope (for a graph over a time window) and an output shape (compact CSV). This cleanly separates it from the sibling metrics tools GetOperationMetrics, GetSubgraphMetrics and GetTopOperations, which the description even implicitly contrasts by noting this one produces 'far more groups than the other metrics tools.'

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

Usage Guidelines5/5

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

Explicit when-to-use guidance for each orderBy value (busiest vs error-prone vs slowest), when to scope by variantName/operationName, when to keep the default ENTIRE_RANGE versus bucketed resolutions, and when HOUR/MINUTE are appropriate (bursts in the last 24 hours). It also gives a clear exclusion: 'Avoid MONTH.'

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources