changedInput schema / properties / queries / items / oneOf
Previous value: -[
- {
- "properties": {
- "alias": {
- "description": "Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.",
- "maxLength": 50,
- "minLength": 1,
- "type": "string"
- },
- "chartType": {
- "description": "Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.",
- "enum": [
- "BAR",
- "LINE",
- "AREA",
- "WATERFALL",
- "TABLE"
- ],
- "type": "string"
- },
- "currency": {
- "default": "USD",
- "description": "Currency for cost values (USD, EUR, GBP). Defaults to \"USD\".",
- "enum": [
- "USD",
- "EUR",
- "GBP",
- "CNY"
- ],
- "type": "string"
- },
- "filterCel": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Optional scope filter as CEL (Common Expression Language). Examples: cos_service_name in [\"AmazonEC2\"]; cos_provider in [\"AWS\"] && cos_environment in [\"prod\"]. Label dimensions use the cos_ prefix; native provider fields omit it. Unlabelled/untagged resources have null values; use == null to match them (e.g. cos_environment == null) and != null to exclude them. Omit or pass empty string for no filter."
- },
- "groupBy": {
- "anyOf": [
- {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "items": {
- "minLength": 1,
- "type": "string"
- },
- "type": "array"
- }
- ]
- },
- {
- "type": "null"
- }
- ]
- },
- "metricId": {
- "default": "cost",
- "description": "Cost column to query (e.g. \"cost\", \"effective_cost\", \"amortized_cost\"). Defaults to \"cost\".",
- "enum": [
- "cost",
- "effective_cost",
- "list_cost",
- "contracted_cost",
- "unblended_cost",
- "net_unblended_cost",
- "amortized_cost",
- "net_amortized_cost"
- ],
- "type": "string"
- },
- "name": {
- "description": "Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.",
- "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
- "type": "string"
- },
- "rollingAggregation": {
- "properties": {
- "aggregator": {
- "enum": [
- "SUM",
- "AVG",
- "MAX",
- "MIN"
- ],
- "type": "string"
- },
- "window": {
- "properties": {
- "preset": {
- "enum": [
- "MONTH",
- "WEEK"
- ],
- "type": "string"
- },
- "relativeDays": {
- "maximum": 9007199254740991,
- "minimum": 1,
- "type": "integer"
- }
- },
- "type": "object"
- }
- },
- "required": [
- "aggregator",
- "window"
- ],
- "type": "object"
- },
- "type": {
- "const": "cost",
- "description": "Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".",
- "type": "string"
- }
- },
- "required": [
- "type",
- "name"
- ],
- "type": "object"
- },
- {
- "properties": {
- "alias": {
- "description": "Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.",
- "maxLength": 50,
- "minLength": 1,
- "type": "string"
- },
- "chartType": {
- "description": "Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.",
- "enum": [
- "BAR",
- "LINE",
- "AREA",
- "WATERFALL",
- "TABLE"
- ],
- "type": "string"
- },
- "groupBy": {
- "anyOf": [
- {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "items": {
- "minLength": 1,
- "type": "string"
- },
- "type": "array"
- }
- ]
- },
- {
- "type": "null"
- }
- ]
- },
- "metricId": {
- "description": "Saved Costory metric id from list_metrics metrics[].id. This is the query identity — not list_metrics `datasourceId` (that filter only returns groupBy dimensions for telemetry).",
- "type": "string"
- },
- "name": {
- "description": "Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.",
- "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
- "type": "string"
- },
- "type": {
- "const": "metric",
- "description": "Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".",
- "type": "string"
- }
- },
- "required": [
- "type",
- "metricId",
- "name"
- ],
- "type": "object"
- },
- {
- "properties": {
- "alias": {
- "description": "Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.",
- "maxLength": 50,
- "minLength": 1,
- "type": "string"
- },
- "chartType": {
- "description": "Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.",
- "enum": [
- "BAR",
- "LINE",
- "AREA",
- "WATERFALL",
- "TABLE"
- ],
- "type": "string"
- },
- "filterCel": {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "type": "null"
- }
- ],
- "description": "Optional scope filter as CEL (Common Expression Language). Examples: cos_service_name in [\"AmazonEC2\"]; cos_provider in [\"AWS\"] && cos_environment in [\"prod\"]. Label dimensions use the cos_ prefix; native provider fields omit it. Unlabelled/untagged resources have null values; use == null to match them (e.g. cos_environment == null) and != null to exclude them. Omit or pass empty string for no filter."
- },
- "groupBy": {
- "anyOf": [
- {
- "anyOf": [
- {
- "type": "string"
- },
- {
- "items": {
- "minLength": 1,
- "type": "string"
- },
- "type": "array"
- }
- ]
- },
- {
- "type": "null"
- }
- ]
- },
- "metricId": {
- "description": "Usage metric id (from suggest_usage_metrics). Distinct from cost metricId and from list_metrics datasourceId.",
- "type": "string"
- },
- "name": {
- "description": "Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.",
- "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
- "type": "string"
- },
- "type": {
- "const": "usage",
- "description": "Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".",
- "type": "string"
- }
- },
- "required": [
- "type",
- "metricId",
- "name"
- ],
- "type": "object"
- },
- {
- "properties": {
- "alias": {
- "description": "Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.",
- "maxLength": 50,
- "minLength": 1,
- "type": "string"
- },
- "chartType": {
- "description": "Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.",
- "enum": [
- "BAR",
- "LINE",
- "AREA",
- "WATERFALL",
- "TABLE"
- ],
- "type": "string"
- },
- "formula": {
- "type": "string"
- },
- "name": {
- "description": "Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.",
- "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
- "type": "string"
- },
- "type": {
- "const": "formula",
- "description": "Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".",
- "type": "string"
- }
- },
- "required": [
- "type",
- "formula",
- "name"
- ],
- "type": "object"
- },
- {
- "description": "Plot a budget. Use aggBy Month for one value per calendar month. For a daily running total within each month (to see which day the budget was reached), use aggBy Day with rollingAggregation { aggregator: SUM, window: { preset: MONTH } }.",
- "properties": {
- "alias": {
- "description": "Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.",
- "maxLength": 50,
- "minLength": 1,
- "type": "string"
- },
- "budgetId": {
- "type": "string"
- },
- "chartType": {
- "description": "Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.",
- "enum": [
- "BAR",
- "LINE",
- "AREA",
- "WATERFALL",
- "TABLE"
- ],
- "type": "string"
- },
- "name": {
- "description": "Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.",
- "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
- "type": "string"
- },
- "rollingAggregation": {
- "properties": {
- "aggregator": {
- "enum": [
- "SUM",
- "AVG",
- "MAX",
- "MIN"
- ],
- "type": "string"
- },
- "window": {
- "properties": {
- "preset": {
- "enum": [
- "MONTH",
- "WEEK"
- ],
- "type": "string"
- },
- "relativeDays": {
- "maximum": 9007199254740991,
- "minimum": 1,
- "type": "integer"
- }
- },
- "type": "object"
- }
- },
- "required": [
- "aggregator",
- "window"
- ],
- "type": "object"
- },
- "type": {
- "const": "budget",
- "description": "Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".",
- "type": "string"
- },
- "virtualDimensionValue": {
- "type": "string"
- }
- },
- "required": [
- "type",
- "budgetId",
- "name"
- ],
- "type": "object"
- },
- {
- "description": "Plot a live external metric from an integration. integrationId comes from list_metrics(includeExternal: true). For Tsuga: metricName is the provider metric name; groupByFields are provider metric attributes; conditions is an optional provider filter string. For Datadog: metricName is the Datadog metric name; groupByFields are metric tags; conditions is an optional Datadog filter/query string. When query is set it is the Datadog metrics query string (pass-through to queryMetrics); metricName / aggregator / conditions / groupByFields are leftover UI state and are not a second writer. .rollup is required and the interval must be ≥ 24h (daily / weekly / monthly or seconds ≥ 86400). Costory will not fill an empty weekly series. For CloudWatch: metricName is Namespace/MetricName (e.g. AWS/EC2/CPUUtilization); groupByFields are CloudWatch dimension names; conditions is an optional dimension filter. For Amplitude: metricName is one of active_users, new_users, active_users_weekly, active_users_monthly; aggregator must be SUM; groupByFields is at most one built-in user property from list_metrics attributes (version, country, city, region, DMA, language, platform, os, device, device_type, start_version, paying); conditions is an optional Amplitude segment string (s parameter); Hour aggBy is unsupported; weekly/monthly metrics snap Amplitude period-end dates to the week/month start. For BigQuery: metricName is the fully-qualified table id (project.dataset.table); dateColumn, metricColumn, and gapFillingMethod are required; groupByFields are string column names. For S3: identical to BigQuery — metricName is the fully-qualified id of a Costory-managed external table over the customer's mirrored Parquet; dateColumn, metricColumn, and gapFillingMethod are required.",
- "properties": {
- "aggregator": {
- "enum": [
- "SUM",
- "AVG",
- "MAX",
- "MIN"
- ],
- "type": "string"
- },
- "alias": {
- "description": "Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.",
- "maxLength": 50,
- "minLength": 1,
- "type": "string"
- },
- "chartType": {
- "description": "Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.",
- "enum": [
- "BAR",
- "LINE",
- "AREA",
- "WATERFALL",
- "TABLE"
- ],
- "type": "string"
- },
- "conditions": {
- "type": "string"
- },
- "dateColumn": {
- "minLength": 1,
- "type": "string"
- },
- "gapFillingMethod": {
- "enum": [
- "ZERO",
- "FORWARD_FILL",
- "LINEAR_INTERPOLATION",
- "SPREAD"
- ],
- "type": "string"
- },
- "groupByFields": {
- "default": [],
- "items": {
- "minLength": 1,
- "type": "string"
- },
- "maxItems": 7,
- "type": "array"
- },
- "integrationId": {
- "description": "External metric integration ID from list_metrics(includeExternal: true).",
- "minLength": 1,
- "type": "string"
- },
- "metricColumn": {
- "minLength": 1,
- "type": "string"
- },
- "metricName": {
- "default": "",
- "type": "string"
- },
- "name": {
- "description": "Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.",
- "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
- "type": "string"
- },
- "provider": {
- "default": "tsuga",
- "description": "External metric provider. Defaults to \"tsuga\" when omitted for backward compatibility with existing Tsuga MCP clients.",
- "enum": [
- "tsuga",
- "bigquery",
- "datadog",
- "cloudwatch",
- "s3",
- "amplitude",
- "snowflake"
- ],
- "type": "string"
- },
- "query": {
- "minLength": 1,
- "type": "string"
- },
- "rollingAggregation": {
- "properties": {
- "aggregator": {
- "enum": [
- "SUM",
- "AVG",
- "MAX",
- "MIN"
- ],
- "type": "string"
- },
- "window": {
- "properties": {
- "preset": {
- "enum": [
- "MONTH",
- "WEEK"
- ],
- "type": "string"
- },
- "relativeDays": {
- "maximum": 9007199254740991,
- "minimum": 1,
- "type": "integer"
- }
- },
- "type": "object"
- }
- },
- "required": [
- "aggregator",
- "window"
- ],
- "type": "object"
- },
- "type": {
- "const": "externalMetric",
- "description": "Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".",
- "type": "string"
- }
- },
- "required": [
- "type",
- "integrationId",
- "name"
- ],
- "type": "object"
- }
-]New value: +[
+ {
+ "properties": {
+ "alias": {
+ "description": "Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.",
+ "maxLength": 50,
+ "minLength": 1,
+ "type": "string"
+ },
+ "chartType": {
+ "description": "Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.",
+ "enum": [
+ "BAR",
+ "LINE",
+ "AREA",
+ "WATERFALL",
+ "TABLE"
+ ],
+ "type": "string"
+ },
+ "currency": {
+ "default": "USD",
+ "description": "Currency for cost values (USD, EUR, GBP). Defaults to \"USD\".",
+ "enum": [
+ "USD",
+ "EUR",
+ "GBP",
+ "CNY"
+ ],
+ "type": "string"
+ },
+ "filterCel": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Optional scope filter as CEL (Common Expression Language). Examples: cos_service_name in [\"AmazonEC2\"]; cos_provider in [\"AWS\"] && cos_environment in [\"prod\"]. Label dimensions use the cos_ prefix; native provider fields omit it. Unlabelled/untagged resources have null values; use == null to match them (e.g. cos_environment == null) and != null to exclude them. Omit or pass empty string for no filter."
+ },
+ "groupBy": {
+ "anyOf": [
+ {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "items": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "type": "array"
+ }
+ ]
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "metricId": {
+ "default": "cost",
+ "description": "Cost column to query (e.g. \"cost\", \"effective_cost\", \"amortized_cost\"). Defaults to \"cost\".",
+ "enum": [
+ "cost",
+ "effective_cost",
+ "list_cost",
+ "contracted_cost",
+ "unblended_cost",
+ "net_unblended_cost",
+ "amortized_cost",
+ "net_amortized_cost"
+ ],
+ "type": "string"
+ },
+ "name": {
+ "description": "Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.",
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
+ "type": "string"
+ },
+ "rollingAggregation": {
+ "properties": {
+ "aggregator": {
+ "enum": [
+ "SUM",
+ "AVG",
+ "MAX",
+ "MIN"
+ ],
+ "type": "string"
+ },
+ "window": {
+ "properties": {
+ "preset": {
+ "enum": [
+ "MONTH",
+ "WEEK"
+ ],
+ "type": "string"
+ },
+ "relativeDays": {
+ "maximum": 9007199254740991,
+ "minimum": 1,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "aggregator",
+ "window"
+ ],
+ "type": "object"
+ },
+ "type": {
+ "const": "cost",
+ "description": "Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "name"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "alias": {
+ "description": "Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.",
+ "maxLength": 50,
+ "minLength": 1,
+ "type": "string"
+ },
+ "chartType": {
+ "description": "Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.",
+ "enum": [
+ "BAR",
+ "LINE",
+ "AREA",
+ "WATERFALL",
+ "TABLE"
+ ],
+ "type": "string"
+ },
+ "groupBy": {
+ "anyOf": [
+ {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "items": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "type": "array"
+ }
+ ]
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "metricId": {
+ "description": "Saved Costory metric id from list_metrics metrics[].id. This is the query identity — not list_metrics `datasourceId` (that filter only returns groupBy dimensions for telemetry).",
+ "type": "string"
+ },
+ "name": {
+ "description": "Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.",
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
+ "type": "string"
+ },
+ "type": {
+ "const": "metric",
+ "description": "Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "metricId",
+ "name"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "alias": {
+ "description": "Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.",
+ "maxLength": 50,
+ "minLength": 1,
+ "type": "string"
+ },
+ "chartType": {
+ "description": "Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.",
+ "enum": [
+ "BAR",
+ "LINE",
+ "AREA",
+ "WATERFALL",
+ "TABLE"
+ ],
+ "type": "string"
+ },
+ "filterCel": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ],
+ "description": "Optional scope filter as CEL (Common Expression Language). Examples: cos_service_name in [\"AmazonEC2\"]; cos_provider in [\"AWS\"] && cos_environment in [\"prod\"]. Label dimensions use the cos_ prefix; native provider fields omit it. Unlabelled/untagged resources have null values; use == null to match them (e.g. cos_environment == null) and != null to exclude them. Omit or pass empty string for no filter."
+ },
+ "groupBy": {
+ "anyOf": [
+ {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "items": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "type": "array"
+ }
+ ]
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "metricId": {
+ "description": "Usage metric id (from suggest_usage_metrics). Distinct from cost metricId and from list_metrics datasourceId.",
+ "type": "string"
+ },
+ "name": {
+ "description": "Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.",
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
+ "type": "string"
+ },
+ "type": {
+ "const": "usage",
+ "description": "Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "metricId",
+ "name"
+ ],
+ "type": "object"
+ },
+ {
+ "properties": {
+ "alias": {
+ "description": "Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.",
+ "maxLength": 50,
+ "minLength": 1,
+ "type": "string"
+ },
+ "chartType": {
+ "description": "Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.",
+ "enum": [
+ "BAR",
+ "LINE",
+ "AREA",
+ "WATERFALL",
+ "TABLE"
+ ],
+ "type": "string"
+ },
+ "formula": {
+ "type": "string"
+ },
+ "name": {
+ "description": "Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.",
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
+ "type": "string"
+ },
+ "type": {
+ "const": "formula",
+ "description": "Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "formula",
+ "name"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "Plot a budget. Use aggBy Month for one value per calendar month. For a daily running total within each month (to see which day the budget was reached), use aggBy Day with rollingAggregation { aggregator: SUM, window: { preset: MONTH } }.",
+ "properties": {
+ "alias": {
+ "description": "Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.",
+ "maxLength": 50,
+ "minLength": 1,
+ "type": "string"
+ },
+ "budgetId": {
+ "type": "string"
+ },
+ "chartType": {
+ "description": "Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.",
+ "enum": [
+ "BAR",
+ "LINE",
+ "AREA",
+ "WATERFALL",
+ "TABLE"
+ ],
+ "type": "string"
+ },
+ "name": {
+ "description": "Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.",
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
+ "type": "string"
+ },
+ "rollingAggregation": {
+ "properties": {
+ "aggregator": {
+ "enum": [
+ "SUM",
+ "AVG",
+ "MAX",
+ "MIN"
+ ],
+ "type": "string"
+ },
+ "window": {
+ "properties": {
+ "preset": {
+ "enum": [
+ "MONTH",
+ "WEEK"
+ ],
+ "type": "string"
+ },
+ "relativeDays": {
+ "maximum": 9007199254740991,
+ "minimum": 1,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "aggregator",
+ "window"
+ ],
+ "type": "object"
+ },
+ "type": {
+ "const": "budget",
+ "description": "Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".",
+ "type": "string"
+ },
+ "virtualDimensionValue": {
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "budgetId",
+ "name"
+ ],
+ "type": "object"
+ },
+ {
+ "description": "Plot a live external metric from an integration. integrationId comes from list_metrics(includeExternal: true). For Tsuga: metricName is the provider metric name; groupByFields are provider metric attributes; conditions is an optional provider filter string. For Datadog: metricName is the Datadog metric name; groupByFields are metric tags; conditions is an optional Datadog filter/query string. When query is set it is the Datadog metrics query string (pass-through to queryMetrics); metricName / aggregator / conditions / groupByFields are leftover UI state and are not a second writer. .rollup is required and the interval must be ≥ 24h (daily / weekly / monthly or seconds ≥ 86400). Costory will not fill an empty weekly series. For CloudWatch: metricName is Namespace/MetricName (e.g. AWS/EC2/CPUUtilization); groupByFields are CloudWatch dimension names; conditions is an optional dimension filter. For Amplitude: metricName is one of active_users, new_users, active_users_weekly, active_users_monthly; aggregator must be SUM; groupByFields is at most one built-in user property from list_metrics attributes (version, country, city, region, DMA, language, platform, os, device, device_type, start_version, paying); conditions is an optional Amplitude segment string (s parameter); Hour aggBy is unsupported; weekly/monthly metrics snap Amplitude period-end dates to the week/month start. For BigQuery: metricName is the fully-qualified table id (project.dataset.table); dateColumn, metricColumn, and gapFillingMethod are required; groupByFields are string column names. For S3: identical to BigQuery — metricName is the fully-qualified id of a Costory-managed external table over the customer's mirrored Parquet; dateColumn, metricColumn, and gapFillingMethod are required.",
+ "properties": {
+ "aggregator": {
+ "enum": [
+ "SUM",
+ "AVG",
+ "MAX",
+ "MIN"
+ ],
+ "type": "string"
+ },
+ "alias": {
+ "description": "Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.",
+ "maxLength": 50,
+ "minLength": 1,
+ "type": "string"
+ },
+ "chartType": {
+ "description": "Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.",
+ "enum": [
+ "BAR",
+ "LINE",
+ "AREA",
+ "WATERFALL",
+ "TABLE"
+ ],
+ "type": "string"
+ },
+ "conditions": {
+ "type": "string"
+ },
+ "dateColumn": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "gapFillingMethod": {
+ "enum": [
+ "ZERO",
+ "FORWARD_FILL",
+ "LINEAR_INTERPOLATION",
+ "SPREAD"
+ ],
+ "type": "string"
+ },
+ "groupByFields": {
+ "default": [],
+ "items": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "maxItems": 7,
+ "type": "array"
+ },
+ "integrationId": {
+ "description": "External metric integration ID from list_metrics(includeExternal: true).",
+ "minLength": 1,
+ "type": "string"
+ },
+ "metricColumn": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "metricName": {
+ "default": "",
+ "type": "string"
+ },
+ "name": {
+ "description": "Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.",
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]*$",
+ "type": "string"
+ },
+ "provider": {
+ "default": "tsuga",
+ "description": "External metric provider. Defaults to \"tsuga\" when omitted for backward compatibility with existing Tsuga MCP clients.",
+ "enum": [
+ "tsuga",
+ "bigquery",
+ "datadog",
+ "cloudwatch",
+ "s3",
+ "amplitude",
+ "snowflake",
+ "cloudmonitoring"
+ ],
+ "type": "string"
+ },
+ "query": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "rollingAggregation": {
+ "properties": {
+ "aggregator": {
+ "enum": [
+ "SUM",
+ "AVG",
+ "MAX",
+ "MIN"
+ ],
+ "type": "string"
+ },
+ "window": {
+ "properties": {
+ "preset": {
+ "enum": [
+ "MONTH",
+ "WEEK"
+ ],
+ "type": "string"
+ },
+ "relativeDays": {
+ "maximum": 9007199254740991,
+ "minimum": 1,
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ }
+ },
+ "required": [
+ "aggregator",
+ "window"
+ ],
+ "type": "object"
+ },
+ "type": {
+ "const": "externalMetric",
+ "description": "Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".",
+ "type": "string"
+ }
+ },
+ "required": [
+ "type",
+ "integrationId",
+ "name"
+ ],
+ "type": "object"
+ }
+]