Skip to main content
Glama

Sentinel Aleph

Signal ledger

get_signal_ledger
Read-onlyIdempotent

Summarises the public ledger's track record. matured_book is the settled record: one row per Zurich month past the 96-hour maturity guard, with published, entered, take-profit and stop-loss counts, net P&L after the market-aware cost model for every entered position (BTC veto closes included) and without the veto closes, and the veto closes' own gross and net. The counters (headline, pnl, by_engine) start at metric_epoch; when stats_epoch_daily is true they restart every day at 00:00 Zurich, so their matured win rate is usually empty and the track record is matured_book. Use it to judge how signals have performed; for what is open now use get_open_signals, and for vetoed signals use get_vetoed_signals. win_rate is null until n reaches 20 (the same floor per engine); P&L fields are null when no position was entered; P&L is percentage points summed per trade, not an account return; vetoed and scratched signals are not in the win rate. recent_limit adds that many latest settled outcomes (0 skips them; the full history is the CSV at export_path). No key needed.

Input Schema

NameRequiredDescriptionDefault
recent_limitNoHow many recent settled outcomes to include.

Output Schema

NameRequiredDescriptionDefault
pnlNoNet P&L since metric_epoch after the market-aware cost model. Null figures mean no position was entered.
errorNoSet only on a failed call (isError true): what went wrong.
headlineNoWin rate over matured decisive outcomes.
by_engineNoOne row per engine, keyed by engine name.
matured_bookNoThe settled record: Zurich months past the maturity guard, from /api/public/ledger/monthly. Null when the ledger is unreachable.
metric_epochNoStart of the current stats epoch (RFC 3339).
open_signalsNoOf those, still open.
recent_settledNoMost recent settled outcomes (recent_limit rows).
published_signalsNoSignals published in the epoch.
stats_epoch_dailyNoTrue when the counters restart every day at 00:00 Zurich; then matured_book is the track record.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed10 schema fields changed
    • addedOutput schema / properties / matured_book
      Added value: +{
      +  "description": "The settled record: Zurich months past the maturity guard, from /api/public/ledger/monthly. Null when the ledger is unreachable.",
      +  "properties": {
      +    "cost_model": {
      +      "description": "The cost model the nets subtract."
      +    },
      +    "latest_matured_month": {
      +      "description": "Newest matured month, null when none.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "maturity_hours": {
      +      "description": "Maturity guard, hours.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "months": {
      +      "description": "Matured months, oldest first.",
      +      "items": {
      +        "description": "One month.",
      +        "properties": {
      +          "all_entered": {
      +            "description": "Every entered position, BTC veto closes included.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "all_entered_net_avg_percent": {
      +            "description": "Net per entered position, percent; null when none.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "all_entered_net_total_points": {
      +            "description": "Net sum, points; null when none.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "breakeven": {
      +            "description": "Closed flat at entry.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "entered": {
      +            "description": "Entered positions not closed by the BTC veto.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "losses": {
      +            "description": "Stop-loss hits.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "month": {
      +            "description": "YYYY-MM, Zurich.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "net_avg_percent": {
      +            "description": "Their net per trade, percent; null when none.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "net_total_points": {
      +            "description": "Their net sum, points; null when none.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "published": {
      +            "description": "Signals published.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "veto_closed": {
      +            "description": "Entered positions closed by the BTC veto.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "veto_closed_gross_points": {
      +            "description": "Their summed price move before costs; null when none.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "veto_closed_net_points": {
      +            "description": "The same after the cost model; null when none.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "wins": {
      +            "description": "Take-profit hits.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "note": {
      +      "description": "How to read the figures.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "settling_months": {
      +      "description": "Months still inside the maturity guard.",
      +      "items": {
      +        "description": "YYYY-MM.",
      +        "type": [
      +          "string",
      +          "null"
      +        ]
      +      },
      +      "type": "array"
      +    },
      +    "source": {
      +      "description": "Endpoint the rows come from.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "timezone": {
      +      "description": "Clock the months are cut on.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": [
      +    "object",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / pnl / description
      Previous value: -"Net P&L after the published cost model."New value: +"Net P&L since metric_epoch after the market-aware cost model. Null figures mean no position was entered."
    • changedOutput schema / properties / pnl / properties / avg_net_pnl_percent_per_trade / description
      Previous value: -"Average net result per trade, percent."New value: +"Average net result per entered position, percent."
    • addedOutput schema / properties / pnl / properties / cost_model
      Added value: +{
      +  "description": "The published cost model: spot and futures fees, futures funding."
      +}
    • addedOutput schema / properties / pnl / properties / entered_positions
      Added value: +{
      +  "description": "Every entered position, BTC veto closes included.",
      +  "type": [
      +    "integer",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / pnl / properties / ex_veto
      Added value: +{
      +  "description": "The same without the BTC veto closes.",
      +  "properties": {
      +    "avg_net_pnl_percent_per_trade": {
      +      "description": "Average net result per trade, percent.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "entered_positions": {
      +      "description": "Entered positions not closed by the BTC veto.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "gross_profit_factor": {
      +      "description": "Gross profit / gross loss.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "max_drawdown_points": {
      +      "description": "Largest peak-to-trough fall of that sum, points.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "scope": {
      +      "description": "What these figures count.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "total_net_pnl_points": {
      +      "description": "Sum of per-trade percentages, points.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
    • removedOutput schema / properties / pnl / properties / profit_factor
      Removed value: -{
      -  "description": "Gross profit / gross loss.",
      -  "type": [
      -    "number",
      -    "null"
      -  ]
      -}
    • addedOutput schema / properties / pnl / properties / scope
      Added value: +{
      +  "description": "What the lead figures count.",
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / pnl / properties / veto_closed
      Added value: +{
      +  "description": "Entered positions closed early by the BTC veto.",
      +  "properties": {
      +    "gross_total_points": {
      +      "description": "Their summed price move, before costs.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    },
      +    "n": {
      +      "description": "Veto closes.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "net_total_points": {
      +      "description": "The same after the cost model.",
      +      "type": [
      +        "number",
      +        "null"
      +      ]
      +    }
      +  },
      +  "type": "object"
      +}
    • addedOutput schema / properties / stats_epoch_daily
      Added value: +{
      +  "description": "True when the counters restart every day at 00:00 Zurich; then matured_book is the track record.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
  2. Changed1 schema field changed
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "by_engine": {
      +      "additionalProperties": {
      +        "description": "One engine's record.",
      +        "properties": {
      +          "avg_net_pnl_percent": {
      +            "description": "Average net result per trade, percent.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "losses": {
      +            "description": "Stop-loss hits.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "matured_n": {
      +            "description": "Matured decisive outcomes.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "observations": {
      +            "description": "All settled rows, decisive or not.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "win_rate": {
      +            "description": "0 to 1; null below win_rate_withheld_lt.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "win_rate_withheld_lt": {
      +            "description": "Sample floor (20).",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          },
      +          "wins": {
      +            "description": "Take-profit hits.",
      +            "type": [
      +              "integer",
      +              "null"
      +            ]
      +          }
      +        },
      +        "type": "object"
      +      },
      +      "description": "One row per engine, keyed by engine name.",
      +      "type": "object"
      +    },
      +    "error": {
      +      "description": "Set only on a failed call (isError true): what went wrong.",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "headline": {
      +      "description": "Win rate over matured decisive outcomes.",
      +      "properties": {
      +        "cohort": {
      +          "description": "What n counts.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "losses": {
      +          "description": "Stop-loss hits.",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "min_n_for_win_rate": {
      +          "description": "Sample floor below which win_rate is withheld (20).",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "n": {
      +          "description": "Matured decisive outcomes.",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        },
      +        "win_rate": {
      +          "description": "wins / n, 0 to 1; null while n < min_n_for_win_rate.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "win_rate_display": {
      +          "description": "The same figure as the public page shows it.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "wins": {
      +          "description": "Take-profit hits.",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "metric_epoch": {
      +      "description": "Start of the current stats epoch (RFC 3339).",
      +      "type": [
      +        "string",
      +        "null"
      +      ]
      +    },
      +    "open_signals": {
      +      "description": "Of those, still open.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "pnl": {
      +      "description": "Net P&L after the published cost model.",
      +      "properties": {
      +        "avg_net_pnl_percent_per_trade": {
      +          "description": "Average net result per trade, percent.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "max_drawdown_points": {
      +          "description": "Largest peak-to-trough fall of that sum, points.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "note": {
      +          "description": "How to read the figures.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "profit_factor": {
      +          "description": "Gross profit / gross loss.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        },
      +        "total_net_pnl_points": {
      +          "description": "Sum of per-trade percentages: points, not an account return.",
      +          "type": [
      +            "number",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "published_signals": {
      +      "description": "Signals published in the epoch.",
      +      "type": [
      +        "integer",
      +        "null"
      +      ]
      +    },
      +    "recent_settled": {
      +      "description": "Most recent settled outcomes (recent_limit rows).",
      +      "properties": {
      +        "export_path": {
      +          "description": "CSV export of the full history.",
      +          "type": [
      +            "string",
      +            "null"
      +          ]
      +        },
      +        "rows": {
      +          "description": "Newest first.",
      +          "items": {
      +            "description": "One settled signal.",
      +            "properties": {
      +              "combo": {
      +                "description": "Confluence combo.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "created_at": {
      +                "description": "Published at (RFC 3339).",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "direction": {
      +                "description": "long or short.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "entry": {
      +                "description": "Entry price.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "exit_price": {
      +                "description": "Exit price.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "exit_type": {
      +                "description": "How it ended, e.g. tp_hit or sl_hit.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "pnl_percent": {
      +                "description": "Result, percent.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "stop_loss": {
      +                "description": "Stop-loss price.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "symbol": {
      +                "description": "Pair.",
      +                "type": [
      +                  "string",
      +                  "null"
      +                ]
      +              },
      +              "take_profit_1": {
      +                "description": "First target.",
      +                "type": [
      +                  "number",
      +                  "null"
      +                ]
      +              },
      +              "win": {
      +                "description": "True for a win.",
      +                "type": [
      +                  "boolean",
      +                  "null"
      +                ]
      +              }
      +            },
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "total": {
      +          "description": "All settled rows in the epoch.",
      +          "type": [
      +            "integer",
      +            "null"
      +          ]
      +        }
      +      },
      +      "type": "object"
      +    }
      +  },
      +  "type": "object"
      +}
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark it as read-only, idempotent, closed-world, and non-destructive, but the description adds substantial behavioral context: matured_book semantics, metric_epoch and stats_epoch_daily restart behavior, win_rate null until n=20, P&L null conditions, P&L unit interpretation, exclusion of vetoed and scratched signals, and that no key is needed. This goes well beyond the annotations and helps the agent interpret the results correctly.

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?

The description is front-loaded with a clear summary, and every sentence carries useful information. However, it is a dense single paragraph with long compound sentences, which slightly reduces readability compared to a more structured presentation.

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 the tool's complexity, the presence of an output schema, and the detailed field semantics already provided, the description covers everything needed to select and invoke the tool correctly. It explains the data model, null behavior, exclusions, and sibling alternatives without needing to restate return structure.

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 schema already documents recent_limit. The description adds useful semantics: recent_limit controls how many latest settled outcomes are included, 0 skips them, and full history is available at export_path. This is meaningful context beyond the schema, though not exhaustive syntax detail.

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: summarises the public ledger's track record. It clearly distinguishes the tool from siblings by explaining that open signals belong to get_open_signals and vetoed signals to get_vetoed_signals. An agent can identify the tool's role without opening the schema.

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?

Explicitly says what the tool is for ('Use it to judge how signals have performed') and names the two sibling alternatives for different needs. The when-to-use and when-to-use-alternatives guidance is direct and unambiguous.

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