Skip to main content
Glama

GetSubgraphMetrics

Read-onlyIdempotent

Top subgraphs/connectors by traffic/health for a graph over a time window, as compact CSV. Columns: start timestamp, end exclusive timestamp, fetch service name, fetch count, fetch latency p50 ms, fetch latency p99 ms, fetch with errors count. Ranked by orderBy descending: default FETCH_COUNT (busiest); FETCH_WITH_ERRORS_COUNT for most error-prone, FETCH_LATENCY_P99_MS for slowest. variantName scopes to one or more variants (omit for all). subgraphName scopes to one or more subgraphs by exact name (omit for all); pattern/substring matching is not supported. clients scopes to the fetches driven by one or more clients; omit clientVersion to match every version of that client, and use GetClientMetrics to discover the names a graph sees. Keep the default resolution of ENTIRE_RANGE for totals and top-N, which gives one row per subgraph ranked over the whole window. DAY/HOUR/MINUTE give one row per subgraph per bucket ranked within each bucket, so a window total then needs a per-subgraph 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 field-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 field-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).
clientsNo
graphIdYes
orderByNoFETCH_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 field-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
subgraphNameNo

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 field-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 field-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 field-level data retention as defined in the Apollo GraphQL pricing page (https://www.apollographql.com/pricing)."
  2. Changed24 schema fields changed
    • addedInput schema / definitions / SubgraphInsightsTimeseriesReportClientFilterInInput / properties / clientName / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / definitions / SubgraphInsightsTimeseriesReportClientFilterInInput / properties / clientName / type
      Removed value: -"string"
    • addedInput schema / definitions / SubgraphInsightsTimeseriesReportClientFilterInInput / properties / clientVersion / anyOf
      Added value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / definitions / SubgraphInsightsTimeseriesReportClientFilterInInput / properties / clientVersion / type
      Removed value: -"string"
    • addedInput schema / properties / clients / anyOf
      Added value: +[
      +  {
      +    "items": {
      +      "anyOf": [
      +        {
      +          "$ref": "#/definitions/SubgraphInsightsTimeseriesReportClientFilterInInput"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / clients / items
      Removed value: -{
      -  "oneOf": [
      -    {
      -      "$ref": "#/definitions/SubgraphInsightsTimeseriesReportClientFilterInInput"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • removedInput schema / properties / clients / type
      Removed value: -"array"
    • 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"
    • removedInput schema / properties / orderBy / $ref
      Removed value: -"#/definitions/SubgraphInsightsTimeseriesReportMetric"
    • addedInput schema / properties / orderBy / anyOf
      Added value: +[
      +  {
      +    "$ref": "#/definitions/SubgraphInsightsTimeseriesReportMetric"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • addedInput schema / properties / orderBy / default
      Added value: +"FETCH_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 / subgraphName / anyOf
      Added value: +[
      +  {
      +    "items": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ]
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedInput schema / properties / subgraphName / items
      Removed value: -{
      -  "oneOf": [
      -    {
      -      "type": "string"
      -    },
      -    {
      -      "type": "null"
      -    }
      -  ]
      -}
    • removedInput schema / properties / subgraphName / type
      Removed value: -"array"
    • 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": {
      +      "subgraphInsightsTimeseriesReport": {
      +        "description": " Returns a timeseries of subgraph and connector fetch metrics across a specified time range for this graph. Each\nrequest from the router to a subgraph or connector service is counted as a fetch. A single GraphQL operation can\nresult in multiple fetches, depending on the operation shape and query plan. This will return specified metrics (fetch\ncount, avg latency, etc.) grouped by time and the specified dimensions (fetch service ID, fetch service name, client\nname, etc.). This API is rate limited and only allows a small number of requests per minute, and will return a\nRATE_LIMIT_EXCEEDED error if too many requests are made for a graph. If a request to this field times out, we\nrecommend 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": [
      +      "subgraphInsightsTimeseriesReport"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / data / properties / graph / oneOf
      Removed value: -[
      -  {
      -    "properties": {
      -      "subgraphInsightsTimeseriesReport": {
      -        "description": " Returns a timeseries of subgraph and connector fetch metrics across a specified time range for this graph. Each\nrequest from the router to a subgraph or connector service is counted as a fetch. A single GraphQL operation can\nresult in multiple fetches, depending on the operation shape and query plan. This will return specified metrics (fetch\ncount, avg latency, etc.) grouped by time and the specified dimensions (fetch service ID, fetch service name, client\nname, etc.). This API is rate limited and only allows a small number of requests per minute, and will return a\nRATE_LIMIT_EXCEEDED error if too many requests are made for a graph. If a request to this field times out, we\nrecommend 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": [
      -      "subgraphInsightsTimeseriesReport"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
  3. Changed4 schema fields changed
    • addedInput schema / definitions / SubgraphInsightsTimeseriesReportClientFilterInInput
      Added value: +{
      +  "description": "The named type and version of the clients to include or exclude in the subgraph and connector timeseries report.",
      +  "properties": {
      +    "clientName": {
      +      "description": "The client name.",
      +      "type": "string"
      +    },
      +    "clientVersion": {
      +      "description": "The client version.",
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / definitions / TimeseriesReportResolution
      Added value: +{
      +  "description": "The size of each time bucket in a timeseries report.\n\nValues:\nDAY: One-day buckets.\nENTIRE_RANGE: Single bucket containing the entire time range.\nHOUR: One-hour buckets.\nMINUTE: One-minute buckets.\nMONTH: One-month buckets.",
      +  "enum": [
      +    "DAY",
      +    "ENTIRE_RANGE",
      +    "HOUR",
      +    "MINUTE",
      +    "MONTH"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / clients
      Added value: +{
      +  "items": {
      +    "oneOf": [
      +      {
      +        "$ref": "#/definitions/SubgraphInsightsTimeseriesReportClientFilterInInput"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ]
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / resolution
      Added value: +{
      +  "$ref": "#/definitions/TimeseriesReportResolution",
      +  "description": "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."
      +}
  4. Changed1 schema field changed
    • addedInput schema / properties / subgraphName
      Added value: +{
      +  "items": {
      +    "oneOf": [
      +      {
      +        "type": "string"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ]
      +  },
      +  "type": "array"
      +}
  5. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already establish readOnly/idempotent/non-destructive, and the description adds genuinely non-obvious behavior: output is compact CSV, a too-small `limit` silently undercounts bucket rows, only HOUR/MINUTE accept a `to` of now, and MONTH labels buckets by calendar month rather than the requested window. These are exactly the silent-failure traits an agent needs before calling.

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

Conciseness4/5

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

Front-loaded with the one-line purpose, then dense but purposeful paragraphs; nearly every clause conveys a distinct operational rule. The enumerated CSV column list is the weakest part, since an output schema already exists, but it remains compact.

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?

For a 9-parameter analytics tool with an output schema and full annotations, the description covers ranking, filtering, resolution trade-offs and truncation risk. It omits the `limit` default/max semantics (the schema's own text is internally inconsistent: default 50 vs 'default: 100, max 10000'), which an agent must resolve elsewhere.

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?

Against only 44% schema description coverage, the description supplies semantics for nearly every filter: orderBy ranking options with the default, variantName/subgraphName scoping with the exact-match caveat, clients/clientVersion wildcard behavior, and detailed resolution-vs-time-window constraints. That is well beyond what the schema documents.

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

Purpose4/5

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

The first sentence names a specific resource (subgraphs/connectors), the aggregation (top by traffic/health), the scope (a graph over a time window) and the return format (compact CSV). It does not, however, distinguish itself from adjacent analytics siblings such as GetOperationMetrics or GetTopOperations; only GetClientMetrics is named, and as a lookup helper rather than an alternative.

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

Usage Guidelines5/5

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

Gives explicit when-to-use rules for each resolution: keep ENTIRE_RANGE for totals/top-N, use DAY/HOUR/MINUTE for per-bucket ranking, use HOUR/MINUTE for bursts in the last 24 hours, and avoid MONTH. It also states the condition for using GetClientMetrics to discover client names and warns that subgraphName does not support pattern matching.

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