Skip to main content
Glama

Sentinel Aleph

Open signals

get_open_signals
Read-onlyIdempotent

Lists published signals that are still open (no outcome yet), newest first: entry, stop loss, take-profit levels, planned reward:risk, market (spot or futures), confidence and combo. live_state says whether the entry has filled (awaiting_entry, in_position, stop_at_entry) and flags a target reached before the entry filled; execution says how the ledger grades the trade (100% closed at take_profit[0]; later targets are informational), the breakeven trigger, the original entry window, the max hold, the cost and the win rate needed to break even after cost. venues says whether the coin is also listed on OKX and Bybit (spot and USDT perpetual) and their last price in the signal's units, for following a Binance-computed signal elsewhere; it is absent when venue data is unavailable. Use it to see what is live now; for settled results and win rates use get_signal_ledger, and for signals the BTC regime veto cancelled use get_vetoed_signals. symbol and direction filter before limit is applied, so count can be below total_open; a symbol outside the scanned universe returns an error. No key needed (30 calls a minute per IP). Signals are decision inputs, not instructions; nothing here places an order.

Input Schema

NameRequiredDescriptionDefault
limitNoMaximum rows returned.
symbolNoOnly this pair, e.g. BTCUSDT. Must be in the scanned universe.
directionNoOnly this direction.

Output Schema

NameRequiredDescriptionDefault
noteNoHow to read the rows.
countNoRows returned.
errorNoSet only on a failed call (isError true): what went wrong.
signalsNoOpen signals after filters, newest first, at most limit.
total_openNoAll open signals in the epoch, before filters.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / signals / items / properties / venues
      Added value: +{
      +  "description": "get_open_signals only, absent when unknown. Other venues the coin trades on (signals are computed on Binance); a venue whose listing could not be read is left out.",
      +  "items": {
      +    "description": "One venue.",
      +    "properties": {
      +      "futures": {
      +        "description": "Listed as a USDT perpetual; null when unknown.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "price": {
      +        "description": "Venue's last price in this signal's units (a 1000PEPEUSDT signal gets 1000 x the coin price); null when unavailable or more than 20% away from Binance's price.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "price_market": {
      +        "description": "spot or futures: which book price came from.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "spot": {
      +        "description": "Listed on the venue's USDT spot book; null when unknown.",
      +        "type": [
      +          "boolean",
      +          "null"
      +        ]
      +      },
      +      "venue": {
      +        "description": "okx or bybit.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      }
      +    },
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
  2. Changed3 schema fields changed
    • addedOutput schema / properties / signals / items / properties / execution
      Added value: +{
      +  "description": "get_open_signals only. How the ledger grades this trade.",
      +  "properties": {
      +    "breakeven_trigger_price": {
      +      "description": "Price at which the graded stop moves to entry (entry +/- breakeven_at_r x R); null without a plan.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "breakeven_win_rate_after_cost": {
      +      "description": "(SL% + cost) / (win% + SL%), 0 to 1: the win rate this geometry needs to break even after cost.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "entry_window_ends": {
      +      "description": "Original end of the entry window (RFC 3339, UTC); a veto does not move it.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "est_cost_pct": {
      +      "description": "Published cost model for one position, percent: both fees, funding paid on a long and received on a short.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "graded_exit": {
      +      "description": "The exit the ledger books, e.g. take_profit[0], 100%.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "graded_target": {
      +      "description": "take_profit[0].",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "informational_targets": {
      +      "description": "take_profit[1:]: informational, not graded.",
      +      "items": {
      +        "description": "Price.",
      +        "type": [
      +          "number",
      +          "null"
      +        ]
      +      },
      +      "type": "array"
      +    },
      +    "max_hold_until": {
      +      "description": "entry_window_ends + 72h: an open position is closed at the last price after this.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "partial_reachable": {
      +      "description": "False when the plan's partial level is at or beyond take_profit[0], so it cannot fire.",
      +      "type": [
      +        "boolean",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / signals / items / properties / expires_at / description
      Previous value: -"Entry window closes at (RFC 3339, UTC)."New value: +"Entry window closes at (RFC 3339, UTC). On get_open_signals a vetoed signal shows its veto time here until its exit is booked."
    • addedOutput schema / properties / signals / items / properties / live_state
      Added value: +{
      +  "description": "get_open_signals only. The evaluator's last reading of the open signal, from the candles it grades on; null before the first reading.",
      +  "properties": {
      +    "be_armed_at": {
      +      "description": "Open time of the 1m candle that reached the breakeven trigger; the stop sits at entry from the next candle.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "entry_filled_at": {
      +      "description": "Open time of the 1m candle counted as the fill (RFC 3339, UTC).",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "invalidated_at": {
      +      "description": "BTC veto time when the signal was vetoed and its exit is not booked yet.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "state": {
      +      "description": "awaiting_entry, in_position or stop_at_entry.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "target_before_entry_at": {
      +      "description": "Set while awaiting entry when price already reached take_profit[0] without filling the entry: do not chase.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "updated_at": {
      +      "description": "When the state last changed (RFC 3339, UTC).",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
  3. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "count": {
      +      "description": "Rows returned.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "error": {
      +      "description": "Set only on a failed call (isError true): what went wrong.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "note": {
      +      "description": "How to read the rows.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "signals": {
      +      "description": "Open signals after filters, newest first, at most limit.",
      +      "items": {
      +        "description": "One published signal.",
      +        "properties": {
      +          "combo": {
      +            "description": "Named confluence combo, empty when none matched.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "confidence": {
      +            "description": "Model confidence, 0 to 1. Not a probability of profit.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "created_at": {
      +            "description": "Published at (RFC 3339, UTC).",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "direction": {
      +            "description": "long or short.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "entry": {
      +            "description": "Entry price.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "expires_at": {
      +            "description": "Entry window closes at (RFC 3339, UTC).",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "id": {
      +            "description": "Signal id (UUID).",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "market_type": {
      +            "description": "spot or futures.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "mode": {
      +            "description": "Engine family that produced it.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "reward_risk": {
      +            "description": "Planned reward:risk to the first target.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "stop_loss": {
      +            "description": "Stop-loss price.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "symbol": {
      +            "description": "Pair, e.g. BTCUSDT.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "take_profit": {
      +            "description": "Take-profit prices, nearest first.",
      +            "items": {
      +              "description": "Price.",
      +              "type": [
      +                "number",
      +                "null"
      +              ]
      +            },
      +            "type": "array"
      +          },
      +          "timeframe": {
      +            "description": "Candle timeframe the setup was found on, e.g. 4h.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "total_open": {
      +      "description": "All open signals in the epoch, before filters.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
  4. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Goes well past the annotations by disclosing the no-key access model, a rate limit (30 calls/min per IP), and the meaning of live_state, execution and venues fields, including when venues is absent. It also preempts misuse with 'Signals are decision inputs, not instructions; nothing here places an order.'

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 routing to siblings are front-loaded, and nearly every sentence carries a distinct constraint or caveat. It is a dense single block, and the long live_state/execution/venues interpretation could be trimmed since an output schema already exists, but there is little true 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 read-only, zero-required-param list tool with a 3-field schema, all parameters, the filtering order, the error case, auth/rate limits and the safety framing are covered. Nothing an agent needs to invoke it correctly is missing.

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 coverage is 100%, so the baseline is 3, but the description adds real semantics: symbol and direction filter before limit, so count can be below total_open, and a symbol outside the scanned universe returns an error. These behavioral consequences of the parameters are not derivable from the schema alone.

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?

Opens with a specific verb and resource plus scope ('Lists published signals that are still open (no outcome yet), newest first') and enumerates the payload's content. It clearly delineates itself from get_signal_ledger (settled results) and get_vetoed_signals (regime-vetoed).

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?

States when to use it ('to see what is live now') and names two alternatives with the exact conditions that select them. It also gives filter/limit interaction rules and the error case for an out-of-universe symbol, leaving nothing 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.

Resources