Skip to main content
Glama

Review shared factors and correlation noise

spectral_assessment
Read-onlyIdempotent

Analyze shared correlation structure and rolling concentration across two or more comparable series, returning alignment, window dynamics, and review candidates for panel research.

Instructions

Analyze shared correlation structure and rolling concentration in a caller-defined comparable panel. Use for research on shared movements across at least two series; choose market_assessment for individual move/freshness review, or dyson_reference for a wholly synthetic illustration. Prices become log returns, returns stay returns, other kinds become first differences. Both interval endpoints must align; no interpolation or silent removal of rejected series occurs. Default windows need 60 aligned intervals (at least 61 original readings per series), and window_points must exceed the series count. Returns status, reasons, source/coverage records, alignment, windows, latest and dynamics. Assessed windows contain dimensionless correlation/eigenvalues, leading_variance_share (fraction), effective_rank, iid reference edges and an experimental shrinkage candidate. Stale, restricted, gapped or constant panels can return insufficient_visibility; invalid ids/timestamps are errors. Reference outliers are review candidates, not certified factors, significance, alpha or a covariance forecast.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
as_ofYesUTC cutoff for freshness and availability, for example 2026-01-01T12:00:00Z. Caller timestamps do not certify historical as-published vintages.
policyNoOptional rolling-window sizes; omitted fields default to 60 intervals, 20-interval steps and at most 4 windows.
seriesYesCaller-defined comparable panel, normally 2–32 series with unique ids. All members must pass source and clock gates. Both endpoints of each interval must align; rejected members are never silently removed.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
as_ofNoCaller cutoff.
errorNoValidation or computation failure message; inspect MCP isError or the HTTP status.
latestNoWindow with all metrics absent when a series is constant or numerically unresolved. Null means unavailable or not applicable, never zero.
limitsNoOrdered statements or identifiers.
policyNoFully applied rolling policy.
schemaNoResult contract identifier.
seriesNoAll requested series sorted by id.
statusNoWindow/visibility result.
reasonsNoOrdered statements or identifiers.
windowsNoComplete recent windows in chronological order.
coverageNoSupplied-panel coverage only.
dynamicsNoOnly pairs of assessed windows are compared.
maturityNoResearch maturity.
validityNoDescriptive assessment, not a probability or statistical certificate.
alignmentNoAlignment diagnostics; mismatch counts are absent when early gates stop alignment.
guaranteeNoNo statistical or market-performance guarantee is made.
is_e_valueNoNo calibrated e-value.
policy_sha256NoSHA-256 of the canonicalized submitted request or applied policy.
request_sha256NoSHA-256 of the canonicalized submitted request or applied policy.
execution_authorityNoNo trading authority.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changedv0.4.3
    • removedOutput schema / additionalProperties
      Removed value: -true
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "alignment": {},
      +      "as_of": {},
      +      "coverage": {},
      +      "dynamics": {},
      +      "execution_authority": {},
      +      "guarantee": {},
      +      "is_e_value": {},
      +      "latest": {},
      +      "limits": {},
      +      "maturity": {},
      +      "policy": {},
      +      "policy_sha256": {},
      +      "reasons": {},
      +      "request_sha256": {},
      +      "schema": {},
      +      "series": {},
      +      "status": {},
      +      "validity": {},
      +      "windows": {}
      +    },
      +    "required": [
      +      "schema",
      +      "as_of",
      +      "status",
      +      "maturity",
      +      "validity",
      +      "guarantee",
      +      "is_e_value",
      +      "policy",
      +      "series",
      +      "reasons",
      +      "windows",
      +      "latest",
      +      "dynamics",
      +      "alignment",
      +      "coverage",
      +      "limits",
      +      "execution_authority",
      +      "request_sha256",
      +      "policy_sha256"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "description": "Existing tool-error payload; no successful result fields are implied.",
      +    "properties": {
      +      "error": {
      +        "description": "Validation or computation failure message; inspect MCP isError or the HTTP status.",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
    • changedOutput schema / description
      Previous value: -"Tool-specific result object described in each tool's description. Check status/ok/state, reading, validity and limits before using numbers. MCP returns this object in structuredContent and JSON text; invalid input returns isError=true with an error field. No tool fetches sources or executes trades."New value: +"Source-gated spectral research, with explicit unresolved and partial windows. Tool errors retain the separate error-message shape."
    • addedOutput schema / properties
      Added value: +{
      +  "alignment": {
      +    "additionalProperties": false,
      +    "description": "Alignment diagnostics; mismatch counts are absent when early gates stop alignment.",
      +    "properties": {
      +      "aligned_points": {
      +        "description": "Aligned contiguous intervals.",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "discarded_common_intervals": {
      +        "description": "Common intervals before the last mismatch.",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "filled_points": {
      +        "description": "Always zero; data are never filled.",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "first_observation_sets_interval_start": {
      +        "const": true,
      +        "description": "First observation sets the first interval start.",
      +        "type": "boolean"
      +      },
      +      "method": {
      +        "const": "common_contiguous_interval_suffix",
      +        "description": "Alignment method.",
      +        "type": "string"
      +      },
      +      "unmatched_intervals": {
      +        "description": "Union intervals absent from at least one member.",
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "method",
      +      "aligned_points",
      +      "first_observation_sets_interval_start",
      +      "filled_points"
      +    ],
      +    "type": "object"
      +  },
      +  "as_of": {
      +    "description": "Caller cutoff.",
      +    "type": "string"
      +  },
      +  "coverage": {
      +    "additionalProperties": false,
      +    "description": "Supplied-panel coverage only.",
      +    "properties": {
      +      "complete_for_supplied_series": {
      +        "description": "All returned windows assessed for the entire supplied panel.",
      +        "type": "boolean"
      +      },
      +      "market_universe_complete": {
      +        "const": false,
      +        "description": "No claim of market-wide completeness.",
      +        "type": "boolean"
      +      },
      +      "requested_series": {
      +        "description": "Requested panel members.",
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "requested_series",
      +      "complete_for_supplied_series",
      +      "market_universe_complete"
      +    ],
      +    "type": "object"
      +  },
      +  "dynamics": {
      +    "description": "Only pairs of assessed windows are compared.",
      +    "items": {
      +      "additionalProperties": false,
      +      "description": "Adjacent assessed-window comparison.",
      +      "properties": {
      +        "calibrated_regime_change": {
      +          "const": false,
      +          "description": "No calibrated change decision.",
      +          "type": "boolean"
      +        },
      +        "correlation_rms_change": {
      +          "description": "RMS matrix-entry difference.",
      +          "type": "number"
      +        },
      +        "eigenvalue_rms_change": {
      +          "description": "RMS eigenvalue difference.",
      +          "type": "number"
      +        },
      +        "from": {
      +          "description": "Previous window-end timestamp.",
      +          "type": "string"
      +        },
      +        "leading_variance_share_change": {
      +          "description": "Current minus previous leading variance share.",
      +          "type": "number"
      +        },
      +        "leading_vector_comparison": {
      +          "description": "Whether vector overlap is resolved.",
      +          "enum": [
      +            "descriptive",
      +            "unresolved_degenerate_mode"
      +          ],
      +          "type": "string"
      +        },
      +        "leading_vector_squared_overlap": {
      +          "anyOf": [
      +            {
      +              "description": "Squared overlap; null when the leading mode is degenerate.",
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Squared overlap; null when the leading mode is degenerate. Null means unavailable or not applicable, never zero."
      +        },
      +        "to": {
      +          "description": "Current window-end timestamp.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "from",
      +        "to",
      +        "leading_variance_share_change",
      +        "eigenvalue_rms_change",
      +        "correlation_rms_change",
      +        "leading_vector_squared_overlap",
      +        "leading_vector_comparison",
      +        "calibrated_regime_change"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  "error": {
      +    "description": "Validation or computation failure message; inspect MCP isError or the HTTP status.",
      +    "type": "string"
      +  },
      +  "execution_authority": {
      +    "const": false,
      +    "description": "No trading authority.",
      +    "type": "boolean"
      +  },
      +  "guarantee": {
      +    "description": "No statistical or market-performance guarantee is made.",
      +    "type": "null"
      +  },
      +  "is_e_value": {
      +    "const": false,
      +    "description": "No calibrated e-value.",
      +    "type": "boolean"
      +  },
      +  "latest": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": false,
      +        "allOf": [
      +          {
      +            "if": {
      +              "properties": {
      +                "status": {
      +                  "const": "assessed"
      +                }
      +              }
      +            },
      +            "then": {
      +              "required": [
      +                "correlation",
      +                "eigenvalues",
      +                "leading_variance_share",
      +                "participation_ratio",
      +                "effective_rank",
      +                "numerical_rank",
      +                "leading_eigengap",
      +                "leading_loadings",
      +                "lag_one_correlations",
      +                "reference",
      +                "shrinkage_candidate"
      +              ]
      +            }
      +          }
      +        ],
      +        "description": "Window with all metrics absent when a series is constant or numerically unresolved.",
      +        "properties": {
      +          "correlation": {
      +            "description": "Rows of a matrix in the declared series order.",
      +            "items": {
      +              "description": "Numeric values in the documented order.",
      +              "items": {
      +                "description": "One finite numeric value.",
      +                "type": "number"
      +              },
      +              "type": "array"
      +            },
      +            "type": "array"
      +          },
      +          "effective_rank": {
      +            "description": "Exponential entropy of normalized positive eigenvalues.",
      +            "type": "number"
      +          },
      +          "eigenvalues": {
      +            "description": "Numeric values in the documented order.",
      +            "items": {
      +              "description": "One finite numeric value.",
      +              "type": "number"
      +            },
      +            "type": "array"
      +          },
      +          "lag_one_correlations": {
      +            "description": "Lag diagnostics in series order.",
      +            "items": {
      +              "additionalProperties": false,
      +              "description": "One series lag diagnostic.",
      +              "properties": {
      +                "correlation": {
      +                  "anyOf": [
      +                    {
      +                      "description": "Lag-one correlation, when estimable.",
      +                      "type": "number"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Lag-one correlation, when estimable. Null means unavailable or not applicable, never zero."
      +                },
      +                "id": {
      +                  "description": "Series id.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "correlation"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "leading_eigengap": {
      +            "description": "First minus second eigenvalue.",
      +            "type": "number"
      +          },
      +          "leading_loadings": {
      +            "additionalProperties": {
      +              "description": "Eigenvector component.",
      +              "type": "number"
      +            },
      +            "description": "Leading eigenvector components keyed by caller series ids; sign is normalized, not an economic factor label.",
      +            "type": "object"
      +          },
      +          "leading_variance_share": {
      +            "description": "Largest eigenvalue divided by trace.",
      +            "type": "number"
      +          },
      +          "numerical_rank": {
      +            "description": "Eigenvalues above 1e-10.",
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "observations": {
      +            "description": "Aligned intervals in this window.",
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "participation_ratio": {
      +            "description": "Squared trace divided by sum of squared eigenvalues.",
      +            "type": "number"
      +          },
      +          "reasons": {
      +            "description": "Ordered statements or identifiers.",
      +            "items": {
      +              "description": "One retained statement or identifier.",
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "reference": {
      +            "additionalProperties": false,
      +            "description": "Idealized reference, not evidence of alpha or certified factors.",
      +            "properties": {
      +              "above_upper_count": {
      +                "description": "Eigenvalues above upper edge.",
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "below_lower_count": {
      +                "description": "Eigenvalues below lower edge.",
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "finite_sample_calibrated": {
      +                "const": false,
      +                "description": "Not a finite-sample significance test.",
      +                "type": "boolean"
      +              },
      +              "in_band_count": {
      +                "description": "Eigenvalues inside the reference band.",
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "is_e_value": {
      +                "const": false,
      +                "description": "Not an e-value.",
      +                "type": "boolean"
      +              },
      +              "lower_edge": {
      +                "description": "Asymptotic lower reference edge.",
      +                "type": "number"
      +              },
      +              "name": {
      +                "const": "marchenko_pastur_iid_unit_variance",
      +                "description": "Reference model.",
      +                "type": "string"
      +              },
      +              "p_value": {
      +                "description": "No calibrated p-value.",
      +                "type": "null"
      +              },
      +              "q": {
      +                "description": "Series count divided by sample degrees of freedom.",
      +                "type": "number"
      +              },
      +              "sample_degrees_of_freedom": {
      +                "description": "Window observations minus one.",
      +                "minimum": 0,
      +                "type": "integer"
      +              },
      +              "upper_edge": {
      +                "description": "Asymptotic upper reference edge.",
      +                "type": "number"
      +              }
      +            },
      +            "required": [
      +              "name",
      +              "q",
      +              "sample_degrees_of_freedom",
      +              "lower_edge",
      +              "upper_edge",
      +              "above_upper_count",
      +              "below_lower_count",
      +              "in_band_count",
      +              "finite_sample_calibrated",
      +              "p_value",
      +              "is_e_value"
      +            ],
      +            "type": "object"
      +          },
      +          "series_ids": {
      +            "description": "Ordered statements or identifiers.",
      +            "items": {
      +              "description": "One retained statement or identifier.",
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "shrinkage_candidate": {
      +            "additionalProperties": false,
      +            "description": "Experimental correlation candidate, not a validated risk model.",
      +            "properties": {
      +              "correlation": {
      +                "description": "Rows of a matrix in the declared series order.",
      +                "items": {
      +                  "description": "Numeric values in the documented order.",
      +                  "items": {
      +                    "description": "One finite numeric value.",
      +                    "type": "number"
      +                  },
      +                  "type": "array"
      +                },
      +                "type": "array"
      +              },
      +              "low_and_high_outliers_preserved_before_diagonal_normalization": {
      +                "const": true,
      +                "description": "Outliers retained before diagonal normalization.",
      +                "type": "boolean"
      +              },
      +              "method": {
      +                "const": "equalize_in_band_eigenvalues_then_restore_unit_diagonal",
      +                "description": "Construction.",
      +                "type": "string"
      +              },
      +              "out_of_sample_validated": {
      +                "const": false,
      +                "description": "No held-out validation.",
      +                "type": "boolean"
      +              },
      +              "positive_definite_guaranteed": {
      +                "const": false,
      +                "description": "Singular candidates remain possible.",
      +                "type": "boolean"
      +              },
      +              "status": {
      +                "const": "experimental",
      +                "description": "Candidate maturity.",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "status",
      +              "correlation",
      +              "method",
      +              "low_and_high_outliers_preserved_before_diagonal_normalization",
      +              "positive_definite_guaranteed",
      +              "out_of_sample_validated"
      +            ],
      +            "type": "object"
      +          },
      +          "status": {
      +            "description": "Window assessment state.",
      +            "enum": [
      +              "assessed",
      +              "insufficient_visibility"
      +            ],
      +            "type": "string"
      +          },
      +          "window_end": {
      +            "description": "Last interval end in UTC.",
      +            "type": "string"
      +          },
      +          "window_start": {
      +            "description": "First interval start in UTC.",
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "window_start",
      +          "window_end",
      +          "observations",
      +          "series_ids",
      +          "status",
      +          "reasons"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "type": "null"
      +      }
      +    ],
      +    "description": "Window with all metrics absent when a series is constant or numerically unresolved. Null means unavailable or not applicable, never zero."
      +  },
      +  "limits": {
      +    "description": "Ordered statements or identifiers.",
      +    "items": {
      +      "description": "One retained statement or identifier.",
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "maturity": {
      +    "const": "research",
      +    "description": "Research maturity.",
      +    "type": "string"
      +  },
      +  "policy": {
      +    "additionalProperties": false,
      +    "description": "Fully applied rolling policy.",
      +    "properties": {
      +      "max_windows": {
      +        "description": "Maximum returned windows.",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "step_points": {
      +        "description": "Intervals between window ends.",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "window_points": {
      +        "description": "Aligned intervals per window.",
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "window_points",
      +      "step_points",
      +      "max_windows"
      +    ],
      +    "type": "object"
      +  },
      +  "policy_sha256": {
      +    "description": "SHA-256 of the canonicalized submitted request or applied policy.",
      +    "pattern": "^[0-9a-f]{64}$",
      +    "type": "string"
      +  },
      +  "reasons": {
      +    "description": "Ordered statements or identifiers.",
      +    "items": {
      +      "description": "One retained statement or identifier.",
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "request_sha256": {
      +    "description": "SHA-256 of the canonicalized submitted request or applied policy.",
      +    "pattern": "^[0-9a-f]{64}$",
      +    "type": "string"
      +  },
      +  "schema": {
      +    "const": "noisefloor.spectral-assessment.v1",
      +    "description": "Result contract identifier.",
      +    "type": "string"
      +  },
      +  "series": {
      +    "description": "All requested series sorted by id.",
      +    "items": {
      +      "additionalProperties": false,
      +      "description": "Panel member retained even when its source or history is ineligible.",
      +      "properties": {
      +        "age_seconds": {
      +          "anyOf": [
      +            {
      +              "description": "Cutoff minus last observation timestamp in seconds; may be negative for future data.",
      +              "type": "number"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Cutoff minus last observation timestamp in seconds; may be negative for future data. Null means unavailable or not applicable, never zero."
      +        },
      +        "as_published_history_verified": {
      +          "const": false,
      +          "description": "Caller timestamps do not verify historical availability.",
      +          "type": "boolean"
      +        },
      +        "availability_timestamps_complete": {
      +          "description": "Every supplied observation declares availability and the series is nonempty.",
      +          "type": "boolean"
      +        },
      +        "available_at": {
      +          "anyOf": [
      +            {
      +              "description": "Last supplied availability timestamp, if present.",
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Last supplied availability timestamp, if present. Null means unavailable or not applicable, never zero."
      +        },
      +        "contiguous_intervals": {
      +          "description": "Transformed eligible intervals; zero when source gates fail.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "gap_indices": {
      +          "description": "Declared-calendar gap positions.",
      +          "items": {
      +            "description": "Zero-based observation index.",
      +            "minimum": 0,
      +            "type": "integer"
      +          },
      +          "type": "array"
      +        },
      +        "group": {
      +          "description": "Declared group, defaulting to series id.",
      +          "type": "string"
      +        },
      +        "id": {
      +          "description": "Caller-supplied series identifier.",
      +          "type": "string"
      +        },
      +        "kind": {
      +          "description": "Caller-declared measurement kind.",
      +          "type": "string"
      +        },
      +        "measurement_coverage": {
      +          "additionalProperties": false,
      +          "description": "Caller-declared measurement coverage.",
      +          "properties": {
      +            "declared_points": {
      +              "description": "Non-null declared denominators.",
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "maximum": {
      +              "anyOf": [
      +                {
      +                  "description": "Maximum declared denominator.",
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Maximum declared denominator. Null means unavailable or not applicable, never zero."
      +            },
      +            "minimum": {
      +              "anyOf": [
      +                {
      +                  "description": "Minimum declared denominator.",
      +                  "type": "number"
      +                },
      +                {
      +                  "type": "null"
      +                }
      +              ],
      +              "description": "Minimum declared denominator. Null means unavailable or not applicable, never zero."
      +            },
      +            "sampling_adjustment_applied": {
      +              "const": false,
      +              "description": "No adjustment is made.",
      +              "type": "boolean"
      +            },
      +            "status": {
      +              "description": "Declared denominator state.",
      +              "enum": [
      +                "not_supplied",
      +                "incomplete",
      +                "variable",
      +                "constant_declared_count"
      +              ],
      +              "type": "string"
      +            },
      +            "tail_points": {
      +              "description": "Contiguous tail observations.",
      +              "minimum": 0,
      +              "type": "integer"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "declared_points",
      +            "tail_points",
      +            "minimum",
      +            "maximum",
      +            "sampling_adjustment_applied"
      +          ],
      +          "type": "object"
      +        },
      +        "missing_points": {
      +          "description": "Null-valued observations.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "observed_at": {
      +          "anyOf": [
      +            {
      +              "description": "Last supplied observation timestamp; null for no observations.",
      +              "type": "string"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Last supplied observation timestamp; null for no observations. Null means unavailable or not applicable, never zero."
      +        },
      +        "reasons": {
      +          "description": "Ordered statements or identifiers.",
      +          "items": {
      +            "description": "One retained statement or identifier.",
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "source": {
      +          "additionalProperties": false,
      +          "properties": {
      +            "id": {
      +              "description": "Caller-defined source identifier retained in results, for example synthetic-demo or a licensed provider name.",
      +              "maxLength": 128,
      +              "minLength": 1,
      +              "type": "string"
      +            },
      +            "rights": {
      +              "description": "Caller's source-use declaration. Only permitted permits numerical assessment; unknown and restricted remain explicit visibility gaps. The server does not grant or verify rights.",
      +              "enum": [
      +                "permitted",
      +                "unknown",
      +                "restricted"
      +              ],
      +              "type": "string"
      +            },
      +            "url": {
      +              "description": "Optional source or evidence URL retained for attribution; no URL is fetched or independently verified.",
      +              "maxLength": 2048,
      +              "minLength": 1,
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "id",
      +            "rights"
      +          ],
      +          "type": "object"
      +        },
      +        "transform": {
      +          "description": "Transformation applied to the contiguous tail.",
      +          "enum": [
      +            "log_return",
      +            "identity_return",
      +            "first_difference"
      +          ],
      +          "type": "string"
      +        },
      +        "unit": {
      +          "description": "Caller-declared input unit.",
      +          "type": "string"
      +        },
      +        "warnings": {
      +          "description": "Ordered statements or identifiers.",
      +          "items": {
      +            "description": "One retained statement or identifier.",
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "kind",
      +        "unit",
      +        "source",
      +        "group",
      +        "reasons",
      +        "warnings",
      +        "observed_at",
      +        "available_at",
      +        "age_seconds",
      +        "gap_indices",
      +        "missing_points",
      +        "availability_timestamps_complete",
      +        "as_published_history_verified",
      +        "transform",
      +        "measurement_coverage",
      +        "contiguous_intervals"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  "status": {
      +    "description": "Window/visibility result.",
      +    "enum": [
      +      "insufficient_visibility",
      +      "assessed",
      +      "partial"
      +    ],
      +    "type": "string"
      +  },
      +  "validity": {
      +    "const": "descriptive",
      +    "description": "Descriptive assessment, not a probability or statistical certificate.",
      +    "type": "string"
      +  },
      +  "windows": {
      +    "description": "Complete recent windows in chronological order.",
      +    "items": {
      +      "additionalProperties": false,
      +      "allOf": [
      +        {
      +          "if": {
      +            "properties": {
      +              "status": {
      +                "const": "assessed"
      +              }
      +            }
      +          },
      +          "then": {
      +            "required": [
      +              "correlation",
      +              "eigenvalues",
      +              "leading_variance_share",
      +              "participation_ratio",
      +              "effective_rank",
      +              "numerical_rank",
      +              "leading_eigengap",
      +              "leading_loadings",
      +              "lag_one_correlations",
      +              "reference",
      +              "shrinkage_candidate"
      +            ]
      +          }
      +        }
      +      ],
      +      "description": "Window with all metrics absent when a series is constant or numerically unresolved.",
      +      "properties": {
      +        "correlation": {
      +          "description": "Rows of a matrix in the declared series order.",
      +          "items": {
      +            "description": "Numeric values in the documented order.",
      +            "items": {
      +              "description": "One finite numeric value.",
      +              "type": "number"
      +            },
      +            "type": "array"
      +          },
      +          "type": "array"
      +        },
      +        "effective_rank": {
      +          "description": "Exponential entropy of normalized positive eigenvalues.",
      +          "type": "number"
      +        },
      +        "eigenvalues": {
      +          "description": "Numeric values in the documented order.",
      +          "items": {
      +            "description": "One finite numeric value.",
      +            "type": "number"
      +          },
      +          "type": "array"
      +        },
      +        "lag_one_correlations": {
      +          "description": "Lag diagnostics in series order.",
      +          "items": {
      +            "additionalProperties": false,
      +            "description": "One series lag diagnostic.",
      +            "properties": {
      +              "correlation": {
      +                "anyOf": [
      +                  {
      +                    "description": "Lag-one correlation, when estimable.",
      +                    "type": "number"
      +                  },
      +                  {
      +                    "type": "null"
      +                  }
      +                ],
      +                "description": "Lag-one correlation, when estimable. Null means unavailable or not applicable, never zero."
      +              },
      +              "id": {
      +                "description": "Series id.",
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "id",
      +              "correlation"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "leading_eigengap": {
      +          "description": "First minus second eigenvalue.",
      +          "type": "number"
      +        },
      +        "leading_loadings": {
      +          "additionalProperties": {
      +            "description": "Eigenvector component.",
      +            "type": "number"
      +          },
      +          "description": "Leading eigenvector components keyed by caller series ids; sign is normalized, not an economic factor label.",
      +          "type": "object"
      +        },
      +        "leading_variance_share": {
      +          "description": "Largest eigenvalue divided by trace.",
      +          "type": "number"
      +        },
      +        "numerical_rank": {
      +          "description": "Eigenvalues above 1e-10.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "observations": {
      +          "description": "Aligned intervals in this window.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "participation_ratio": {
      +          "description": "Squared trace divided by sum of squared eigenvalues.",
      +          "type": "number"
      +        },
      +        "reasons": {
      +          "description": "Ordered statements or identifiers.",
      +          "items": {
      +            "description": "One retained statement or identifier.",
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "reference": {
      +          "additionalProperties": false,
      +          "description": "Idealized reference, not evidence of alpha or certified factors.",
      +          "properties": {
      +            "above_upper_count": {
      +              "description": "Eigenvalues above upper edge.",
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "below_lower_count": {
      +              "description": "Eigenvalues below lower edge.",
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "finite_sample_calibrated": {
      +              "const": false,
      +              "description": "Not a finite-sample significance test.",
      +              "type": "boolean"
      +            },
      +            "in_band_count": {
      +              "description": "Eigenvalues inside the reference band.",
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "is_e_value": {
      +              "const": false,
      +              "description": "Not an e-value.",
      +              "type": "boolean"
      +            },
      +            "lower_edge": {
      +              "description": "Asymptotic lower reference edge.",
      +              "type": "number"
      +            },
      +            "name": {
      +              "const": "marchenko_pastur_iid_unit_variance",
      +              "description": "Reference model.",
      +              "type": "string"
      +            },
      +            "p_value": {
      +              "description": "No calibrated p-value.",
      +              "type": "null"
      +            },
      +            "q": {
      +              "description": "Series count divided by sample degrees of freedom.",
      +              "type": "number"
      +            },
      +            "sample_degrees_of_freedom": {
      +              "description": "Window observations minus one.",
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            "upper_edge": {
      +              "description": "Asymptotic upper reference edge.",
      +              "type": "number"
      +            }
      +          },
      +          "required": [
      +            "name",
      +            "q",
      +            "sample_degrees_of_freedom",
      +            "lower_edge",
      +            "upper_edge",
      +            "above_upper_count",
      +            "below_lower_count",
      +            "in_band_count",
      +            "finite_sample_calibrated",
      +            "p_value",
      +            "is_e_value"
      +          ],
      +          "type": "object"
      +        },
      +        "series_ids": {
      +          "description": "Ordered statements or identifiers.",
      +          "items": {
      +            "description": "One retained statement or identifier.",
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "shrinkage_candidate": {
      +          "additionalProperties": false,
      +          "description": "Experimental correlation candidate, not a validated risk model.",
      +          "properties": {
      +            "correlation": {
      +              "description": "Rows of a matrix in the declared series order.",
      +              "items": {
      +                "description": "Numeric values in the documented order.",
      +                "items": {
      +                  "description": "One finite numeric value.",
      +                  "type": "number"
      +                },
      +                "type": "array"
      +              },
      +              "type": "array"
      +            },
      +            "low_and_high_outliers_preserved_before_diagonal_normalization": {
      +              "const": true,
      +              "description": "Outliers retained before diagonal normalization.",
      +              "type": "boolean"
      +            },
      +            "method": {
      +              "const": "equalize_in_band_eigenvalues_then_restore_unit_diagonal",
      +              "description": "Construction.",
      +              "type": "string"
      +            },
      +            "out_of_sample_validated": {
      +              "const": false,
      +              "description": "No held-out validation.",
      +              "type": "boolean"
      +            },
      +            "positive_definite_guaranteed": {
      +              "const": false,
      +              "description": "Singular candidates remain possible.",
      +              "type": "boolean"
      +            },
      +            "status": {
      +              "const": "experimental",
      +              "description": "Candidate maturity.",
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "status",
      +            "correlation",
      +            "method",
      +            "low_and_high_outliers_preserved_before_diagonal_normalization",
      +            "positive_definite_guaranteed",
      +            "out_of_sample_validated"
      +          ],
      +          "type": "object"
      +        },
      +        "status": {
      +          "description": "Window assessment state.",
      +          "enum": [
      +            "assessed",
      +            "insufficient_visibility"
      +          ],
      +          "type": "string"
      +        },
      +        "window_end": {
      +          "description": "Last interval end in UTC.",
      +          "type": "string"
      +        },
      +        "window_start": {
      +          "description": "First interval start in UTC.",
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "window_start",
      +        "window_end",
      +        "observations",
      +        "series_ids",
      +        "status",
      +        "reasons"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  }
      +}
  2. Changed25 schema fields changedv0.4.3-glama.1
    • addedInput schema / properties / as_of / description
      Added value: +"UTC cutoff for freshness and availability, for example 2026-01-01T12:00:00Z. Caller timestamps do not certify historical as-published vintages."
    • addedInput schema / properties / policy / description
      Added value: +"Optional rolling-window sizes; omitted fields default to 60 intervals, 20-interval steps and at most 4 windows."
    • addedInput schema / properties / policy / properties / max_windows / default
      Added value: +4
    • addedInput schema / properties / policy / properties / max_windows / description
      Added value: +"Maximum recent complete windows returned, in chronological order; default 4. Fewer are returned when only a shorter eligible history is available."
    • addedInput schema / properties / policy / properties / step_points / default
      Added value: +20
    • addedInput schema / properties / policy / properties / step_points / description
      Added value: +"Step back in aligned intervals between window endpoints; default 20. Overlapping windows are descriptive and not independent tests."
    • addedInput schema / properties / policy / properties / window_points / default
      Added value: +60
    • addedInput schema / properties / policy / properties / window_points / description
      Added value: +"Aligned transformed intervals per correlation window; default 60. Must exceed the supplied series count; needs at least window_points + 1 original observations per series, including returns."
    • addedInput schema / properties / series / description
      Added value: +"Caller-defined comparable panel, normally 2–32 series with unique ids. All members must pass source and clock gates. Both endpoints of each interval must align; rejected members are never silently removed."
    • addedInput schema / properties / series / items / properties / group / description
      Added value: +"Optional caller-defined grouping label for review queues; defaults to this series id. It does not certify independence or comparability."
    • addedInput schema / properties / series / items / properties / id / description
      Added value: +"Unique series identifier within this request, used in results and cross-series relationships."
    • addedInput schema / properties / series / items / properties / kind / description
      Added value: +"Measurement type. Both assessment tools convert price to log returns. market_assessment keeps other values unchanged; spectral_assessment keeps return values and first-differences level, spread, rate and count."
    • addedInput schema / properties / series / items / properties / max_age_seconds / description
      Added value: +"Maximum allowed age in seconds of the last observation relative to as_of. Older data remains insufficient_visibility; choose an appropriate cadence-specific limit."
    • addedInput schema / properties / series / items / properties / max_gap_seconds / description
      Added value: +"Optional largest allowed time gap in seconds between observations. A larger gap restarts the contiguous tail. If omitted, calendar gap policy is unknown and a warning is returned."
    • addedInput schema / properties / series / items / properties / observations / description
      Added value: +"Zero to 2048 observations in strictly increasing UTC order. Empty or inadequate histories return visibility gaps; null values and declared time gaps are preserved, never interpolated."
    • addedInput schema / properties / series / items / properties / observations / items / properties / available_at / description
      Added value: +"UTC time the observation became available to the caller. A time before observed_at becomes an availability_precedes_observation visibility gap; after as_of becomes not_yet_available. Omission is retained as incomplete availability history."
    • addedInput schema / properties / series / items / properties / observations / items / properties / observed_at / description
      Added value: +"Time represented by this observation, in UTC. Timestamps within a series must be unique and strictly increasing."
    • addedInput schema / properties / series / items / properties / observations / items / properties / sample_size / description
      Added value: +"Positive measurement-coverage denominator for this observation, or null when missing. This is not trading volume. Omit if coverage is not supplied; zero is invalid."
    • addedInput schema / properties / series / items / properties / observations / items / properties / value / description
      Added value: +"Finite measurement in the declared series unit. Prices must be positive and counts nonnegative. Use null for missing data; it breaks the contiguous analysis window and is never filled."
    • addedInput schema / properties / series / items / properties / source / description
      Added value: +"Source identity, optional attribution URL and declared usage rights. All are caller-supplied, not attestations."
    • addedInput schema / properties / series / items / properties / source / properties / id / description
      Added value: +"Caller-defined source identifier retained in results, for example synthetic-demo or a licensed provider name."
    • addedInput schema / properties / series / items / properties / source / properties / rights / description
      Added value: +"Caller's source-use declaration. Only permitted permits numerical assessment; unknown and restricted remain explicit visibility gaps. The server does not grant or verify rights."
    • addedInput schema / properties / series / items / properties / source / properties / url / description
      Added value: +"Optional source or evidence URL retained for attribution; no URL is fetched or independently verified."
    • addedInput schema / properties / series / items / properties / unit / description
      Added value: +"Consistent measurement unit for all observations, for example USD, decimal_return, basis_points or count. No currency conversion, percent conversion or economic comparability is inferred."
    • addedOutput schema / description
      Added value: +"Tool-specific result object described in each tool's description. Check status/ok/state, reading, validity and limits before using numbers. MCP returns this object in structuredContent and JSON text; invalid input returns isError=true with an error field. No tool fetches sources or executes trades."
  3. Addedv0.4.1

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnly=idempotent=non-destructive and closed-world, and the description adds substantial extra context: kind-specific transforms (price→log returns, others first-differenced), mandatory endpoint alignment, no interpolation or silent rejection, minimum 61 readings per series, window_points > series count, and insufficient_visibility/error semantics. However, much of this is duplicated in the schema's own field descriptions rather than adding new behavioral disclosure, so it lands at solid-but-not-exceptional.

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?

Purpose and alternative routing are front-loaded in the first three sentences, which is good structure. The remainder is long and packs transformation, gating, and output-inventory detail tightly, but each sentence carries information rather than 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?

For a nested, 32-series panel tool with a published output schema, the description covers the transform pipeline, alignment/gap rules, failure classes (insufficient_visibility vs. error) and interpretation caveats ('review candidates, not certified factors'). Nothing an agent needs to call or interpret it is missing.

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

Parameters3/5

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 as_of, policy fields and every series sub-field in depth. The description restates transform rules per kind and the window prerequisite but adds no syntax or format the schema lacks, so the baseline 3 applies.

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 and resource: 'Analyze shared correlation structure and rolling concentration in a caller-defined comparable panel.' It then explicitly distinguishes itself from two siblings (market_assessment for individual move/freshness, dyson_reference for synthetic illustration), so an agent can route correctly without opening schemas.

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 an explicit activation condition ('shared movements across at least two series') plus named alternatives for the two adjacent use cases. This is genuine when-to-use / when-not-to-use guidance rather than implied context.

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