Skip to main content
Glama

NoiseFloor — market attention and evidence checks

Review market noise and evidence quality

market_assessment
Read-onlyIdempotent

Build a source-aware review queue for caller-supplied market series at an explicit UTC as_of cutoff, checking moves, volatility, missing data and measurement coverage. Use when provenance and freshness matter; use did_it_change for an unannotated numeric history or spectral_assessment for correlation structure across an aligned panel. Prices become log returns; other kinds retain their supplied values and units. Defaults require 30 baseline + 3 recent derived points (34 contiguous price observations, 33 for other kinds). Returns status (assessed, partial or insufficient_visibility), per-series status/reasons/diagnostics, attention_queue, visibility_gaps, related_movements and coverage. Nonpermitted rights, stale/future observations or inadequate history remain explicit gaps; no sources are fetched or filled. Duplicate ids, unordered timestamps and nonpositive prices are errors. Read limits and source clocks before interpreting a departure: review priority is neither a trading signal nor a calibrated probability.

Input Schema

NameRequiredDescriptionDefault
as_ofYesUTC decision-time cutoff for source freshness and availability checks; for example 2026-01-01T12:00:00Z. Future observations are not silently included.
policyNoOptional review thresholds; omitted fields use the documented defaults. Policies do not create statistical or trading guarantees.
seriesYesUp to 32 caller-supplied series to assess independently, with unique ids and source/clock metadata. An empty list returns insufficient_visibility.

Output Schema

NameRequiredDescriptionDefault
as_ofNoCaller-supplied UTC cutoff.
errorNoValidation or computation failure message; inspect MCP isError or the HTTP status.
limitsNoOrdered statements or identifiers.
methodNoAssessment construction.
policyNoFully applied policy, including defaults.
schemaNoResult contract identifier.
seriesNoAll supplied series in input order.
statusNoAggregate visibility state.
coverageNoCoverage of only the supplied set.
policy_sha256NoSHA-256 of the canonicalized submitted request or applied policy.
request_sha256NoSHA-256 of the canonicalized submitted request or applied policy.
attention_queueNoReview/watch series sorted by priority then id.
visibility_gapsNoOrdered statements or identifiers.
related_movementsNoRelationships with absolute correlation at least 0.85.
execution_authorityNoNo trading authority.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed32 schema fields changed
    • addedInput schema / properties / as_of / description
      Added value: +"UTC decision-time cutoff for source freshness and availability checks; for example 2026-01-01T12:00:00Z. Future observations are not silently included."
    • addedInput schema / properties / policy / description
      Added value: +"Optional review thresholds; omitted fields use the documented defaults. Policies do not create statistical or trading guarantees."
    • addedInput schema / properties / policy / properties / baseline_points / default
      Added value: +30
    • addedInput schema / properties / policy / properties / baseline_points / description
      Added value: +"Number of earlier transformed observations in the baseline window; default 30. Total required transformed history is baseline_points + recent_points."
    • addedInput schema / properties / policy / properties / coverage_drop_fraction / default
      Added value: +0.2
    • addedInput schema / properties / policy / properties / coverage_drop_fraction / description
      Added value: +"Absolute fractional change in median measurement coverage that prompts review, including increases; default 0.2 means 20%. Applies only to supplied sample_size values."
    • addedInput schema / properties / policy / properties / move_threshold / default
      Added value: +3
    • addedInput schema / properties / policy / properties / move_threshold / description
      Added value: +"Departure threshold in baseline robust-spread units (1.4826 times median absolute deviation); default 3.0. This is a review threshold, not a significance level."
    • addedInput schema / properties / policy / properties / recent_points / default
      Added value: +3
    • addedInput schema / properties / policy / properties / recent_points / description
      Added value: +"Number of latest transformed observations compared with the baseline; default 3. Persistence requires at least two qualifying readings, so a one-point window cannot establish persistence."
    • addedInput schema / properties / policy / properties / volatility_ratio / default
      Added value: +3
    • addedInput schema / properties / policy / properties / volatility_ratio / description
      Added value: +"Recent-to-baseline robust-spread ratio that flags volatility expansion; default 3.0. A constant baseline followed by positive spread is also flagged."
    • addedInput schema / properties / series / description
      Added value: +"Up to 32 caller-supplied series to assess independently, with unique ids and source/clock metadata. An empty list returns insufficient_visibility."
    • 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."
    • removedOutput schema / additionalProperties
      Removed value: -true
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "as_of": {},
      +      "attention_queue": {},
      +      "coverage": {},
      +      "execution_authority": {},
      +      "limits": {},
      +      "method": {},
      +      "policy": {},
      +      "policy_sha256": {},
      +      "related_movements": {},
      +      "request_sha256": {},
      +      "schema": {},
      +      "series": {},
      +      "status": {},
      +      "visibility_gaps": {}
      +    },
      +    "required": [
      +      "schema",
      +      "as_of",
      +      "status",
      +      "policy",
      +      "series",
      +      "attention_queue",
      +      "visibility_gaps",
      +      "related_movements",
      +      "coverage",
      +      "method",
      +      "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"
      +  }
      +]
    • addedOutput schema / description
      Added value: +"Market attention and explicit source/coverage gaps; no absent evidence is replaced by zero. Tool errors retain the separate error-message shape."
    • addedOutput schema / properties
      Added value: +{
      +  "as_of": {
      +    "description": "Caller-supplied UTC cutoff.",
      +    "type": "string"
      +  },
      +  "attention_queue": {
      +    "description": "Review/watch series sorted by priority then id.",
      +    "items": {
      +      "additionalProperties": false,
      +      "description": "One prioritized series.",
      +      "properties": {
      +        "group": {
      +          "description": "Declared group.",
      +          "type": "string"
      +        },
      +        "id": {
      +          "description": "Series id.",
      +          "type": "string"
      +        },
      +        "reasons": {
      +          "description": "Ordered statements or identifiers.",
      +          "items": {
      +            "description": "One retained statement or identifier.",
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "status": {
      +          "description": "Review priority state.",
      +          "enum": [
      +            "review",
      +            "watch"
      +          ],
      +          "type": "string"
      +        }
      +      },
      +      "required": [
      +        "id",
      +        "status",
      +        "reasons",
      +        "group"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  "coverage": {
      +    "additionalProperties": false,
      +    "description": "Coverage of only the supplied set.",
      +    "properties": {
      +      "assessed_series": {
      +        "description": "Series passing visibility gates.",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "complete_for_supplied_series": {
      +        "description": "Nonempty supplied set with no visibility gaps.",
      +        "type": "boolean"
      +      },
      +      "market_universe_complete": {
      +        "const": false,
      +        "description": "Market collection completeness is unknown.",
      +        "type": "boolean"
      +      },
      +      "requested_series": {
      +        "description": "Supplied series.",
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "requested_series",
      +      "assessed_series",
      +      "complete_for_supplied_series",
      +      "market_universe_complete"
      +    ],
      +    "type": "object"
      +  },
      +  "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"
      +  },
      +  "limits": {
      +    "description": "Ordered statements or identifiers.",
      +    "items": {
      +      "description": "One retained statement or identifier.",
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  "method": {
      +    "description": "Assessment construction.",
      +    "type": "string"
      +  },
      +  "policy": {
      +    "additionalProperties": false,
      +    "description": "Fully applied policy, including defaults.",
      +    "properties": {
      +      "baseline_points": {
      +        "description": "Earlier transformed readings.",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "coverage_drop_fraction": {
      +        "description": "Absolute measurement-coverage change fraction.",
      +        "type": "number"
      +      },
      +      "move_threshold": {
      +        "description": "Robust-spread units.",
      +        "type": "number"
      +      },
      +      "recent_points": {
      +        "description": "Latest transformed readings.",
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "volatility_ratio": {
      +        "description": "Recent/baseline spread ratio.",
      +        "type": "number"
      +      }
      +    },
      +    "required": [
      +      "baseline_points",
      +      "recent_points",
      +      "move_threshold",
      +      "volatility_ratio",
      +      "coverage_drop_fraction"
      +    ],
      +    "type": "object"
      +  },
      +  "policy_sha256": {
      +    "description": "SHA-256 of the canonicalized submitted request or applied policy.",
      +    "pattern": "^[0-9a-f]{64}$",
      +    "type": "string"
      +  },
      +  "related_movements": {
      +    "description": "Relationships with absolute correlation at least 0.85.",
      +    "items": {
      +      "additionalProperties": false,
      +      "description": "Strong aligned relationship.",
      +      "properties": {
      +        "aligned_points": {
      +          "description": "Shared timestamps.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "correlation": {
      +          "description": "Aligned Pearson correlation.",
      +          "type": "number"
      +        },
      +        "independent_confirmation": {
      +          "const": false,
      +          "description": "Correlation is not independent corroboration.",
      +          "type": "boolean"
      +        },
      +        "series": {
      +          "description": "Pair of series ids.",
      +          "items": {
      +            "description": "Series id.",
      +            "type": "string"
      +          },
      +          "maxItems": 2,
      +          "minItems": 2,
      +          "type": "array"
      +        }
      +      },
      +      "required": [
      +        "series",
      +        "correlation",
      +        "aligned_points",
      +        "independent_confirmation"
      +      ],
      +      "type": "object"
      +    },
      +    "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.market-assessment.v1",
      +    "description": "Result contract identifier.",
      +    "type": "string"
      +  },
      +  "series": {
      +    "description": "All supplied series in input order.",
      +    "items": {
      +      "additionalProperties": false,
      +      "description": "Every supplied series is retained, including rejected sources and missing histories.",
      +      "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."
      +        },
      +        "analyzed_points": {
      +          "description": "Points actually used; omitted for insufficient visibility.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "analyzed_unit": {
      +          "description": "log_return for prices, otherwise the declared unit.",
      +          "type": "string"
      +        },
      +        "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_points": {
      +          "description": "Usable transformed tail points.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "diagnostics": {
      +          "anyOf": [
      +            {
      +              "additionalProperties": false,
      +              "description": "Computed only for source-eligible series with sufficient contiguous history.",
      +              "properties": {
      +                "baseline_median": {
      +                  "description": "Baseline center in analyzed units.",
      +                  "type": "number"
      +                },
      +                "baseline_robust_spread": {
      +                  "description": "Baseline MAD times 1.4826 in analyzed units.",
      +                  "type": "number"
      +                },
      +                "coverage": {
      +                  "additionalProperties": false,
      +                  "description": "Measurement coverage, not trading volume.",
      +                  "properties": {
      +                    "relative_change": {
      +                      "anyOf": [
      +                        {
      +                          "description": "Recent minus baseline median denominator divided by baseline.",
      +                          "type": "number"
      +                        },
      +                        {
      +                          "type": "null"
      +                        }
      +                      ],
      +                      "description": "Recent minus baseline median denominator divided by baseline. Null means unavailable or not applicable, never zero."
      +                    },
      +                    "status": {
      +                      "description": "Measurement-denominator availability or change.",
      +                      "enum": [
      +                        "not_supplied",
      +                        "incomplete",
      +                        "changed",
      +                        "stable"
      +                      ],
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "status",
      +                    "relative_change"
      +                  ],
      +                  "type": "object"
      +                },
      +                "lag_one_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."
      +                },
      +                "latest_change": {
      +                  "description": "Latest minus baseline median in analyzed units.",
      +                  "type": "number"
      +                },
      +                "latest_robust_departure": {
      +                  "anyOf": [
      +                    {
      +                      "description": "Latest change in baseline robust-spread units.",
      +                      "type": "number"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Latest change in baseline robust-spread units. Null means unavailable or not applicable, never zero."
      +                },
      +                "median_change": {
      +                  "description": "Recent minus baseline median in analyzed units.",
      +                  "type": "number"
      +                },
      +                "monitor": {
      +                  "additionalProperties": false,
      +                  "description": "Descriptive monitor of the analyzed window.",
      +                  "properties": {
      +                    "change_points": {
      +                      "description": "Alarm positions in the analyzed window.",
      +                      "items": {
      +                        "description": "Zero-based window position.",
      +                        "minimum": 0,
      +                        "type": "integer"
      +                      },
      +                      "type": "array"
      +                    },
      +                    "guarantee": {
      +                      "description": "No statistical or market-performance guarantee is made.",
      +                      "type": "null"
      +                    },
      +                    "is_e_value": {
      +                      "const": false,
      +                      "description": "Not a calibrated e-value.",
      +                      "type": "boolean"
      +                    },
      +                    "state": {
      +                      "description": "Descriptive monitor state.",
      +                      "type": "string"
      +                    },
      +                    "statistic": {
      +                      "description": "Raw monitoring statistic, not an e-value.",
      +                      "type": "number"
      +                    },
      +                    "statistic_type": {
      +                      "const": "shiryaev_roberts",
      +                      "description": "Monitor family.",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "state",
      +                    "statistic",
      +                    "statistic_type",
      +                    "is_e_value",
      +                    "change_points",
      +                    "guarantee"
      +                  ],
      +                  "type": "object"
      +                },
      +                "persistence_points": {
      +                  "description": "Recent readings with a supported same-direction departure.",
      +                  "minimum": 0,
      +                  "type": "integer"
      +                },
      +                "recent_median": {
      +                  "description": "Recent center in analyzed units.",
      +                  "type": "number"
      +                },
      +                "recent_robust_spread": {
      +                  "description": "Recent MAD times 1.4826 in analyzed units.",
      +                  "type": "number"
      +                },
      +                "representation_tolerance": {
      +                  "description": "Log-price arithmetic tolerance in analyzed units, zero for direct measurements.",
      +                  "type": "number"
      +                },
      +                "representation_tolerance_basis": {
      +                  "description": "Arithmetic source of the tolerance.",
      +                  "type": "string"
      +                },
      +                "robust_departure": {
      +                  "anyOf": [
      +                    {
      +                      "description": "Median change in baseline robust-spread units.",
      +                      "type": "number"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Median change in baseline robust-spread units. Null means unavailable or not applicable, never zero."
      +                },
      +                "volatility_ratio": {
      +                  "anyOf": [
      +                    {
      +                      "description": "Recent/baseline robust spread; null at zero baseline spread.",
      +                      "type": "number"
      +                    },
      +                    {
      +                      "type": "null"
      +                    }
      +                  ],
      +                  "description": "Recent/baseline robust spread; null at zero baseline spread. Null means unavailable or not applicable, never zero."
      +                },
      +                "window_end": {
      +                  "description": "Last analyzed observation timestamp.",
      +                  "type": "string"
      +                },
      +                "window_start": {
      +                  "description": "First analyzed observation timestamp.",
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "baseline_median",
      +                "recent_median",
      +                "median_change",
      +                "latest_change",
      +                "baseline_robust_spread",
      +                "recent_robust_spread",
      +                "representation_tolerance",
      +                "robust_departure",
      +                "latest_robust_departure",
      +                "volatility_ratio",
      +                "persistence_points",
      +                "representation_tolerance_basis",
      +                "lag_one_correlation",
      +                "coverage",
      +                "monitor",
      +                "window_start",
      +                "window_end"
      +              ],
      +              "type": "object"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Computed only for source-eligible series with sufficient contiguous history. Null means unavailable or not applicable, never zero."
      +        },
      +        "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"
      +        },
      +        "guarantee": {
      +          "description": "No statistical or market-performance guarantee is made.",
      +          "type": "null"
      +        },
      +        "id": {
      +          "description": "Caller-supplied series identifier.",
      +          "type": "string"
      +        },
      +        "is_e_value": {
      +          "const": false,
      +          "description": "No calibrated e-value.",
      +          "type": "boolean"
      +        },
      +        "kind": {
      +          "description": "Caller-declared measurement kind.",
      +          "type": "string"
      +        },
      +        "missing_points": {
      +          "description": "Null-valued observations.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "observation_count": {
      +          "description": "Supplied observation count.",
      +          "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."
      +        },
      +        "priority": {
      +          "anyOf": [
      +            {
      +              "description": "Review=2, watch=1, no supported departure=0; null when ineligible.",
      +              "minimum": 0,
      +              "type": "integer"
      +            },
      +            {
      +              "type": "null"
      +            }
      +          ],
      +          "description": "Review=2, watch=1, no supported departure=0; null when ineligible. Null means unavailable or not applicable, never zero."
      +        },
      +        "reading": {
      +          "description": "Interpretation or visibility-gap explanation.",
      +          "type": "string"
      +        },
      +        "reasons": {
      +          "description": "Ordered statements or identifiers.",
      +          "items": {
      +            "description": "One retained statement or identifier.",
      +            "type": "string"
      +          },
      +          "type": "array"
      +        },
      +        "required_points": {
      +          "description": "Baseline plus recent point requirement.",
      +          "minimum": 0,
      +          "type": "integer"
      +        },
      +        "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"
      +        },
      +        "status": {
      +          "description": "Per-series assessment state.",
      +          "enum": [
      +            "insufficient_visibility",
      +            "review",
      +            "watch",
      +            "no_supported_departure"
      +          ],
      +          "type": "string"
      +        },
      +        "transform": {
      +          "description": "price becomes log_return; all other kinds use identity.",
      +          "enum": [
      +            "log_return",
      +            "identity"
      +          ],
      +          "type": "string"
      +        },
      +        "unit": {
      +          "description": "Caller-declared input unit.",
      +          "type": "string"
      +        },
      +        "validity": {
      +          "const": "descriptive",
      +          "description": "Descriptive assessment, not a probability or statistical certificate.",
      +          "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",
      +        "status",
      +        "observation_count",
      +        "contiguous_points",
      +        "required_points",
      +        "transform",
      +        "analyzed_unit",
      +        "diagnostics",
      +        "priority",
      +        "is_e_value",
      +        "validity",
      +        "guarantee",
      +        "reading"
      +      ],
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  "status": {
      +    "description": "Aggregate visibility state.",
      +    "enum": [
      +      "insufficient_visibility",
      +      "partial",
      +      "assessed"
      +    ],
      +    "type": "string"
      +  },
      +  "visibility_gaps": {
      +    "description": "Ordered statements or identifiers.",
      +    "items": {
      +      "description": "One retained statement or identifier.",
      +      "type": "string"
      +    },
      +    "type": "array"
      +  }
      +}
  2. First observed

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds substantial extra context: price-to-log-return transformation, the 30+3 default requirement, explicit gap behavior for nonpermitted rights and stale/future observations, no fetching/filling, and hard errors for duplicate ids, unordered timestamps and nonpositive prices. It stops just short of a fully specified contract but goes well beyond annotation coverage.

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?

Dense and front-loaded: purpose, usage routing, transformation semantics, defaults, and return shape in short successive clauses. Long but nearly every sentence carries distinct information; a touch heavy on packed parentheticals reduces it from a 5.

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?

Given three top-level parameters, nested series objects, annotations, and an output schema, the description covers purpose, routing, transformation behavior, defaults, gap semantics and error cases. An agent has everything needed to call it correctly and interpret the status vocabulary.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3; the description still adds derived meaning beyond the schema, notably the baseline_points + recent_points = total required history relationship and the derived observation counts (34 contiguous for prices, 33 otherwise), plus restated error conditions.

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 (Build a source-aware review queue) plus resource (caller-supplied market series) and enumerates the checks performed (moves, volatility, missing data, measurement coverage). It explicitly distinguishes itself from did_it_change and spectral_assessment, so an agent can differentiate 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 when-to-use condition ('when provenance and freshness matter') and names two sibling alternatives with the conditions that select them (unannotated numeric history vs. correlation structure across an aligned panel). Nothing is left to inference.

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.