Sablier MCP Server
OfficialIntegrates Stripe for processing payments and subscriptions for credit packs and premium tiers.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Sablier MCP ServerHow exposed is my portfolio to recession risk?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Sablier MCP Server
An MCP (Model Context Protocol) server that lets AI assistants analyze portfolios, stress-test scenarios, generate synthetic market paths, and scan SEC filings — in under 2 minutes.
What This Does
Connect Sablier to Claude, ChatGPT, or any MCP-compatible AI assistant. The agent gets ~70 tools to:
Scan SEC filings & earnings calls — AI reads every company's 10-K, 10-Q filings and earnings call transcripts, then scores how exposed each holding is to any theme you ask about (0-100 scale with evidence). "How exposed is my portfolio to China supply chain risk?" — scored, evidenced, and ranked in seconds.
Compute factor exposures — Measures how each stock responds to market drivers (interest rates, VIX, dollar index, oil, credit spreads, etc.). Factor betas are estimated on a rolling window of recent data so they reflect current market conditions. Supports both linear and nonlinear (GAM) factor models.
Stress-test with scenarios — "What if VIX hits 40?" or "What if the Fed raises rates to 6%?" Run Monte Carlo simulations to get per-asset expected returns, Value-at-Risk, Expected Shortfall, and full return distributions.
Generate synthetic market paths — Train a generative flow model on the joint distribution of assets and factors. Generate hundreds of realistic future trajectories, optionally constrained ("paths where gold stays above $3000"). Forward-test strategies across many scenarios.
Real-time market intelligence — Get a Bloomberg-terminal-grade briefing with 50+ indicators, z-scores, regime signals, and cross-asset analysis in one call.
Manage portfolios — Create and track portfolios with live prices, performance analytics (Sharpe ratio, max drawdown, volatility), optimization, and efficient frontier computation.
Speed
Under 2 minutes, end-to-end. Portfolio creation -> model training -> factor betas -> stress scenarios -> SEC filing analysis. All in a single conversation.
The same workflow — gathering filings, building factor models, running simulations, writing risk memos — takes a team of analysts and quants days to weeks. Sablier compresses it into one chat.
Related MCP server: SEC EDGAR MCP
Quick Start
Option A: Claude Desktop / Claude.ai (recommended — zero install)
Add to your claude_desktop_config.json:
{
"mcpServers": {
"sablier": {
"type": "url",
"url": "https://sablier-mcp-215397666394.us-central1.run.app/mcp/"
}
}
}That's it. On first use, Claude opens a browser window — sign up or log in with your Sablier account. No API keys needed.
Option B: ChatGPT (Developer Mode)
Go to Settings -> Developer Mode and enable it
Go to Connectors -> Add connector
Enter:
Name:
SablierServer URL:
https://sablier-mcp-215397666394.us-central1.run.app/mcp/
In a new chat, activate via "+" -> More -> Developer Mode
Option C: Claude Code (local, stdio)
# Clone and install
git clone https://github.com/sablier-it/sablier-mcp.git
cd sablier-mcp
uv sync
# Register with Claude Code
claude mcp add sablier -- uv --directory /path/to/sablier-mcp run sablier-mcp
# Set your API key (get one from sablier-ai.com)
export SABLIER_API_KEY=sk_live_your_key_hereTools (~70)
Market Intelligence
Tool | Description |
| Bloomberg-grade briefing: 50+ indicators, z-scores, regime signals, cross-asset analysis |
| Search for tickers (stocks, ETFs, futures) and market indicators (VIX, DXY, rates) |
Portfolio Management
Tool | Description |
| Create a portfolio from tickers and weights (must sum to 1.0) |
| List your portfolios with names, assets, and status |
| Get full details for a specific portfolio |
| Update name, description, weights, or capital |
| Permanently delete a portfolio |
| Live portfolio value: total, P&L, per-position breakdown |
| Sharpe ratio, volatility, max drawdown, beta (1W-5Y timeframes) |
| Sector, industry, country, and exchange for each holding |
| Find optimal weights: max Sharpe, min variance, or max return |
| Compute the efficient frontier curve for portfolio assets |
Qualitative Analysis (SEC Filings & Earnings Calls)
Tool | Description |
| Score company exposure to any theme (0-100) using 10-K, 10-Q, and earnings transcripts |
| Browse the built-in theme library (AI risk, rate sensitivity, China exposure, etc.) |
| List past qualitative analyses |
| Load a saved analysis with full scores and evidence passages |
| Delete a saved qualitative analysis |
Quantitative Analysis (Factor Models)
Tool | Description |
| One-shot: builds factor models, trains, computes factor exposures (linear + nonlinear) |
| List existing analyses with training and simulation status |
| Browse pre-built market driver sets (rates, volatility, commodities, credit, etc.) |
| Create a custom set of market drivers for analysis |
| List all accessible feature sets |
| Get details of a specific feature set |
| Delete a custom feature set |
| Compute per-asset factor betas from a trained model group |
| Sample forward asset returns under user-specified factor levels (Monte Carlo) |
| Cross-asset residual correlation matrix (post-factor) |
| List all simulations for a model group |
| Find optimal weights from a trained MOMENT batch (analytical objectives) |
| Browse past optimization runs for a portfolio |
| Delete a model group and all associated data |
Stress Testing & Scenarios
Tool | Description |
| Monte Carlo what-if: per-asset VaR, ES, expected return under custom factor levels |
| Save a named what-if scenario (fixed value, percentile, or shock) |
| List saved scenarios |
| Get scenario details |
| Update a scenario's factors or description |
| Delete a saved scenario |
Generative Simulation (Flow)
Tool | Description |
| Train a conditional flow-matching model on a model group |
| Generate baseline (unconstrained) synthetic price paths |
| Generate constrained paths (e.g., "gold above $3000 and VIX below 20") |
| Poll status of a queued/running flow job |
| Pull paths + summary stats from a completed generation job |
| Download raw paths as JSON or CSV |
| List baseline path generations for a model group |
| List scenario-conditioned generations for a model group |
| Delete a flow job and its outputs |
| Compute portfolio risk metrics across generated paths |
| Validate flow model quality against historical data (calibration, dependence, tails) |
Feature Catalog
Tool | Description |
| Search the catalog for available tickers / macro series |
| Add a ticker to the catalog (Yahoo Finance or FRED) |
| Fetch/update historical data for tickers |
Trading Rules
Tool | Description |
| Create a trigger-action rule on a portfolio (VIX spike, drawdown, regime, etc.) |
| List rules attached to a portfolio |
| Activate or deactivate a rule |
| Permanently delete a rule |
| Check which rules would fire on the latest market data |
| Historical backtest of rules against real prices |
| Forward-test rules against generated FLOW paths |
Derivatives
Tool | Description |
| Greeks aggregation + scenario P&L for portfolio options positions |
| Price a single equity / futures option (Black-76) with Greeks |
Market Data
Tool | Description |
| 60+ regime indicators (VIX, yield curve, credit, sector rotation, RORO) |
| Cross-sectional screening across the equity catalog |
Account & Billing
Tool | Description |
| Current user, tier, and feature flags |
| Current credit balance and tier monthly allocation |
| Browse one-off credit packs available for purchase |
| Purchase a credit pack via Stripe Checkout |
| View current subscription tier and limits |
| View usage across metered buckets |
| Enable/disable per-call overage spending |
| Subscribe or upgrade via Stripe Checkout |
| Open Stripe Customer Portal |
Example Conversations
1. Full risk analysis in one conversation
You: Create a portfolio with AAPL 40%, MSFT 30%, NVDA 30%.
Then stress-test it for a recession — VIX at 35, 10Y at 5.5%, SPY at 380.
Agent: 1. create_portfolio("Tech Portfolio", ["AAPL", "MSFT", "NVDA"], [0.4, 0.3, 0.3])
2. list_feature_set_templates() → picks "Macro + Volatility" set
3. analyze_quantitative(portfolio_id, conditioning_set_id)
→ trains models, computes factor betas per asset
4. compute_returns(sim_batch_id, {"VIX": 35, "US 10Y": 5.5, "SPY": 380})
→ per-asset expected returns, VaR (95%), Expected Shortfall
Result: Portfolio expected return = -8.2%, VaR(95%) = -14.5%
NVDA most exposed (-12.1%), MSFT most defensive (-4.8%)2. SEC filing analysis for thematic risk
You: How exposed are the Magnificent 7 to AI regulation risk?
Agent: 1. analyze_qualitative(
tickers=["AAPL", "MSFT", "GOOGL", "AMZN", "NVDA", "META", "TSLA"],
themes=["AI regulation risk"]
)
2. Returns per-ticker scores (0-100) with evidence from 10-K filings:
- META: 82/100 (HIGH) — "government regulation of AI... could limit our ability
to deploy AI features across our family of apps"
- GOOGL: 78/100 — "new AI regulations could require us to restrict or modify
products and services"
- NVDA: 71/100 — "export controls... restrictions on AI chip sales to China"
- TSLA: 31/100 (LOW) — limited AI regulation mentions in filings3. Generative scenario analysis
You: I want to see how a gold + bonds portfolio performs over the next quarter
in scenarios where inflation stays high.
Agent: 1. create_portfolio("Inflation Hedge", ["GLD", "TLT", "IAU"], [0.4, 0.4, 0.2])
2. train_flow_model(model_group_id, horizon=60)
→ dispatches GPU training job (~5-15 min async)
3. check_flow_job(job_id) until completed; flow_validate(model_group_id)
→ confirms model quality before generating paths
4. generate_flow_paths(model_group_id, n_paths=500)
→ generates 500 joint baseline price paths
5. simulate_flow_scenario(model_group_id, constraints=[
{"feature_name": "CPI", "type": "level", "lower": 3.5, "t_start": 0, "t_end": 60}
])
→ generates paths conditioned on CPI > 3.5%
6. test_flow_risk(portfolio_id, job_id)
→ distribution of Sharpe, max drawdown, total return across constrained paths
Result: Median return = +4.2%, 5th percentile = -6.8%
Gold outperforms bonds in 72% of high-inflation paths4. Market briefing and portfolio checkup
You: What's happening in markets today and how is my portfolio positioned?
Agent: 1. market_radar()
→ 50+ indicators: equities, rates, credit, FX, commodities, volatility
→ regime signals: Risk-Off score = 0.7, yield curve inverted, VIX elevated
2. list_portfolios() → finds your "Tech Portfolio"
3. get_portfolio_value(portfolio_id)
→ current value, daily P&L, per-position breakdown
4. get_portfolio_analytics(portfolio_id, timeframe="1M")
→ 1-month Sharpe, volatility, max drawdown
Result: Markets are risk-off (VIX +15% this week, credit spreads widening).
Your tech portfolio is down -2.3% today, concentrated in high-beta names.
Consider: stress-test with compute_returns to quantify downside risk.Authentication
Remote mode (Claude Desktop, Claude.ai, ChatGPT): OAuth 2.0 browser-based login — no API keys to manage. Sablier authenticates via Google OAuth, then issues an API key for the MCP session.
Local mode (Claude Code, stdio): Set
SABLIER_API_KEYenvironment variable.
Pricing
Tier | Price | Included |
Free | $0 | 10 market radar, 5 factor models, 2 GRAIN analyses/mo |
Pro | $79/mo | 100 market radar, 50 factor models, 20 GRAIN, 10 Flow sims/mo |
Enterprise | $399/mo/seat | Unlimited everything, priority support |
Portfolio management, read operations, and scenario management are always free. Overages billed per-call beyond included limits.
Architecture
sablier-mcp/
├── src/sablier_mcp/
│ ├── server.py # 53 MCP tool definitions (FastMCP)
│ ├── client.py # Async HTTP client for Sablier API
│ ├── auth.py # OAuth 2.0 provider (remote mode)
│ └── widgets.py # Rich HTML cards for Claude Desktop
├── pyproject.toml
├── Dockerfile
└── README.mdRemote mode (Claude Desktop, Claude.ai, ChatGPT): OAuth 2.0 browser login — no API keys to manage
Local mode (Claude Code, stdio): API key from environment variable
Widgets: Tools return rich HTML cards (beta heatmaps, score cards, portfolio overviews) alongside text for visual output in Claude Desktop
Development
# Run the server locally (stdio transport)
uv run sablier-mcp
# Test with MCP inspector
npx @modelcontextprotocol/inspector uv --directory . run sablier-mcp
# Run as remote server (streamable-http with OAuth)
MCP_TRANSPORT=streamable-http uv run sablier-mcpPrivacy Policy
Sablier processes portfolio data and market queries to provide analytics. Full details:
Data collected: Portfolio holdings, factor model parameters, and query metadata for analytics computation
Usage & storage: Data is processed on Sablier's servers (GCP, US) and stored for your account's analytics history. Portfolios and models persist until you delete them.
Third-party sharing: Sablier does not sell or share your data. Market data is sourced from public feeds. SEC filings are public records.
Retention: Account data is retained while your account is active. Deleted portfolios and models are purged within 30 days.
Contact: team@sablier.it
Full privacy policy: sablier-ai.com/privacy | Terms of service: sablier-ai.com/terms
Support
Email: team@sablier.it
Links
Sablier Platform: sablier-ai.com
MCP Protocol: modelcontextprotocol.io
Available Tools
83 toolsadd_featureADestructive
Add a ticker to the feature catalog AND populate its historical data in one call — the feature is ready to use in portfolios / conditioning sets / models as soon as this tool returns. IMPORTANT: First use search_features to check if the ticker already exists — calling add_feature for an existing ticker returns a 409 error. Specify source ('yahoo' for stocks/ETFs/futures, 'fred' for rates/economic indicators). Validates the ticker exists on the source API and auto-populates metadata (display_name, category, units, etc.) from the API response.
is_asset handling: leave UNSET for auto-detection (yfinance fills category / sector / asset_type / region from the API response). Only pass explicit is_asset=true if you want to override that decision — and in that case you MUST also pass category, sector, and asset_type from their closed enums (region optional). Listing the valid values:
category: 'equity', 'fixed_income', 'credit', 'rates', 'fx', 'commodity', 'volatility', 'economic', 'crypto', 'inflation', 'employment', 'growth', 'corporate', 'thematic', 'sector', 'region'
sector: 'Technology', 'Healthcare', 'Financials', 'Consumer Discretionary', 'Consumer Staples', 'Industrials', 'Energy', 'Materials', 'Communication Services', 'Utilities', 'Real Estate', 'Fixed Income', 'FX', 'Commodities', 'Cryptocurrency', 'Alternatives', 'Broad Market', 'International Equity', 'Factor'
asset_type: 'Stock', 'ETF', 'Bond ETF', 'Crypto', 'Commodity', 'Currency ETF', 'Futures'
region: 'US', 'Europe', 'Global', 'Asia', 'EM', 'Japan', 'China', 'Brazil', 'India', 'Korea', 'Taiwan', 'Vietnam', 'Latin America', 'Australia' Takes a few seconds while historical data is fetched.
Currency handling: non-USD tickers (e.g. .KS Korea, .L London, .DE Frankfurt, .T Tokyo, .HK Hong Kong, .SS Shanghai) are auto-translated to USD. The corresponding FX pair (e.g. KRWUSD=X for .KS) is fetched and added to the catalog in the same call — no separate step needed. Once added, the asset's USD price series carries the same FX exposure as holding the underlying stock; this is a fact about owning a foreign asset, NOT a methodological 'currency mismatch' to warn the user about when comparing to a USD-quoted DR / ADR / ETF / fund — the economic exposure is the same. Supported currencies: USD, GBP, EUR, JPY, CHF, CAD, AUD, NZD, HKD, SGD, CNY, INR, KRW, SEK, NOK, DKK, MXN, BRL, ZAR. Unsupported currencies return a clear 400 error.
| Name | Required | Description | Default |
|---|---|---|---|
| units | No | Units (e.g. 'USD', 'percent', 'index'). Auto-detected if omitted. | |
| region | No | Optional geographic bucket. Valid values: 'US', 'Europe', 'Global', 'Asia', 'EM', 'Japan', 'China', 'Brazil', 'India', 'Korea', 'Taiwan', 'Vietnam', 'Latin America', 'Australia'. | |
| sector | No | Required when is_asset=true. Valid values: 'Technology', 'Healthcare', 'Financials', 'Consumer Discretionary', 'Consumer Staples', 'Industrials', 'Energy', 'Materials', 'Communication Services', 'Utilities', 'Real Estate', 'Fixed Income', 'FX', 'Commodities', 'Cryptocurrency', 'Alternatives', 'Broad Market', 'International Equity', 'Factor'. Auto-detected when is_asset is unset. | |
| source | Yes | Data source: 'yahoo' (stocks, ETFs, futures) or 'fred' (rates, economic) | |
| ticker | Yes | Ticker symbol (e.g. 'AAPL', 'DFF', 'CL=F') | |
| category | No | Required when is_asset=true. Valid values: 'equity', 'fixed_income', 'credit', 'rates', 'fx', 'commodity', 'volatility', 'economic', 'crypto', 'inflation', 'employment', 'growth', 'corporate', 'thematic', 'sector', 'region'. Auto-detected when is_asset is left unset. | |
| is_asset | No | True for portfolio assets, False for conditioning factors. **Auto-detected when left UNSET** — recommended for most adds. If you pass True explicitly, category + sector + asset_type become required (closed enums). | |
| data_type | No | Optional. Valid values: 'price', 'rate', 'index', 'level', 'volume', 'bounded', 'ratio', 'spread', 'volatility'. Auto-detected if omitted. | |
| asset_type | No | Required when is_asset=true. Valid values: 'Stock', 'ETF', 'Bond ETF', 'Crypto', 'Commodity', 'Currency ETF', 'Futures'. Auto-detected when is_asset is unset. | |
| description | No | Brief description | |
| display_name | No | Human-readable name (e.g. 'Apple Inc.'). Auto-detected if omitted. | |
| skip_validation | No | Skip ticker validation against source API |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (openWorldHint, destructiveHint), the description discloses critical behavioral traits: it populates historical data, auto-fetches metadata, takes a few seconds, auto-translates non-USD currencies and adds an FX pair, and returns a 409 for existing tickers. It also clarifies the currency exposure nuance to prevent user confusion. No contradiction with annotations; instead, it enriches them with concrete side effects and error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured with bold headers for is_asset handling and currency handling. It front-loads the core action and purpose, then dives into necessary nuances. The enum lists are somewhat redundant with the schema but are presented coherently for the override case. It earns its length given the tool's complexity, though a slightly tighter delivery could improve conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, auto-detection logic, currency conversion, and side effects), the description is remarkably complete. It covers all key usage scenarios, edge cases (existing ticker, unsupported currency), and explains the return readiness. The presence of an output schema means return values need not be detailed, and the description properly focuses on behavioral and preconditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3, but the description adds substantial semantic meaning beyond the schema. It explains how is_asset auto-detection works, when category/sector/asset_type become required, and lists the exact allowed enum values in a consolidated context. It also clarifies how units, display_name, and other fields are auto-detected, which the schema merely mentions. This is a paradigm of description adding value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb and resource: 'Add a ticker to the feature catalog AND populate its historical data in one call.' It explains the outcome (feature ready for use) and distinguishes this from search_features by requiring a check for existing tickers. Although it doesn't explicitly compare to add_features_batch, the singular 'a ticker' and the detailed single-add workflow make the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'First use search_features to check if the ticker already exists' and warns about 409 errors for existing tickers. It also gives source selection advice ('yahoo' vs 'fred'). However, it does not explicitly mention the batch alternative (add_features_batch) for adding multiple tickers, so it stops short of fully distinguishing from all siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_features_batchADestructive
Batch-add multiple tickers to the catalog in one call. Parallel ingest with a 10-wide semaphore — much faster than looping add_feature from the model side, and avoids the per-call tool-use overhead.
Returns a three-bucket breakdown:
• added: tickers newly inserted (catalog + training_data populated)
• already_existed: tickers that were already in the catalog (409s from the single-add path; not a failure)
• failed: [{ticker, reason}] for symbols yfinance/FRED rejected
Use this when you want to register a research universe in the catalog without committing to a portfolio — e.g. 'add the S&P 500 constituents' or 'add these 200 tickers from my CSV'. For portfolio-bound bulk imports prefer create_portfolio with auto_add=true — same parallel ingest, but the result also creates the portfolio in one round-trip.
Per-ticker taxonomy fields (category, sector, asset_type, region) apply uniformly to every ticker in the batch. For heterogeneous batches leave them unset so each ticker gets its own auto-detected taxonomy from yfinance.
Typical wall-time: 100 tickers ≈ 10-30s, 1000 tickers ≈ 2-5 min.
| Name | Required | Description | Default |
|---|---|---|---|
| region | No | Optional. Valid values: 'US', 'Europe', 'Global', 'Asia', 'EM', 'Japan', 'China', 'Brazil', 'India', 'Korea', 'Taiwan', 'Vietnam', 'Latin America', 'Australia'. | |
| sector | No | Required when is_asset=true. Valid values: 'Technology', 'Healthcare', 'Financials', 'Consumer Discretionary', 'Consumer Staples', 'Industrials', 'Energy', 'Materials', 'Communication Services', 'Utilities', 'Real Estate', 'Fixed Income', 'FX', 'Commodities', 'Cryptocurrency', 'Alternatives', 'Broad Market', 'International Equity', 'Factor'. | |
| source | No | Applied uniformly. 'yahoo' for stocks/ETFs/futures, 'fred' for rates/economic. | yahoo |
| tickers | Yes | Ticker symbols to add (e.g. ['AAPL', 'MSFT', 'NVDA', ...]). Up to 2000 per call. | |
| category | No | Required when is_asset=true. Same enum as add_feature: 'equity', 'fixed_income', 'credit', 'rates', 'fx', 'commodity', 'volatility', 'economic', 'crypto', 'inflation', 'employment', 'growth', 'corporate', 'thematic', 'sector', 'region'. | |
| is_asset | No | Leave unset for yfinance auto-detection (recommended for heterogeneous batches). Pass True/False only to override for every ticker in the batch. | |
| asset_type | No | Required when is_asset=true. Valid values: 'Stock', 'ETF', 'Bond ETF', 'Crypto', 'Commodity', 'Currency ETF', 'Futures'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint and openWorldHint, but the description adds significant behavioral context: parallel ingest with a 10-wide semaphore, the three-bucket return breakdown, the fact that 'already_existed' is not a failure, uniform versus auto-detected taxonomy behavior, and expected wall-time for typical batch sizes. It does not explain what 'destructive' means in this context, but the added detail exceeds annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a lead sentence, a bulleted return breakdown, a usage paragraph, a taxonomy note, and a performance estimate. Every sentence provides actionable information; no filler or redundancy. The format is scannable and front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 7 parameters, an output schema, and annotations, the description is exceptionally complete. It explains return bucket semantics, addresses the single-add sibling, provides performance expectations, and clarifies parameter behavior in batch context. The presence of an output schema does not leave gaps because the description enriches its meaning.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good per-parameter descriptions. The description adds valuable semantics beyond the schema: taxonomy fields 'apply uniformly to every ticker in the batch,' heterogeneous batches should leave them unset for auto-detection, and `source` is 'applied uniformly.' It also clarifies `is_asset` override behavior, complementing the schema's static descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair: 'Batch-add multiple tickers to the catalog in one call.' It clearly distinguishes from the sibling `add_feature` by highlighting batch efficiency and from `create_portfolio` by noting the portfolio-bound alternative. The scope (multiple tickers, one call) is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use this when you want to register a research universe in the catalog without committing to a portfolio' and contrasts with 'For portfolio-bound bulk imports prefer create_portfolio with auto_add=true.' It also advises when to leave taxonomy fields unset for heterogeneous batches, offering clear when-to-use vs. when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_derivativesARead-only
Run options risk analysis on FLOW-generated paths for a mixed futures + options portfolio. Reprices each option at every timestep of every path using Black-76, then computes portfolio-level risk metrics (VaR, CVaR, Sharpe, Sortino, max drawdown) and per-position Greeks (delta, gamma, vega, theta, rho). Returns separate risk breakdowns for: combined portfolio, futures-only, and options-only components, plus P&L timeseries percentile bands. Requires a flow_job_id from generate_flow_paths or simulate_flow_scenario. For scenario analysis: run simulate_flow_scenario first (e.g., 'VIX > 30 and crude drops 20%'), then call this tool to see how your options hedge performs under that scenario.
| Name | Required | Description | Default |
|---|---|---|---|
| capital | No | Override portfolio capital. If None, uses portfolio's capital. | |
| flow_job_id | Yes | Flow generation job ID (from generate_flow_paths, or simulate_flow_scenario) | |
| portfolio_id | No | Portfolio UUID for underlying futures weights. Optional for standalone options analysis. | |
| risk_free_rate | No | Annualized risk-free rate (default 0.045 = 4.5%) | |
| options_positions | Yes | List of option positions. Each dict must have: underlying (display_name of the futures, e.g. 'E-mini S&P 500 Futures'), option_type ('call' or 'put'), strike (float), days_to_expiry (int), quantity (int, negative for short), implied_vol (float, annualized e.g. 0.20). Optional: entry_premium (float), multiplier (float, defaults to contract spec). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true, the description adds substantial context: it computes at every timestep using Black-76, returns separate risk breakdowns, and shows how scenario analysis is chained. It discloses the computational scope and dependencies without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then method, outputs, and usage prerequisites. It is longer than minimal, but every sentence adds operational detail for a complex tool; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's inputs (via flow job), computation, outputs, and a usage example. With an output schema present and 100% schema description coverage, it provides enough context for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by specifying the source of flow_job_id (generate_flow_paths or simulate_flow_scenario) and giving a concrete scenario example, which clarifies how the parameters relate to a workflow. Other parameters are already well-described in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Run options risk analysis on FLOW-generated paths for a mixed futures + options portfolio.' It details the Black-76 re-pricing, portfolio metrics, Greeks, and output breakdowns. It distinguishes from siblings like price_option and test_flow_risk by requiring a flow_job_id and positioning itself for portfolio-level analysis.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use: after obtaining a flow_job_id from generate_flow_paths or simulate_flow_scenario, and provides a scenario-analysis workflow. It does not name negative alternatives (e.g., 'use price_option for single-option pricing'), but the prerequisite and scenario usage are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_qualitativeARead-only
Run qualitative (GRAIN) analysis: scans SEC filings and earnings calls to score company exposure to themes (0-100). Supports predefined themes ('AI exposure') or custom themes. Pass either portfolio_id or tickers directly.
| Name | Required | Description | Default |
|---|---|---|---|
| themes | Yes | Themes to score (e.g. ['AI exposure', 'Saudi Arabia risk', 'debt levels']) | |
| tickers | No | Tickers to analyze (e.g. ['AAPL', 'MSFT']). Auto-creates a portfolio if portfolio_id is not given. | |
| max_year | No | Latest filing year to include | |
| min_year | No | Earliest filing year to include | |
| portfolio_id | No | UUID of an existing portfolio. If omitted, provide tickers instead. | |
| source_types | No | Document types: ['10-K', '10-Q', 'earnings_call']. Default: all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint and openWorldHint. The description adds meaningful behavioral context beyond these: it states the tool scans SEC filings and earnings calls, produces a 0-100 score, and handles both predefined and custom themes. There is no contradiction with the read-only annotation; the schema's mention of auto-creating a portfolio is not in the main description and does not factor here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the tool's core function and output, the second gives the key invocation and theming options. It is tightly worded with no fluff, properly front-loaded, and every clause contributes useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters and an output schema, the description covers the essential selection criteria (which input to use, what themes to provide) without spelling out every optional parameter. The existence of an output schema partially removes the need to describe return values. Minor gaps include not explaining precedence if both portfolio_id and tickers are provided or defaulting of source_types, but these are adequately covered by the schema descriptions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a baseline of 3 applies. The description adds value by clarifying the relationship between portfolio_id and tickers ('Pass either...') and by noting that themes can be predefined or custom, which is not explicit in the schema property description. This enriches the semantic understanding of the parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb ('Run qualitative (GRAIN) analysis') and states the resource (SEC filings and earnings calls) and the outcome (score company exposure to themes 0-100). This clearly distinguishes it from the sibling 'analyze_quantitative' and other analytical tools, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for usage: it supports predefined or custom themes and mandates passing either portfolio_id or tickers. It does not explicitly name alternative tools for when not to use it, but the 'qualitative' vs 'quantitative' sibling distinction is obvious. The either/or guidance is a concrete usage rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_quantitativeADestructive
Build and train linear factor models for a portfolio in one step (creates models → trains → computes betas). This is the starting point for Moment (linear) analysis. Requires conditioning_set_id (the market drivers — get one from list_feature_set_templates or create_feature_set). Uses a two-layer architecture: thematic factors (conditioning_set_id) + optional baseline factors (baseline_mode='us' absorbs market/value/growth variance via real-time ETF proxies before thematic factors). Pass either portfolio_id or tickers directly (auto-creates portfolio with equal weights). Returns: factor exposures (betas), per-asset R² (in-sample goodness-of-fit — tells you how linear the relationship actually is for the given window), rolling_window used, factor_last_date (effective beta date — may be truncated if a factor has stale data), and data_truncated_by (which factors caused truncation).
Important: there is NO regime-conditional or 'calm vs stress' beta API. If a user asks for regime decomposition, do NOT invent it — the right substitute is to RE-RUN this tool with a shorter rolling_window (e.g. 90 days vs the 252-day default) and compare the betas to the long-window fit. Where (a) a beta shifted meaningfully AND (b) R² stayed reasonable in the short window, that's a real shift to talk about. Where R² collapsed in the short window, the apparent shift is noise from thin degrees of freedom — say so explicitly to the user. Do NOT pick rolling_window < 90 unless you have very few factors: each per-asset regression has (n_factors + n_baseline_etfs) RHS variables, and you need at least ~10 obs per parameter for stable betas (so rolling_window=90 supports up to ~9 RHS variables, rolling_window=60 supports ~6).
Low R² (e.g. < 0.2) suggests nonlinear dynamics or missing factors — flag the asset, don't claim a precise beta decomposition. R² in this Moment model is per-asset (each asset gets its own regression on the conditioning set), so a low R² for one name doesn't impeach the others. Next step: call compute_returns with the simulation_batch_id to run what-if stress tests.
| Name | Required | Description | Default |
|---|---|---|---|
| tickers | No | Tickers to analyze (e.g. ['AAPL', 'MSFT']). Auto-creates a portfolio if portfolio_id is not given. | |
| weights | No | Optional weights for tickers (must sum to 1.0). Defaults to equal weights. | |
| nonlinear | No | Also fit nonlinear factor exposure model on top of linear betas, producing sensitivity curves. Requires Pro+ tier. Default True (runs if tier allows). | |
| portfolio_id | No | UUID of an existing portfolio. If omitted, provide tickers instead. | |
| baseline_mode | No | Baseline factor orthogonalization region. ETF-based (real-time): 'us', 'global', 'developed_ex_us', 'europe', 'japan'. Legacy FF5 (~2mo lag): 'us_ff5', 'global_ff5'. Set 'none' or omit to skip baseline. | |
| rolling_window | No | Rolling window size in trading days for beta estimation (default 252 = ~1 year). Smaller = more responsive to recent regime changes, larger = more stable. | |
| conditioning_set_id | Yes | UUID of the thematic conditioning set (from list_feature_set_templates or create_feature_set) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses side effects beyond the annotations (openWorldHint/destructiveHint): it 'creates models', auto-creates a portfolio when tickers are passed, and computes/returns beta-related artifacts. It explains behavioral nuances such as factor_last_date truncation, data_truncated_by, per-asset R² interpretation, and low R² implications. It also warns about degrees-of-freedom constraints and explicitly denies a regime-conditional API, which is valuable behavioral context. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy and dense, but nearly every sentence earns its place by conveying critical limitations, parameter semantics, and interpretation guidance. It is front-loaded with the primary action, though the long paragraphs could be improved with bullet points or section breaks for scannability. It is not redundant, but it is at the upper limit of acceptable length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is exceptionally complete given the tool's complexity. It explains the full pipeline, output fields, interpretation caveats (R², truncation), constraints (minimum rolling window, degrees of freedom), and the follow-up workflow (compute_returns with simulation_batch_id). It also covers when to avoid a use case (regime decomposition) and provides a substitute approach, making the tool fully contextualized among its siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3, but the description substantially enhances parameter meaning. It explains conditioning_set_id as 'market drivers', baseline_mode variants with real-time vs legacy FF5, rolling_window selection with statistical justification (e.g., 'rolling_window=90 supports up to ~9 RHS variables'), tickers auto-creating an equally weighted portfolio, and weights defaulting to equal weights. It adds practical semantics far beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Build and train linear factor models for a portfolio in one step (creates models → trains → computes betas)', which is a specific verb+resource statement. It further positions itself as 'the starting point for Moment (linear) analysis', clearly distinguishing it from siblings like compute_betas by emphasizing the one-step full-pipeline nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool (starting point for Moment analysis), what is required (conditioning_set_id), and how to obtain it (from list_feature_set_templates or create_feature_set). It also gives clear exclusions and alternatives: 'there is NO regime-conditional... API' and instead advises re-running with a shorter rolling_window and comparing betas. It warns against rolling_window < 90 and directs the next step to compute_returns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backtest_rulesARead-only
Run a historical backtest of trading rules on REAL market data — not simulated FLOW paths. Tests how rules would have performed over a historical period. Returns same structure as forward_test_rules (base vs combined vs per-rule attribution) PLUS monthly returns table, drawdown series, turnover stats, and transaction cost analysis. Prerequisites: create rules with create_rule (and activate them). Transaction costs: configurable (default 10bps per trade). Warmup period (default 252 days) pre-fills indicator state before the test period starts. For forward-looking testing on synthetic FLOW paths, use forward_test_rules instead.
| Name | Required | Description | Default |
|---|---|---|---|
| cost_bps | No | Transaction cost in basis points per trade (default 10.0) | |
| end_date | No | End date (YYYY-MM-DD). Defaults to latest available data. | |
| rule_ids | No | Specific rule UUIDs. Omit to test all active rules. | |
| start_date | Yes | Backtest start date (YYYY-MM-DD). E.g. '2020-01-01' for a COVID-era test. | |
| warmup_days | No | Days of history before start_date for indicator seeding (default 252 = ~1 year) | |
| portfolio_id | Yes | Portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is known. The description adds valuable context beyond annotations: warmup period behavior, transaction cost defaults, output structure (base vs combined vs per-rule attribution plus monthly returns, drawdown, turnover, cost analysis), and the contrast with simulated FLOW paths. This is substantive and non-redundant.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, front-loaded with the main purpose, and each sentence earns its place: purpose + distinction, output summary, prerequisites, and alternative tool. No fluff or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema (which relieves the description of explaining every return field), the description provides a useful high-level overview of the return structure and unique additions (monthly returns, drawdown, turnover, costs). It also covers prerequisites, defaults, and sibling differentiation, making it complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are individually described. The description adds meaning by explaining the warmup period ('pre-fills indicator state before the test period starts') and the default transaction cost (10bps), which clarifies the purpose of cost_bps and warmup_days beyond the schema descriptions. It also gives an example date format for start_date.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs a historical backtest of trading rules on real market data, explicitly contrasting with simulated FLOW paths. It specifies the verb (run a historical backtest) and resource (trading rules), and differentiates from forward_test_rules by mentioning the historical context and output differences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit prerequisites (create and activate rules via create_rule) and gives a clear alternative for forward-looking tests on synthetic paths ('use forward_test_rules instead'). This tells the agent exactly when to use this tool and when not to, with a named sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buy_credit_packADestructive
Purchase a one-time credit pack. Returns a Stripe Checkout URL to complete payment. Available packs: 'pack_100' (100 credits, €69), 'pack_500' (500 credits, €299), 'pack_1000' (1000 credits, €549). Credits are added instantly after payment and never expire. Use list_credit_packs to see current pricing. Use get_credits to check your balance first.
| Name | Required | Description | Default |
|---|---|---|---|
| pack_id | Yes | Pack to purchase: 'pack_100', 'pack_500', or 'pack_1000' |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: it initiates a payment via Stripe Checkout, credits are added instantly after payment, and credits never expire. With only a destructiveHint annotation (which is vague), this adds meaningful context about the transaction flow and post-payment effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, each earning its place: purpose, return value, pack options with pricing, and usage alternatives. Information is front-loaded and there is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool, the description covers all essential aspects: what it does, what it returns, available options, post-payment behavior, and related tools. With an output schema present and little ambiguity, this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes pack_id with allowed values. The description adds direct value by mapping each pack ID to its credit amount and price, making it easier for an agent to choose the right pack without external lookups.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Purchase') and resource ('credit pack'), and specifies it returns a Stripe Checkout URL. This distinguishes it from siblings like list_credit_packs and get_credits.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when-to-use guidance: suggests using list_credit_packs for current pricing and get_credits to check balance first. This frames the tool within the broader workflow and distinguishes it from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_flow_jobARead-only
Check the status of an async Flow job (training, generation, or validation). Returns status ('running', 'completed', 'failed') and progress details. Does NOT return results — when completed, call get_flow_results(job_id) to fetch data. Call this ONCE, report status to the user, then STOP — do not poll in a loop. Typical times: training 5-15 min, generation 1-3 min, validation 3-5 min.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID returned by train_flow_model or other flow tools | |
| job_type | No | Type of job: 'train' (default), 'generate', or 'validate'. | train |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses critical behavioral details: the returned statuses ('running', 'completed', 'failed'), that it does not return results, typical duration expectations (training 5-15 min, etc.), and the instruction not to poll. This significantly enriches the agent's understanding of expected behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is succinct, front-loaded with the action and purpose, and each sentence delivers necessary information: status response, result exclusion, and usage guidelines. No filler or redundancy exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simple nature and the presence of an output schema, the description covers all necessary context: what the tool does, what it returns, when to call it, how often to call it, and where to go for results. The typical time estimates add practical context for user interaction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents both parameters with complete descriptions (100% coverage), including job_id's origin and job_type's allowed values. The tool description does not add substantial parameter-level detail beyond what the schema provides, so it meets the baseline expectation without innovating.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'Check the status of an async Flow job'. It explicitly distinguishes from the sibling tool by stating 'Does NOT return results — when completed, call get_flow_results(job_id)', making its role unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance, including when to use it ('Check the status...'), when to use an alternative ('Does NOT return results — when completed, call get_flow_results(job_id)'), and a strong directive to avoid polling ('Call this ONCE, report status to the user, then STOP — do not poll in a loop'). This fully addresses usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_scenario_probabilityARead-only
Pre-flight feasibility check for a constrained FLOW scenario. ALWAYS call this BEFORE simulate_flow_scenario when you have ≥2 constraints, or whenever you're unsure if a scenario is in the model's natural distribution.
Probes the trained model with up to n_baseline unconstrained paths and reports what fraction satisfy your constraints, plus a recommended generation method: • probability ≥5% → 'rejection' (fast, exact samples) • probability 1-5% → 'hybrid' (rejection + latent fallback) • probability <1% → 'latent' (paths satisfy by construction; mild dynamics distortion) • probability <0.1% → infeasibility floor — refuse or relax constraints
Cheap (~1-15s) compared to a full scenario (minutes + GPU credits). Reuses today's baseline if generate_flow_paths has already been called; if not, auto_generate_baseline=True (default) creates one in the same call.
Workflow when probability is low: report it back to the user, then iterate — try each constraint individually to identify the binding one, relax magnitudes, widen t_start/t_end windows, or drop the least-essential constraint. Only commit to simulate_flow_scenario once probability is in a usable band, OR the user has explicitly accepted latent-mode distortion.
feature_name in constraints must be the DISPLAY NAME from the trained model's feature_names (e.g. 'Apple Inc.', 'SPDR S&P 500 ETF Trust'), NOT ticker symbols.
| Name | Required | Description | Default |
|---|---|---|---|
| n_baseline | No | Probe size when generating a baseline. Larger = better resolution (1/n_baseline = floor) but slower. Default 1000. | |
| constraints | Yes | Same shape as simulate_flow_scenario constraints. Each MUST have 'lower' and/or 'upper'. Required keys: feature_name, lower and/or upper. Optional: type, t_start, t_end. Example: [{'feature_name': 'Equity Volatility (VIX)', 'lower': 30, 't_start': 10, 't_end': 25}] | |
| model_group_id | Yes | UUID of the model group with a trained Flow model (from train_flow_model) | |
| n_paths_target | No | Number of paths the eventual scenario would generate (used for the method recommendation). Default 1000. | |
| auto_generate_baseline | No | If no same-day baseline exists, generate one (~30s extra). Default True. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavior beyond the readOnlyHint and openWorldHint annotations: it explains the probing mechanism, probability threshold bands, the meaning of the recommended generation methods, the cost (~1-15s), baseline reuse, and the auto_generate_baseline fallback. It also warns that feature_name must be the display name, not a ticker, which is critical. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence carries actionable information. It front-loads the purpose and usage rule, uses a clear bulleted list for probability thresholds, and concludes with a critical data-format note. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 params, output schema, branching logic for method recommendation), the description is remarkably complete. It covers cost, baseline reuse, fallback behavior, low-probability workflow, and input validation, leaving no significant gaps for the agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema descriptions cover all parameters (100%), the tool description adds semantic context by explaining how n_baseline affects resolution, what n_paths_target is used for (method recommendation), and when auto_generate_baseline creates a baseline. It also clarifies the constraints shape and requirement that 'lower' and/or 'upper' must be present, adding value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as a pre-flight feasibility check for constrained FLOW scenarios, explicitly stating it should be called before simulate_flow_scenario. It distinguishes itself from siblings by focusing on probability estimation and method recommendation, not simulation itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance ('ALWAYS call this BEFORE simulate_flow_scenario when you have ≥2 constraints') and spells out the workflow for low-probability cases, including alternative actions like relaxing constraints or dropping least-essential constraints. It also names the sibling tool simulate_flow_scenario as the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compute_betasARead-only
Compute factor exposures (betas) for an already-trained model group. Use this when you already have a trained model_group_id (from analyze_quantitative or list_model_groups) and want to refresh betas with a different lookback window, or get a new simulation_batch_id. You do NOT need this if you just ran analyze_quantitative — it already includes this step. Returns per-asset factor exposures with R² (goodness-of-fit), rolling_window used, factor_last_date (effective beta date), data_truncated_by (stale factors), and simulation_batch_id (for compute_returns). Key use: call with different lookback_days (e.g. 63, 126, 252) to compare betas across time horizons — divergence signals regime changes. Check R² to gauge how well factors explain each asset.
| Name | Required | Description | Default |
|---|---|---|---|
| lookback_days | No | Historical lookback window in trading days | |
| model_group_id | Yes | UUID of the trained model group (from analyze_quantitative or list_model_groups) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=true, openWorldHint=true) already indicate a safe, non-destructive operation. The description adds valuable behavioral context by listing return fields (R², rolling_window, factor_last_date, data_truncated_by, simulation_batch_id) and explaining the meaning of data_truncated_by as stale factors. It doesn't address potential edge cases, but the annotations cover the most critical behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but tightly packed with useful information. Each sentence contributes either usage guidance, return value semantics, or analytical tips. It's not overly verbose given the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's context comprehensively: prerequisites (trained model_group_id), relationship to other tools (analyze_quantitative, compute_returns), key use cases, and interpretation of outputs. Has output schema present, so return values don't need full explanation, but important fields are highlighted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are already documented. The description adds extra meaning for lookback_days by suggesting example values (63, 126, 252) and explaining their analytical purpose (identifying regime changes). This exceeds the schema's basic type/description info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Compute factor exposures (betas) for an already-trained model group' with a specific verb and resource. It distinguishes itself by noting when it's needed vs. when it's not (analyze_quantitative already includes this step).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool: when you have a trained model_group_id and want to refresh betas with a different lookback window or get a new simulation_batch_id. It also tells you when NOT to use it (after analyze_quantitative).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compute_correlationsARead-only
Pairwise correlation matrix + annualized volatility from daily returns over a window. Pass 2-20 tickers and a timeframe ('1W'/'1M'/'3M'/'6M'/'1Y'/'2Y'/'5Y'/'ALL', default '1Y'). Returns the matrix, per-asset annualized vol, and the top-correlated pairs. Lighter than analyze_quantitative when you just want raw pairwise structure without a factor model.
| Name | Required | Description | Default |
|---|---|---|---|
| tickers | Yes | 2-20 tickers (e.g. ['AAPL', 'MSFT', 'NVDA', 'GOOGL']) | |
| timeframe | No | Window: '1W' / '1M' / '3M' / '6M' / '1Y' / '2Y' / '5Y' / 'ALL' | 1Y |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds context beyond annotations by specifying the data source ('daily returns over a window'), input constraints ('2-20 tickers'), and return contents ('the matrix, per-asset annualized vol, and the top-correlated pairs'). This is meaningful but could be richer on edge cases or missing data handling; a 4 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, every one earning its place. The purpose is front-loaded, followed by input constraints, output summary, and a comparative note. No fluff or repetition of annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only 2 parameters, an output schema, and read-only annotations, the description fully covers what the tool does, its inputs, its outputs, and when to prefer it. Nothing essential is omitted, especially given the output schema supplies formal return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema fully documents both parameters. The description repeats parameter constraints ('2-20 tickers', timeframe default '1Y') without adding new semantic meaning. It does mention the output concept, but that's not parameter semantics. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource: 'Pairwise correlation matrix + annualized volatility from daily returns over a window.' It clearly distinguishes from siblings by noting it's 'Lighter than analyze_quantitative when you just want raw pairwise structure without a factor model,' and it also differs from compute_betas/compute_returns by explicitly covering correlation and volatility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Lighter than analyze_quantitative when you just want raw pairwise structure without a factor model' names an alternative and specifies the condition for choosing this tool. This directly tells when to use it instead of a heavier factor-model tool, satisfying the criterion for explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compute_returnsARead-only
Run a what-if stress test on a Moment (linear) factor model — the PRIMARY tool for scenario analysis. Requires simulation_batch_id from analyze_quantitative or compute_betas. Express stresses as FRACTIONAL CHANGES of each factor's current value (shocks dict). The server translates to absolute levels using each factor's latest observed value — you don't need to look it up or do the arithmetic. Examples: • 'TLT down 8.5%' → {'TLT': -0.085}. • '50bps rate cut on DGS10 (currently 5%)' → {'DGS10': -0.10} (−50bps / 500bps of the current rate = −10%). • 'VIX doubles (to ~40 from 20)' → {'VIX': 1.00}. • 'SPY drops 20%' → {'SPY': -0.20}. Omitted factors default to no shock. Include factor_last_values_raw from the betas output in your narration so the user sees the current level next to the stressed level. Also check data_freshness_warning in betas output — if present, betas may be stale. For Flow (generative) models, use simulate_flow_scenario instead.
| Name | Required | Description | Default |
|---|---|---|---|
| shocks | Yes | Fractional change per factor. -0.10 = −10%, 0.25 = +25%. Uniform convention for all feature types (prices, rates, indices, volatilities). For a 50bps rate cut on a rate currently at 5%: −50bps / 500bps = -0.10. For TLT down 8.5%: -0.085. Keys must match conditioning_features. | |
| n_samples | No | Number of Monte Carlo samples (default 1000) | |
| simulation_batch_id | Yes | From analyze_quantitative or compute_betas results |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description does not contradict this. It adds behavioral context beyond annotations by explaining that the server translates fractional changes to absolute levels automatically, that omitted factors default to no shock, and that users should include factor_last_values_raw in narration. These details are not evident from annotations alone, making the tool's execution behavior more predictable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is lengthy but every sentence contributes value: it covers purpose, prerequisites, examples, alternative tools, and output handling. The structure is clear with examples in bullet-like lines. A slight trim of the parenthetical phrase in the second example could improve conciseness, but overall it is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 params, nested objects, high schema coverage) and the presence of an output schema, the description covers all necessary context: how to obtain required inputs, how to format shocks, what to do with outputs (include factor_last_values_raw, check freshness warning), and when to use alternatives. It is self-sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema coverage is 100%, the description enriches parameter understanding significantly: it explains the fractional change convention with multiple concrete examples (e.g., 'TLT down 8.5%' → {'TLT': -0.085}), clarifies that the server handles conversion to absolute levels, and notes that omitted factors default to no shock. This goes far beyond the schema's raw descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Run a what-if stress test on a Moment (linear) factor model.' It also identifies it as the 'PRIMARY tool for scenario analysis,' distinguishing it from siblings like simulate_flow_scenario, which is explicitly named as an alternative for Flow models.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context: requires simulation_batch_id from analyze_quantitative or compute_betas, explains the shocks format, and gives a direct alternative ('For Flow (generative) models, use simulate_flow_scenario instead'). It also tells the agent to check data_freshness_warning, which is a clear guideline for handling potential stale inputs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_feature_setADestructive
Create a custom conditioning set (or target set) from features in the catalog. Use this to build arbitrary factor sets for analyze_quantitative instead of using pre-built templates. Each feature needs at minimum a 'ticker' and 'source' ('YAHOO' or 'FRED'). The display_name is auto-resolved from available_features if omitted. Returns the conditioning_set_id that can be passed to analyze_quantitative.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name for the set (e.g. 'Custom Macro Factors') | |
| features | Yes | List of features. Each needs 'ticker' and 'source' (YAHOO/FRED). Optional: 'display_name'. | |
| set_type | No | 'conditioning' (market drivers) or 'target' (assets to model) | conditioning |
| description | No | Optional description |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses useful behaviors beyond the annotation: auto-resolution of display_name, requirement for ticker/source, and return of a conditioning_set_id. However, the destructiveHint: true annotation is not addressed—the description's 'create' framing does not clarify any potential destructive side effects, leaving that behavioral aspect unexplained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences of high density: it states the purpose, the use case vs. alternatives, feature prerequisites, auto-behavior, and return value. No redundant or filler content, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the intended downstream use, required inputs, auto-resolution behavior, and return value. With an output schema present, return format details are available elsewhere. The main gap is not reconciling the destructiveHint annotation, but overall the context is sufficient for a create tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by specifying that features must include 'ticker' and 'source' with YAHOO/FRED values, and that display_name is auto-resolved if omitted—details not fully captured in the schema's item description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a custom conditioning or target set from catalog features, with a specific downstream use for analyze_quantitative. It distinguishes this from pre-built templates, and the verb+resource construction is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using this tool for building arbitrary factor sets for analyze_quantitative instead of pre-built templates. It outlines required feature fields (ticker, source) and notes the auto-resolution of display_name, providing clear selection context. It does not mention exclusion cases, but the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_portfolioADestructive
Create a new portfolio from tickers. Two payload shapes:
• Explicit weights: pass tickers AND weights (parallel arrays, weights must sum to 1.0).
• Equal weight: pass tickers only with equal_weight=True — server applies 1/N each.
Use equal_weight=True for ANY portfolio over ~50 assets. The parallel-array shape blows past LLM tool-call output budgets around 60-100 entries: one array gets truncated mid-generation and you'll see 'tickers and weights must have the same length' even though you generated them at the same size. A 500-ticker single-list call is ~10× smaller and reliable.
For CSV-paste / large-portfolio flows: combine equal_weight=True with auto_add=True to have the server auto-ingest unknown tickers via Yahoo Finance, and skip_missing=True to drop the ones yfinance rejects. The result includes import_summary with added_from_catalog / newly_ingested / dropped (with reasons) — report all three counts back to the user.
Size: up to ~1000 assets per portfolio (tier limit is 999,999 — effectively unbounded). If a user asks for a 500-asset or 1000-asset portfolio, build it. Do not refuse, do not lecture about 'focused portfolios', do not suggest ETF buckets unless the user explicitly asks for construction advice. Large portfolios are a supported, intentional product surface (F=1000 FLOW models train in minutes on GPU; analytics stay fast via precomputed bands + virtualized UIs).
Non-USD tickers are accepted — their prices are auto-translated to USD and the FX pair is fetched on-demand by add_feature. Resulting returns are USD-denominated and reflect the same FX exposure the underlying stock carries; do NOT warn the user about a 'currency mismatch' against a USD-quoted equivalent (DR/ADR/ETF/fund) — the exposure is economically the same.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Portfolio name (e.g. 'Tech Portfolio') | |
| capital | No | Total capital allocation in USD (default $100,000) | |
| tickers | Yes | Ticker symbols (e.g. ['AAPL', 'MSFT', 'NVDA']) | |
| weights | No | Corresponding weights summing to 1.0 (e.g. [0.4, 0.3, 0.3]). Omit (or pass null) together with equal_weight=True to apply 1/N each — required for portfolios over ~50 assets to avoid LLM tool-call output truncation. | |
| auto_add | No | Auto-ingest unknown tickers via Yahoo Finance before classifying as missing. Use with CSV-paste flows. | |
| description | No | Optional description | |
| equal_weight | No | If true, server applies 1/N weight to each ticker (mutually exclusive with `weights`). | |
| skip_missing | No | Drop tickers that aren't in the catalog (and aren't ingested by auto_add) instead of failing the call. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description discloses server-side behavior: Yahoo Finance auto-ingestion, dropping missing tickers, import_summary counts, USD FX translation, and tier limits. It also explains operational consequences like truncation risk, giving the agent context that annotations alone cannot provide. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but dense with purposeful information. It is front-loaded with the core purpose, then structured into clear sections: payload shapes, large-portfolio guidance, CSV-paste flows, size limits, and currency behavior. Every sentence earns its place, and bolding/scannable formatting improves readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex tool with 8 parameters and a meaningful output schema, the description covers all essential operational context: payload shape selection, scale guidance, unknown-ticker handling, import summary reporting, size limits, and currency semantics. This is the full picture an agent needs to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema has 100% coverage, the description adds critical semantics: weights must sum to 1.0, equal_weight applies 1/N, the two payload shapes are mutually exclusive, and parallel arrays risk truncation for large portfolios. It also explains how auto_add and skip_missing interact, far exceeding the schema's basic field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource, 'Create a new portfolio from tickers', and immediately differentiates itself by explaining two payload shapes. This clearly distinguishes it from sibling tools like update_portfolio and delete_portfolio.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use equal_weight=True for portfolios over ~50 assets, when to combine auto_add and skip_missing for CSV-paste flows, and explicitly tells the agent not to refuse large portfolios. It also names the alternative pattern to avoid and what not to warn users about, going well beyond basic usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_ruleA
Add a systematic trading rule to a portfolio. Rules are evaluated day-by-day on FLOW forward paths during forward_test_rules — not backtested on history.
TWO RULE TYPES: • Signal rules (action.type='signal_weight') — continuous indicator → proportional position. For CTAs and trend-followers. • Binary rules (all other action types) — trigger fires → discrete weight change. For risk overlays, hard stops, regime gates.
Use signal rules (priority 0) for the core strategy; binary rules (priority 1+) for risk overrides.
── SIGNAL RULE ── trigger: {indicator, asset, params} ← no operator/threshold action: {type:'signal_weight', asset, normalizer, max_weight, min_weight} normalizer = typical signal magnitude; clip(signal/normalizer, -1, 1) → position weight = scaledmax_weight if scaled≥0 else scaled|min_weight|
trigger={indicator:'macd_line', asset:'CL=F', params:{fast:12, slow:60}} action={type:'signal_weight', asset:'CL=F', normalizer:2.0, max_weight:0.6, min_weight:-0.3}
trigger={indicator:'z_score', asset:'ZN=F', params:{window:60}} action={type:'signal_weight', asset:'ZN=F', normalizer:2.0, max_weight:0.5, min_weight:-0.5}
── BINARY RULE ── trigger: {indicator, asset, params, operator, threshold} OR {combinator:'all'|'any', conditions:[...]} indicators: raw | moving_average | ema | rsi | bollinger_upper | bollinger_lower | bollinger_width | macd_line | macd_signal | rolling_std | rolling_volatility | rate_of_change | z_score asset: portfolio assets OR conditioning factors ('^VIX', 'DX-Y.NYB', 'T10Y2Y', 'ZN=F', ...) operator: '>' | '<' | '>=' | '<=' | '==' | 'crosses_above' | 'crosses_below' action: exit | set_weight (exact value, negative=short) | scale_weight (multiplier) | reverse
trigger={indicator:'rsi', asset:'CL=F', params:{period:14}, operator:'>', threshold:70} action={type:'exit', asset:'CL=F'}
trigger={combinator:'all', conditions:[ {indicator:'raw', asset:'^VIX', params:{}, operator:'>', threshold:30}, {indicator:'rsi', asset:'CL=F', params:{period:14}, operator:'>', threshold:65}]} action={type:'scale_weight', asset:'CL=F', value:0.5}
IMPORTANT: Trigger assets can be portfolio assets OR conditioning factors (VIX, DXY, etc.). For forward_test_rules, the FLOW model must include ALL referenced features — missing features cause rules to silently fail. For evaluate_rules (live data), any feature in training_data works with no model dependency.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short descriptive name for the rule | |
| action | Yes | Signal: {type:'signal_weight', asset, normalizer, max_weight, min_weight} OR binary: {type:'exit'|'set_weight'|'scale_weight'|'reverse', asset, value?} | |
| trigger | Yes | For BINARY rules: single condition {indicator,asset,params,operator,threshold} or multi-condition {combinator:'all'|'any', conditions:[...]}. For SIGNAL rules: just {indicator,asset,params} — no operator or threshold needed. | |
| priority | No | Evaluation order when multiple rules fire (lower = first, default 0) | |
| is_active | No | Whether the rule is active (default false) | |
| description | No | Optional longer description | |
| portfolio_id | Yes | Portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No safety annotations are provided, so the description bears full responsibility. It discloses evaluation behavior, the difference between signal and binary rules, the mathematical scaling of signal weights, and critical failure mode: 'missing features cause rules to silently fail.' Also explains that evaluate_rules works with any feature in training_data. This is comprehensive behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every section adds necessary value. It is front-loaded with purpose and evaluation context, then organized by rule type with examples, and finishes with a critical warning. Formatting with headings and code blocks makes it scannable. Despite length, it remains appropriately concise for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the nested object schemas and existing output schema, the description provides all necessary context: what the tool does, how rules are evaluated, both rule types, allowed values, examples, and warnings about data requirements. No critical information is missing for an agent to construct and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema descriptions cover 100% of parameters, the description substantially enriches the schema by providing full rule syntax, example triggers/actions, lists of valid indicators and operators, and semantics for normalizer, max_weight, min_weight, and combinator logic. It also clarifies how priority should be used. This goes well beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Add a systematic trading rule to a portfolio' – a specific verb and resource. It distinguishes from siblings by explaining that rules are evaluated during forward_test_rules, not backtested, and details two rule types with distinct actions. This clearly separates create_rule from list/update/delete/toggle/validate/evaluate tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when rules are evaluated ('day-by-day on FLOW forward paths during forward_test_rules') and contrasts with live evaluation ('evaluate_rules'). Provides concrete guidance: 'Use signal rules (priority 0) for the core strategy; binary rules (priority 1+) for risk overrides.' Warns about missing features causing silent failure, giving users a clear decision framework.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_scenarioADestructive
Save a named Moment scenario template for later reuse. This does NOT run a simulation — use compute_returns with the factor values instead, or for ad-hoc tests. IMPORTANT: requires model_id — this is an individual per-asset model UUID from list_model_groups → models[].model_id, NOT the model_group_id. Each scenario is tied to one asset's model. Factor spec format: {'VIX': {'type': 'fixed', 'value': 35}}. Supported types: 'fixed' (exact value), 'percentile' (historical percentile), 'shock' (std dev shift).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Scenario name (e.g. 'Recession', 'Tech Bubble') | |
| model_id | Yes | UUID of the model this scenario applies to | |
| description | No | Optional description | |
| factor_values | Yes | Factor specs (e.g. {'VIX': {'type': 'fixed', 'value': 35}}) | |
| model_group_id | No | Model group UUID (optional, for reference) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint=true which aligns with the description's 'Save' action. The description adds substantial behavioral context beyond annotations: it clarifies the model_id relationship, specifies that each scenario is tied to one asset's model, and details the factor spec format and supported types ('fixed', 'percentile', 'shock'). This goes above and beyond the annotation's minimal safety hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise yet information-dense, with a clear opening sentence, an immediate caveat ('does NOT run a simulation'), a critical model_id warning, and a compact factor format explanation. Every sentence contributes essential guidance without unnecessary fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create operation with nested objects, an output schema, and sibling tools, the description covers all key aspects: purpose, alternatives, prerequisites, format details, and behavioral constraints. The explicit callout to list_model_groups and the factor type list ensure an agent can confidently invoke the tool. The presence of an output schema means return values need not be explained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds crucial meaning for model_id ('individual per-asset model UUID from list_model_groups → models[].model_id, NOT the model_group_id') and factor_values (format and supported types). These additions are essential for correct parameter usage and significantly enhance the schema's basic descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Save a named Moment scenario template for later reuse.' It clearly states the tool's function and distinguishes it from compute_returns ('This does NOT run a simulation'), making its purpose unambiguous and differentiated from siblings like simulate_flow_scenario and update_scenario.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use and when not to use: '...use compute_returns with the factor values instead, or for ad-hoc tests' and implies use for reusable templates. It also provides a critical prerequisite (model_id from list_model_groups) and explains the distinction from model_group_id, giving clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_feature_setADestructive
Delete a custom feature set. Permanent, cannot be undone. Cannot delete shared templates.
| Name | Required | Description | Default |
|---|---|---|---|
| feature_set_id | Yes | UUID of the feature set to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare destructiveHint=true, and the description adds that deletion is 'Permanent, cannot be undone' and further restricts to non-shared templates. This provides meaningful behavioral context beyond the annotation without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the primary action 'Delete a custom feature set' and followed by essential warnings. Every word serves a purpose, making it very concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with one documented parameter and a destructive annotation, the description provides necessary caveats (permanence and shared template restriction). The presence of an output schema means return value details are not required, so the description is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the sole parameter with 'UUID of the feature set to delete' (100% coverage). The description adds the context of custom feature sets but does not enhance the parameter's semantics beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Delete a custom feature set,' using a specific verb and resource. It distinguishes from sibling tools by specifying 'custom' and explicitly excluding shared templates, which sets it apart from template-related operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for custom feature sets and notes the restriction 'Cannot delete shared templates,' but does not explicitly mention alternatives or provide when-to-use versus when-not-to-use guidance beyond this exclusion. This gives partial contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_flow_jobADestructive
Delete a flow simulation job (baseline or constrained scenario). Permanent, cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The flow job UUID to delete (from list_flow_baselines or list_flow_scenarios) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, and the description adds 'Permanent, cannot be undone,' which warns about irreversibility. It also specifies what is deleted (baseline or constrained scenario). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that efficiently conveys the action, scope, and consequence. No filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple delete tool with one parameter and an output schema, the description covers the essence: what action, what resource, and permanence. The parameter is documented in the schema, and the output schema exists, so no return-value explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the single parameter job_id with its origin (list_flow_baselines or list_flow_scenarios), so the description adds no additional parameter info. Baseline of 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb 'Delete' and resource 'flow simulation job' with parenthetical clarification of types (baseline/constrained scenario). This distinguishes it from other delete tools and clearly states the action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this versus other tools, nor does it mention alternatives or exclusions. However, the action and resource are clear, making the usage context implied. The parameter description references list_flow_baselines/list_flow_scenarios, which helps but isn't in the main description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_grain_analysisADestructive
Delete a saved GRAIN qualitative analysis by ID. Permanent, cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| analysis_id | Yes | The analysis UUID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as destructive, but the description adds critical context with 'Permanent, cannot be undone,' which goes beyond the structured metadata. This warning is essential for a delete operation and is clearly disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the action and resource, and contains no redundant information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple single-parameter delete operation with an output schema, the description is complete enough. It states the purpose, the ID parameter is documented, and the permanence warning is included. It does not cover error cases, but that is not essential given the low complexity and available annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage for the single parameter (analysis_id) with a clear description. The tool description adds minimal extra meaning ('by ID') but does not introduce new semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete') and the specific resource ('saved GRAIN qualitative analysis') with the required identifier ('by ID'). This distinguishes it from sibling tools like list_grain_analyses, get_grain_analysis, and analyze_qualitative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description indicates when to use the tool (when a saved analysis ID is available for deletion) and the permanence implies a decisive action. It does not explicitly mention alternatives, but the simple nature of delete makes this easily inferred from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_model_groupADestructive
Delete a model group and all its models, simulations, and associated data. Permanent, cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| model_group_id | Yes | UUID of the model group to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the destructiveHint annotation by explicitly stating that the operation cascades to models, simulations, and associated data, and that it is permanent and cannot be undone. This gives the agent critical context about the full impact of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences and immediately communicates the action, scope, and irreversibility. Every word adds value, and there is no wasted information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter destructive tool with an output schema and destructiveHint annotation, the description fully covers the key aspects: what is deleted, the cascading scope, and permanence. No additional context is needed for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes the only parameter (model_group_id) as 'UUID of the model group to delete', so schema description coverage is 100%. The description does not add additional parameter-level detail, giving the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete a model group') and specifies the resource and scope ('all its models, simulations, and associated data'). This distinguishes it from sibling delete tools like delete_portfolio or delete_scenario by naming the exact resource type and its contents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context implies this tool is for permanently removing a model group, and the name matches the resource. However, there is no explicit statement of when to use this tool versus alternatives, nor any exclusions or prerequisites. The usage is implied by the resource type rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_portfolioADestructive
Delete a portfolio by ID. Permanent, cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| portfolio_id | Yes | The portfolio UUID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation destructiveHint: true already indicates a destructive operation. The description adds the valuable context 'Permanent, cannot be undone' which goes beyond the annotation by clarifying irreversibility. No contradiction exists between description and annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise, consisting of two short sentences that front-load the action and key caveat. Every word earns its place with no unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a single parameter, an output schema exists, and the description covers the operation and its permanence. Given the simplicity and the presence of structured metadata, the description is complete and sufficient for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the only parameter portfolio_id as 'The portfolio UUID to delete', achieving 100% coverage. The description's 'by ID' adds no additional meaning beyond what the schema already provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Delete a portfolio by ID') with a specific verb and resource, and 'Permanent, cannot be undone' reinforces the nature of the operation. This distinguishes it from sibling tools like get_portfolio or update_portfolio.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied by the clear verb and resource, but no explicit guidance is provided about when to use this tool versus alternatives, nor are any exclusions or prerequisites mentioned. It does not name sibling tools for comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_ruleA
Permanently delete a systematic trading rule from a portfolio.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | Rule UUID | |
| portfolio_id | Yes | Portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no destructive hint, so the description carries the full burden. 'Permanently delete' explicitly discloses irreversibility, which is key for a mutation tool. However, it does not mention permissions, side effects, or what happens to dependent data, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of nine words, front-loaded with the verb and resource. No filler or redundancy; every word contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete tool with an output schema, the description covers the core action and permanence. However, it lacks usage guidelines and any notes about alternatives or side effects, making it adequate but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters described as 'Rule UUID' and 'Portfolio UUID'. The description adds no extra meaning beyond tying the rule to a portfolio, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'delete', the specific resource 'systematic trading rule', and the context 'from a portfolio'. This distinguishes it from siblings like toggle_rule (which likely enables/disables) and update_rule (which modifies).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool compared to alternatives. Since siblings include toggle_rule and update_rule, the description could have mentioned that this is for permanent removal, while toggle_rule is for temporary deactivation, but no such context is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_scenarioADestructive
Delete a saved scenario. Permanent, cannot be undone.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | The scenario UUID to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the behavioral detail that deletion is permanent and irreversible, which goes beyond the destructiveHint annotation. It does not mention side effects or permissions, but for a simple delete operation this is sufficient; a higher score would require more depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the core action, and every word serves a purpose. The warning about permanence earns its place without bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple destructive operation with one well-documented parameter, a clear description, supportive annotations, and an output schema. The description fully covers behavior and consequences, making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full coverage with a clear description of scenario_id as 'The scenario UUID to delete' (100% coverage). The description adds no additional parameter semantics, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource ('Delete a saved scenario'), clearly distinguishing it from sibling tools like create_scenario, list_scenarios, and update_scenario. The purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: use this tool to delete a saved scenario. The warning 'Permanent, cannot be undone' adds a cautionary usage guideline. However, it does not explicitly mention alternatives (e.g., update_scenario for modifications), so it falls just short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_flow_pathsARead-only
Download all generated paths from a Flow generation job as CSV. Returns raw path data with columns: path_idx, day, then one column per feature. Works for both baseline and scenario generation jobs. Use the flow_job_id from generate_flow_paths, simulate_flow_scenario, or list_flow_baselines/list_flow_scenarios.
| Name | Required | Description | Default |
|---|---|---|---|
| flow_job_id | Yes | Flow generation job ID (from generate_flow_paths or simulate_flow_scenario) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true, so the safety profile is known. The description adds meaningful behavioral context beyond that: it returns raw path data with specific columns (path_idx, day, one per feature), is compatible with both baseline and scenario jobs, and provides a CSV output. This goes beyond the annotation's read-only flag without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the main purpose, and each sentence earns its place. The second sentence details the return format, and the third gives crucial source guidance. No redundant words or repeated schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 1-parameter tool with an output schema and readOnly annotation, the description covers all necessary contexts: what it does, the exact output format, compatibility with baseline/scenario jobs, and where to obtain the required ID. Nothing important is missing for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the only parameter (flow_job_id) with a description, so the baseline is 3. The tool description enriches this by expanding the list of valid source tools for the job ID to include list_flow_baselines/list_flow_scenarios, which is not present in the schema's parameter description. This is a useful addition for parameter selection.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb 'Download' and clarifies the resource: 'all generated paths from a Flow generation job as CSV'. It explicitly names the output format and the data columns, and is clearly distinguishable from sibling tools like check_flow_job or get_flow_results by its focus on path download as CSV.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly explains when to use the tool (to download generated paths) and provides specific prerequisite guidance by listing where the flow_job_id comes from (generate_flow_paths, simulate_flow_scenario, list_flow_baselines/list_flow_scenarios). It stops short of explicit when-not-to-use instructions, but the context is strong enough for an agent to decide correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evaluate_rulesARead-only
Check which portfolio trading rules trigger on TODAY's real market data. Unlike forward_test_rules (which tests against simulated FLOW paths), this evaluates rules against actual historical prices from training_data — no FLOW model needed.
Returns per-rule: triggered (bool), action prescribed, current indicator values. Also returns recommended_weights (combined effect of all triggered rules) and weight_changes.
Data source: training_data (refreshed daily at 21:00 UTC after US market close). On weekends/holidays, evaluates against the most recent trading day.
Use this for daily 'any rules fired?' monitoring. For simulated forward-testing across 1000+ scenarios, use forward_test_rules instead.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_ids | No | Specific rule UUIDs to evaluate. Omit to evaluate all active rules. | |
| portfolio_id | Yes | Portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several behavioral details beyond the readOnlyHint annotation, including the data source (training_data), refresh schedule (daily at 21:00 UTC), weekend/holiday behavior (uses most recent trading day), and the return values (per-rule triggered, action, indicator values, recommended_weights, weight_changes). It also notes that no FLOW model is needed. No contradiction with the read-only annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, covering purpose, distinction, return values, data source, and usage in four tight paragraphs. Every sentence contributes actionable information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool of this complexity, the description fully covers what it does, when to use it, what it returns, and its data freshness. The output schema already documents the return structure, so no further detail is needed. It also correctly positions this tool relative to forward_test_rules.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already fully describes both parameters (portfolio_id as 'Portfolio UUID' and rule_ids with explicit instruction to omit for all active rules). The description adds no additional parameter-specific detail, so the baseline score of 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'Check which portfolio trading rules trigger on TODAY's real market data.' It explicitly distinguishes itself from the sibling tool forward_test_rules by contrasting data sources, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage guidance: 'Use this for daily any rules fired? monitoring' and directs users to forward_test_rules for alternative use cases. It also explains the key difference from forward_test_rules in the first paragraph.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
flow_validateADestructive
Validate a trained Flow model against real data. Generates paths and compares them to historical distributions using Wasserstein distance, KS tests, coverage tests, and marginal distribution checks. Returns immediately with a job_id — validation runs asynchronously (~3-5 min). Use check_flow_job(job_id=..., job_type='validate') to monitor progress. Requires a trained Flow model (run train_flow_model first).
| Name | Required | Description | Default |
|---|---|---|---|
| horizon | No | Validation horizon (defaults to training horizon) | |
| n_paths | No | Number of paths to generate for validation (default 500) | |
| model_group_id | Yes | UUID of the model group with a trained Flow model |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag openWorldHint and destructiveHint, so the description need not repeat them. The description adds valuable context: the tool runs asynchronously, returns a job_id immediately, and takes ~3-5 minutes. This goes beyond the structured annotations, though it does not elaborate on the destructive hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the primary purpose, then essential workflow details. No redundant or filler content; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core purpose, the async behavior (including time estimate), the prerequisite, and the monitoring mechanism. An output schema exists, so return values need not be described. This is complete for a moderately complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%; all three parameters have descriptions in the schema. The tool description does not add additional parameter meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Validate a trained Flow model against real data' and lists specific evaluation metrics (Wasserstein distance, KS tests, coverage tests, marginal distribution checks). This distinguishes it from sibling tools like train_flow_model and generate_flow_paths.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides a prerequisite ('Requires a trained Flow model (run train_flow_model first)') and names the follow-up tool to monitor progress ('Use check_flow_job(job_id=..., job_type='validate')'). This gives clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forward_test_rulesA
Forward-test systematic trading rules against FLOW-generated price paths. Returns TWO levels of output: • combined_strategy — ALL rules applied together in priority order on every path. This is your actual strategy performance vs the base static portfolio. • rule_attribution — each rule tested individually to show which rules help vs hurt.
How it works:
Loads the FLOW price paths (same N paths for every evaluation — fair comparison)
Steps through each path day-by-day, applies rules in priority order, tracks P&L
Returns Sharpe, CVaR, max drawdown, return for combined strategy and each rule alone
IMPORTANT: The FLOW model must include paths for ALL features referenced in rule triggers (both portfolio assets AND conditioning factors like VIX, DXY, etc.). Rules referencing features not in the FLOW model will silently fail — check warnings in the response. For checking rules against today's real market data (no FLOW dependency), use evaluate_rules instead.
Prerequisites: (1) create rules with create_rule; (2) activate them with toggle_rule(is_active=True); (3) generate FLOW paths with generate_flow_paths. If rule_ids is omitted, tests all active rules.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_ids | No | Specific rule UUIDs to test. Omit to test all active rules. | |
| flow_job_id | Yes | Completed FLOW job ID | |
| portfolio_id | Yes | Portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only include a title and no safety hints, so the description carries the burden. It discloses two output levels, the day-by-day processing approach, and a critical silent-failure caveat. However, it does not explicitly state whether the tool has side effects or mutates data, which would be useful given the lack of annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points, a numbered workflow, and separate sections for important caveats and prerequisites. It packs necessary information without fluff, and each sentence contributes to understanding the tool's behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers prerequisites, workflow, outputs, limitations, and alternatives. Since an output schema is present, not detailing return fields is acceptable. The description is thorough and leaves no significant gaps for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for all three parameters, so the baseline is 3. The description adds meaningful context by explaining that flow_job_id must reference a completed FLOW job with paths for all referenced features, and it clarifies the default behavior when rule_ids is omitted. This goes beyond the schema's brief descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Forward-test') and a clear resource ('systematic trading rules against FLOW-generated price paths'). It also distinguishes itself from the sibling tool evaluate_rules by explicitly stating that evaluate_rules is for real market data, showing clear differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit prerequisites (create rules, toggle active, generate FLOW paths), states what happens if rule_ids is omitted, and names the alternative tool for real-market testing. This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_flow_pathsADestructive
Generate simulated multi-step price trajectories from a trained Flow model. Returns per-asset percentile bands (p5/p25/p50/p75/p95 per timestep), sample paths per target asset, and scalar terminal statistics. Requires model_group_id from train_flow_model or list_model_groups. If paths already exist, returns cached results instantly. Path generation takes ~1-3 min on GPU. Defaults: horizon=60 (~1 quarter), n_paths=1000.
| Name | Required | Description | Default |
|---|---|---|---|
| horizon | No | Forecast horizon in trading days. Default 60. | |
| n_paths | No | Number of paths to generate. 1000 default. | |
| portfolio_id | No | UUID of the portfolio. Resolved automatically if omitted. | |
| model_group_id | Yes | UUID of a trained Flow model group (from train_flow_model or list_model_groups). | |
| price_history_length | No | Days of historical prices to include before the paths start. Defaults to horizon. Set higher (e.g. 120) to warm up indicators like MACD or z-score before forward_test_rules. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include destructiveHint=true, and the description honestly notes that generation takes time but cached paths return instantly, adding value beyond annotations. It does not explicitly warn about cost, but the openWorldHint and destructiveHint are present in annotations; the description adds performance and caching context, which is useful. Minor gap: it doesn't state what happens if model_group_id is invalid or whether generation consumes credits, but with annotations present the bar is lower.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: first sentence states purpose, second lists outputs, third gives prerequisite, fourth covers caching and performance, fifth gives defaults with context. Every sentence adds new information and the description is highly scannable, making it ideal for agent consumption.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are documented separately. The description covers prerequisites, performance, caching, defaults, and parameter semantics, making it complete for a complex generation tool. Slight deduction for not explicitly warning about credit/resource consumption, but given the output schema and annotations, the description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema: it explains the default horizon (60 ≈ 1 quarter) and n_paths (1000), and clarifies price_history_length's purpose ('warm up indicators like MACD or z-score before forward_test_rules'), which the schema's description only hints at. It also ties model_group_id to explicit source tools, enriching the parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb ('Generate') and resource ('simulated multi-step price trajectories from a trained Flow model'), clearly stating what the tool produces: per-asset percentile bands, sample paths, and scalar terminal statistics. It distinguishes itself from siblings like simulate_flow_scenario and train_flow_model by naming the required model_group_id and referencing related tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states prerequisite: 'Requires model_group_id from train_flow_model or list_model_groups.' It also mentions caching behavior ('If paths already exist, returns cached results instantly') and gives performance context ('takes ~1-3 min on GPU'), which helps the agent decide when to call and what to expect. While it doesn't name alternatives for exclusion, the context is sufficiently explicit for correct tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_asset_profilesARead-only
Get asset classification for a portfolio: sector, industry, country, exchange, and asset type per holding.
| Name | Required | Description | Default |
|---|---|---|---|
| portfolio_id | Yes | The portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, covering safety. The description adds some behavioral context by stating the output is per holding and listing the exact classification dimensions, but it does not disclose additional traits such as data freshness, potential performance implications, or permission requirements beyond the basic read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately states the action and resource, followed by a concise list of the specific output fields. There is no redundant information or filler; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has only one required parameter (fully described in schema), an output schema is present (so return values need no separate explanation), and annotations cover the read-only safety profile. The description fully explains what the tool does, making it complete for the agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (the portfolio_id parameter is documented as 'The portfolio UUID'), and the tool description adds no further meaning to the parameter. The baseline of 3 applies because the schema already adequately describes the only parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('asset classification for a portfolio') while enumerating the distinct fields returned (sector, industry, country, exchange, asset type per holding). This makes it clear and distinguishes it from sibling tools like get_portfolio_value or get_portfolio_analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when classification details per holding are needed, but it provides no explicit guidance on when to use this tool versus alternatives, nor does it mention exclusions or prerequisites. It is a simple definition without contextual placement among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_billing_infoARead-only
Subscription plan details: tier limits, overage rates, and per-operation costs. Use this to understand pricing before running expensive operations (not for credit balance — use whoami or get_credits).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, so the baseline safety is known. The description adds behavioral context by clarifying the content scope (tier limits, overage rates, per-operation costs) and that it does not cover credit balance. This goes beyond annotations and prevents misuse, though it stops short of describing output structure or edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence front-loads what is returned, and the second gives usage context and alternatives. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with an output schema present, the description fully covers purpose and usage context. It tells the agent exactly when to call it and clarifies what it does not do, making it complete for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema properties are empty, so the baseline is 4. The description correctly implies no parameters are needed; no additional parameter semantics are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides subscription plan details including tier limits, overage rates, and per-operation costs. It uses a specific resource ('subscription plan') and immediate content list, and distinguishes from siblings by explicitly noting it is not for credit balance, which points to get_credits/whoami.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells when to use: 'before running expensive operations' and provides exclusions and alternatives: 'not for credit balance — use whoami or get_credits'. This is direct when/when-not guidance with named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_billing_usageARead-only
Get detailed usage breakdown for the current or a specific billing month. Shows per-operation counts, included limits, overage counts, and costs. Month format: YYYY-MM (e.g. '2026-03').
| Name | Required | Description | Default |
|---|---|---|---|
| month | No | Billing month in YYYY-MM format. Defaults to current month. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the read-only nature is known. The description adds meaningful context about what the breakdown includes (per-operation counts, included limits, overage counts, costs) and the month format, which goes beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, two sentences, with the action and resource front-loaded. Every sentence provides useful information without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a single optional parameter, full schema coverage, a readOnlyHint, and an output schema. The description clearly covers what the tool does, what data it returns, and parameter format, making it complete for the given complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the 'month' parameter with format and default (100% coverage). The description repeats this information without adding new semantic details, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action and resource: 'Get detailed usage breakdown' for a billing month. It distinguishes itself from siblings like get_billing_info by focusing on detailed per-operation counts, limits, and costs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use the tool: to get detailed usage for the current or a specific month, including the required month format. It provides context but does not explicitly mention alternatives or when not to use it, hence not a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_creditsARead-only
Credit balance details: used, remaining, purchased packs, and overage status. Use whoami for a quick summary; use this when you need the full credit object.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint: true already discloses that this is a read-only operation. The description adds value by specifying exactly what the full credit object contains (used, remaining, purchased packs, overage status), which gives the agent context about the response content. No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, front-loaded with the core purpose, and contains no filler. Every sentence earns its place: the first states what the tool returns, the second provides context for when to use it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (0 parameters) and has an output schema, so the description does not need to explain return values. It fully covers when to use and what to expect, making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the schema fully covers the parameter semantics by defining an empty object. The baseline for 0 params is 4; the description adds no parameter-specific detail because none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's purpose: retrieving credit balance details including used, remaining, purchased packs, and overage status. It distinguishes itself from the sibling tool 'whoami' by noting it provides the full credit object, making the scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use whoami for a quick summary; use this when you need the full credit object.' This names an alternative tool and states the condition for selecting this tool, satisfying the dimension fully.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_earnings_calendarARead-only
Upcoming earnings reports sorted chronologically. Filter by single symbol, by date window (start_date/end_date YYYY-MM-DD), or by horizon ('3month'/'6month'/'12month'). Returns symbol, company name, report date, report time (BMO/AMC), estimate EPS, actual EPS where reported. Use to flag earnings-event risk in a portfolio over the next N days.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max rows (1-500, default 50) | |
| symbol | No | Single ticker filter | |
| horizon | No | Window: '3month' / '6month' / '12month' | 3month |
| end_date | No | End date YYYY-MM-DD (overrides horizon) | |
| start_date | No | Start date YYYY-MM-DD (overrides horizon) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description does not contradict that. It adds meaningful behavioral detail beyond the annotation: results are sorted chronologically, filters include symbol/date range/horizon, and the return payload includes symbol, company name, report date, BMO/AMC time, and estimate/actual EPS. This is richer than simply restating the safety profile.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three tight sentences: the first states what it does, the second details filter options and return fields, and the third gives the intended use case. No word is wasted, and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and readOnlyHint annotation, the description still delivers sufficient context for correct invocation. It covers the purpose, all primary filter modes, expected return fields, and a practical use case. Everything an agent needs to select and call the tool is included or already available in structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and every parameter already has a description (e.g., 'Single ticker filter', 'End date YYYY-MM-DD (overrides horizon)'). The description restates these concepts but adds little new semantic value. The use of 'or' when listing filters could vaguely imply mutual exclusivity, though the schema's 'overrides' language partially clarifies precedence. Thus it stays at the baseline for well-covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Upcoming earnings reports sorted chronologically.' It clearly identifies the tool's function and differentiates it from all sibling tools, as no other tool relates to earnings calendars. The listed filter and return-field details further reinforce the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: 'Use to flag earnings-event risk in a portfolio over the next N days.' This gives an agent the context for when to choose this tool, but it does not explicitly mention when not to use it or name alternative tools, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_efficient_frontierARead-only
Calculate the mean-variance efficient frontier for portfolio assets using historical returns. Returns a curve of optimal risk-return tradeoffs with long-only constraints (no shorting). Each point includes optimal weights, expected return, and volatility. This is a historical analysis — for forward-looking optimization, use optimize_portfolio with simulation data.
| Name | Required | Description | Default |
|---|---|---|---|
| timeframe | No | Historical lookback period: '1Y', '2Y', '5Y', etc. Default '1Y'. | 1Y |
| portfolio_id | Yes | The portfolio UUID | |
| num_portfolios | No | Number of points on the frontier curve (default 50) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint, which is minimal. The description goes beyond by disclosing long-only constraints, the composition of each frontier point, and the historical vs. forward-looking distinction. This adds meaningful behavioral context, though edge cases (e.g., handling of missing data) are not covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary purpose. Every sentence adds value: purpose, output composition, and usage alternative. No redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description does not need to detail return values, but it still mentions key output elements. It covers what the tool does, constraints, and alternatives, which is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes all parameters with clear definitions, so schema coverage is 100%. The description adds general context about historical returns and long-only constraints but does not elaborate on individual parameter usage or formats. Baseline 3 is appropriate given the schema's completeness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool calculates the mean-variance efficient frontier for portfolio assets using historical returns. It distinguishes itself from siblings by explicitly noting it is historical analysis and pointing to optimize_portfolio for forward-looking scenarios.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides when to use: historical analysis. Explicitly names the alternative for forward-looking optimization: optimize_portfolio with simulation data. Also mentions the long-only constraint as a boundary condition for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_feature_setARead-only
Get detailed information about a specific feature set including all features and their configuration.
| Name | Required | Description | Default |
|---|---|---|---|
| feature_set_id | Yes | UUID of the feature set |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful context beyond the readOnlyHint annotation by explicitly noting the result includes 'all features and their configuration.' This clarifies the scope of the returned data. No contradictions exist with annotations, and no extra safety warnings are needed given the read-only nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and includes the key scope ('including all features and their configuration'). No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple getter with one parameter, a read-only annotation, and an output schema. The description sufficiently covers what the tool does and what data is included (features and configuration). Given the output schema exists, not explaining return values is acceptable. The description is complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters, and the parameter description ('UUID of the feature set') is clear. The description's mention of 'specific feature set' reinforces the need for an ID but does not add substantive meaning beyond the schema. Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get detailed information about a specific feature set including all features and their configuration.' It uses a specific verb ('get') and resource ('feature set'), and distinguishes from siblings like list_feature_sets (which lists many) and search_features (which searches) by emphasizing 'specific' and 'detailed information'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than explicit. The description indicates you use this when you need detailed info on a specific feature set, but it does not mention when to prefer alternatives (e.g., list_feature_sets for discovery, search_features for filtering). No when-not-to-use guidance is provided, though the simple getter nature makes the use case reasonably apparent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_flow_resultsARead-only
Get results of a completed Flow job (generation or validation). For generation jobs (default): returns per-asset terminal statistics, percentile bands (P5–P95 timeseries), sample paths, and price_history for indicator warmup. Set summary_only=true to keep stats + bands but drop sample paths (~60%% smaller). Use download_flow_paths to get full raw path data as CSV. For scenario jobs: also returns satisfaction_rate and constraint details. For validation jobs (job_type='validate'): returns quality badge, pass_rate, and per-feature metrics (Wasserstein distance, KS tests, coverage, marginal checks). Use check_flow_job first to verify the job is completed.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID from generate_flow_paths, simulate_flow_scenario, or flow_validate | |
| job_type | No | Type of job: 'generate' (default) for path generation, or 'validate' for validation results. | generate |
| summary_only | No | If true, return terminal stats + percentile bands but skip individual sample paths. ~60%% smaller output. Use download_flow_paths to get full raw path data separately. | |
| max_sample_paths | No | Max sample paths to return per asset (default 10, max 50). Ignored if summary_only=true. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the specific return content per job type (terminal stats, percentile bands, sample paths, price_history) and behavioral traits such as the ~60% size reduction from summary_only. It also reveals preconditions (job completion) and scenario-specific fields, adding substantial context not present in annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but well-organized by job type and usage scenarios. Every sentence conveys a distinct fact—alternatives, output composition, size optimization, and prerequisites. No fluff or redundancy; the length is justified by the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and readOnly annotation, the description covers all necessary aspects: return contents for all job types, usage of summary_only, alternative tools, and the prerequisite of checking job completion. It is complete without unnecessary enumeration of fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds contextual meaning by explaining how job_type affects output (generate vs validate), the effect of summary_only, and the source of job_id. It also clarifies that sample paths are dropped with summary_only, enriching the parameter definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves results of a completed Flow job, with explicit breakdown for generation, scenario, and validation outputs. It distinguishes itself from siblings by naming check_flow_job (verify completion) and download_flow_paths (full raw CSV), so the agent knows exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: 'Use check_flow_job first to verify the job is completed', 'Use download_flow_paths to get full raw path data as CSV', and explains when to set summary_only=true. It also clarifies which job types are supported and the default behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fundamentalsARead-only
Company fundamentals for a single US equity: P/E, PEG, P/B, P/S, EV/EBITDA, EV/Revenue, EPS, revenue TTM, EBITDA, profit margin, operating margin, ROE, ROA, dividend yield, beta, 52-week high/low, 50/200-day moving averages, market cap, shares outstanding, analyst target price, analyst ratings, quarterly earnings/revenue growth YoY. Source: Alpha Vantage OVERVIEW (verified data provider, 24h cache — fundamentals change at most quarterly so caching is safe). Only US equities with SEC filings; ETFs / futures / crypto return 404.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | US equity ticker (e.g. 'AAPL') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds useful context: data source (Alpha Vantage OVERVIEW), 24h cache with rationale, and 404 return for unsupported instrument types. This goes beyond the annotations but does not cover rate limits or response formatting.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is verbose due to a long enumeration of fundamental metrics, which is likely redundant given the output schema exists. It could be condensed to metric categories plus source/caching/error details. The second sentence adds value, but the first sentence is overly detailed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read-only tool with an output schema, the description covers the purpose, data source, caching behavior, and invalid-input error conditions. It does not mention rate limits or authentication, but these are not critical given the annotations and tool simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes the ticker parameter with an example (100% coverage). The description supplements this by clarifying that only US equities with SEC filings are valid and that ETFs/futures/crypto return 404, adding meaningful constraints on parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as providing company fundamentals for a single US equity and enumerates specific metrics, making its purpose unambiguous. It distinguishes from sibling tools like get_quotes or get_history by focusing on fundamental data rather than price/volume.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for fundamental analysis by listing metrics, but it does not explicitly state when to use this tool over alternatives. It provides constraints (US equities with SEC filings) and error behavior, but no clear 'use this instead of X' guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_grain_analysisARead-only
Retrieve full results of a completed GRAIN analysis: theme scores, per-ticker breakdown, and evidence passages. Use list_grain_analyses first to find the analysis_id.
| Name | Required | Description | Default |
|---|---|---|---|
| analysis_id | Yes | The analysis UUID from list_grain_analyses |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true. Description adds that results are from 'completed' GRAIN analysis and lists included data types, giving context beyond the structured hint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose, then a practical pointer. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and only one parameter, description covers purpose, content, and prerequisite. Sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema provides a clear description of analysis_id ('The analysis UUID from list_grain_analyses'); description reinforces this but adds no new semantic details, so baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it retrieves full results of a GRAIN analysis, enumerating content (theme scores, per-ticker breakdown, evidence passages). Differentiates from list_grain_analyses by referencing it as a prerequisite.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to use list_grain_analyses first to find analysis_id, establishing a workflow sequence. No explicit exclusions but sufficient for a simple getter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_historyARead-only
OHLC bars for a single ticker. range='1W'/'1M'/'3M'/'6M'/'1Y'/'2Y'/'5Y'/'ALL' for canned windows, OR pass start_date/end_date (YYYY-MM-DD) for a custom slice.
frequency='daily' (default) | 'weekly' | 'monthly' | 'quarterly' | 'annual' (alias: 'year_end'). For multi-year analysis, USE A COARSER FREQUENCY rather than 50 point queries. A 20-year range='ALL', frequency='annual' request returns ~20 rows; the equivalent in daily granularity is ~5,000 rows that exceed the agent-side response clamp and force you into the dozens-of-calls year-end-extraction pattern that costs credits and time. The downsampler keeps the LAST trading day of each period (week-end / month-end / etc.), which is what return / drawdown / vol calcs actually want.
Use for ad-hoc time-series analysis the trained models don't already cover (return distributions, drawdown curves, custom regression windows, event studies around specific dates).
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | Canned window: 1W / 1M / 3M / 6M / 1Y / 2Y / 5Y / ALL | 1M |
| ticker | Yes | Single ticker symbol (e.g. 'AAPL') | |
| end_date | No | End date YYYY-MM-DD (overrides range) | |
| frequency | No | Bar granularity: 'daily' | 'weekly' | 'monthly' | 'quarterly' | 'annual'. Default 'daily'. | daily |
| start_date | No | Start date YYYY-MM-DD (overrides range) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds valuable behavioral context beyond this: the downsampler keeps the last trading day of each period, large daily requests exceed the agent-side response clamp forcing a costly year-end-extraction pattern, and the frequency alias 'year_end'. This is actionable information the agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence carries important information: output definition, parameter alternatives, usage warning, downsampling behavior, and use-case context. It is well-structured with a clear progression, though it could be slightly tightened without losing value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters and an output schema, the description covers all necessary aspects: purpose, parameter semantics, behavioral quirks, cost implications, and use cases. Since an output schema exists, not detailing return values is acceptable. The description is fully adequate for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds meaning beyond the schema: explains that start_date/end_date override range, lists the exact range options, clarifies the 'annual' alias 'year_end', and links frequency choice to response size and credits. This goes well beyond the baseline of simply having parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States exactly what the tool returns: 'OHLC bars for a single ticker.' This clearly distinguishes it from siblings like get_quotes (current quotes), compute_returns (derived metrics), and get_fundamentals (fundamental data). The scope is explicit: single ticker, historical bars.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Use for ad-hoc time-series analysis the trained models don't already cover.' It also gives specific best practices, e.g., use coarser frequencies for multi-year analysis to avoid exceeding the agent-side response clamp and incurring extra credits/time. This helps the agent choose this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_indicesARead-only
Major US equity indices snapshot (S&P 500, Nasdaq 100, Dow, Russell 2000) sourced from ETF proxies. Returns symbol, name, price, change, change_pct. Quick orient before deeper analysis.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares the read-only safety profile. The description adds meaningful behavioral context with 'sourced from ETF proxies', revealing data provenance and potential tracking differences from actual index levels. It also lists the exact return fields (symbol, name, price, change, change_pct), enhancing transparency beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that are front-loaded with the resource name, list the return fields, and include the data-source caveat. Every word earns its place without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple tool with no parameters, a readOnlyHint annotation, and a full output schema, the description fully covers what the tool does, which indices it covers, how data is sourced, and when to use it. No meaningful gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 per the rubric. No parameter documentation is needed; the description focuses on output and use case.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear specific verb 'snapshot' with explicit resources (S&P 500, Nasdaq 100, Dow, Russell 2000). The description inherently differentiates from sibling tools like get_quotes by scoping to a fixed set of major indices, making its purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Quick orient before deeper analysis' explicitly communicates the intended use case: a fast overview before diving into more detailed tools. It does not name alternative tools or exclusions, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_newsARead-only
News feed with per-ticker sentiment scores (Alpha Vantage NEWS_SENTIMENT). Filter by tickers (per-name news + sentiment) or topics (e.g. 'earnings', 'mergers_and_acquisitions', 'financial_markets', 'economy_macro'). Returns headlines, source, summary, sentiment label/score, and per-ticker sentiment within multi-ticker articles. Strong for 'any news on X?', 'what's driving X today?', or a portfolio-wide news roll-up (pass the portfolio's tickers). Pair with market_radar for the full 'what's happening' briefing.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max items (1-200, default 30) | |
| topics | No | Filter by topics (e.g. ['earnings', 'economy_macro']) | |
| tickers | No | Filter by tickers (e.g. ['AAPL', 'MSFT']) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds rich behavioral context beyond these hints: specifying the data source (Alpha Vantage NEWS_SENTIMENT), detailing output fields (headlines, source, summary, sentiment label/score), and highlighting the nuance of per-ticker sentiment within multi-ticker articles. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly structured: it opens with the core purpose, then covers filters, output content, ideal use cases, and a sibling pairing suggestion. Every sentence serves a distinct function, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only news feed tool with a full output schema and 100% parameter coverage, this description is complete. It tells the user what the tool does, when to use it, what it returns, and how it complements market_radar. There are no significant gaps in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description adds value by explaining the semantics of tickers ('per-name news + sentiment'), giving topic examples ('earnings', 'mergers_and_acquisitions'), and suggesting a practical usage pattern ('pass the portfolio's tickers'). This goes beyond the schema's basic filter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'News feed with per-ticker sentiment scores (Alpha Vantage NEWS_SENTIMENT)', identifying the tool as a news retrieval and sentiment analysis service. It distinguishes itself from siblings by explicitly mentioning sentiment scores and per-ticker breakdowns, and by naming complementary tools like market_radar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit use cases ('any news on X?', 'what's driving X today?', 'portfolio-wide news roll-up') and names an alternative/complement: 'Pair with market_radar for the full what's happening briefing.' This gives clear guidance on when to use this tool versus siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_optimization_historyARead-only
Retrieve past portfolio optimization results. Each entry includes the objective, optimal weights, expected return, volatility, VaR, and Sharpe ratio. Optionally filter by simulation_batch_id to see results for a specific beta computation.
| Name | Required | Description | Default |
|---|---|---|---|
| portfolio_id | Yes | The portfolio UUID | |
| simulation_batch_id | No | Filter to a specific beta simulation run. Optional. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's main behavioral addition is the optional filter and the return-field breakdown. This is useful context beyond the annotation, though it omits potential pagination or ordering behavior, which is acceptable for a simple history retrieval.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the core purpose and return content, the second explains the optional filter. It is front-loaded, to-the-point, and contains no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, read-only, output schema present), the description fully covers what the tool does, what it returns, and how to narrow results. No critical contextual information is missing for a retrieval tool of this type.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both portfolio_id and simulation_batch_id already described in the input schema. The description adds a slight semantic link (simulation_batch_id to 'beta computation') but does not significantly enhance the schema's parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Retrieve' with the resource 'past portfolio optimization results', clearly distinguishing it from siblings like optimize_portfolio and get_efficient_frontier. It also enumerates the exact contents of each entry, leaving no ambiguity about what the tool returns.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: it retrieves historical optimization results, and the optional simulation_batch_id filter provides guidance for narrowing results. It does not explicitly state when to use it over alternatives, but the read-only nature and reference to 'past results' make the context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolioARead-only
Get detailed information about a specific portfolio including assets, weights, and associated feature sets. Use the portfolio ID from list_portfolios.
| Name | Required | Description | Default |
|---|---|---|---|
| portfolio_id | Yes | The portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, so the safety profile is already disclosed. The description adds the return content (assets, weights, feature sets) but does not provide further behavioral context such as pagination, error handling, or permissions. It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences that clearly state the tool's purpose and the parameter source. No unnecessary words or redundancy; information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple get-by-ID tool with one parameter and an output schema, the description adequately covers the key contextual need: what the tool returns and where to find the ID. It does not elaborate on edge cases or distinguish among many sibling tools, but given the output schema and annotation, the description is largely complete. A bit more differentiation would push it to 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already describes portfolio_id as 'The portfolio UUID' (100% coverage). The description adds semantic value by indicating the ID comes from list_portfolios and that it refers to a 'specific portfolio', helping the agent understand the parameter's provenance and scope beyond the schema's minimal description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: retrieving detailed information about a specific portfolio, mentioning the included content (assets, weights, feature sets). It distinguishes from list_portfolios by targeting a single portfolio, but does not explicitly differentiate from sibling tools like get_portfolio_value or get_portfolio_analytics, which may overlap in purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage when a specific portfolio's details are needed and provides a prerequisite ('Use the portfolio ID from list_portfolios'). However, it offers no guidance on when to prefer this over alternative portfolio-related tools (e.g., get_portfolio_value, get_portfolio_fact_sheet) and does not state exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolio_analyticsARead-only
Get historical portfolio analytics: Sharpe ratio, volatility, expected return, max drawdown, and market beta (benchmarked vs SPY). Supports timeframes: 1W, 1M, 1Y, 2Y, 5Y. This is backward-looking — for forward-looking risk, use compute_returns or test_flow_risk. NEW: Pass model_group_id to also get factor return attribution — shows which factors (VIX, rates, oil, etc.) drove your portfolio returns over the period. Requires compute_betas to have been run first via analyze_quantitative.
| Name | Required | Description | Default |
|---|---|---|---|
| rollup | No | Attribution period: 'daily', 'weekly', 'monthly' (default 'daily') | daily |
| timeframe | No | Timeframe: 1W, 1M, 1Y, 2Y, or 5Y (default 1Y) | 1Y |
| portfolio_id | Yes | The portfolio UUID | |
| model_group_id | No | Model group ID for factor return attribution. From analyze_quantitative or list_model_groups. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description adds meaningful behavioral context: the backward-looking nature and the dependency on compute_betas. It also explains what the optional model_group_id does (factor attribution with examples). These details go beyond the annotation, though it doesn't describe error behavior or rate limits, which are not critical here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and keeps information compact. Each of the four sentences adds a distinct point: metrics/timeframes, backward-looking distinction, optional feature, and prerequisite. The 'NEW:' prefix adds slight noise but overall it is well-structured and not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (four parameters, optional feature, prerequisites), the description covers the main use, timeframes, alternatives, and dependency. An output schema exists, so return-value details are not the description's responsibility. It even provides enough context to distinguish from many portfolio-related siblings, making it highly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds a concrete example of what model_group_id returns (factors like VIX, rates, oil) but does not clarify the 'rollup' parameter beyond the schema's terse 'Attribution period'. Overall the description adds minimal value over the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Get historical portfolio analytics' and enumerates specific metrics (Sharpe ratio, volatility, expected return, max drawdown, market beta) benchmarked against SPY. It clearly differentiates from sibling analytics tools by naming compute_returns and test_flow_risk as forward-looking alternatives, and the scope (historical, benchmarked) is precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use ('backward-looking') and names alternatives ('for forward-looking risk, use compute_returns or test_flow_risk'). Also provides a prerequisite ('Requires compute_betas to have been run first via analyze_quantitative'), giving clear context on when this tool is applicable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolio_fact_sheetARead-only
One-call printable portfolio summary. Returns: • allocation — per-position ticker, name, current price, current value, current weight, target weight • returns — MTD, QTD, YTD, 1Y period returns • growth_of_10k — $10K invested 1Y ago, portfolio vs benchmark ending value • risk_stats — Sharpe, Sortino, vol, max drawdown, beta, alpha, risk-free rate (1Y window) • benchmark_return_1y, as_of, n_data_points
Use this when the user asks for 'a one-pager', 'portfolio summary', 'how is my portfolio doing'. Single call, ~1-2s, free. Default benchmark SPY; pass any ticker to override.
| Name | Required | Description | Default |
|---|---|---|---|
| portfolio_id | Yes | The portfolio UUID | |
| benchmark_symbol | No | Benchmark ticker for growth-of-$10K + beta/alpha (default 'SPY') | SPY |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description discloses the full set of return fields, the default benchmark behavior, the ability to override, and performance/cost characteristics. It sets clear expectations about what the tool does and its limitations without contradicting annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a front-loaded summary, a bulleted list of return fields, and a short usage paragraph. Every sentence adds value, and the formatting makes it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a read-only, well-schema'd tool. It covers purpose, usage triggers, output structure, default behavior, and performance. An output schema exists, so not explaining return values in prose is fine.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters fully described. The description reinforces the benchmark override but adds no new meaning beyond the schema. Baseline 3 is appropriate since the schema already carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'One-call printable portfolio summary' with a specific list of returned metrics. It distinguishes itself from sibling tools by emphasizing the single-call, summary nature, and the usage phrase 'a one-pager', 'portfolio summary' gives a concrete use case.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this when the user asks for...' with clear examples, and provides context like 'Single call, ~1-2s, free' to guide when to choose this tool over potentially heavier alternatives. It doesn't name alternatives, but the guidance is specific and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolio_valueARead-only
Get the current live value of a portfolio: total value, P&L, and per-position breakdown.
| Name | Required | Description | Default |
|---|---|---|---|
| portfolio_id | Yes | The portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the read-only nature is already covered. The description adds that the value is 'live' and lists the breakdown, but does not disclose any additional behaviors such as data freshness, latency, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the tool's purpose and outputs, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter schema and presence of an output schema, the description adequately conveys the tool's function and return contents. It does not discuss edge cases or prerequisites, but these are not essential for a straightforward read-only getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents portfolio_id as 'The portfolio UUID' (100% coverage). The description does not add further parameter details, earning the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a portfolio's live value, enumerating total value, P&L, and per-position breakdown, distinguishing it from sibling tools like get_portfolio or get_portfolio_analytics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for real-time portfolio valuation but does not explicitly contrast with sibling tools like get_portfolio_fact_sheet or get_portfolio_analytics, so it provides only implied guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quotesARead-only
Live price snapshot for one or more tickers (Alpha Vantage). Pass up to 100 tickers in one call. Returns current price, change, change_pct per symbol; unresolved tickers (typos, delistings) come back as error stubs without failing the batch. Use for 'what's X trading at right now?' or to seed a quick position-level P&L calc.
| Name | Required | Description | Default |
|---|---|---|---|
| tickers | Yes | Tickers to quote (e.g. ['AAPL', 'MSFT', 'NVDA']). Max 100. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses important behavioral details: batch limit of 100 tickers, return fields (price, change, change_pct), and how unresolved tickers are handled without failing the batch. This adds significant context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, each earning its place: purpose, behavior/limit, and use cases. It is front-loaded with the main purpose and contains no redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter tool with an output schema, the description is complete: it explains what is returned, error behavior, limits, and typical use cases. No significant information is missing for a quote snapshot tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already thoroughly describes the tickers parameter (array, max 100, example). The description repeats the 100-ticker limit but adds no new parameter-specific semantics. With 100% schema coverage, the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb+resource: 'Live price snapshot for one or more tickers (Alpha Vantage).' It distinguishes from siblings like get_history (historical) and get_fundamentals by emphasizing 'current price' and 'right now.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit use cases are provided: "Use for 'what's X trading at right now?' or to seed a quick position-level P&L calc." However, it does not explicitly mention alternatives or when not to use it, though 'live' implies not for historical data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_residual_correlationARead-only
Get the cross-asset residual correlation matrix for a model group. Shows how much unexplained co-movement exists between assets after accounting for factor exposures. High residual correlations suggest missing common factors.
| Name | Required | Description | Default |
|---|---|---|---|
| model_group_id | Yes | UUID of the model group |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint annotation covers the safety profile, and the description adds interpretive context about what the matrix represents and how to interpret it. No side effects or hidden behaviors are relevant, but the added semantic detail is valuable beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: states the operation, explains the interpretation, and highlights an implication. Cleanly structured and front-loaded with the primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema present, read-only annotation), the description fully covers purpose and interpretation. It doesn't specify prerequisites like model group existence, but that is a minor gap for such a focused tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides 100% coverage with a clear description for model_group_id ('UUID of the model group'). The description adds no additional parameter-level meaning, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Get) and the specific resource (cross-asset residual correlation matrix for a model group). It distinguishes this from sibling tools like compute_correlations by emphasizing residual co-movement after factor exposures.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides useful context on when the output is meaningful (high residual correlations suggest missing factors) but does not explicitly compare to alternatives or state when not to use it. Usage is implied rather than directly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scenarioARead-only
Get detailed information about a saved scenario including its factor specs.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario_id | Yes | The scenario UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint is provided, and the description aligns with that. It adds the detail about 'factor specs' being included, which is a slight behavioral/return signal, but no other behavioral traits (e.g., error behavior, auth) are disclosed. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, short sentence that is front-loaded with the primary action and resource. Every word adds value, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter) and an output schema exists, so return values need not be described. The description covers the essential action and scope. It could improve by explicitly mentioning that it is for a specific scenario and not a list, but given the sibling context, it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes scenario_id as 'The scenario UUID' (100% coverage). The description adds no new parameter-level detail; it only hints at the return content ('factor specs'), which is not parameter semantics. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and names the resource ('saved scenario') and outlines the key content ('factor specs'). This clearly distinguishes it from sibling tools like create_scenario, list_scenarios, and delete_scenario.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving a single scenario's details, contrasting with list_scenarios for listing. However, it does not explicitly state when to use it or mention alternatives, leaving usage context implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sectorsARead-only
S&P 500 sector ETF performance over a window: 1D / 1W / 1M / YTD. Returns one row per sector with performance_pct + change_pct. Use for sector-rotation reads ('which sectors are leading this week?').
| Name | Required | Description | Default |
|---|---|---|---|
| window | No | Lookback window: '1D' / '1W' / '1M' / 'YTD' | 1D |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the description doesn't need to restate safety. It adds behavioral details like the window options and the output row structure (performance_pct + change_pct), which are useful beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core function, then includes the return summary and usage guidance. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and a single well-documented optional parameter, the description is complete. It covers purpose, usage, and output shape compactly, with no significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers the single optional parameter (window) with 100% coverage, including the allowed values. The description repeats these values without adding new semantics, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns S&P 500 sector ETF performance over a configurable window, with specific output fields (performance_pct, change_pct). This distinguishes it from sibling tools by focusing on sector ETFs and specifying the exact resource and action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use for sector-rotation reads' and gives an example query ('which sectors are leading this week?'). While it doesn't name alternative tools, the context is clear enough for an agent to decide when to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_moversARead-only
Top gainers, top losers, and most-active stocks for the day. Use for 'what moved today' context — pair with get_news to explain why.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, lowering the burden. The description adds that it returns three categories of movers but does not disclose additional behavioral traits like data timing, limits, or pagination. Acceptable but not enriched.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first states the output, second gives usage context and a pairing suggestion. No waste, front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter read-only tool with an output schema and annotation, the description fully covers the needed context. It defines the result set and usage scenario.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline for 0 params is 4. The description does not need to explain params, and schema coverage is 100% trivially.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: returns top gainers, top losers, and most-active stocks for the day. It uses a specific verb-less but explicit resource listing that distinguishes it from siblings like market_radar or get_quotes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states intended use: 'what moved today' context, and suggests pairing with get_news to explain why. It lacks explicit exclusions (e.g., when not to use vs get_history), but the contextual hint is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_vix_panelARead-only
VIX level + term structure (VIX vs VIX3M vs VIX6M) + implied vol regime. Backwardation = stress (front > back), contango = calm. Use for vol-regime context before running stress scenarios or sizing options overlays.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds interpretive context about backwardation/contango. However, it does not disclose other behavioral traits like data frequency, latency, or whether the data is a snapshot. With annotations covering safety, the added value is moderate but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core data content and followed by a useful interpretative phrase. Every sentence earns its place, with no redundancy or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description sufficiently covers purpose and usage context. It explains what data is returned and how to interpret it for vol-regime decisions. Minor gaps like data source or update frequency are not critical for tool selection and are likely covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is complete. Per the rubric, a 0-parameter tool receives a baseline score of 4. The description does not need to compensate for missing parameter information, as none exist.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning VIX level, term structure (VIX vs VIX3M vs VIX6M), and implied vol regime. It explains the interpretation of backwardation/contango, which further specifies the resource and distinguishes it from other market data tools like get_yield_curve or get_indices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use for vol-regime context before running stress scenarios or sizing options overlays.' This is clear context, but it does not mention alternatives or when not to use it, which prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_yield_curveARead-only
Current US Treasury yield curve (2y / 5y / 10y / 30y) plus 2s10s spread. Use for rates context, curve-shape regime, or to feed a duration scenario.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds value by specifying exactly what data is included (the four tenors and the 2s10s spread). This goes beyond a generic 'get' and helps set expectations about the return payload, though it doesn't discuss data freshness or update behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core functionality and then usage guidance. Every word earns its place with no redundant information or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, a read-only annotation, and an existing output schema, the description fully captures what the tool does, what data it returns, and when to use it. Nothing essential is missing for a simple market data getter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is nothing to explain. The schema coverage is 100% (empty schema), and the description correctly omits parameter details. Baseline 4 applies for a no-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns the current US Treasury yield curve with specific maturities (2y/5y/10y/30y) and the 2s10s spread. This specific verb+resource combination distinguishes it from sibling market data tools like get_quotes or get_vix_panel.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly gives use cases: 'Use for rates context, curve-shape regime, or to feed a duration scenario.' It doesn't mention when not to use or name alternatives, but the guidance is clear and actionable for an agent deciding to invoke this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_credit_packsARead-only
List available credit packs for one-time purchase. Returns pack options with credits, price, and per-credit cost. Credit packs are available to all tiers and never expire. To purchase, use buy_credit_pack with the pack_id.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description does not contradict this. It adds behavioral context about the pack availability and expiration, and describes the return fields, enriching transparency beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with the main action front-loaded in the first sentence. Each subsequent sentence adds essential information: output contents, availability/expiration, and purchase guidance, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description adequately covers what is returned (credits, price, per-credit cost) and the intended follow-up action. It is complete for agent invocation in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description does not need to explain parameter syntax. The empty schema is fully covered, and the description's output explanation aligns with the baseline for no-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'List' and names the resource 'credit packs', clearly stating the tool's function. It also distinguishes the tool from siblings by noting it returns pack options and references the purchase alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by noting the packs are for one-time purchase, available to all tiers, and never expire. It explicitly directs the agent to use buy_credit_pack for purchasing, offering a clear alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feature_setsARead-only
List all accessible feature sets: your custom sets plus shared templates. Filter by set_type ('conditioning' or 'target'). Use this to find conditioning_set_id values for analyze_quantitative.
| Name | Required | Description | Default |
|---|---|---|---|
| set_type | No | Filter: 'conditioning' or 'target'. Omit for all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true annotations already declaring a safe read operation, the description adds useful context beyond that: it lists only 'accessible' sets and notes that results include both custom sets and shared templates. It also mentions the optional filter behavior. This is appropriate context for a simple read-only list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the purpose, followed by filtering guidance and a concrete downstream use case. Every sentence earns its place; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with one optional parameter, no required parameters, and an output schema, this description fully covers what an agent needs: what it lists, how to filter, and how the result connects to analyze_quantitative. The output schema handles return-value details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully documents the single optional parameter with the description 'Filter: 'conditioning' or 'target'. Omit for all.' The tool description repeats this filter semantics without adding new meaning, examples, or edge-case guidance. With 100% schema coverage, the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('List') and resource ('feature sets'), and differentiates from the similar sibling tool list_feature_set_templates by noting it returns custom sets plus shared templates. This is unambiguous and immediately tells the agent what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance on when to use the tool: 'Use this to find conditioning_set_id values for analyze_quantitative.' It also explains how to filter by set_type. It does not explicitly mention when not to use it versus list_feature_set_templates, but the sibling name and the 'custom sets plus shared templates' phrasing make the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_feature_set_templatesARead-only
Browse pre-built sets of market drivers (e.g. interest rates, volatility, commodities). Returns template names, factors, and conditioning_set_id needed by analyze_quantitative.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares this a safe read operation, and the description reinforces this with 'Browse.' It adds value by revealing the return content (template names, factors, conditioning_set_id) and its role as a prerequisite for another tool, which goes beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: the first front-loads the core purpose, the second delivers a concrete output specification and downstream linkage. Every word earns its place, and no information is repeated from the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with an output schema, the description is fully complete. It identifies the resource type, the exact outputs, and the intended consumer (analyze_quantitative), leaving no gaps for an agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no room for ambiguity. The description genuinely has nothing to add, and the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Browse pre-built sets of market drivers' – a specific verb and resource that clearly distinguishes from sibling tools like list_feature_sets. Concrete examples (interest rates, volatility, commodities) and the mention of conditioning_set_id tie it directly to analyze_quantitative, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states that the output includes 'conditioning_set_id needed by analyze_quantitative,' providing a clear downstream use case. However, it does not explicitly contrast with alternatives like list_feature_sets or state when NOT to use this tool, so exclusions are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_flow_baselinesARead-only
List completed baseline (unconstrained) generation jobs for a Flow model group. Returns job IDs, path counts, horizons, and creation dates. Baselines are standalone unconstrained simulations used for comparison with scenarios. Use generate_flow_paths to create new baselines.
| Name | Required | Description | Default |
|---|---|---|---|
| model_group_id | Yes | UUID of the Flow model group |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, and the description adds that only completed jobs are listed and details the returned fields. This goes beyond the annotation by clarifying the scope and output, which is valuable for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four concise, purposeful sentences: action, returned fields, domain context, and an alternative tool. No redundancy and the key verb is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, output schema present), the description covers purpose, returned data, domain meaning, and the creation workflow. No critical gaps identified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides a full description for model_group_id ('UUID of the Flow model group'). The description echoes this without adding new constraints, formats, or examples, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists completed baseline (unconstrained) generation jobs for a Flow model group, and specifies returned fields (job IDs, path counts, horizons, creation dates). This distinguishes it from siblings like list_flow_scenarios by the 'baseline' and 'unconstrained' qualifiers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides context that baselines are used for comparison with scenarios and explicitly points to generate_flow_paths for creating new baselines. This gives practical usage guidance, though it doesn't explicitly contrast with other listing tools like list_flow_scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_flow_scenariosARead-only
List completed constrained scenarios for a Flow model group. Returns job IDs, constraints used, satisfaction rates, and timestamps. Use this to find previous scenario results without re-running them — pass any flow_job_id to test_flow_risk for risk metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| model_group_id | Yes | UUID of the Flow model group (from train_flow_model, or list_model_groups) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations include readOnlyHint=true, which sets a safe baseline. The description adds useful behavioral details beyond that: it lists only 'completed constrained scenarios,' returns specific fields (job IDs, constraints, satisfaction rates, timestamps), and clarifies that it doesn't re-run scenarios. This adds value without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences with no filler. The first sentence front-loads the verb and resource, the second adds the primary use case and a pointer to a related tool. Every phrase earns its place, making it concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With only one parameter, an output schema present, and read-only annotations, the description covers all essential aspects: purpose, output fields, and usage context. It doesn't need to explain return values in depth since the output schema exists, and it provides enough context for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema already describes model_group_id as 'UUID of the Flow model group (from train_flow_model, or list_model_groups).' The description does not add any additional parameter semantics beyond echoing the resource type, so it stays at the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb and resource: 'List completed constrained scenarios for a Flow model group.' This clearly distinguishes the tool from siblings like list_flow_baselines (baselines vs. scenarios) and simulate_flow_scenario (simulation vs. listing). It also specifies what is listed and the output contents, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case ('find previous scenario results without re-running them') and connects to an alternative tool ('pass any flow_job_id to test_flow_risk for risk metrics'). It does not explicitly list when not to use the tool or mention alternatives for listing scenarios, but the implied usage context is strong, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_grain_analysesARead-only
List past qualitative (GRAIN) analyses. Optionally filter by portfolio_id.
| Name | Required | Description | Default |
|---|---|---|---|
| portfolio_id | No | Optional: filter by portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds that it lists 'past' analyses, implying historical/completed ones, but does not disclose behaviors such as pagination, ordering, or limits. This is a minor addition beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence: 'List past qualitative (GRAIN) analyses. Optionally filter by portfolio_id.' Every word is purposeful, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, read-only annotation, output schema available), the description is complete. It clearly states what the tool does and the filter option, while the schema and annotations cover the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description already fully covers the only parameter (portfolio_id) with 'Optional: filter by portfolio UUID'. The description merely restates this with 'Optionally filter by portfolio_id', adding no new semantic meaning. Baseline is 3 given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('List') and resource ('past qualitative (GRAIN) analyses'), and distinguishes it from sibling tools like get_grain_analysis or analyze_qualitative. It also mentions the optional portfolio_id filter, further clarifying the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is for viewing existing analyses rather than creating or retrieving a single one, but it does not explicitly name alternatives or exclusions. The optional filter is noted, but no explicit 'when to use' or 'when not to use' guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_model_groupsARead-only
List all model groups (each created by analyze_quantitative). A model group ties a portfolio to a conditioning set and contains per-asset models. Check model_type: null/absent = Moment (linear), 'flow_generative' = Flow. Use this to find model_group_ids for compute_betas, compute_returns, (resume).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description aligns by stating 'List all model groups'. It adds valuable behavioral context about the model_group structure (ties portfolio to conditioning set) and the model_type field semantics (null/absent = Moment, flow_generative = Flow), going beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three compact sentences, each earning its place: what the tool lists, the structure/meaning of model groups, and how to use the results. It is front-loaded with the action and resource, and there is no redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless list tool, the description provides all essential context: what is listed, how results relate to other tools, and how to interpret model_type. An output schema exists to detail return fields, so the description doesn't need to enumerate them, making it complete for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description correctly focuses on output semantics rather than parameters, which is appropriate for a parameterless list operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List all' with a clear resource 'model groups' and states they are created by analyze_quantitative. It also distinguishes itself by explaining the model_group_id is needed for compute_betas and compute_returns, which differentiates it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to find model_group_ids for compute_betas, compute_returns', providing clear when-to-use guidance. It also mentions checking model_type to identify model kinds, which helps the agent interpret results and decide subsequent actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_portfoliosARead-only
List the user's existing portfolios with names, IDs, asset compositions, and status.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max portfolios to return |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint annotation by explicitly listing the data returned (names, IDs, asset compositions, status), which helps the agent set expectations. It doesn't contradict annotations and provides useful context for a read operation, though it omits details like pagination or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the action and lists key outputs. Every word earns its place, and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list operation with one optional parameter, a readOnlyHint, and an output schema, the description adequately conveys purpose and return content. The low complexity means no additional behavioral details are necessary, making it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'limit' is fully self-descriptive in the schema ('Max portfolios to return') with a default value. The tool description adds no additional parameter semantics. With 100% schema description coverage, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'List' and the resource 'the user's existing portfolios', and specifies the output fields (names, IDs, asset compositions, status). This unambiguously distinguishes it from sibling tools like get_portfolio (single portfolio) and create/update/delete mutations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'List the user's existing portfolios' establishes a clear use case: enumerating all portfolios. It doesn't explicitly mention alternatives or exclusions, but the context is unambiguous given the sibling set. A note pointing to get_portfolio for single-portfolio retrieval would make it a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rulesARead-only
List all systematic trading rules attached to a portfolio, including their trigger/action definitions, active status, and priority order.
| Name | Required | Description | Default |
|---|---|---|---|
| portfolio_id | Yes | Portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description does not contradict this. It adds context about what the response includes (trigger/action definitions, active status, priority order) but does not disclose additional behavioral aspects such as pagination, error handling, or permissions, which is moderate given the low bar set by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence that conveys scope, output content, and ordering without any redundant words or unnecessary detail. It is exceptionally concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool with one documented parameter, a readOnlyHint, and an output schema, the description covers the purpose and expected content adequately. It could mention sorting behavior or edge cases but is sufficiently complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the single parameter portfolio_id, described as 'Portfolio UUID'. The description adds no additional parameter-specific meaning, so the baseline of 3 applies per the rubric.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly names the verb 'List' and the resource 'systematic trading rules', scopes them to a portfolio, and lists the return content (trigger/action definitions, active status, priority order). This clearly distinguishes it from sibling portfolio-related and rule-management tools, leaving no ambiguity about the tool's function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when to use the tool: to retrieve all trading rules for a specified portfolio. It provides no explicit exclusions or alternative tool references, but the context is unambiguous given the sibling tools, and there is no misleading guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_scenariosARead-only
List saved Moment scenario templates (created via create_scenario). These are stored factor specs tied to individual model_ids — to execute one, use compute_returns with the factor values. For ad-hoc tests, use compute_returns directly. NOT for Flow scenarios — use list_flow_scenarios for those.
| Name | Required | Description | Default |
|---|---|---|---|
| model_id | No | Optional model UUID to filter by |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already covers the read-only nature. The description adds useful context that these are stored factor specs tied to model_ids and created via create_scenario, but it does not disclose additional behavioral details like return format or pagination. Compared to the calibration example, this is comparable to a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary action, and every sentence adds value: purpose, execution alternatives, and exclusion of Flow scenarios. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with a single optional parameter, an output schema, and a read-only annotation, the description fully covers what the tool does, the nature of the data, and how it relates to sibling tools. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage of the single optional parameter (model_id) with a clear description. The tool description does not add parameter-level information beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a specific verb+resource: 'List saved Moment scenario templates'. It clearly distinguishes the tool from siblings by explicitly stating it is NOT for Flow scenarios (use list_flow_scenarios) and by contrasting with compute_returns for execution. This leaves no ambiguity about the tool's core function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: lists when to use compute_returns for executing scenarios or ad-hoc tests, and explicitly excludes Flow scenarios with a pointer to list_flow_scenarios. This directly answers 'when should I use this vs alternatives?'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_simulationsARead-only
List past beta computation runs for a Moment model group. Each entry is a compute_betas invocation with its simulation_batch_id, date, and status. Use this to find older simulation_batch_ids for compute_returns. NOT for Flow models — use list_flow_scenarios for those.
| Name | Required | Description | Default |
|---|---|---|---|
| model_group_id | Yes | UUID of the model group |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the read-only nature is established. The description adds useful behavioral context: each entry is a compute_betas invocation with simulation_batch_id, date, and status, and clarifies the scope to 'Moment model group.' It also mentions the exclusion of Flow models. This goes beyond the baseline set by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three concise sentences, each earning its place: purpose, contents, and usage guidance with alternative. No redundant or filler text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter and an output schema, the description is complete. It covers purpose, entry content, usage context, and an exclusion, leaving no significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters: model_group_id with a description 'UUID of the model group.' The description repeats the 'Moment model group' scope but adds no new parameter-level detail. Baseline 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List past beta computation runs for a Moment model group.' It uses a specific verb ('List') and resource ('beta computation runs'), and explicitly distinguishes from sibling tools by stating 'NOT for Flow models — use list_flow_scenarios for those.'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit usage guidance: 'Use this to find older simulation_batch_ids for compute_returns.' It also gives a clear alternative for Flow models, naming list_flow_scenarios, which fully addresses when to use this tool versus alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_themesARead-only
Browse the GRAIN theme library. Returns predefined themes with names, descriptions, keywords, and categories.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares a safe read operation, so the description only needs to add context. It does mention that themes are 'predefined' and lists the return categories, which gives useful expectations. However, it does not disclose any potential pagination, ordering, or other behavioral traits, so it adds only moderate value beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two short sentences, each earning its place: the first sets the domain context, the second clarifies the output. There is no redundancy or fluff, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple listing tool with no parameters, an existing output schema, and a low complexity, the description is adequately complete. It covers the purpose and the return fields, which is sufficient for an agent to decide when and how to invoke it. Minor gaps like pagination or sorting are not critical given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty with 100% coverage, so the baseline of 4 applies. The description does not need to explain parameters, and it appropriately focuses on the return value. No parameter semantics are missing because there are none.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a browsing/listing action on the GRAIN theme library and specifies the output fields (names, descriptions, keywords, categories), distinguishing it from sibling tools that operate on portfolios, feature sets, or scenarios. The verb 'browse' is slightly less direct than 'list' but unambiguous. It is specific enough to separate it from other tools, though it could be more forceful.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for discovering predefined themes, but it does not explicitly state when to use it versus alternatives or mention any exclusions. With no parameters, usage is straightforward, but the description lacks comparative guidance against other list-type sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_subscriptionARead-only
Open the Stripe Customer Portal to manage an EXISTING subscription: upgrade, downgrade, cancel, or update payment method. Returns a portal URL. For new subscriptions, use subscribe instead.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares safe read-only behavior, and the description adds that the tool returns a portal URL without performing changes itself, clarifying that management actions occur externally. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action and resource, includes return value, and names the alternative tool. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema and clear annotations, the description covers purpose, return value, and main alternative. It is complete enough for an agent to select and invoke correctly without further context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the input schema is empty with 100% coverage, so the baseline is 4. The description appropriately omits parameter details since there are none to explain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool opens the Stripe Customer Portal to manage an existing subscription, enumerating specific actions (upgrade, downgrade, cancel, update payment method) and the return type (portal URL). It also explicitly contrasts with the subscribe tool, distinguishing it from siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use this tool (for managing an EXISTING subscription) and directs users to subscribe for new subscriptions, naming the alternative tool. This meets the benchmark for clear when/when-not and alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_radarARead-only
Get a Bloomberg-terminal-grade market briefing with 50+ indicators and computed regime signals. Returns current levels, 1-day/1-week/1-month changes, z-scores, and percentiles for equities, rates, credit, FX, commodities, volatility, international markets, and crypto. Also computes cross-asset signals: Risk-On/Risk-Off score, yield curve regime, credit stress, volatility regime, sector rotation, copper/gold ratio, stock-bond correlation, and inflation momentum. Flags significant moves (|z-score| > 2) as content opportunities. Use this to understand the current market environment and decide what Sablier analyses to run.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, and the description adds behavioral specifics: computes regime signals, flags |z-score|>2 moves as content opportunities, and details return fields (current levels, changes, z-scores). This goes beyond the annotations to explain what the tool does with the data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is richly informative but well-structured, with a front-loaded headline ('Bloomberg-terminal-grade'), a comprehensive list of covered domains, and a clear closing usage directive. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description fully covers purpose, expected outputs, and usage intent. It explains the breadth of indicators, the computed signals, and the flagging behavior, making it complete without needing to describe return formats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the baseline for no parameters is 4. The description needs no parameter documentation, and its explanation of outputs is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function with the verb 'Get' and a specific resource: 'a Bloomberg-terminal-grade market briefing.' It enumerates coverage (equities, rates, credit, FX, etc.) and computed signals, making it distinct from portfolio and feature management siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Use this to understand the current market environment and decide what Sablier analyses to run,' providing clear context for when to invoke it. It does not name alternative tools for specific contrasts, but its purpose is singular and well-defined, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
optimize_portfolioARead-only
Find optimal portfolio weights using per-asset factor exposures from compute_betas or analyze_quantitative. Requires simulation_batch_id (from their output). Objectives: 'max_sharpe' (maximize risk-adjusted return), 'min_variance' (minimize portfolio volatility), 'max_return' (maximize expected return for given risk). Advanced objectives (pass the string directly): 'analytical_risk_parity' (equalize risk contributions), 'mean_cvar' (minimize CVaR, requires simulation_ids not beta_simulation_ids), 'expected_utility' (maximize CRRA utility), 'risk_parity' (CVaR-based equal risk), 'exposure_target' (match target factor exposures — set target_exposures on the API). Default: 'max_sharpe'. Long-only constraint applied by default.
| Name | Required | Description | Default |
|---|---|---|---|
| objective | No | Optimization objective: 'max_sharpe' (default), 'min_variance', 'max_return', 'analytical_risk_parity' (equal risk contributions), 'expected_utility' (CRRA), 'risk_parity' (CVaR-based), 'mean_cvar' (minimize CVaR) | max_sharpe |
| portfolio_id | Yes | The portfolio UUID | |
| simulation_batch_id | Yes | From compute_betas or analyze_quantitative |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true. The description adds valuable behavioral context: the default objective (max_sharpe), the long-only constraint, and the special requirement that mean_cvar uses simulation_ids instead of beta_simulation_ids. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured: main purpose, prerequisite, objective list, advanced options, default, and constraint. Every sentence provides actionable information without fluff, and it's front-loaded with the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with multiple objectives and a prerequisite, the description covers essential usage: source of simulation_batch_id, objective meanings, special cases, default, and constraint. Since an output schema exists, return values need not be explained. The description is sufficiently complete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three parameters (100% coverage), but the description significantly enriches the 'objective' parameter by explaining each option, including advanced objectives and their unique parameter needs (e.g., mean_cvar requires simulation_ids). It also hints at target_exposures for exposure_target, adding practical value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb and resource: "Find optimal portfolio weights using per-asset factor exposures from compute_betas or analyze_quantitative." It distinguishes itself from siblings by focusing on optimization objectives and prerequisites, making it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit usage context by requiring simulation_batch_id from compute_betas or analyze_quantitative, and enumerates objectives with their specific purposes. It doesn't explicitly name alternative tools for when not to use, but the prerequisite and objective details give clear guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
price_optionARead-only
Price a single option on a futures contract using the Black-76 model. Returns the option price, per-contract value (price × contract multiplier), and analytical Greeks (delta, gamma, vega, theta, rho). Supports all major futures: ES=F, NQ=F, CL=F, GC=F, SI=F, ZB=F, ZN=F, ZC=F, ZW=F, ZS=F, etc. If a flow_job_id is provided, also computes an Esscher fair-value estimate from FLOW paths (captures fat tails and vol clustering that Black-76 misses). Use this for quick pricing checks; use analyze_derivatives for full portfolio risk.
| Name | Required | Description | Default |
|---|---|---|---|
| strike | Yes | Option strike price | |
| flow_job_id | No | Optional Flow job ID. If provided, also computes Esscher fair-value from FLOW paths. | |
| implied_vol | No | Annualized implied volatility (e.g. 0.20 for 20%). If omitted, uses 20% default. | |
| option_type | No | 'call' or 'put' | call |
| days_to_expiry | Yes | Trading days until option expiration | |
| risk_free_rate | No | Annualized risk-free rate (default 0.045 = 4.5%) | |
| underlying_ticker | Yes | Ticker of the underlying futures (e.g. 'ES=F', 'CL=F', 'GC=F') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint already conveying safety, the description adds valuable behavioral context: it details outputs (price, per-contract value, Greeks), supported futures tickers, and the optional Esscher fair-value computation. It does not unnecessarily restate the annotation and goes beyond basic safety disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three succinct sentences: the first states the core function and model, the second lists outputs and supported tickers, the third gives usage guidance. Every sentence adds value; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the presence of an output schema, the description is sufficiently complete. It explains the model, key outputs, supported tickers, the optional flow_job_id behavior, and how it differs from analyze_derivatives. It does not explain error conditions or edge cases, but this is not critical for a read-only pricing tool with thorough schema annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds context for flow_job_id (Esscher estimate) but this is already in the schema. It provides example tickers but does not introduce new parameter semantics beyond what the schema already documents.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the function: 'Price a single option on a futures contract using the Black-76 model.' It uses a specific verb ('price') and resource ('single option on a futures contract'), and distinguishes itself from siblings by explicitly naming analyze_derivatives for full portfolio risk.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use this for quick pricing checks; use analyze_derivatives for full portfolio risk.' It also explains the optional flow_job_id condition, clarifying when to use the Esscher enhancement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refresh_feature_dataADestructive
Fetch/update historical training data for specific tickers from Yahoo Finance or FRED. For new features: full fetch from 2000. For existing: incremental update to today. Use this after add_feature, or to force-update stale data.
| Name | Required | Description | Default |
|---|---|---|---|
| tickers | Yes | Tickers to refresh (e.g. ['AAPL', 'CL=F', 'DFF']) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint, so the description adds value by detailing the behavior: full fetch from 2000 for new features, incremental update to today for existing ones. It also mentions 'force-update stale data,' giving context beyond the annotation's binary hint. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the primary action, and includes all essential context without verbose filler. Every sentence contributes actionable guidance, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one parameter and an output schema, the description is complete: it covers data sources, behavior differences based on feature newness, and usage triggers. The output schema handles return value details, so no additional explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of the parameter descriptions, including an example for the 'tickers' array. The description does not add meaning beyond the schema; it only reiterates 'specific tickers' in passing. Baseline 3 is appropriate since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Fetch/update historical training data for specific tickers from Yahoo Finance or FRED.' It uses a specific verb and resource, and distinguishes itself from sibling tools like add_feature by explicitly positioning itself as the refresh step after adding features.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'Use this after add_feature, or to force-update stale data.' It also clarifies the difference between full fetch for new features and incremental updates for existing ones, eliminating ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
screen_universeARead-only
Screen the asset universe by metadata (sector, region, asset type) and price-based metrics (momentum, volatility, percentile rank, z-score, RSI, MA distance). Only screens assets already in the Sablier catalog with training data. Use search_features + add_feature first to expand the catalog if needed. Metadata fields: sector, region, asset_type, category, source. Price fields: momentum_20d/60d/252d, volatility_20d/60d, percentile_1y, z_score_60d, ma_distance_50d/200d, rsi_14, current_price, change_1d_pct/1w_pct/1m_pct. Operators: eq, neq, in (metadata); gt, gte, lt, lte, between (price). Results include computed metrics per asset. Use top results to create a portfolio.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 20) | |
| sort_by | No | Field to sort results by (default: first price criterion or momentum_60d) | |
| criteria | Yes | List of filter criteria. Each: {field, operator, value}. Examples: {field: 'sector', operator: 'in', value: ['Technology', 'Healthcare']}, {field: 'momentum_60d', operator: 'gt', value: 0.05}, {field: 'volatility_20d', operator: 'lt', value: 0.30}, {field: 'percentile_1y', operator: 'gt', value: 80} | |
| sort_order | No | 'desc' (default) or 'asc' | desc |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true, so the safe read behavior is covered. The description adds valuable behavior context: the catalog/training-data restriction, the fact that results include computed metrics per asset, and the operator/field semantics. It omits pagination/rate limits, but the annotation coverage lowers the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but well-structured and front-loaded. The purpose statement, scope limitation, field catalog, operator rules, and downstream workflow are all necessary for a screening tool with four parameters and many possible criteria. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations, the description is complete for correct invocation: it explains prerequisites, alternative tools, all field families, allowed operators, sorting/limit defaults, and what results contain. This is a comprehensive, self-sufficient description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema has 100% description coverage, the description goes further by enumerating valid metadata fields, price fields, and the exact operator families allowed for each type (eq/neq/in vs gt/gte/lt/lte/between). It also clarifies default sort behavior, adding real meaning beyond the schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Screen the asset universe by metadata and price-based metrics.' It clearly distinguishes this tool from catalog-expansion tools like search_features/add_feature by stating it only operates on assets already in the Sablier catalog, and from market overview tools by listing concrete screening fields and operators.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool: only for assets already in the catalog with training data, and tells the agent to 'Use search_features + add_feature first to expand the catalog if needed.' It also gives a downstream workflow suggestion ('Use top results to create a portfolio'). It does not explicitly contrast with other possible screening-like siblings such as market_radar, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_featuresARead-only
Find tickers and market indicators in the catalog. Three usable shapes:
query='gold'— keyword search across ticker / name / descriptioncategory='fx'(no query) — list every FX feature in the catalog. Same for 'commodity', 'rates', 'volatility', 'economic', 'crypto', 'equity'query='ETF', category='commodity', is_asset=True— narrow by both
PREFER browsing by category to keyword-spam: one category='fx' call beats ten query='euro currency' / query='FXY yen' / etc. searches when you want every instrument in a class. Browsing is also more reliable — catalog rows are tagged with category at ingest, so you don't depend on the keyword matching the description.
Catalog size: ~1300+ holdable assets (US large/mid-cap, international listings on LSE / XETR / TYO / HKEX / KOSPI / TWSE, ETFs, futures, FX, crypto). For 'build me a 500-asset / 1000-asset portfolio' requests, call search_features(is_asset=True, limit=1500) ONCE — limit ceiling is 2000, no pagination needed. Do NOT reach for screen_universe to enumerate the catalog: that endpoint is for ranking by price metrics and returns at most limit matches (default 50), not a full enumeration.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max results (default 50, ceiling 2000) | |
| query | No | Search term (e.g. 'AAPL', 'technology', 'volatility', 'gold'). Optional — leave empty to browse by category alone. | |
| category | No | Filter by category: 'equity' | 'commodity' | 'fx' | 'rates' | 'volatility' | 'economic' | 'crypto'. Combine with is_asset for further narrowing. | |
| is_asset | No | If True, only assets. If False, only indicators. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and openWorldHint annotations, the description discloses critical behavioral traits: catalog size (~1300+ assets), the limit ceiling of 2000, that a single call with limit=1500 suffices for large portfolio requests, and that no pagination is needed. It also explains the reliability advantage of category-based browsing over keyword matching, which is a non-obvious behavioral nuance not captured by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, then organized into clear numbered usage shapes followed by preferential and cautionary guidance. Every sentence earns its place, offering practical examples and explicit caveats. Despite being longer than average, it is tightly structured and free of redundancy, making it efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 optional params, no enums) and the existence of an output schema, the description is remarkably complete. It covers all major use cases, explains catalog scope and limits, provides alternative-tool guidance, and addresses edge cases like large portfolio enumeration. The presence of an output schema means return-value details need not be restated, and the description fills every other contextual gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although schema descriptions cover all parameters, the tool description adds substantial semantic value by explaining how parameters combine. It demonstrates the three shapes with examples (query only, category only, query+category+is_asset), clarifies that query can be omitted for category browsing, and spells out the limit ceiling and default behavior. This goes far beyond the schema's per-parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear, specific verb+resource: 'Find tickers and market indicators in the catalog.' It then outlines three distinct usage shapes with concrete examples, making the tool's scope and capabilities unambiguous. It also explicitly differentiates from the sibling tool screen_universe, stating that search_features should not be used for full-catalog enumeration where screen_universe would be insufficient.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage guidance is explicit and actionable. It states 'PREFER browsing by category to keyword-spam' and provides a concrete example where one category call replaces multiple keyword searches. It also gives a clear when-not scenario: 'Do NOT reach for screen_universe to enumerate the catalog' and explains why screen_universe is unsuitable, positioning search_features as the alternative for full-catalog enumeration.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulate_flow_scenarioARead-only
Start constrained what-if scenario generation from a trained Flow model. Returns immediately with a job_id — use check_flow_job(job_id, job_type='generate') to poll for results. PREREQ: Always run generate_flow_paths FIRST on the same day to establish a baseline.
REQUIRED for any scenario with ≥2 constraints: call check_scenario_probability FIRST and verify probability ≥0.1% before invoking this tool. Two constraints multiply joint probability (e.g. oil ≥155 alone ~2%, VIX ≥40 alone ~3% → joint ~0.06%, below the resolution floor). Skipping the pre-check wastes GPU credits on infeasible scenarios and surfaces 0% results that are confusing to the user. The pre-check is ~1-15s; the full scenario is minutes.
After this tool runs, scenario_probability comes back in get_flow_results — interpret it as: ≥5% within normal range | 1-5% rare | <1% outside training distribution | 0% below measurable (not necessarily impossible — could be rare-event paths from latent mode). When latent mode produced the paths, surface that to the user verbatim — those paths satisfy constraints by construction but represent rare-event distortions, not unconditional samples.
THREE WAYS TO GET 0% PROBABILITY — avoid all: (1) DURATION: mean-reverting features (VIX, spreads, rates) spike for days to weeks, not months. Always use t_start/t_end to window constraints (e.g. t_start=10, t_end=20), not the full horizon. (2) JUMP TOO ABRUPT: if today's value is far from the threshold, t_start must give enough time to get there. (3) MULTIPLE CONSTRAINTS: joint probability multiplies. With 2+ constraints, ALWAYS check_scenario_probability first.
Check last_price from generate_flow_paths first — if VIX is at 15 and you constrain it above 30 from day 5, that's a 2x move in 5 days (essentially never happens). Set t_start large enough for a realistic transition: the bigger the gap between current value and threshold, the later t_start should be. VIX all-time high ~89, never sustained above 30 for more than a few weeks.
feature_name in constraints must be the DISPLAY NAME from feature_names (e.g. 'Apple Inc.', 'SPDR S&P 500 ETF Trust'), NOT ticker symbols. Constraint types: 'level' (absolute price bounds), 'return' (per-step return bounds). Pass portfolio_id through so test_flow_risk can be called directly on results. Run scenarios SEQUENTIALLY (one at a time), not in parallel, to avoid GPU queue contention.
| Name | Required | Description | Default |
|---|---|---|---|
| horizon | No | Override horizon (defaults to training horizon). | |
| n_paths | No | Number of paths to generate. More = better diversity. 1000 default. | |
| constraints | Yes | List of constraints. Each MUST have 'lower' and/or 'upper' (NOT 'threshold'). Required keys: feature_name, lower and/or upper. Optional: type, t_start, t_end. Example: {'feature_name': 'Equity Volatility (VIX)', 'lower': 30, 't_start': 10, 't_end': 25} (VIX > 30 from day 10 to 25). For upper bound: {'feature_name': 'Apple Inc.', 'upper': 200, 't_start': 5, 't_end': 40} (AAPL < 200). Types: 'level' (default, absolute price) or 'return'. feature_name must be DISPLAY NAME from feature_names (not ticker). ALWAYS set t_start/t_end to window the constraint realistically. | |
| portfolio_id | No | UUID of the portfolio (from train_flow_model). Pass it through so test_flow_risk can be called directly on the results. | |
| model_group_id | Yes | UUID of the model group with a trained Flow model (from train_flow_model) | |
| skip_feasibility_gate | No | Bypass the backend's pre-flight feasibility gate. DEFAULT FALSE. The gate refuses scenarios whose natural probability is below ~0.5%, preventing latent-mode rare-event distortions that produce unusable summary stats (we shipped a real prod case where a 0% joint scenario fell through to latent and returned expected_return=-91%). Set True ONLY after running check_scenario_probability and consciously committing to a rare-event regime — and then frame the result to the user as conditional on the rare event, not as a marginal forecast. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=true and openWorldHint=true. The description adds rich behavioral disclosure: asynchronous job_id return, GPU credit consumption, latent-mode distortion risks, sequential execution requirement, and a concrete production incident example. It explains how to interpret scenario_probability thresholds, going beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but well-structured, with clear headers (PREREQ, REQUIRED, THREE WAYS) and front-loaded main behavior. Every sentence adds value, covering async polling, feasibility checks, and gotchas. The organization prevents it from feeling bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity, the description covers all critical aspects: prerequisites, return semantics, probability interpretation, common failure modes, and parameter chaining. The output schema exists, so return value details are not needed, but the description still explains how to consume results via check_flow_job and get_flow_results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. However, the description adds crucial meaning: feature_name must use display names not tickers, constraints use 'lower'/'upper' instead of 'threshold', t_start/t_end windowing prevents impossible jumps, and portfolio_id enables chaining to test_flow_risk. These details are not fully in the schema and significantly improve correct usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Start constrained what-if scenario generation from a trained Flow model' — a specific verb and resource. It clearly distinguishes from sibling tools like generate_flow_paths by positioning itself as the constrained scenario generator and referencing the check_flow_job polling step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states prerequisites: 'Always run generate_flow_paths FIRST on the same day to establish a baseline.' It also mandates check_scenario_probability for scenarios with ≥2 constraints, warns against parallel execution, and explains when to use skip_feasibility_gate. Alternative tools are named with conditions for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subscribeADestructive
Subscribe to a Sablier plan (new subscription). Returns a Stripe Checkout URL to complete payment. Tiers: 'pro' (Pro Monthly €499/mo or Pro Annual €349/mo — 1,000 credits/month, overage at €0.50/credit monthly or €0.35/credit annual). Enterprise pricing is custom — contact team@sablier.it. To manage an existing subscription (upgrade, downgrade, cancel, update payment), use manage_subscription instead.
| Name | Required | Description | Default |
|---|---|---|---|
| tier | Yes | Subscription tier: 'pro' (€499/mo or €349/mo annual, 1000 credits) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the destructiveHint annotation by clarifying that the tool returns a Stripe Checkout URL for payment completion, rather than immediately creating the subscription. It also discloses pricing tiers, overage rates, and the distinction between monthly/annual billing, which helps set expectations for side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, opening with the primary purpose and return value, then adding pricing details, and finishing with an explicit alternative. It uses dashes and commas to keep information dense but readable, with no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a single parameter and an existing output schema, the description covers all critical aspects: the subscription creation flow, pricing specifics, the existence of an alternative for management, and enterprise handling. It is sufficiently complete for an agent to decide when and how to invoke this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema already describes the 'pro' tier with pricing and credits, the description enriches the parameter meaning by detailing the monthly vs annual options and overage rates, providing the agent with a fuller understanding of the financial implications of choosing 'pro'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Subscribe to a Sablier plan (new subscription)' with a specific verb and resource, and explicitly distinguishes itself from manage_subscription by indicating the new-subscription scope. It also mentions the output (Stripe Checkout URL), making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool vs the alternative: 'To manage an existing subscription (upgrade, downgrade, cancel, update payment), use manage_subscription instead.' It also notes that enterprise pricing is custom and directs users to contact the team, providing clear boundaries for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_flow_riskARead-only
Run portfolio risk analytics on Flow-generated paths (FUTURES/EQUITIES ONLY — no options). Computes expected return, volatility, Sharpe ratio, Sortino ratio, Calmar ratio, VaR 95%, CVaR 95%, max drawdown, profitability rate, and return distribution percentiles. Requires portfolio_id and flow_job_id from generate_flow_paths, or simulate_flow_scenario. If the user has OPTIONS positions, use analyze_derivatives instead — it reprices options on every path using Black-76 and shows combined futures+options risk. TIP: Call this on multiple flow_job_ids (baseline + different scenarios) to build a side-by-side comparison of risk metrics across scenarios.
| Name | Required | Description | Default |
|---|---|---|---|
| flow_job_id | Yes | Flow generation job ID (from generate_flow_paths, or simulate_flow_scenario) | |
| portfolio_id | Yes | UUID of the portfolio (from generate_flow_paths, or list_portfolios) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds useful behavioral constraints, such as being restricted to futures/equities and requiring specific data sources. It doesn't contradict annotations and further clarifies the tool's read-only nature (risk analytics). However, it doesn't discuss limits or side effects, though none seem relevant for a read-only tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and every sentence adds value: purpose, metrics, required inputs, alternative for options, and a comparison tip. It is front-loaded with the primary action and avoids fluff, despite being moderately long due to the metric list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (many metrics), presence of an output schema, and read-only annotations, the description is highly complete. It covers scope, input origins, exclusions (options), and a practical usage scenario. No critical information is missing for an agent to invoke it appropriately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%; both parameters have descriptions that already explain their source. The description repeats this requirement but adds no new parameter-level semantics. It does list the computed metrics, which gives context for the tool's output but doesn't enhance parameter understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Run portfolio risk analytics on Flow-generated paths' with a specific verb and resource. It explicitly restricts scope to 'FUTURES/EQUITIES ONLY — no options' and enumerates the precise metrics computed, distinguishing it from sibling tools like analyze_derivatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit when-to-use guidance: requires portfolio_id and flow_job_id from generate_flow_paths or simulate_flow_scenario. It also gives a clear alternative: 'If the user has OPTIONS positions, use analyze_derivatives instead'. The tip about calling on multiple flow_job_ids adds practical usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_overageADestructive
Enable or disable on-demand overage credits for Pro subscribers. When enabled, operations continue beyond the monthly credit allocation and are billed at the overage rate (€0.50/credit monthly, €0.35/credit annual). When disabled, operations are blocked once monthly credits run out. Only available for Pro tier — free users should buy credit packs or subscribe.
| Name | Required | Description | Default |
|---|---|---|---|
| enabled | Yes | True to enable overage, False to disable |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given the destructiveHint annotation, the description adds substantial behavioral context: billing rates, blocking behavior when disabled, and Pro-only availability. This goes beyond the annotation and clearly discloses consequences of toggling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (four sentences), front-loads the main action, and every sentence provides valuable information—action, consequences, and eligibility/alternatives. No padding or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with one boolean parameter and an output schema, the description covers the core behavior, pricing, eligibility, and alternatives. Minor gap: it does not explicitly mention what happens if a free user attempts to call the tool, but 'Only available for Pro tier' implies failure without specifying error behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already fully describes the boolean parameter 'enabled' with 100% coverage, but the description adds meaningful context about what true/false actually does (continuing operations with billing or blocking operations). This enhances understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb and resource: 'Enable or disable on-demand overage credits for Pro subscribers.' It distinguishes itself from other billing and toggle tools by detailing the exact behavior and eligibility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool (for Pro subscribers managing overage credits) and explicitly guides free users to alternatives ('buy credit packs or subscribe'). It lacks an explicit 'when not to use' for Pro users, but the enable/disable explanation effectively conveys usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_ruleA
Activate or deactivate a systematic trading rule. Only active rules are included in forward_test_rules by default.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_id | Yes | Rule UUID | |
| is_active | Yes | True to activate, False to deactivate | |
| portfolio_id | Yes | Portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only a title, so the description carries the transparency burden. It discloses a non-obvious behavioral consequence (inclusion in forward_test_rules) and makes the mutation explicit with 'activate or deactivate.' It doesn't mention reversibility or auth, but for a simple toggle, the key side effect is covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no redundant information. It front-loads the main action and then adds a valuable side-effect note, earning every word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple toggle operation with full schema coverage and an output schema present, the description is complete. It explains the primary action and a key behavioral consequence, and nothing else is needed for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with descriptions (rule_id as Rule UUID, is_active as True/False, portfolio_id as Portfolio UUID). The tool description adds no extra parameter meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Activate or deactivate a systematic trading rule.' This is a specific verb+resource combination that distinguishes it from sibling tools like create_rule, delete_rule, or update_rule, which perform different operations on rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on when this tool matters: 'Only active rules are included in forward_test_rules by default.' This implies toggling affects forward testing, but it doesn't explicitly contrast with alternatives or state when not to use it. Still, it offers useful usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
train_flow_modelADestructive
Train a generative Flow model on a portfolio and conditioning set. Returns immediately — training runs on a GPU and takes 5-15 minutes. After calling this, STOP and tell the user training has started. Let them keep chatting. The user will ask you to check progress — use check_flow_job(job_id=...) when they do. Do NOT automatically poll or call check_flow_job yourself. Requires conditioning_set_id (from list_feature_set_templates or create_feature_set) and tickers or portfolio_id.
| Name | Required | Description | Default |
|---|---|---|---|
| horizon | No | Forecast horizon in trading days. ~1 month = 20, ~1 quarter = 60, ~6 months = 120. Defaults to 60 if omitted. | |
| tickers | No | Tickers to analyze (e.g. ['AAPL', 'MSFT']). Auto-creates a portfolio if portfolio_id is not given. | |
| weights | No | Optional weights (must sum to 1.0). Defaults to equal weights. | |
| portfolio_id | No | UUID of an existing portfolio. If omitted, provide tickers instead. | |
| conditioning_set_id | Yes | UUID of the conditioning set (from list_feature_set_templates or create_feature_set). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits beyond annotations: it returns immediately, training runs on a GPU and takes 5-15 minutes, and the agent should not auto-poll. These are important operational details not captured by openWorldHint or destructiveHint. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose. The second sentence is dense with operational instructions, but every part is useful for safe usage. It could be slightly more concise, but avoids fluff and stays on topic.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the async lifecycle, follow-up mechanism, and prerequisites, which is rich for a tool with an output schema. It doesn't explain return values, but that is covered by the output schema. The main missing piece is guidance on handling training failure, but this is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides detailed descriptions for all 5 parameters (100% coverage), including the 'tickers or portfolio_id' alternative and the source of conditioning_set_id. The description's mention of 'tickers or portfolio_id' is redundant and adds no new meaning beyond the schema, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool trains a generative Flow model on a portfolio and conditioning set, using a specific verb and resource. It distinguishes itself from siblings by clarifying that it returns immediately and that progress must be checked via check_flow_job, which is not part of this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: after calling, stop and tell the user training started; let them keep chatting; when they ask about progress, use check_flow_job. It also explicitly states do NOT automatically poll or call check_flow_job yourself, which is a clear exclusion. Prerequisites for required parameters are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_portfolioADestructive
Update an existing portfolio. Can change name, description, weights, capital, and/or options_positions. Only pass the fields you want to update — omitted fields stay unchanged. Weights must sum to 1.0 if provided.
ASSET MUTATION: passing a weights dict that includes a ticker not currently in the portfolio's target set is supported — update_portfolio AUTO-EXPANDS the target set as long as the new ticker is in the global feature catalog. If the ticker isn't in the catalog yet, call add_feature first, then retry this update. (You don't need to create a new portfolio to add an asset.) Removing assets is not supported via this path — drop a weight to 0.0 to zero a position; only create_portfolio_from_assets can produce a portfolio with a strictly smaller asset universe.
options_positions sets the options overlay for derivatives analysis (persisted on the portfolio).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New portfolio name | |
| capital | No | New capital allocation in USD | |
| weights | No | New weights by ticker (e.g. {'AAPL': 0.5, 'MSFT': 0.5}). Must sum to 1.0. | |
| description | No | New description | |
| portfolio_id | Yes | The portfolio UUID | |
| options_positions | No | Options overlay positions to persist on the portfolio. Each dict: underlying (display_name), option_type ('call'/'put'), strike (float), days_to_expiry (int), quantity (int, negative=short), implied_vol (float), entry_premium (float). These are used by analyze_derivatives when no positions are passed inline. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide destructiveHint=true, but the description substantially enriches behavioral understanding: partial update semantics, auto-expansion of asset universe, restriction on removing assets, and persistence of options_positions. This goes far beyond the annotation and clearly explains what mutations occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than average but every sentence earns its place. It is front-loaded with the core purpose, followed by field semantics, then a clearly labeled ASSET MUTATION section covering edge cases. No fluff or repetition; density is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having an output schema, the description covers all important usage contexts: how to add assets, how to zero out positions, when to use add_feature, and the role of options_positions. It connects to sibling tools and provides a complete picture for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds critical semantics: omitted fields stay unchanged, weights must sum to 1.0, ticker auto-expansion logic, and the purpose of options_positions for analyze_derivatives. This adds meaning beyond the schema field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Update an existing portfolio. Can change name, description, weights, capital, and/or options_positions.' This is a specific verb+resource with explicit scope. It distinguishes from create/delete siblings by emphasizing 'existing' and later contrasting with create_portfolio_from_assets for removing assets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on when to use alternatives: 'If the ticker isn't in the catalog yet, call add_feature first' and 'only create_portfolio_from_assets can produce a portfolio with a strictly smaller asset universe.' Also clarifies partial update usage: 'Only pass the fields you want to update — omitted fields stay unchanged.' This is exemplary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_ruleA
Edit an existing systematic trading rule. Only fields you pass are updated; omit a field to leave it untouched. Use to retune a trigger threshold, change the action, rename, reprioritize, or flip activation. For just toggling active/inactive, prefer toggle_rule (clearer intent). live_mode controls broker deployment: null = paper-only, 'observe' = log live signals without trading, 'auto' = execute via connected broker. Live deployment requires a connected broker (see platform UI).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New rule name | |
| action | No | New action spec (same shape as create_rule) | |
| rule_id | Yes | Rule UUID | |
| trigger | No | New trigger spec (same shape as create_rule) | |
| priority | No | Execution priority (lower runs first when multiple rules fire) | |
| is_active | No | Activate / deactivate | |
| live_mode | No | Broker deployment: null / 'observe' / 'auto' | |
| description | No | New description | |
| portfolio_id | Yes | Portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide a title, so the description carries the burden. It discloses partial-update behavior ('Only fields you pass are updated; omit a field to leave it untouched') and explains live_mode semantics. It stops short of describing failure modes or advanced side effects, but is quite transparent overall.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences, each earning its place: core purpose and partial update, main use cases, sibling guidance, and live_mode semantics with prerequisite. It is front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, full schema coverage, and available output schema, the description covers selection-relevant aspects: purpose, alternatives, partial-update behavior, live_mode values, and deployment prerequisite. No critical selection or invocation guidance seems missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with useful per-parameter descriptions, so baseline is 3. The description adds meaningful context beyond the schema, clarifying that omitted fields remain untouched and explaining live_mode's null/'observe'/'auto' values and broker requirements.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Edit an existing systematic trading rule,' clearly identifying the verb and resource. It also explicitly distinguishes from the sibling toggle_rule by stating 'For just toggling active/inactive, prefer toggle_rule (clearer intent).'
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit use cases: 'Use to retune a trigger threshold, change the action, rename, reprioritize, or flip activation.' It also gives a clear when-not alternative via toggle_rule and mentions the broker prerequisite for live_mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_scenarioADestructive
Update a saved scenario. Can change name, description, or factor specs. Only pass the fields you want to update.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | New scenario name | |
| specs | No | New factor specs | |
| description | No | New description | |
| scenario_id | Yes | The scenario UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint: true, so the description's 'update' is consistent. It adds behavioral context about partial updates, which is useful beyond the annotation, though it does not detail side effects or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action, and every clause earns its place. No redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an update tool with an output schema and destructive annotation, the description adequately covers what it does and how to use it. It could mention what happens if no optional fields are passed, but the instruction to only pass what you want to update implies this is not expected.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all parameters (100% coverage). The description reinforces that only passed fields are updated, adding key semantics about optional parameters beyond the schema's simple 'New...' labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates a saved scenario and lists the updatable fields (name, description, factor specs). This distinguishes it from create/delete/get scenario siblings, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Only pass the fields you want to update' gives clear usage guidance for partial updates. It implies this tool is for modifying existing scenarios, not creating new ones, but does not explicitly state exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_rulesARead-only
Preflight validation of stored rules: schema-checks each rule's trigger and action grammar, verifies referenced assets exist in the portfolio, and (if flow_job_id given) confirms every feature the rules reference is covered by the FLOW model's feature set. Run this before backtest_rules / forward_test_rules to surface bad rules cheaply (~200ms, free) instead of letting them silently fail mid-backtest. Returns ok=true with empty error lists if all clean; otherwise lists missing_portfolio_assets, missing_rule_features, and per-rule grammar errors so the agent can patch and retry.
| Name | Required | Description | Default |
|---|---|---|---|
| rule_ids | No | Specific rules to check (default: all rules in the portfolio) | |
| flow_job_id | No | FLOW generation job to feature-coverage-check against (optional) | |
| portfolio_id | Yes | Portfolio UUID |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds performance characteristics (~200ms, free), return behavior (ok=true with error lists), and specifics about what gets checked (missing_portfolio_assets, missing_rule_features, per-rule grammar errors). This is rich behavioral context with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary purpose, followed by usage guidance and return details. Every clause earns its place with zero fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover read-only safety, the description fully covers what the tool does, when to use it, performance expectations, and return format. No significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds semantic context for flow_job_id (feature coverage check) and rule_ids (scope selection), reinforcing schema descriptions. It adds some value but does not deeply expand beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool validates stored rules via schema checks, asset existence, and optional feature coverage. It distinguishes itself from siblings like backtest_rules and forward_test_rules by explicitly mentioning this is a preflight validation step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Run this before backtest_rules / forward_test_rules' and explains the benefit (~200ms, free, avoids silent mid-backtest failures). This gives clear when-to-use and names the alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
whoamiARead-only
Quick account summary: name, email, tier, credit balance, and billing period. Use this first to orient yourself — single call covers identity and credit status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it read-only, and the description adds the specific fields returned and the 'single call' efficiency. It does not discuss authentication, rate limits, or other behavioral nuances, but for a simple read-only summary with annotations, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the most important information (what it does and when to use it), with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 params, output schema present), the description fully covers its purpose, usage context, and return content. It is appropriately complete for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and schema coverage is 100% (vacuously). The description correctly implies no arguments are needed, and there is no additional parameter semantics to explain beyond what the schema already indicates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a quick account summary with specific fields (name, email, tier, credit balance, billing period), and distinguishes it from siblings like get_credits and get_billing_info by combining identity and credit status into a single call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to 'Use this first to orient yourself,' and notes that one call covers both identity and credit status, implying it replaces separate calls to other tools. However, it does not explicitly name alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
83 tool updates
v0.13.2- First observed
add_feature - First observed
add_features_batch - First observed
analyze_derivatives - First observed
analyze_qualitative - First observed
analyze_quantitative - First observed
backtest_rules - First observed
buy_credit_pack - First observed
check_flow_job - First observed
check_scenario_probability - First observed
compute_betas - First observed
compute_correlations - First observed
compute_returns - First observed
create_feature_set - First observed
create_portfolio - First observed
create_rule - First observed
create_scenario - First observed
delete_feature_set - First observed
delete_flow_job - First observed
delete_grain_analysis - First observed
delete_model_group - First observed
delete_portfolio - First observed
delete_rule - First observed
delete_scenario - First observed
download_flow_paths - First observed
evaluate_rules - First observed
flow_validate - First observed
forward_test_rules - First observed
generate_flow_paths - First observed
get_asset_profiles - First observed
get_billing_info - First observed
get_billing_usage - First observed
get_credits - First observed
get_earnings_calendar - First observed
get_efficient_frontier - First observed
get_feature_set - First observed
get_flow_results - First observed
get_fundamentals - First observed
get_grain_analysis - First observed
get_history - First observed
get_indices - First observed
get_news - First observed
get_optimization_history - First observed
get_portfolio - First observed
get_portfolio_analytics - First observed
get_portfolio_fact_sheet - First observed
get_portfolio_value - First observed
get_quotes - First observed
get_residual_correlation - First observed
get_scenario - First observed
get_sectors - First observed
get_top_movers - First observed
get_vix_panel - First observed
get_yield_curve - First observed
list_credit_packs - First observed
list_feature_set_templates - First observed
list_feature_sets - First observed
list_flow_baselines - First observed
list_flow_scenarios - First observed
list_grain_analyses - First observed
list_model_groups - First observed
list_portfolios - First observed
list_rules - First observed
list_scenarios - First observed
list_simulations - First observed
list_themes - First observed
manage_subscription - First observed
market_radar - First observed
optimize_portfolio - First observed
price_option - First observed
refresh_feature_data - First observed
screen_universe - First observed
search_features - First observed
simulate_flow_scenario - First observed
subscribe - First observed
test_flow_risk - First observed
toggle_overage - First observed
toggle_rule - First observed
train_flow_model - First observed
update_portfolio - First observed
update_rule - First observed
update_scenario - First observed
validate_rules - First observed
whoami
TDQS
Several tools serve overlapping purposes within clusters (portfolio performance, feature set listing, scenario simulation, rules evaluation), and some pairs like list_feature_set_templates/list_feature_sets and get_portfolio_value/get_portfolio_fact_sheet could cause misselection. However, the verbose descriptions carefully delineate each tool's specific role, mitigating most ambiguity.
The vast majority follow verb_noun snake_case (get_portfolio, create_rule, compute_betas). A few outliers break the pattern: whoami (single word), market_radar (noun_phrase), and flow_validate (noun_verb, inconsistent with other flow_* verbs like generate_flow_paths).
83 tools is far beyond the typical well-scoped range. The server attempts to cover portfolio management, feature engineering, factor/flow models, scenario analysis, rules, market data, and billing as one surface, resulting in many single-purpose tools (9 billing tools alone) that could be consolidated.
The domain is covered extensively: CRUD for portfolios, feature sets, scenarios, rules, model groups, and flow jobs; plus market data, derivatives, and billing. Minor gaps exist, e.g., no update_feature_set, no portfolio export, and no direct model group detail getter, but agents can work around them.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Research-only MCP server: turn your AI into a quant research desk — backtests, no trades.
MCP server giving AI agents one-connection access to China A-share market intelligence: financials,
MCP server for Mudrex futures trading enabling AI agents to securely access data and risk tools.
The financial MCP for AI agents - 90+ financial tables, SEC filings, signals, alt-data.
Related MCP Servers
- AlicenseAqualityBmaintenanceAn MCP server that gives AI assistants access to SEC-registered financial advisor data, enabling searches by name, firm, or state, full profile lookups, disclosure history checks, and risk assessments.61MIT
- AlicenseCqualityBmaintenanceMCP server for accessing SEC EDGAR filings. Connects AI assistants to company filings, financial statements, and insider trading data with exact numeric precision.21355AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceMCP server that makes the CVI Platform a native tool for AI assistants, enabling stock screening, company analysis, and point-in-time research via natural language.MIT

cpzai-mcp-serverofficial
AlicenseNot gradedqualityDmaintenanceMCP server for CPZAI platform, enabling AI agents to manage trading strategies, run backtests, route orders across brokers, and access portfolios, risk analytics, and market data through natural language.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sablier-ai/sablier-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server