← WebMCP Directory

Tool tree

marketpane.creocortex.com

Finance & CryptoTools verified
Website
MarketPane
Explore capabilities
    create_panelAction

    Creates a panel of a registered kind, optionally with an explicit title, configuration, initial source, and renderer; auto-places it in the first free grid cell when no rect is given. Returns the mutation envelope; the new panel id is in affected_ids.

    View tool JSON
    {
      "name": "create_panel",
      "kind": "act",
      "impl": "imperative",
      "description": "Creates a panel of a registered kind, optionally with an explicit title, configuration, initial source, and renderer; auto-places it in the first free grid cell when no rect is given. Returns the mutation envelope; the new panel id is in affected_ids.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "results_table",
              "watchlist",
              "alert_draft",
              "similar_opportunities",
              "filter_builder",
              "chart",
              "study_library",
              "alerts",
              "symbol_details"
            ],
            "description": "Registered panel kind. One of: results_table, watchlist, alert_draft, similar_opportunities, filter_builder, chart, study_library, alerts, symbol_details."
          },
          "title": {
            "type": "string",
            "description": "Defaults to the kind's own default title."
          },
          "config": {
            "type": "object",
            "description": "Kind-specific configuration; defaults to the kind's own default config. See x-kind-config-schemas for each registered kind's schema."
          },
          "source": {
            "type": [
              "object",
              "null"
            ],
            "description": "Data source to bind; omit or null for an unbound panel.",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "screener_results",
                  "instrument",
                  "watchlist",
                  "symbol_list",
                  "panel_reference"
                ],
                "description": "Registered source type. One of: screener_results, instrument, watchlist, symbol_list, panel_reference."
              },
              "ref": {
                "type": "object",
                "description": "Shape depends on \"type\"; see x-source-ref-schemas for each type's schema."
              }
            },
            "required": [
              "type",
              "ref"
            ]
          },
          "renderer": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "table",
              "chart_grid",
              "heatmap",
              "scatter_plot",
              null
            ],
            "description": "Initial renderer; defaults to the kind's default renderer. Registered renderer types. One of: table, chart_grid, heatmap, scatter_plot. See x-renderer-config-schemas."
          },
          "rect": {
            "type": "object",
            "description": "Explicit footprint (6-column by 4-row grid, both zero-based); auto-placed when omitted.",
            "properties": {
              "col": {
                "type": "integer",
                "minimum": 0,
                "maximum": 5,
                "description": "Zero-based column."
              },
              "row": {
                "type": "integer",
                "minimum": 0,
                "maximum": 3,
                "description": "Zero-based row."
              },
              "col_span": {
                "type": "integer",
                "minimum": 1,
                "maximum": 6,
                "description": "Columns spanned."
              },
              "row_span": {
                "type": "integer",
                "minimum": 1,
                "maximum": 4,
                "description": "Rows spanned."
              }
            },
            "required": [
              "col",
              "row",
              "col_span",
              "row_span"
            ]
          },
          "expected_revision": {
            "type": "number",
            "description": "Revision this call assumes the workspace is currently at. Omitting it skips the concurrency check; a mismatch fails with error \"revision_conflict\"."
          },
          "idempotency_key": {
            "type": "string",
            "description": "Replaying the same key returns the original result instead of applying the change twice; reusing a key for a materially different request fails with error \"idempotency_conflict\"."
          }
        },
        "required": [
          "kind"
        ],
        "x-kind-config-schemas": {
          "results_table": {
            "type": "object",
            "description": "How a results table panel presents a screener run: displayed columns, computed columns, sort, grouping, conditional formatting, page size, and the chart panel it is bound to. Only the properties named are changed; every other property is left as it was.",
            "properties": {
              "columns": {
                "type": "array",
                "description": "Displayed columns, in display order."
              },
              "computed_columns": {
                "type": "array",
                "description": "Formula-derived columns available to display."
              },
              "sort": {
                "type": "object",
                "description": "The active sort key and direction, or null for none."
              },
              "grouping": {
                "type": "object",
                "description": "The active grouping key, or null for none."
              },
              "formatting_rules": {
                "type": "array",
                "description": "Conditional formatting rules."
              },
              "page_size": {
                "type": "number",
                "description": "Rows per page. Defaults when omitted."
              },
              "chart_panel_id": {
                "type": "string",
                "description": "The chart panel this table drives, or null."
              }
            }
          },
          "watchlist": {
            "type": "object",
            "properties": {
              "sortBy": {
                "type": "string"
              }
            }
          },
          "alert_draft": {
            "type": "object",
            "properties": {}
          },
          "similar_opportunities": {
            "type": "object",
            "properties": {
              "runId": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "filter_builder": {
            "type": "object",
            "properties": {
              "filterTree": {
                "type": "object"
              }
            }
          },
          "chart": {
            "type": "object",
            "description": "How a chart panel draws its series. Only the properties named are changed; every other property of the chart is left exactly as it was. What the chart shows -- instrument, timeframe, range, comparisons -- is a source concern, set through bind_panel_source.",
            "properties": {
              "candle_type": {
                "type": "string",
                "enum": [
                  "candlestick",
                  "ohlc_bar",
                  "line",
                  "area",
                  "heikin_ashi",
                  "hollow_candle"
                ],
                "description": "How each bar is drawn."
              },
              "scale": {
                "type": "string",
                "enum": [
                  "linear",
                  "logarithmic"
                ],
                "description": "Price axis scale."
              },
              "session": {
                "type": "string",
                "enum": [
                  "regular",
                  "extended",
                  "continuous"
                ],
                "description": "Which trading session the bars cover. Changing it changes which bars exist, so it invalidates cached bars and study output."
              },
              "price_adjustment": {
                "type": "string",
                "enum": [
                  "adjusted",
                  "split_adjusted",
                  "unadjusted"
                ],
                "description": "The basis every price on this chart is stated on: \"adjusted\" (splits and dividends), \"split_adjusted\" (splits only) or \"unadjusted\" (as traded). It is not a display setting -- it restates every downstream price: bars, study values, annotation anchors and every read of this chart. Changing it invalidates cached bars and study output."
              },
              "studies": {
                "type": "array",
                "description": "Study instances on the chart, in display order. Pane placement is derived from the catalog and is not a caller choice.",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "catalog_item_id",
                    "params",
                    "pane",
                    "order",
                    "enabled"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Stable instance ID, `study_`-prefixed."
                    },
                    "catalog_item_id": {
                      "type": "string"
                    },
                    "params": {
                      "type": "object",
                      "description": "Fully resolved, catalog defaults included."
                    },
                    "pane": {
                      "enum": [
                        "price_overlay",
                        "sub_pane"
                      ]
                    },
                    "order": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "enabled": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "study_library": {
            "type": "object",
            "properties": {
              "category": {
                "type": "string"
              },
              "searchTerm": {
                "type": "string"
              }
            }
          },
          "alerts": {
            "type": "object",
            "properties": {
              "onlyTriggered": {
                "type": "boolean"
              }
            }
          },
          "symbol_details": {
            "type": "object",
            "properties": {
              "symbol": {
                "type": "string"
              },
              "sections": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        },
        "x-renderer-config-schemas": {
          "table": {
            "type": "object",
            "description": "How a results table panel presents a screener run: displayed columns, computed columns, sort, grouping, conditional formatting, page size, and the chart panel it is bound to. Only the properties named are changed; every other property is left as it was.",
            "properties": {
              "columns": {
                "type": "array",
                "description": "Displayed columns, in display order."
              },
              "computed_columns": {
                "type": "array",
                "description": "Formula-derived columns available to display."
              },
              "sort": {
                "type": "object",
                "description": "The active sort key and direction, or null for none."
              },
              "grouping": {
                "type": "object",
                "description": "The active grouping key, or null for none."
              },
              "formatting_rules": {
                "type": "array",
                "description": "Conditional formatting rules."
              },
              "page_size": {
                "type": "number",
                "description": "Rows per page. Defaults when omitted."
              },
              "chart_panel_id": {
                "type": "string",
                "description": "The chart panel this table drives, or null."
              }
            }
          },
          "chart_grid": {
            "type": "object",
            "description": "How a chart panel draws its series. Only the properties named are changed; every other property of the chart is left exactly as it was. What the chart shows -- instrument, timeframe, range, comparisons -- is a source concern, set through bind_panel_source.",
            "properties": {
              "candle_type": {
                "type": "string",
                "enum": [
                  "candlestick",
                  "ohlc_bar",
                  "line",
                  "area",
                  "heikin_ashi",
                  "hollow_candle"
                ],
                "description": "How each bar is drawn."
              },
              "scale": {
                "type": "string",
                "enum": [
                  "linear",
                  "logarithmic"
                ],
                "description": "Price axis scale."
              },
              "session": {
                "type": "string",
                "enum": [
                  "regular",
                  "extended",
                  "continuous"
                ],
                "description": "Which trading session the bars cover. Changing it changes which bars exist, so it invalidates cached bars and study output."
              },
              "price_adjustment": {
                "type": "string",
                "enum": [
                  "adjusted",
                  "split_adjusted",
                  "unadjusted"
                ],
                "description": "The basis every price on this chart is stated on: \"adjusted\" (splits and dividends), \"split_adjusted\" (splits only) or \"unadjusted\" (as traded). It is not a display setting -- it restates every downstream price: bars, study values, annotation anchors and every read of this chart. Changing it invalidates cached bars and study output."
              },
              "studies": {
                "type": "array",
                "description": "Study instances on the chart, in display order. Pane placement is derived from the catalog and is not a caller choice.",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "catalog_item_id",
                    "params",
                    "pane",
                    "order",
                    "enabled"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Stable instance ID, `study_`-prefixed."
                    },
                    "catalog_item_id": {
                      "type": "string"
                    },
                    "params": {
                      "type": "object",
                      "description": "Fully resolved, catalog defaults included."
                    },
                    "pane": {
                      "enum": [
                        "price_overlay",
                        "sub_pane"
                      ]
                    },
                    "order": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "enabled": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "heatmap": {
            "type": "object",
            "properties": {
              "metric": {
                "type": "string"
              },
              "colorScale": {
                "type": "string"
              },
              "groupBy": {
                "type": "string"
              }
            }
          },
          "scatter_plot": {
            "type": "object",
            "properties": {
              "xAxis": {
                "type": "string"
              },
              "yAxis": {
                "type": "string"
              },
              "colorBy": {
                "type": "string"
              }
            }
          }
        },
        "x-source-ref-schemas": {
          "screener_results": {
            "type": "object",
            "properties": {
              "run_id": {
                "type": "string"
              }
            },
            "required": [
              "run_id"
            ]
          },
          "instrument": {
            "type": "object",
            "description": "What a chart panel shows: instrument, timeframe, visible range and comparison series. The instrument is named by ID, never by ticker. How the chart draws them -- candle type, scale, session, price-adjustment policy -- is a view concern, set through configure_panel_view.",
            "required": [
              "instrument"
            ],
            "properties": {
              "instrument": {
                "type": "object",
                "description": "A resolved instrument reference. The instrument is named by ID (for example \"inst:XNAS:AAPL\"), never by ticker -- resolve a ticker through instrument search first.",
                "required": [
                  "instrument_id",
                  "symbol",
                  "exchange",
                  "asset_type"
                ],
                "properties": {
                  "instrument_id": {
                    "type": "string",
                    "description": "Canonical instrument ID. A bare ticker such as \"AAPL\" is rejected."
                  },
                  "symbol": {
                    "type": "string",
                    "description": "Display ticker. Identity, not identifier."
                  },
                  "exchange": {
                    "type": "string",
                    "description": "ISO 10383 MIC of the listing venue."
                  },
                  "asset_type": {
                    "type": "string",
                    "description": "equity, etf, adr, fund, index, future, fx, crypto."
                  }
                }
              },
              "timeframe": {
                "type": "string",
                "enum": [
                  "1m",
                  "5m",
                  "15m",
                  "30m",
                  "1h",
                  "4h",
                  "1d",
                  "1wk",
                  "1mo"
                ],
                "description": "Bar interval. Changing it invalidates cached bars and study output."
              },
              "range": {
                "description": "The visible range, either an explicit ISO 8601 {start, end} window or a relative token. Changing it invalidates cached bars and study output for this chart.",
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "start",
                      "end"
                    ],
                    "properties": {
                      "kind": {
                        "const": "explicit"
                      },
                      "start": {
                        "type": "string",
                        "description": "ISO 8601 instant or date."
                      },
                      "end": {
                        "type": "string",
                        "description": "ISO 8601 instant or date, after start."
                      }
                    }
                  },
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "token"
                    ],
                    "properties": {
                      "kind": {
                        "const": "relative"
                      },
                      "token": {
                        "type": "string",
                        "enum": [
                          "1d",
                          "5d",
                          "1mo",
                          "3mo",
                          "6mo",
                          "ytd",
                          "1y",
                          "2y",
                          "5y",
                          "max"
                        ]
                      }
                    }
                  }
                ]
              },
              "comparisons": {
                "type": "array",
                "description": "Comparison instruments drawn beside the primary series.",
                "items": {
                  "type": "object",
                  "required": [
                    "instrument"
                  ],
                  "properties": {
                    "instrument": {
                      "type": "object",
                      "description": "A resolved instrument reference. The instrument is named by ID (for example \"inst:XNAS:AAPL\"), never by ticker -- resolve a ticker through instrument search first.",
                      "required": [
                        "instrument_id",
                        "symbol",
                        "exchange",
                        "asset_type"
                      ],
                      "properties": {
                        "instrument_id": {
                          "type": "string",
                          "description": "Canonical instrument ID. A bare ticker such as \"AAPL\" is rejected."
                        },
                        "symbol": {
                          "type": "string",
                          "description": "Display ticker. Identity, not identifier."
                        },
                        "exchange": {
                          "type": "string",
                          "description": "ISO 10383 MIC of the listing venue."
                        },
                        "asset_type": {
                          "type": "string",
                          "description": "equity, etf, adr, fund, index, future, fx, crypto."
                        }
                      }
                    },
                    "normalization": {
                      "type": "object",
                      "description": "How a comparison series is rescaled onto the primary series. Omit it and the default (mode \"none\", anchor \"window_start\") is applied and reported in the result.",
                      "properties": {
                        "mode": {
                          "type": "string",
                          "enum": [
                            "none",
                            "percent_change",
                            "indexed_100",
                            "z_score"
                          ]
                        },
                        "anchor": {
                          "type": "string",
                          "enum": [
                            "window_start",
                            "anchor_bar"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "watchlist": {
            "type": "object",
            "properties": {
              "watchlist_id": {
                "type": "string"
              }
            },
            "required": [
              "watchlist_id"
            ]
          },
          "symbol_list": {
            "type": "object",
            "properties": {
              "symbols": {
                "type": "array"
              }
            },
            "required": [
              "symbols"
            ]
          },
          "panel_reference": {
            "type": "object",
            "properties": {
              "panel_id": {
                "type": "string"
              }
            },
            "required": [
              "panel_id"
            ]
          }
        }
      }
    }
    remove_panelAction

    Removes a panel by its stable id, dropping it from every link channel and clearing its stored selection. Returns the mutation envelope; affected_ids names the removed panel plus every panel whose link group changed.

    View tool JSON
    {
      "name": "remove_panel",
      "kind": "act",
      "impl": "imperative",
      "description": "Removes a panel by its stable id, dropping it from every link channel and clearing its stored selection. Returns the mutation envelope; affected_ids names the removed panel plus every panel whose link group changed.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "panel_id": {
            "type": "string",
            "description": "Panel to remove."
          },
          "expected_revision": {
            "type": "number",
            "description": "Revision this call assumes the workspace is currently at. Omitting it skips the concurrency check; a mismatch fails with error \"revision_conflict\"."
          },
          "idempotency_key": {
            "type": "string",
            "description": "Replaying the same key returns the original result instead of applying the change twice; reusing a key for a materially different request fails with error \"idempotency_conflict\"."
          }
        },
        "required": [
          "panel_id"
        ]
      }
    }
    set_panel_layoutAction

    Applies a batch of panel footprints (grid cells only) atomically -- panels not named in the batch keep their current footprint. Returns the mutation envelope.

    View tool JSON
    {
      "name": "set_panel_layout",
      "kind": "act",
      "impl": "imperative",
      "description": "Applies a batch of panel footprints (grid cells only) atomically -- panels not named in the batch keep their current footprint. Returns the mutation envelope.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "placements": {
            "type": "array",
            "minItems": 1,
            "description": "Batch of panel footprints to apply atomically (6-column by 4-row grid, both zero-based).",
            "items": {
              "type": "object",
              "properties": {
                "panel_id": {
                  "type": "string",
                  "description": "Stable panel id."
                },
                "rect": {
                  "type": "object",
                  "description": "Footprint in grid cells (6-column by 4-row grid, both zero-based). No pixel, percentage, or viewport unit.",
                  "properties": {
                    "col": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 5,
                      "description": "Zero-based column."
                    },
                    "row": {
                      "type": "integer",
                      "minimum": 0,
                      "maximum": 3,
                      "description": "Zero-based row."
                    },
                    "col_span": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 6,
                      "description": "Columns spanned."
                    },
                    "row_span": {
                      "type": "integer",
                      "minimum": 1,
                      "maximum": 4,
                      "description": "Rows spanned."
                    }
                  },
                  "required": [
                    "col",
                    "row",
                    "col_span",
                    "row_span"
                  ]
                }
              },
              "required": [
                "panel_id",
                "rect"
              ]
            }
          },
          "expected_revision": {
            "type": "number",
            "description": "Revision this call assumes the workspace is currently at. Omitting it skips the concurrency check; a mismatch fails with error \"revision_conflict\"."
          },
          "idempotency_key": {
            "type": "string",
            "description": "Replaying the same key returns the original result instead of applying the change twice; reusing a key for a materially different request fails with error \"idempotency_conflict\"."
          }
        },
        "required": [
          "placements"
        ]
      }
    }
    bind_panel_sourceAction

    Connects a panel to a data source (a screener run, a watchlist, a symbol list, or another panel), rejecting a source type the panel's kind or active renderer doesn't accept. Never changes the panel's renderer. Returns the mutation envelope.

    View tool JSON
    {
      "name": "bind_panel_source",
      "kind": "act",
      "impl": "imperative",
      "description": "Connects a panel to a data source (a screener run, a watchlist, a symbol list, or another panel), rejecting a source type the panel's kind or active renderer doesn't accept. Never changes the panel's renderer. Returns the mutation envelope.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "panel_id": {
            "type": "string",
            "description": "Panel to bind."
          },
          "source": {
            "type": "object",
            "description": "Data source to bind.",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "screener_results",
                  "instrument",
                  "watchlist",
                  "symbol_list",
                  "panel_reference"
                ],
                "description": "Registered source type. One of: screener_results, instrument, watchlist, symbol_list, panel_reference."
              },
              "ref": {
                "type": "object",
                "description": "Shape depends on \"type\"; see x-source-ref-schemas for each type's schema."
              }
            },
            "required": [
              "type",
              "ref"
            ]
          },
          "expected_revision": {
            "type": "number",
            "description": "Revision this call assumes the workspace is currently at. Omitting it skips the concurrency check; a mismatch fails with error \"revision_conflict\"."
          },
          "idempotency_key": {
            "type": "string",
            "description": "Replaying the same key returns the original result instead of applying the change twice; reusing a key for a materially different request fails with error \"idempotency_conflict\"."
          }
        },
        "required": [
          "panel_id",
          "source"
        ],
        "x-source-ref-schemas": {
          "screener_results": {
            "type": "object",
            "properties": {
              "run_id": {
                "type": "string"
              }
            },
            "required": [
              "run_id"
            ]
          },
          "instrument": {
            "type": "object",
            "description": "What a chart panel shows: instrument, timeframe, visible range and comparison series. The instrument is named by ID, never by ticker. How the chart draws them -- candle type, scale, session, price-adjustment policy -- is a view concern, set through configure_panel_view.",
            "required": [
              "instrument"
            ],
            "properties": {
              "instrument": {
                "type": "object",
                "description": "A resolved instrument reference. The instrument is named by ID (for example \"inst:XNAS:AAPL\"), never by ticker -- resolve a ticker through instrument search first.",
                "required": [
                  "instrument_id",
                  "symbol",
                  "exchange",
                  "asset_type"
                ],
                "properties": {
                  "instrument_id": {
                    "type": "string",
                    "description": "Canonical instrument ID. A bare ticker such as \"AAPL\" is rejected."
                  },
                  "symbol": {
                    "type": "string",
                    "description": "Display ticker. Identity, not identifier."
                  },
                  "exchange": {
                    "type": "string",
                    "description": "ISO 10383 MIC of the listing venue."
                  },
                  "asset_type": {
                    "type": "string",
                    "description": "equity, etf, adr, fund, index, future, fx, crypto."
                  }
                }
              },
              "timeframe": {
                "type": "string",
                "enum": [
                  "1m",
                  "5m",
                  "15m",
                  "30m",
                  "1h",
                  "4h",
                  "1d",
                  "1wk",
                  "1mo"
                ],
                "description": "Bar interval. Changing it invalidates cached bars and study output."
              },
              "range": {
                "description": "The visible range, either an explicit ISO 8601 {start, end} window or a relative token. Changing it invalidates cached bars and study output for this chart.",
                "oneOf": [
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "start",
                      "end"
                    ],
                    "properties": {
                      "kind": {
                        "const": "explicit"
                      },
                      "start": {
                        "type": "string",
                        "description": "ISO 8601 instant or date."
                      },
                      "end": {
                        "type": "string",
                        "description": "ISO 8601 instant or date, after start."
                      }
                    }
                  },
                  {
                    "type": "object",
                    "required": [
                      "kind",
                      "token"
                    ],
                    "properties": {
                      "kind": {
                        "const": "relative"
                      },
                      "token": {
                        "type": "string",
                        "enum": [
                          "1d",
                          "5d",
                          "1mo",
                          "3mo",
                          "6mo",
                          "ytd",
                          "1y",
                          "2y",
                          "5y",
                          "max"
                        ]
                      }
                    }
                  }
                ]
              },
              "comparisons": {
                "type": "array",
                "description": "Comparison instruments drawn beside the primary series.",
                "items": {
                  "type": "object",
                  "required": [
                    "instrument"
                  ],
                  "properties": {
                    "instrument": {
                      "type": "object",
                      "description": "A resolved instrument reference. The instrument is named by ID (for example \"inst:XNAS:AAPL\"), never by ticker -- resolve a ticker through instrument search first.",
                      "required": [
                        "instrument_id",
                        "symbol",
                        "exchange",
                        "asset_type"
                      ],
                      "properties": {
                        "instrument_id": {
                          "type": "string",
                          "description": "Canonical instrument ID. A bare ticker such as \"AAPL\" is rejected."
                        },
                        "symbol": {
                          "type": "string",
                          "description": "Display ticker. Identity, not identifier."
                        },
                        "exchange": {
                          "type": "string",
                          "description": "ISO 10383 MIC of the listing venue."
                        },
                        "asset_type": {
                          "type": "string",
                          "description": "equity, etf, adr, fund, index, future, fx, crypto."
                        }
                      }
                    },
                    "normalization": {
                      "type": "object",
                      "description": "How a comparison series is rescaled onto the primary series. Omit it and the default (mode \"none\", anchor \"window_start\") is applied and reported in the result.",
                      "properties": {
                        "mode": {
                          "type": "string",
                          "enum": [
                            "none",
                            "percent_change",
                            "indexed_100",
                            "z_score"
                          ]
                        },
                        "anchor": {
                          "type": "string",
                          "enum": [
                            "window_start",
                            "anchor_bar"
                          ]
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "watchlist": {
            "type": "object",
            "properties": {
              "watchlist_id": {
                "type": "string"
              }
            },
            "required": [
              "watchlist_id"
            ]
          },
          "symbol_list": {
            "type": "object",
            "properties": {
              "symbols": {
                "type": "array"
              }
            },
            "required": [
              "symbols"
            ]
          },
          "panel_reference": {
            "type": "object",
            "properties": {
              "panel_id": {
                "type": "string"
              }
            },
            "required": [
              "panel_id"
            ]
          }
        }
      }
    }
    configure_panel_viewAction

    Sets title, visibility, collapsed state, and renderer-specific view configuration (columns, studies, axes, sorting, grouping, formatting), each optional -- only the fields supplied are applied. Returns the mutation envelope.

    View tool JSON
    {
      "name": "configure_panel_view",
      "kind": "act",
      "impl": "imperative",
      "description": "Sets title, visibility, collapsed state, and renderer-specific view configuration (columns, studies, axes, sorting, grouping, formatting), each optional -- only the fields supplied are applied. Returns the mutation envelope.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "panel_id": {
            "type": "string",
            "description": "Stable panel id."
          },
          "title": {
            "type": "string"
          },
          "hidden": {
            "type": "boolean"
          },
          "collapsed": {
            "type": "boolean"
          },
          "config": {
            "type": "object",
            "description": "Renderer-specific view configuration, merged onto the panel's current recognized fields and validated against the panel's active renderer. See x-renderer-config-schemas for each renderer."
          },
          "expected_revision": {
            "type": "number",
            "description": "Revision this call assumes the workspace is currently at. Omitting it skips the concurrency check; a mismatch fails with error \"revision_conflict\"."
          },
          "idempotency_key": {
            "type": "string",
            "description": "Replaying the same key returns the original result instead of applying the change twice; reusing a key for a materially different request fails with error \"idempotency_conflict\"."
          }
        },
        "required": [
          "panel_id"
        ],
        "x-renderer-config-schemas": {
          "table": {
            "type": "object",
            "description": "How a results table panel presents a screener run: displayed columns, computed columns, sort, grouping, conditional formatting, page size, and the chart panel it is bound to. Only the properties named are changed; every other property is left as it was.",
            "properties": {
              "columns": {
                "type": "array",
                "description": "Displayed columns, in display order."
              },
              "computed_columns": {
                "type": "array",
                "description": "Formula-derived columns available to display."
              },
              "sort": {
                "type": "object",
                "description": "The active sort key and direction, or null for none."
              },
              "grouping": {
                "type": "object",
                "description": "The active grouping key, or null for none."
              },
              "formatting_rules": {
                "type": "array",
                "description": "Conditional formatting rules."
              },
              "page_size": {
                "type": "number",
                "description": "Rows per page. Defaults when omitted."
              },
              "chart_panel_id": {
                "type": "string",
                "description": "The chart panel this table drives, or null."
              }
            }
          },
          "chart_grid": {
            "type": "object",
            "description": "How a chart panel draws its series. Only the properties named are changed; every other property of the chart is left exactly as it was. What the chart shows -- instrument, timeframe, range, comparisons -- is a source concern, set through bind_panel_source.",
            "properties": {
              "candle_type": {
                "type": "string",
                "enum": [
                  "candlestick",
                  "ohlc_bar",
                  "line",
                  "area",
                  "heikin_ashi",
                  "hollow_candle"
                ],
                "description": "How each bar is drawn."
              },
              "scale": {
                "type": "string",
                "enum": [
                  "linear",
                  "logarithmic"
                ],
                "description": "Price axis scale."
              },
              "session": {
                "type": "string",
                "enum": [
                  "regular",
                  "extended",
                  "continuous"
                ],
                "description": "Which trading session the bars cover. Changing it changes which bars exist, so it invalidates cached bars and study output."
              },
              "price_adjustment": {
                "type": "string",
                "enum": [
                  "adjusted",
                  "split_adjusted",
                  "unadjusted"
                ],
                "description": "The basis every price on this chart is stated on: \"adjusted\" (splits and dividends), \"split_adjusted\" (splits only) or \"unadjusted\" (as traded). It is not a display setting -- it restates every downstream price: bars, study values, annotation anchors and every read of this chart. Changing it invalidates cached bars and study output."
              },
              "studies": {
                "type": "array",
                "description": "Study instances on the chart, in display order. Pane placement is derived from the catalog and is not a caller choice.",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "catalog_item_id",
                    "params",
                    "pane",
                    "order",
                    "enabled"
                  ],
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Stable instance ID, `study_`-prefixed."
                    },
                    "catalog_item_id": {
                      "type": "string"
                    },
                    "params": {
                      "type": "object",
                      "description": "Fully resolved, catalog defaults included."
                    },
                    "pane": {
                      "enum": [
                        "price_overlay",
                        "sub_pane"
                      ]
                    },
                    "order": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "enabled": {
                      "type": "boolean"
                    }
                  }
                }
              }
            }
          },
          "heatmap": {
            "type": "object",
            "properties": {
              "metric": {
                "type": "string"
              },
              "colorScale": {
                "type": "string"
              },
              "groupBy": {
                "type": "string"
              }
            }
          },
          "scatter_plot": {
            "type": "object",
            "properties": {
              "xAxis": {
                "type": "string"
              },
              "yAxis": {
                "type": "string"
              },
              "colorBy": {
                "type": "string"
              }
            }
          }
        }
      }
    }
    get_screener_resultsAnswer

    Returns a bounded page of an existing screener run's results, projected through the bound results panel's configured columns, computed columns, sort and grouping, together with the total count, a cursor for the next page, the current selection, and the run's own provenance. Reads only: it retrieves an already-pinned run and never re-runs the screener, even implicitly -- an expired or unknown run is reported as an explicit error, not a fresh execution.

    View tool JSON
    {
      "name": "get_screener_results",
      "kind": "answer",
      "impl": "imperative",
      "description": "Returns a bounded page of an existing screener run's results, projected through the bound results panel's configured columns, computed columns, sort and grouping, together with the total count, a cursor for the next page, the current selection, and the run's own provenance. Reads only: it retrieves an already-pinned run and never re-runs the screener, even implicitly -- an expired or unknown run is reported as an explicit error, not a fresh execution.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "panel_id": {
            "type": "string",
            "description": "A results_table panel already bound to a screener run."
          },
          "cursor": {
            "type": "string",
            "description": "Opaque resume token from a previous page's next_cursor. Omit for the first page."
          },
          "page_size": {
            "type": "number",
            "description": "Rows per page, up to 200; defaults to the panel's configured page size, or the documented default when unset."
          }
        },
        "required": [
          "panel_id"
        ]
      }
    }
    explain_resultAnswer

    Returns why one instrument matched or did not match a pinned screener run: the actual value and pass/fail/indeterminate state for every filter condition -- including conditions nested inside AND/OR/NOT groups, with each group's own resolved outcome -- plus each ranking field's raw value, normalized value, weight and contribution to the final score. Covers a run's rejected and truncated candidates as well as its results: an instrument only needs to have been evaluated, not to have passed, to be explained. Omit instrument_id to explain the results panel's current selection. Reads only: it never re-runs the screener.

    View tool JSON
    {
      "name": "explain_result",
      "kind": "answer",
      "impl": "imperative",
      "description": "Returns why one instrument matched or did not match a pinned screener run: the actual value and pass/fail/indeterminate state for every filter condition -- including conditions nested inside AND/OR/NOT groups, with each group's own resolved outcome -- plus each ranking field's raw value, normalized value, weight and contribution to the final score. Covers a run's rejected and truncated candidates as well as its results: an instrument only needs to have been evaluated, not to have passed, to be explained. Omit instrument_id to explain the results panel's current selection. Reads only: it never re-runs the screener.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "panel_id": {
            "type": "string",
            "description": "A results_table panel already bound to a screener run."
          },
          "instrument_id": {
            "type": "string",
            "description": "Instrument to explain. Omit to explain the panel's current single-result selection; an error names the requirement when neither is available."
          }
        },
        "required": [
          "panel_id"
        ]
      }
    }
    get_canvas_stateAnswer

    Returns a workspace's panels, layout, links, active symbol, screener binding and whether it has changes not saved under a name. Every item carries its stable id. Defaults to the active workspace.

    View tool JSON
    {
      "name": "get_canvas_state",
      "kind": "answer",
      "impl": "imperative",
      "description": "Returns a workspace's panels, layout, links, active symbol, screener binding and whether it has changes not saved under a name. Every item carries its stable id. Defaults to the active workspace.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "workspace_id": {
            "type": "string",
            "description": "Defaults to the active workspace."
          }
        }
      }
    }
    define_screenerAction

    Creates or fully replaces a screener definition in one call: universe, conditions (a nested filter tree of typed conditions), ranking, and a result limit. Validates everything together -- every unknown catalog id, out-of-range parameter, and empty-resolving universe is collected and returned together, never just the first one found -- and commits nothing when any blocking problem is found. Defaults to the workspace's current screener (WorkspaceDocument.screenerId): omit screener_id to create one the first time and replace it (as a new revision, full-replace -- omitted fields reset to empty/default, they are not carried over) on every call after. An explicit screener_id addresses a specific screener and is rejected, naming it, if it does not exist. When a requested interval cannot actually be served by the data available, this substitutes the interval that can be and says so in warnings rather than rejecting the definition. Returns the mutation envelope plus the screener id and revision; accepts expected_revision and idempotency_key.

    View tool JSON
    {
      "name": "define_screener",
      "kind": "act",
      "impl": "imperative",
      "description": "Creates or fully replaces a screener definition in one call: universe, conditions (a nested filter tree of typed conditions), ranking, and a result limit. Validates everything together -- every unknown catalog id, out-of-range parameter, and empty-resolving universe is collected and returned together, never just the first one found -- and commits nothing when any blocking problem is found. Defaults to the workspace's current screener (WorkspaceDocument.screenerId): omit screener_id to create one the first time and replace it (as a new revision, full-replace -- omitted fields reset to empty/default, they are not carried over) on every call after. An explicit screener_id addresses a specific screener and is rejected, naming it, if it does not exist. When a requested interval cannot actually be served by the data available, this substitutes the interval that can be and says so in warnings rather than rejecting the definition. Returns the mutation envelope plus the screener id and revision; accepts expected_revision and idempotency_key.",
      "inputSchema": {
        "type": "object",
        "$defs": {
          "condition": {
            "oneOf": [
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "scalar"
                  },
                  "fieldId": {
                    "type": "string"
                  },
                  "operator": {
                    "type": "string"
                  },
                  "value": {
                    "type": [
                      "number",
                      "string",
                      "boolean"
                    ]
                  },
                  "unit": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "type",
                  "fieldId",
                  "operator",
                  "value",
                  "unit"
                ]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "range"
                  },
                  "fieldId": {
                    "type": "string"
                  },
                  "lower": {
                    "type": "number"
                  },
                  "upper": {
                    "type": "number"
                  },
                  "lowerInclusive": {
                    "type": "boolean"
                  },
                  "upperInclusive": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "type",
                  "fieldId",
                  "lower",
                  "upper",
                  "lowerInclusive",
                  "upperInclusive"
                ]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "series_comparison"
                  },
                  "left": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "catalogId": {
                        "type": "string"
                      },
                      "params": {
                        "type": "object",
                        "additionalProperties": {
                          "type": [
                            "number",
                            "string",
                            "boolean"
                          ]
                        }
                      }
                    },
                    "required": [
                      "catalogId",
                      "params"
                    ]
                  },
                  "right": {
                    "type": "object",
                    "additionalProperties": false,
                    "properties": {
                      "catalogId": {
                        "type": "string"
                      },
                      "params": {
                        "type": "object",
                        "additionalProperties": {
                          "type": [
                            "number",
                            "string",
                            "boolean"
                          ]
                        }
                      }
                    },
                    "required": [
                      "catalogId",
                      "params"
                    ]
                  },
                  "operator": {
                    "type": "string"
                  }
                },
                "required": [
                  "type",
                  "left",
                  "right",
                  "operator"
                ]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "temporal"
                  },
                  "condition": {
                    "$ref": "#/$defs/condition"
                  },
                  "event": {
                    "enum": [
                      "crossed_above",
                      "crossed_below",
                      "became_true"
                    ]
                  },
                  "withinBars": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "intervalId": {
                    "type": "string"
                  }
                },
                "required": [
                  "type",
                  "condition",
                  "event",
                  "withinBars",
                  "intervalId"
                ]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "event_relative"
                  },
                  "eventTypeId": {
                    "type": "string"
                  },
                  "direction": {
                    "enum": [
                      "past",
                      "future"
                    ]
                  },
                  "windowDays": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "required": [
                  "type",
                  "eventTypeId",
                  "direction",
                  "windowDays"
                ]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "pattern"
                  },
                  "patternId": {
                    "type": "string"
                  },
                  "minConfidence": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "intervalId": {
                    "type": "string"
                  }
                },
                "required": [
                  "type",
                  "patternId",
                  "minConfidence",
                  "intervalId"
                ]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "relative"
                  },
                  "fieldId": {
                    "type": "string"
                  },
                  "operator": {
                    "type": "string"
                  },
                  "multiple": {
                    "type": "number"
                  },
                  "baseline": {
                    "oneOf": [
                      {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "kind": {
                            "const": "own_moving_average"
                          },
                          "windowBars": {
                            "type": "integer",
                            "minimum": 1
                          }
                        },
                        "required": [
                          "kind",
                          "windowBars"
                        ]
                      },
                      {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "kind": {
                            "const": "peer_group"
                          },
                          "groupId": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "kind",
                          "groupId"
                        ]
                      },
                      {
                        "type": "object",
                        "additionalProperties": false,
                        "properties": {
                          "kind": {
                            "const": "index"
                          },
                          "indexId": {
                            "type": "string"
                          }
                        },
                        "required": [
                          "kind",
                          "indexId"
                        ]
                      }
                    ]
                  }
                },
                "required": [
                  "type",
                  "fieldId",
                  "operator",
                  "multiple",
                  "baseline"
                ]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "type": {
                    "const": "study_output"
                  },
                  "studyId": {
                    "type": "string"
                  },
                  "params": {
                    "type": "object",
                    "additionalProperties": {
                      "type": [
                        "number",
                        "string",
                        "boolean"
                      ]
                    }
                  },
                  "outputName": {
                    "type": "string"
                  },
                  "predicate": {
                    "type": "string"
                  }
                },
                "required": [
                  "type",
                  "studyId",
                  "params",
                  "outputName",
                  "predicate"
                ]
              }
            ]
          },
          "node": {
            "oneOf": [
              {
                "$ref": "#/$defs/condition"
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "kind": {
                    "const": "condition"
                  },
                  "condition": {
                    "$ref": "#/$defs/condition"
                  },
                  "enabled": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "kind",
                  "condition"
                ]
              },
              {
                "type": "object",
                "additionalProperties": false,
                "properties": {
                  "kind": {
                    "const": "group"
                  },
                  "op": {
                    "enum": [
                      "and",
                      "or",
                      "not"
                    ]
                  },
                  "children": {
                    "type": "array",
                    "items": {
                      "$ref": "#/$defs/node"
                    }
                  },
                  "enabled": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "kind",
                  "op",
                  "children"
                ],
                "description": "A not group must contain exactly one child."
              }
            ]
          }
        },
        "properties": {
          "workspace_id": {
            "type": "string",
            "description": "Defaults to the active workspace."
          },
          "screener_id": {
            "type": "string",
            "description": "Defaults to the workspace's current screener; rejected if unrecognized."
          },
          "name": {
            "type": "string",
            "description": "A display label only, never an address."
          },
          "universe": {
            "type": "object",
            "properties": {
              "asset_class": {
                "type": "string"
              },
              "exchanges": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "countries": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "sectors": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "industries": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "indexes": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "watchlists": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "liquidity": {
                "type": "object",
                "properties": {
                  "min_price": {
                    "type": "number"
                  },
                  "min_average_volume": {
                    "type": "number"
                  },
                  "min_market_cap": {
                    "type": "number"
                  }
                }
              },
              "exclusions": {
                "type": "object",
                "properties": {
                  "instrument_ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "sector_ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "industry_ids": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "conditions": {
            "description": "The whole filter tree in one shot: a root group, a single condition, or an array of nodes (treated as the root group's children under \"and\"). Omit for no conditions.",
            "oneOf": [
              {
                "$ref": "#/$defs/node",
                "description": "Typed condition or nested group. Conditions use camelCase keys (fieldId, operator), unlike ranking fields. Example: {\"type\":\"scalar\",\"fieldId\":\"field.price.change_pct_1\",\"operator\":\"op.greater_than\",\"value\":0,\"unit\":\"percent\"}. To select a historical session, pass as_of to run_screener."
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/$defs/node",
                  "description": "Typed condition or nested group. Conditions use camelCase keys (fieldId, operator), unlike ranking fields. Example: {\"type\":\"scalar\",\"fieldId\":\"field.price.change_pct_1\",\"operator\":\"op.greater_than\",\"value\":0,\"unit\":\"percent\"}. To select a historical session, pass as_of to run_screener."
                }
              }
            ]
          },
          "ranking": {
            "type": "object",
            "properties": {
              "fields": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "field_id": {
                      "type": "string"
                    },
                    "direction": {
                      "type": "string",
                      "enum": [
                        "asc",
                        "desc"
                      ]
                    },
                    "weight": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "field_id"
                  ]
                }
              },
              "tie_break": {
                "type": "object",
                "properties": {
                  "field_id": {
                    "type": "string"
                  },
                  "direction": {
                    "type": "string",
                    "enum": [
                      "asc",
                      "desc"
                    ]
                  }
                },
                "required": [
                  "field_id"
                ]
              },
              "normalization": {
                "type": "string",
                "enum": [
                  "percentile_rank",
                  "z_score",
                  "min_max"
                ]
              }
            },
            "description": "Omit (or pass an empty \"fields\") for the documented default order."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "description": "Maximum matches a run returns."
          },
          "expected_revision": {
            "type": "number",
            "description": "Optional. The workspace's own revision, used for optimistic concurrency -- not the screener definition's revision (returned as screener_revision in the response, but not accepted as input here -- define_screener always writes the next revision)."
          },
          "idempotency_key": {
            "type": "string"
          }
        }
      }
    }
    run_screenerAction

    Executes one specific screener revision and pins the complete, ordered result set under a stable run_id: the screener id and revision executed, universe/matched/returned counts, whether the result was truncated, ranking, warnings and full data provenance. The run never changes after later edits to the screener (it always describes the revision it executed), and its stored matches -- including every ranking value and per-filter-node pass/fail state -- are read back by run_id without ever re-executing the screener. A screener with blocking validation problems is refused instead: the problems are returned and no run_id is minted. A valid screener that nothing satisfies is a normal run with matched_count 0 and a warning, not an error. Accepts an optional screener_revision to run an exact past revision (rejected if no longer retained), expected_revision for optimistic concurrency, and idempotency_key -- a replayed key returns the original run_id without executing a second time. Successful runs automatically bind to the first visible results list, or create a default-sized list when none exists. Do not create a second list unless requested. Display failures are reported as warnings without discarding the run.

    View tool JSON
    {
      "name": "run_screener",
      "kind": "act",
      "impl": "imperative",
      "description": "Executes one specific screener revision and pins the complete, ordered result set under a stable run_id: the screener id and revision executed, universe/matched/returned counts, whether the result was truncated, ranking, warnings and full data provenance. The run never changes after later edits to the screener (it always describes the revision it executed), and its stored matches -- including every ranking value and per-filter-node pass/fail state -- are read back by run_id without ever re-executing the screener. A screener with blocking validation problems is refused instead: the problems are returned and no run_id is minted. A valid screener that nothing satisfies is a normal run with matched_count 0 and a warning, not an error. Accepts an optional screener_revision to run an exact past revision (rejected if no longer retained), expected_revision for optimistic concurrency, and idempotency_key -- a replayed key returns the original run_id without executing a second time. Successful runs automatically bind to the first visible results list, or create a default-sized list when none exists. Do not create a second list unless requested. Display failures are reported as warnings without discarding the run.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "period": {
            "type": "object",
            "additionalProperties": false,
            "required": [
              "start",
              "end"
            ],
            "properties": {
              "start": {
                "type": "string",
                "format": "date"
              },
              "end": {
                "type": "string",
                "format": "date"
              }
            },
            "description": "Inclusive calendar date range, mutually exclusive with as_of. Resolve last week/month to explicit calendar dates. Rank/filter by field.price.period_return_pct for total period gains; baseline is the last loaded session before start, endpoint the last loaded session within the range. Other fields are evaluated at the endpoint. Not an any-time-during-period condition."
          },
          "workspace_id": {
            "type": "string",
            "description": "Defaults to the active workspace."
          },
          "as_of": {
            "type": "string",
            "format": "date",
            "description": "Exact trading session (YYYY-MM-DD) for all filters and rankings. Omit for the latest loaded session. Unavailable sessions are refused, never substituted. Use this for historical gainers; field.date is a filter, not a session selector."
          },
          "screener_id": {
            "type": "string"
          },
          "screener_revision": {
            "type": "integer",
            "description": "Optional. The screener definition's own revision counter -- not the workspace's own revision (see expected_revision, a separate parameter). Runs this exact screener revision instead of the current one; rejected if that revision is no longer retained."
          },
          "expected_revision": {
            "type": "number",
            "description": "Optional. The workspace's own revision, used for optimistic concurrency -- not the screener definition's revision (see screener_revision, a separate parameter). Rejected with a revision conflict if the workspace is no longer at this revision."
          },
          "idempotency_key": {
            "type": "string"
          }
        },
        "required": [
          "screener_id"
        ]
      }
    }
    resolve_tickerAction

    Turns a bare ticker into the instrument reference a chart panel's source requires. This project has no live reference-data source (no company name, exchange, or asset-classification service), so this mints a provisional reference from the ticker text alone -- asset type is assumed "equity", the exchange is reported as "XUNK" (unknown) -- and does not confirm the ticker actually has data. Whether it does is discovered only once the chart is bound and rendered. Pass this result directly as create_panel's source.ref, with source.type "instrument".

    View tool JSON
    {
      "name": "resolve_ticker",
      "kind": "act",
      "impl": "imperative",
      "description": "Turns a bare ticker into the instrument reference a chart panel's source requires. This project has no live reference-data source (no company name, exchange, or asset-classification service), so this mints a provisional reference from the ticker text alone -- asset type is assumed \"equity\", the exchange is reported as \"XUNK\" (unknown) -- and does not confirm the ticker actually has data. Whether it does is discovered only once the chart is bound and rendered. Pass this result directly as create_panel's source.ref, with source.type \"instrument\".",
      "inputSchema": {
        "type": "object",
        "properties": {
          "ticker": {
            "type": "string",
            "minLength": 1,
            "description": "The ticker to resolve, e.g. \"STX\" or \"MOCK13\"."
          }
        },
        "required": [
          "ticker"
        ]
      }
    }
    search_catalogAnswer

    Search the application catalog -- every field, operator, study, indicator, pattern, interval, universe and template the app knows how to name. Matches on label, stable ID, aliases and tags, so a common synonym finds the item. Returns summary rows (id, kind, label, description, availability); pass an id to describe_catalog_item for parameters, units, ranges, defaults and outputs. Supply kinds with no query to enumerate a kind rather than guessing a search term. Items whose data is unavailable are included and marked, because "exists but has no data here" is different from "does not exist" -- read the availability reason before deciding an item is unusable.

    View tool JSON
    {
      "name": "search_catalog",
      "kind": "answer",
      "impl": "imperative",
      "description": "Search the application catalog -- every field, operator, study, indicator, pattern, interval, universe and template the app knows how to name. Matches on label, stable ID, aliases and tags, so a common synonym finds the item. Returns summary rows (id, kind, label, description, availability); pass an id to describe_catalog_item for parameters, units, ranges, defaults and outputs. Supply kinds with no query to enumerate a kind rather than guessing a search term. Items whose data is unavailable are included and marked, because \"exists but has no data here\" is different from \"does not exist\" -- read the availability reason before deciding an item is unusable.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "description": "Free text, e.g. \"relative volume\", \"crossed above\", \"rsi\". Omit it and supply kinds to list everything of those kinds."
          },
          "kinds": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "field",
                "operator",
                "study",
                "indicator",
                "pattern",
                "interval",
                "universe",
                "template"
              ]
            },
            "description": "Restrict the search to these catalog kinds. Omit to search all eight."
          },
          "includeUnavailable": {
            "type": "boolean",
            "description": "Include items whose data is currently unavailable. Defaults to true; set false to see only what can be used right now."
          },
          "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "description": "Maximum items to return. Clamped to 50."
          }
        }
      }
    }
    get_instrument_analysisAnswer

    Read server-calculated evidence for one stock: exact-session close, 12–1 calendar momentum, 50/200-session SMAs, 252-session volatility/drawdown, volume and extreme price-move warnings. Uses the same price data and calculations as the screener. No trades or workspace mutations. Missing sessions are refused. Defaults to latest loaded data, which may lag today. Fundamentals and valuation are not supplied.

    View tool JSON
    {
      "name": "get_instrument_analysis",
      "kind": "answer",
      "impl": "imperative",
      "description": "Read server-calculated evidence for one stock: exact-session close, 12–1 calendar momentum, 50/200-session SMAs, 252-session volatility/drawdown, volume and extreme price-move warnings. Uses the same price data and calculations as the screener. No trades or workspace mutations. Missing sessions are refused. Defaults to latest loaded data, which may lag today. Fundamentals and valuation are not supplied.",
      "inputSchema": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "ticker"
        ],
        "properties": {
          "ticker": {
            "type": "string",
            "minLength": 1
          },
          "as_of": {
            "type": "string",
            "format": "date",
            "description": "Exact trading session, YYYY-MM-DD. Omit for latest loaded session."
          }
        }
      }
    }