changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "properties": {
+ "change_types": {
+ "description": "Which kinds of change occurred between your baseline and current_version; empty when nothing changed or no baseline was supplied.",
+ "items": {
+ "description": "score_changed = opportunity_score moved; classification_changed = the classification band changed; entry_zone_changed = entry zone, stop-loss or take-profit moved; economics_changed = the cost/net-edge estimate moved; execution_blockers_changed = upstream's internal blockers changed (informational only); status_changed = ACTIVE/STALE/INVALIDATED changed.",
+ "enum": [
+ "score_changed",
+ "classification_changed",
+ "entry_zone_changed",
+ "economics_changed",
+ "execution_blockers_changed",
+ "status_changed"
+ ],
+ "type": "string"
+ },
+ "type": "array"
+ },
+ "changed": {
+ "description": "True when current_version differs from your known_version (or when you supplied no baseline); then call get_crypto_signal for the updated advice.",
+ "type": "boolean"
+ },
+ "checked_at": {
+ "description": "When we produced this answer (ISO 8601, UTC). The only ISO timestamp in the payload; every other timestamp is unix seconds.",
+ "format": "date-time",
+ "type": "string"
+ },
+ "current_version": {
+ "description": "The version the upstream advice system holds right now.",
+ "type": "integer"
+ },
+ "disclaimer": {
+ "description": "Our product boundary, verbatim in every paid advice response: market intelligence only, no execution, no custody, no position sizing, and opportunity_score is a heuristic rather than a calibrated win probability.",
+ "type": "string"
+ },
+ "known_version": {
+ "description": "The baseline version YOU sent, echoed so the answer can never contradict your input; null when you sent none, and then changed is always true.",
+ "type": [
+ "integer",
+ "null"
+ ]
+ },
+ "next_check_after": {
+ "description": "Unix seconds — do not poll again before this. Upstream uses now + 300 while ACTIVE and now + 1800 otherwise.",
+ "type": "integer"
+ },
+ "query": {
+ "description": "The validated input echoed back, i.e. signal_id and (if you sent one) known_version.",
+ "properties": {
+ "known_version": {
+ "minimum": 1,
+ "type": "integer"
+ },
+ "signal_id": {
+ "description": "Stable id of the opportunity across versions; the input for every other call in the chain.",
+ "pattern": "^sig_[0-9a-f]{12}$",
+ "type": "string"
+ }
+ },
+ "type": "object"
+ },
+ "recommended_next_call": {
+ "description": "Machine-readable next step in the chain (scan → signal → validate → evidence → check), so you can follow the workflow without documentation. null means there is explicitly nothing useful to call now; next_check_after then says when to come back.",
+ "properties": {
+ "arguments": {
+ "description": "Arguments to pass verbatim, e.g. {\"signal_id\":\"sig_a1b2c3d4e5f6\"}, plus known_version for check_crypto_signal.",
+ "type": "object"
+ },
+ "reason": {
+ "description": "Why this is the useful next step, in plain language.",
+ "type": "string"
+ },
+ "tool": {
+ "description": "Name of the MCP tool to call next.",
+ "enum": [
+ "get_crypto_signal",
+ "validate_crypto_signal",
+ "get_crypto_evidence",
+ "check_crypto_signal"
+ ],
+ "type": "string"
+ }
+ },
+ "type": [
+ "object",
+ "null"
+ ]
+ },
+ "signal_id": {
+ "description": "Stable id of the opportunity across versions; the input for every other call in the chain.",
+ "pattern": "^sig_[0-9a-f]{12}$",
+ "type": "string"
+ },
+ "source_as_of": {
+ "description": "Unix seconds — freshness of the upstream answer; falls back to our own clock because the check is computed on call.",
+ "type": "integer"
+ },
+ "source_disclaimer": {
+ "description": "Verbatim disclaimer of the upstream advice system, passed through unedited.",
+ "type": "string"
+ },
+ "status": {
+ "description": "Live status at call time. ACTIVE = published AND entry window still open, STALE = entry window closed (the hold horizon may still run), INVALIDATED = an invalidation condition triggered. Only ACTIVE is a current new-entry advice.",
+ "enum": [
+ "ACTIVE",
+ "STALE",
+ "INVALIDATED"
+ ],
+ "type": "string"
+ }
+ },
+ "required": [
+ "query",
+ "checked_at",
+ "source_as_of",
+ "signal_id",
+ "known_version",
+ "current_version",
+ "changed",
+ "change_types",
+ "next_check_after",
+ "recommended_next_call",
+ "disclaimer"
+ ],
+ "type": "object"
+}