Skip to main content
Glama

PredixLab

get_pivot_signals

Read-onlyIdempotent

Get Pivot signals by session, direction and event; omit date for latest visible.

Items contain only date, symbol, event, kind, direction and horizon (trading days), grouped into longs and shorts.

Input Schema

NameRequiredDescriptionDefault
dateNo
eventNo
limitNo
marketNous
directionNo

Output Schema

NameRequiredDescriptionDefault
dateNo
longsNo
countsNoEvents by type for this session
marketYes
shortsNo
horizonNo
total_countNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed7 schema fields changed
    • addedOutput schema / $defs / McpPivotSignal
      Added value: +{
      +  "description": "One Pivot event with only the fields exposed to MCP clients.",
      +  "properties": {
      +    "date": {
      +      "description": "Signal session (YYYY-MM-DD)",
      +      "title": "Date",
      +      "type": "string"
      +    },
      +    "direction": {
      +      "$ref": "#/$defs/PickDirection"
      +    },
      +    "event": {
      +      "$ref": "#/$defs/PickEvent"
      +    },
      +    "horizon": {
      +      "description": "Prediction horizon in trading days",
      +      "title": "Horizon",
      +      "type": "integer"
      +    },
      +    "kind": {
      +      "$ref": "#/$defs/PickKind"
      +    },
      +    "symbol": {
      +      "title": "Symbol",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "date",
      +    "symbol",
      +    "event",
      +    "kind",
      +    "direction",
      +    "horizon"
      +  ],
      +  "title": "McpPivotSignal",
      +  "type": "object"
      +}
    • removedOutput schema / $defs / PivotAction
      Removed value: -{
      -  "description": "The model's *state* label on the bar that triggered the event.\n\nContext only. It does **not** determine the side: an event is dated by its\ntrigger bar while its setup may be up to three sessions earlier, so by the\ntime a reversal confirms the state has often decayed to ``NEUTRAL`` or flipped\noutright. ``direction`` is the decision.",
      -  "enum": [
      -    "STRONGLY_BULLISH",
      -    "BULLISH",
      -    "NEUTRAL",
      -    "BEARISH",
      -    "STRONGLY_BEARISH"
      -  ],
      -  "title": "PivotAction",
      -  "type": "string"
      -}
    • removedOutput schema / $defs / PivotPick
      Removed value: -{
      -  "description": "One published model event for one symbol on one session.",
      -  "properties": {
      -    "action": {
      -      "$ref": "#/$defs/PivotAction"
      -    },
      -    "close": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "title": "Close"
      -    },
      -    "confidence": {
      -      "description": "Conviction percentile within the day's full cross-section",
      -      "title": "Confidence",
      -      "type": "number"
      -    },
      -    "date": {
      -      "description": "Session the pick was published for (YYYY-MM-DD)",
      -      "title": "Date",
      -      "type": "string"
      -    },
      -    "days_to_max_gain": {
      -      "anyOf": [
      -        {
      -          "type": "integer"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Trading days from the signal to its best point",
      -      "title": "Days To Max Gain"
      -    },
      -    "days_to_max_loss": {
      -      "anyOf": [
      -        {
      -          "type": "integer"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Trading days from the signal to its worst point",
      -      "title": "Days To Max Loss"
      -    },
      -    "direction": {
      -      "$ref": "#/$defs/PickDirection"
      -    },
      -    "event": {
      -      "$ref": "#/$defs/PickEvent"
      -    },
      -    "excess_return": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "signal_return with the day's common market move removed",
      -      "title": "Excess Return"
      -    },
      -    "forward_return": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "The stock's own return over the horizon",
      -      "title": "Forward Return"
      -    },
      -    "horizon": {
      -      "default": 10,
      -      "description": "Prediction horizon in trading days",
      -      "title": "Horizon",
      -      "type": "integer"
      -    },
      -    "kind": {
      -      "$ref": "#/$defs/PickKind"
      -    },
      -    "market": {
      -      "default": "us",
      -      "title": "Market",
      -      "type": "string"
      -    },
      -    "max_gain": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Best the position was ever up during the horizon, intraday highs included",
      -      "title": "Max Gain"
      -    },
      -    "max_loss": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Worst the position was ever down during the horizon, intraday lows included",
      -      "title": "Max Loss"
      -    },
      -    "p_up": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Probability the horizon return is positive",
      -      "title": "P Up"
      -    },
      -    "path_complete": {
      -      "anyOf": [
      -        {
      -          "type": "boolean"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "False while the horizon has not fully elapsed, so a partial path is not read as a final one",
      -      "title": "Path Complete"
      -    },
      -    "pivot_hit": {
      -      "anyOf": [
      -        {
      -          "type": "boolean"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Whether this reversal landed within a few bars of a real swing point. Null for trend entries, which are not turning points.",
      -      "title": "Pivot Hit"
      -    },
      -    "price": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Un-rebased tradeable close",
      -      "title": "Price"
      -    },
      -    "rank": {
      -      "description": "Presentation order within its side that day; it gates nothing",
      -      "title": "Rank",
      -      "type": "integer"
      -    },
      -    "rationale": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "'; '-separated plain-language drivers",
      -      "title": "Rationale"
      -    },
      -    "score": {
      -      "description": "Signed conviction; positive is bullish",
      -      "title": "Score",
      -      "type": "number"
      -    },
      -    "signal_return": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "The same return from the position's side; negated for shorts",
      -      "title": "Signal Return"
      -    },
      -    "sustained_bullish": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "Share of the last 40 sessions the model called bullish (context, not a gate)",
      -      "title": "Sustained Bullish"
      -    },
      -    "swing_position": {
      -      "anyOf": [
      -        {
      -          "type": "number"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ],
      -      "default": null,
      -      "description": "0 = expected local low, 1 = expected local high",
      -      "title": "Swing Position"
      -    },
      -    "symbol": {
      -      "title": "Symbol",
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "date",
      -    "symbol",
      -    "event",
      -    "kind",
      -    "direction",
      -    "rank",
      -    "action",
      -    "score",
      -    "confidence"
      -  ],
      -  "title": "PivotPick",
      -  "type": "object"
      -}
    • changedOutput schema / description
      Previous value: -"One session's events, split by side.\n\nAn empty response is a real answer: most sessions fire nothing, and 14 of\n754 walk-forward sessions fired nothing at all."New value: +"One session's slim Pivot events, preserving the board metadata."
    • changedOutput schema / properties / longs / items / $ref
      Previous value: -"#/$defs/PivotPick"New value: +"#/$defs/McpPivotSignal"
    • changedOutput schema / properties / shorts / items / $ref
      Previous value: -"#/$defs/PivotPick"New value: +"#/$defs/McpPivotSignal"
    • changedOutput schema / title
      Previous value: -"PivotPicksResponse"New value: +"McpPivotSignalsResponse"
  2. First observed

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the bar is lower; the description still adds the useful default behavior when date is omitted (latest visible) and describes what the returned items contain and how they are grouped.

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

Conciseness4/5

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

Front-loaded with the core behavior and kept to three tight lines, with the default-date rule placed early. Slight waste in the parenthetical about trading days, but nothing significant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema and annotations carry the safety and return-shape burden, but with five optional parameters and zero schema coverage, an agent still lacks guidance on 'market' and 'limit' (including the 200 cap) to call this correctly.

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

Parameters2/5

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

Schema description coverage is 0% and the description documents only three of the five parameters (date behavior, direction, event), leaving 'market' and 'limit' entirely unexplained; it also adds no format or range details. The word 'session' does not map cleanly to any declared parameter, which is mildly confusing.

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

Purpose4/5

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

States a specific verb+resource ('Get Pivot signals') and the axes it is keyed by (session/direction/event). It is distinguishable from get_signals and get_alpharank_signals by the 'Pivot' qualifier, though the description never explicitly contrasts them.

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

Usage Guidelines3/5

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

'omit date for latest visible' is a concrete usage rule, but there is no guidance on when to prefer this over sibling tools like get_signals or get_alpharank_signals, and no exclusions.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources