alpaca-mcp-server
OfficialThis server lets you monitor and trade Alpaca accounts and access extensive market data through natural language.
Trading: Place market, limit, stop, stop-limit, and trailing-stop orders for stocks, ETFs, crypto, and options, including multi-leg option strategies.
Order management: View, filter, replace, and cancel orders individually or all at once.
Account management: Check balances, buying power, account settings, portfolio history, and activity/fill records.
Positions: View all positions, close specific or all positions, and exercise or do-not-exercise option contracts.
Watchlists: Create, list, update, delete, and add/remove assets in watchlists.
Market data: Fetch historical and latest bars, quotes, trades, orderbooks, and snapshots for stocks, crypto, and options.
Options analytics: Retrieve option chains, contracts, snapshots, Greeks, implied volatility, and exchange codes.
Market info: Get trading calendar, market clock, asset/contract details, and corporate action announcements.
Screeners: Find most active stocks and top market movers.
News: Search news articles for stocks and crypto.
Fixed income: Get latest quotes for bonds/treasuries by ISIN.
Short selling: Request and query stock locates and locate availability/pricing.
Documentation lookup: Search and fetch Alpaca docs and API endpoint reference details.
Supports loading of API credentials and configuration from environment variables stored in .env files for secure server setup
Supports trading of META stock with capabilities for order placement, position management, and real-time market data
Provides the runtime environment for the MCP server implementation, requiring Python 3.10+ for operation
Click on "Deploy 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., "@alpaca-mcp-serverbuy 10 shares of AAPL"
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.
Alpaca MCP Server v2 is here. This version is a complete rewrite built with FastMCP and OpenAPI. If you're upgrading from v1, please read the Upgrade Guide — tool names, parameters, and configuration have changed.
Table of Contents
Related MCP server: Alpaca MCP Server
Upgrading from V1
V2 is a complete rewrite built with FastMCP and OpenAPI. None of the V1 tools exist in V2 — tool names, parameters, and schemas have changed. You cannot use V2 as a drop-in replacement if your setup depends on specific V1 tool names or parameters.
What changes
Aspect | V1 | V2 |
Tool names | Hand-crafted (e.g. | Spec-derived with overrides (e.g. |
Parameters | Custom schemas | Aligned with Alpaca API specs |
Configuration |
| Env vars in MCP client config only |
Tool filtering | Not supported |
|
Whitelisting | Not supported | Use |
How to avoid V1-style usage in V2
MCP clients discover tools dynamically from the server. There is no config file where you "whitelist" tool names — the client gets whatever tools the server exposes. To avoid your client or AI assistant using V2 incorrectly:
Do not reuse V1 config — Treat V2 as a new server. Update your MCP client config with the new command/args; remove any
.envorinit-based setup.Clear tool caches — Restart your MCP client (Claude Desktop, Cursor, VS Code, etc.) after switching so it fetches the new tool list instead of using a stale one.
Start a fresh chat/session — Existing conversations may have cached references to old tool names. Start a new chat so the LLM sees the current V2 tools and their schemas.
Update custom instructions and rules — If you have Cursor rules, Claude instructions, or other prompts that mention specific V1 tool names (e.g. "use
get_account_info"), update them to match V2 tool names or remove those references and let the LLM discover tools from context.Restrict tools with
ALPACA_TOOLSETS— If you previously limited which capabilities your assistant could use, V2 supports server-side filtering via theALPACA_TOOLSETSenv var. See Configuration > Toolset Filtering for the list of toolsets.
Summary
Assume no backward compatibility with V1. Reconfigure your MCP client for V2, restart it, and use a fresh session. Check the Available Tools section for the current tool list.
If you had custom V1 workflows
If you documented allowed tools, wrote scripts that call tools by name, or built prompts around specific V1 tool/parameter shapes — treat them as obsolete. Recreate them using the Available Tools listed below and the current parameter schemas exposed by the server.
Staying on V1
If you need to stay on V1, pin to the last V1 release (e.g. uvx alpaca-mcp-server==1.x.x serve) in your MCP client config. V1 remains available on PyPI for existing setups.
Prerequisites
Python 3.10+ (installation guide)
uv (installation guide)
Alpaca Trading API keys (free paper trading account)
MCP client (Claude Desktop, Cursor, VS Code, etc.)
Getting Your API Keys
Visit the Alpaca Dashboard
Create a free paper trading account
Generate API keys from the dashboard
Setup
Add the server to your MCP client config, then restart the client. No init command, no .env files — credentials are set in one place only.
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (Mac) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"alpaca": {
"command": "uvx",
"args": ["alpaca-mcp-server"],
"env": {
"ALPACA_API_KEY": "your_alpaca_api_key",
"ALPACA_SECRET_KEY": "your_alpaca_secret_key"
}
}
}
}Claude Mobile
Claude Mobile requires a remote MCP server. This package does not configure remote MCP authentication, so do not expose it directly to the public internet with your Alpaca API keys. Use the local stdio setup from a supported desktop client.
ChatGPT
ChatGPT requires a remote MCP server. This package does not configure remote MCP authentication, so do not expose it directly to the public internet with your Alpaca API keys. Use the local stdio setup from a supported desktop client.
Cursor
Install from the Cursor Directory in a few clicks, or add to ~/.cursor/mcp.json:
{
"mcpServers": {
"alpaca": {
"command": "uvx",
"args": ["alpaca-mcp-server"],
"env": {
"ALPACA_API_KEY": "your_alpaca_api_key",
"ALPACA_SECRET_KEY": "your_alpaca_secret_key"
}
}
}
}VS Code
Create .vscode/mcp.json in your project root. See the official docs.
{
"servers": {
"alpaca": {
"type": "stdio",
"command": "uvx",
"args": ["alpaca-mcp-server"],
"env": {
"ALPACA_API_KEY": "your_alpaca_api_key",
"ALPACA_SECRET_KEY": "your_alpaca_secret_key"
}
}
}
}PyCharm
See the official guide.
Go to File → Settings → Tools → Model Context Protocol (MCP)
Add a new server:
Type: stdio
Command: uvx
Arguments: alpaca-mcp-server
Set environment variables:
ALPACA_API_KEY=your_alpaca_api_key
ALPACA_SECRET_KEY=your_alpaca_secret_keyClaude Code
claude mcp add alpaca --scope user --transport stdio uvx alpaca-mcp-server \
--env ALPACA_API_KEY=your_alpaca_api_key \
--env ALPACA_SECRET_KEY=your_alpaca_secret_keyVerify with /mcp in the Claude Code CLI.
Antigravity CLI
See the Antigravity MCP docs.
Add to ~/.gemini/antigravity-cli/mcp_config.json (global) or .agents/mcp_config.json (workspace):
{
"mcpServers": {
"alpaca": {
"command": "uvx",
"args": ["alpaca-mcp-server"],
"env": {
"ALPACA_API_KEY": "your_alpaca_api_key",
"ALPACA_SECRET_KEY": "your_alpaca_secret_key"
}
}
}
}Docker
git clone https://github.com/alpacahq/alpaca-mcp-server.git
cd alpaca-mcp-server
docker build -t mcp/alpaca:latest .Add to your MCP client config:
{
"mcpServers": {
"alpaca": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "ALPACA_API_KEY=your_key",
"-e", "ALPACA_SECRET_KEY=your_secret",
"-e", "ALPACA_PAPER_TRADE=true",
"mcp/alpaca:latest"
]
}
}
}Configuration
All configuration is through environment variables set in your MCP client config. No files are written to disk.
Variable | Required | Default | Description |
| Yes | — | Your Alpaca API key |
| Yes | — | Your Alpaca secret key |
| No |
| Set to |
| No | all | Comma-separated list of toolsets to enable |
Switching to Live Trading
Update the env block in your MCP client config and restart:
{
"env": {
"ALPACA_API_KEY": "your_live_api_key",
"ALPACA_SECRET_KEY": "your_live_secret_key",
"ALPACA_PAPER_TRADE": "false"
}
}Toolset Filtering
By default, all tools are enabled. To limit the server to specific toolsets, set ALPACA_TOOLSETS:
{
"env": {
"ALPACA_API_KEY": "...",
"ALPACA_SECRET_KEY": "...",
"ALPACA_TOOLSETS": "stock-data,crypto-data"
}
}Available toolsets:
Toolset | Description |
| Account info, config, portfolio history, activities |
| Orders, positions, exercise options |
| Watchlist CRUD operations |
| Asset lookup, option contracts, calendar, clock |
| Stock bars, quotes, trades, snapshots, screeners |
| Crypto bars, quotes, trades, snapshots, orderbooks |
| Option bars, quotes, trades, snapshots, chain, exchange codes |
| Corporate action announcements |
| News articles for stocks and crypto |
| Fixed income (bond/treasury) quotes |
| Short-sale locate requests and quotes |
ReadMe Docs MCP
Docs are scoped to the Trading API, Market Data API, and Authentication API specs; Broker API endpoint docs are intentionally excluded from this server.
If the ReadMe MCP lookup fails, tool responses include fallback links to Alpaca's public docs plus llms.txt and llms-full.txt.
Features
Market Data — Real-time quotes, trades, and price bars for stocks, crypto, and options. Historical data with flexible timeframes. Option Greeks and implied volatility.
Account Management — View balances, buying power, account status, and portfolio history.
Order Management — Place market, limit, stop, stop-limit, and trailing-stop orders for stocks, crypto, and options. Cancel orders individually or in bulk.
Options Trading — Search contracts by expiration/strike/type. Place single-leg or multi-leg strategies. Get latest quotes, Greeks, and IV.
Crypto Trading — Market, limit, and stop-limit orders with GTC/IOC. Quantity or notional-based.
Position Management — View, close, or liquidate positions. Exercise option contracts.
News — News articles filterable by ticker and date range.
Market Status — Market open/close times, calendar, corporate actions.
Watchlists — Create, update, and manage watchlists.
Asset Search — Query details for stocks, ETFs, crypto, and options with filtering.
Example Prompts
Basic Trading
What's my current account balance and buying power on Alpaca?
Show me my current positions in my Alpaca account.
Buy 5 shares of AAPL at market price.
Sell 5 shares of TSLA with a limit price of $300.
Cancel all open stock orders.
Cancel the order with ID abc123.
Liquidate my entire position in GOOGL.
Close 10% of my position in NVDA.
Place a limit order to buy 100 shares of MSFT at $450.
Place a market order to sell 25 shares of META.
Crypto Trading
Place a market order to buy 0.01 ETH/USD.
Place a limit order to sell 0.01 BTC/USD at $110,000.
Option Trading
Show me available option contracts for AAPL expiring next month.
Get the latest quote for the AAPL250613C00200000 option.
Retrieve the option snapshot for the SPY250627P00400000 option.
Liquidate my position in 2 contracts of QQQ calls expiring next week.
Place a market order to buy 1 call option on AAPL expiring next Friday.
What are the option Greeks for the TSLA250620P00500000 option?
Find TSLA option contracts with strike prices within 5% of the current market price.
Get SPY call options expiring the week of June 16th, 2025, within 10% of market price.
Place a bull call spread using AAPL June 6th options: one with a 190.00 strike and the other with a 200.00 strike.
Exercise my NVDA call option contract NVDA250919C001680.
Market Information
To access the latest 15-minute data, you need to subscribe to the Algo Trader Plus Plan.
What are the market open and close times today?
Show me the market calendar for next week.
Show me recent cash dividends and stock splits for AAPL, MSFT, and GOOGL in the last 3 months.
Get all corporate actions for SPY including dividends, splits, and any mergers in the past year.
What are the upcoming corporate actions scheduled for SPY in the next 6 months?
Historical & Real-time Data
Show me AAPL's daily price history for the last 5 trading days.
What was the closing price of TSLA yesterday?
Get the latest bar for GOOGL.
What was the latest trade price for NVDA?
Show me the most recent quote for MSFT.
Retrieve the last 100 trades for AMD.
Show me 1-minute bars for AMZN from the last 2 hours.
Get 5-minute intraday bars for TSLA from last Tuesday through last Friday.
Get a comprehensive stock snapshot for AAPL showing latest quote, trade, minute bar, daily bar, and previous daily bar all in one view.
Compare market snapshots for TSLA, NVDA, and MSFT to analyze their current bid/ask spreads, latest trade prices, and daily performance.
Orders
Show me all my open and filled orders from this week.
What orders do I have for AAPL?
List all limit orders I placed in the past 3 days.
Filter all orders by status: filled.
Get me the order history for yesterday.
Watchlists
At this moment, you can only view and update trading watchlists created via Alpaca's Trading API through the API itself
Create a new watchlist called "Tech Stocks" with AAPL, MSFT, and NVDA.
Update my "Tech Stocks" watchlist to include TSLA and AMZN.
What stocks are in my "Dividend Picks" watchlist?
Remove META from my "Growth Portfolio" watchlist.
List all my existing watchlists.
Asset Information
Search for details about the asset 'AAPL'.
Show me the top 5 tradable crypto assets by trading volume.
Get all NASDAQ active US equity assets and filter the results to show only tradable securities
Combined Scenarios
Get today's market clock and show me my buying power before placing a limit buy order for TSLA at $340.
Place a bull call spread with SPY July 3rd options: sell one 5% above and buy one 3% below the current SPY price.
Available Tools
Account & Portfolio
get_account_info— Balance, margin, and account statusget_account_config— Trading restrictions, margin settings, PDT checksupdate_account_config— Update account configuration settingsget_portfolio_history— Equity and P/L over timeget_account_activities— Fills, dividends, transfersget_account_activities_by_type— Activities filtered by type
Trading (Orders)
get_orders— Retrieve orders with filtersget_order_by_id— Single order by IDget_order_by_client_id— Single order by client order IDreplace_order_by_id— Replace an existing open ordercancel_order_by_id— Cancel a specific ordercancel_all_orders— Cancel all open ordersplace_stock_order— Stocks/ETFs (market, limit, stop, stop-limit, trailing-stop, brackets)place_crypto_order— Crypto (market, limit, stop-limit)place_option_order— Options (single-leg or multi-leg)
Positions
get_all_positions— All current positionsget_open_position— Details for a specific positionclose_position— Close a specific positionclose_all_positions— Liquidate entire portfolioexercise_options_position— Exercise a held option contractdo_not_exercise_options_position— Do-not-exercise instruction
Watchlists
create_watchlist— Create a new watchlistget_watchlists— List all watchlistsget_watchlist_by_id— Get a specific watchlistupdate_watchlist_by_id— Update a watchlistdelete_watchlist_by_id— Delete a watchlistadd_asset_to_watchlist_by_id— Add an asset to a watchlistremove_asset_from_watchlist_by_id— Remove an asset from a watchlist
Assets & Market Info
get_all_assets— List assets with optional filteringget_asset— Detailed info for a specific assetget_option_contracts— Option contracts for underlying symbol(s)get_option_contract— Single option contract by symbol or IDget_calendar— Market calendar for a date rangeget_clock— Current market status and next open/closeget_corporate_action_announcements— Corporate action announcementsget_corporate_action_announcement— Single announcement by ID
Stock Data
get_stock_bars— Historical OHLCV barsget_stock_quotes— Historical bid/ask quotesget_stock_trades— Historical tradesget_stock_latest_bar— Latest minute barget_stock_latest_quote— Latest quoteget_stock_latest_trade— Latest tradeget_stock_snapshot— Comprehensive snapshotget_most_active_stocks— Most active by volume/trade countget_market_movers— Top gainers and losers
Crypto Data
get_crypto_bars— Historical OHLCV barsget_crypto_quotes— Historical quotesget_crypto_trades— Historical tradesget_crypto_latest_bar— Latest minute barget_crypto_latest_quote— Latest quoteget_crypto_latest_trade— Latest tradeget_crypto_snapshot— Comprehensive snapshotget_crypto_latest_orderbook— Latest orderbook
Options Data
get_option_bars— Historical OHLCV barsget_option_trades— Historical tradesget_option_latest_trade— Latest tradeget_option_latest_quote— Latest quote with bid/ask and exchange infoget_option_snapshot— Snapshot with Greeks and IVget_option_chain— Full option chain for an underlyingget_option_exchange_codes— Exchange code to name mapping
Corporate Actions
get_corporate_actions— Corporate action announcements from market data
News
get_news— News articles for stocks and crypto
Fixed Income Data
get_fixed_income_latest_quotes— Latest quotes for fixed income securities by ISIN
Locates (Short Selling)
get_locates— List locate requests filtered by status, symbol, or date rangecreate_locate— Create a locate request for a short saleget_locate— Get a single locate request by IDget_locate_quotes— Get locate availability and pricing for symbols
Documentation
search_alpaca_docs— Search Alpaca documentation pages and guidesfetch_alpaca_doc— Fetch one Alpaca ReadMe documentation page by page IDsearch_alpaca_api_specs— Search Alpaca API reference endpoints by topic, path, parameter, or schema termlist_alpaca_api_endpoints— List endpoints for one allowed Alpaca OpenAPI specget_alpaca_endpoint_docs— Fetch reference docs for one exact Alpaca API endpoint by method and path
Testing
The project includes a multi-layered test suite that runs in CI on every pull request:
Integrity tests — Validate consistency between OpenAPI specs, toolset definitions, and tool name/description overrides. No network or credentials required.
Server construction tests — Build the server with mocked credentials and verify the correct number of tools are exposed. No network required.
Paper API integration tests — Execute real calls against the Alpaca paper trading API, covering account info, market data, order lifecycle, watchlists, positions, and more. Requires
ALPACA_API_KEYandALPACA_SECRET_KEY.ReadMe integration tests — Execute live documentation lookup calls against Alpaca's ReadMe MCP. Requires
ALPACA_RUN_README_INTEGRATION=truewhen run locally.
Run the full suite locally:
# Core tests (no credentials needed)
pytest tests/test_integrity.py tests/test_server_construction.py -v
# Integration tests (requires paper API keys)
ALPACA_API_KEY=... ALPACA_SECRET_KEY=... pytest tests/ -m integration -v
# ReadMe docs integration tests (requires network, no Alpaca credentials)
ALPACA_RUN_README_INTEGRATION=true pytest tests/test_readme_integration.py -vProject Structure
alpaca-mcp-server/
├── src/
│ └── alpaca_mcp_server/
│ ├── __init__.py
│ ├── cli.py ← CLI entry point
│ ├── server.py ← FastMCP server built from OpenAPI specs
│ ├── tool_registry.py ← Tool names, descriptions, and output risk classifications
│ ├── toolsets.py ← Toolset → operationId allowlists
│ ├── overrides.py ← Hand-crafted tools for complex trading endpoints
│ ├── market_data_overrides.py ← Hand-crafted tools for historical data
│ ├── readme_docs.py ← Read-only proxy tools for Alpaca ReadMe docs
│ └── specs/
│ ├── trading-api.json
│ └── market-data-api.json
├── tests/
│ ├── conftest.py ← Shared fixtures and paper-account cleanup
│ ├── test_integrity.py ← Spec ↔ toolset ↔ names consistency checks
│ ├── test_server_construction.py ← Server build verification
│ ├── test_readme_integration.py ← Live ReadMe docs MCP integration tests
│ └── test_paper_integration.py ← Paper API integration tests
├── scripts/
│ └── sync-specs.sh ← Download latest OpenAPI specs
├── .github/
│ └── workflows/
│ ├── ci.yml ← CI pipeline (core + integration)
│ └── publish-pypi.yml ← PyPI publish on GitHub Release
├── AGENTS.md ← Instructions for coding agents
├── pyproject.toml
└── README.mdTroubleshooting
uv/uvx not found: Install uv from the official guide (https://docs.astral.sh/uv/getting-started/installation/) and then restart your terminal so
uv/uvxare on PATH.Credentials missing: Set
ALPACA_API_KEYandALPACA_SECRET_KEYin the client'senvblock. Paper mode default isALPACA_PAPER_TRADE = True.Client didn't pick up new config: Restart the client (Cursor, Claude Desktop, VS Code) after changes.
HTTP port conflicts: If using
--transport streamable-http, change--portto a free port.
Disclosure
Insights generated by our MCP server and connected AI agents are for educational and informational purposes only and should not be taken as investment advice. Alpaca does not recommend any specific securities or investment strategies.Please conduct your own due diligence before making any decisions. All firms mentioned operate independently and are not liable for one another.
Options trading is not suitable for all investors due to its inherent high risk, which can potentially result in significant losses. Please read Characteristics and Risks of Standardized Options (Options Disclosure Document) before investing in options.
Alpaca does not prepare, edit, endorse, or approve Third Party Content. Alpaca does not guarantee the accuracy, timeliness, completeness or usefulness of Third Party Content, and is not responsible or liable for any content, advertising, products, or other materials on or available from third party sites.
All investments involve risk, and the past performance of a security, or financial product does not guarantee future results or returns. There is no guarantee that any investment strategy will achieve its objectives. Please note that diversification does not ensure a profit, or protect against loss. There is always the potential of losing money when you invest in securities, or other financial products. Investors should consider their investment objectives and risks carefully before investing.
The algorithm's calculations are based on historical and real-time market data but may not account for all market factors, including sudden price moves, liquidity constraints, or execution delays. Model assumptions, such as volatility estimates and dividend treatments, can impact performance and accuracy. Trades generated by the algorithm are subject to brokerage execution processes, market liquidity, order priority, and timing delays. These factors may cause deviations from expected trade execution prices or times. Users are responsible for monitoring algorithmic activity and understanding the risks involved. Alpaca is not liable for any losses incurred through the use of this system.
Past hypothetical backtest results do not guarantee future returns, and actual results may vary from the analysis.
The Paper Trading API is offered by AlpacaDB, Inc. and does not require real money or permit a user to transact in real securities in the market. Providing use of the Paper Trading API is not an offer or solicitation to buy or sell securities, securities derivative or futures products of any kind, or any type of trading or investment advice, recommendation or strategy, given or in any manner endorsed by AlpacaDB, Inc. or any AlpacaDB, Inc. affiliate and the information made available through the Paper Trading API is not an offer or solicitation of any kind in any jurisdiction where AlpacaDB, Inc. or any AlpacaDB, Inc. affiliate (collectively, "Alpaca") is not authorized to do business.
Securities brokerage services are provided by Alpaca Securities LLC ("Alpaca Securities"), member FINRA/SIPC, a wholly-owned subsidiary of AlpacaDB, Inc. Technology and services are offered by AlpacaDB, Inc.
Cryptocurrency services are provided by Alpaca Crypto LLC ("Alpaca Crypto"), a FinCEN registered money services business (NMLS # 2160858), and a wholly-owned subsidiary of AlpacaDB, Inc. Alpaca Crypto is not a member of SIPC or FINRA. Cryptocurrencies are not stocks and your cryptocurrency investments are not protected by either FDIC or SIPC. Cryptocurrency assets are highly volatile and speculative, involving substantial risk of loss, and are not insured by the FDIC or any government agency. Customers should be aware of the various risks prior to engaging these services, including potential loss of principal, cybersecurity considerations, regulatory developments, and the evolving nature of digital asset technology. For additional information on the risks of cryptocurrency, please click here.
This is not an offer, solicitation of an offer, or advice to buy or sell securities or cryptocurrencies or open a brokerage account or cryptocurrency account in any jurisdiction where Alpaca Securities or Alpaca Crypto, respectively, are not registered or licensed, as applicable.
Privacy Policy
For information about how Alpaca handles your data, please review:
Data Collection
What is collected: User agent string (
APCA-MCP-TRADING/<version>) for API callsHow it's used: To identify MCP server usage and improve user experience
Third-party sharing: Not shared with third parties
Retention: Retained per Alpaca's standard data retention policy
Opt-out: Set the
ALPACA_MCP_USER_AGENTenvironment variable to an empty string; no User-Agent header will be sent
Security Notice
This server can place real trades and access your portfolio. Treat your API keys as sensitive credentials. Review all actions proposed by the LLM carefully, especially for complex options strategies or multi-leg trades.
HTTP Transport Security: Streamable HTTP defaults to localhost (127.0.0.1:8000) and validates Host and Origin headers. Docker defaults to stdio. Helm defaults to ClusterIP HTTP with ingress off. Binding to 0.0.0.0 does not provide authentication. This package does not configure MCP OAuth, so do not expose it directly to the public internet. Operators that provide standards-based MCP authentication must also set FastMCP's FASTMCP_HTTP_ALLOWED_HOSTS to the exact public hostnames.
Support
For issues or questions, please contact us at support@alpaca.markets.
GitHub Issues: https://github.com/alpacahq/alpaca-mcp-server/issues GitHub Pull requests: https://github.com/alpacahq/alpaca-mcp-server/pulls
MCP Registry Metadata
mcp-name: io.github.alpacahq/alpaca-mcp-server
Available Tools
72 toolsadd_asset_to_watchlist_by_idA
Add an asset by symbol to a specific watchlist.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | No | the symbol name to add to the watchlist | |
| watchlist_id | Yes | watchlist id |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the action 'Add' with no details about idempotency, failure behavior, whether it appends or replaces, or any side effects. For a write operation, this is insufficient 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 a single, well-front-loaded sentence. Every word adds meaning, and there is no redundant or filler content. It is appropriately concise for a simple operation.
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, complete schema coverage, and presence of an output schema, the description is minimally sufficient. However, it lacks any behavioral context or guidance about interaction with sibling tools, making it only complete enough for a straightforward selection but not for understanding side effects or error conditions.
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 parameters described in the schema. The description adds minimal meaning beyond the schema, only tying 'by symbol' to the asset and 'specific watchlist' to the watchlist_id. It does not add syntax or additional semantics, 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 uses a specific verb 'Add' with a clear resource ('an asset by symbol') and destination ('a specific watchlist'). It clearly distinguishes this from sibling tools like remove_asset_from_watchlist_by_id and update_watchlist_by_id.
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 usage context (adding an asset to a watchlist) but does not explicitly state when to use this tool versus alternatives. It does not mention prerequisites like needing an existing watchlist or that the asset must be known, nor does it reference the opposing remove operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_all_ordersA
Cancel all open orders.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose safety-relevant behavior. It states the action but does not mention irreversibility, the full scope of orders affected (stocks, crypto, options), or potential side effects. This is a significant gap for a destructive mutation 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 a single, direct sentence with zero unnecessary words. It is perfectly concise and 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 tool with no parameters and an output schema present, the description adequately states the operation's purpose and scope. However, it omits any caution or confirmation details that could be expected for a cancel-all operation, though these are more behavioral than contextual.
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 takes zero parameters, and the schema coverage is trivially 100%. Per the baseline for 0-param tools, the description does not need to add parameter information. No additional 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 'Cancel all open orders' uses a specific verb ('Cancel') and resource ('all open orders'), clearly distinguishing it from sibling tools like cancel_order_by_id and replace_order_by_id. The scope is unambiguous and operational.
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 the goal is to cancel every open order at once. However, it does not explicitly mention alternatives (e.g., cancel_order_by_id) or exclusion conditions, so the usage guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_order_by_idA
Cancel a specific order by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes | order id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden, but it only states the core action ('Cancel'). It does not disclose implications such as irreversibility, restrictions on order state (e.g., only open orders), or error handling if the order no longer exists. The behavioral scope is minimal.
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, concise sentence that is front-loaded with the action verb and resource. No extraneous words 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 tool with one parameter and no output schema, the description is minimally adequate but lacks context on side effects, exceptions, or what happens when the order cannot be canceled. Given the simplicity, this is a reasonable but not thorough 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?
The schema already fully describes the order_id parameter as a UUID string with the description 'order id', achieving 100% coverage. The tool description adds no additional meaning, 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 action ('Cancel') and the target resource ('a specific order'), with the qualifier 'by its ID' distinguishing it from bulk-cancel and other order operations. This 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?
The description does not explicitly mention alternatives or exclusions. The phrase 'a specific order' implies single-order cancellation, contrasting with sibling tools like cancel_all_orders, but it does not name them or provide 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.
close_all_positionsA
Closes all open positions by placing sell orders for each. If the market is closed, the sell orders will remain queued and execute at the next market open.
| Name | Required | Description | Default |
|---|---|---|---|
| cancel_orders | No | If true is specified, cancel all open orders before liquidating all positions. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It discloses an important behavioral trait: sell orders remain queued when the market is closed and execute later. However, it does not mention the optional cancellation of existing orders, potential partial failures, or reversibility, which are significant for a mutation 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 concise and front-loaded: two sentences, the first stating the main action, the second adding a valuable edge-case caveat. No unnecessary words 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 with one optional parameter and an output schema. The description covers the core function and a key market-closed behavior, which is sufficient for most use cases. It could mention more about order types or failure modes, but overall it is reasonably 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 input schema fully describes the only parameter 'cancel_orders' with a clear conditional description. Schema coverage is 100%, so the description does not need to add parameter details; 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's action and scope: 'Closes all open positions by placing sell orders for each.' This is specific and distinguishes it from the sibling 'close_position' which presumably targets a single position.
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 that this tool is for liquidating all open positions, which differentiates it from single-position tools. However, it does not explicitly mention alternatives or when not to use it, though the context is strong enough to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_positionA
Closes a specific position for a single symbol by placing a sell order. If the market is closed, the sell order will remain queued and execute at the next market open.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | No | the number of shares to liquidate. Can accept up to 9 decimal points. Cannot work with percentage | |
| percentage | No | percentage of position to liquidate. Must be between 0 and 100. Would only sell fractional if position is originally fractional. Can accept up to 9 decimal points. Cannot work with qty | |
| symbol_or_asset_id | Yes | symbol or assetId |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively discloses that the tool places a sell order and that if the market is closed, the order queues and executes at the next open. This exceeds minimal coverage, though it could mention order type or default full-close 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 concise sentences, front-loaded with the primary action and followed by an important behavioral note. Every sentence provides value 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 the tool's moderate complexity, the description covers the core purpose and the notable queued-order behavior. An output schema exists, so return values need not be described. It lacks explicit mention that omitting qty/percentage closes the entire position, but the title and description imply a full close.
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 no additional parameter semantics beyond the schema, such as the default behavior when neither qty nor percentage is provided, which would be valuable but is not present.
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: 'Closes a specific position for a single symbol by placing a sell order.' The verb 'closes' and the resource 'position' are specific, and 'for a single symbol' distinguishes it from sibling tools like close_all_positions.
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 a single position, contrasting with close_all_positions, but does not explicitly state when to use this tool over alternatives or provide exclusions. The queued order behavior is a usability note, not a direct alternative comparison.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_locateA
Creates a locate request for a short sale. Requires a symbol and quantity. Optionally set a limit price and all-or-none flag.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | Yes | Number of shares to locate. Must be positive and in round lots of 100; invalid quantities return HTTP 400. | |
| symbol | Yes | Stock symbol. | |
| all_or_none | No | Reject the locate unless the full requested quantity is available. | |
| limit_price | No | Maximum acceptable locate fee per share, as a decimal string in USD. If omitted, any quoted fee is accepted. | |
| Idempotency-Key | No | Optional idempotency key for safe retries. Reusing the same key with the same request returns the original locate response. Reusing the same key with a different request returns HTTP 422. We recommend always providing this header in production so timeouts, network errors, and 5xx responses can be safely retried without creating duplicate locates. Use a client-generated unique value, such as a UUID, for each logical locate. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It states that the tool creates a locate request, but does not disclose idempotency behavior, error conditions, side effects on locate inventory, or what happens when quantity or all-or-none constraints are violated. For a mutating operation without annotations, this is a meaningful gap.
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 tight, front-loaded sentence that states the action, the domain, the required inputs, and the optional inputs with no wasted words. It earns its place entirely.
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 and fully described input properties, the description is minimally adequate for basic invocation. However, it omits guidance about the recommended Idempotency-Key usage and does not distinguish when to use this creation tool versus related locate-reading or locate-quote tools, leaving some context to be inferred.
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 symbol, qty, all_or_none, limit_price, and Idempotency-Key. The description adds only a high-level restatement of required and optional parameters, and it uses 'limit price' without clarifying that this refers to the locate fee rather than a stock price, which the schema does 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 names a specific verb and resource: it creates a locate request for a short sale. It clearly distinguishes this creation action from sibling tools like get_locate, get_locate_quotes, and get_locates, which read locate data rather than create it.
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 clear context for use: creating a locate request for a short sale, requires symbol and quantity, with optional limit price and all-or-none flag. It does not explicitly name alternatives or exclusions, but the create-versus-read distinction from the sibling list makes the appropriate use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_watchlistA
Creates a new watchlist with specified symbols.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | The watchlist name. | |
| symbols | No | List of asset symbols to include in the watchlist. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It only restates the basic create operation and does not disclose potential behaviors such as duplicate-name handling, validation errors, idempotency, or permissions. This is minimally informative but not misleading.
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 with no filler or redundancy. It front-loads the core action and resource while naming the relevant content, so an agent can quickly parse the tool's 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 low-complexity creation tool with a complete input schema and an available output schema, the description is nearly sufficient. It identifies what to create and what can be included, while the schema covers parameter requirements and the output schema covers return structure. The main gap is the lack of guidance about edge cases, but this is a minor omission here.
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% description coverage, so the schema already documents both 'name' and 'symbols'. The description adds little beyond restating that symbols are included in the new watchlist, which is consistent with the schema. 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 action (create), the resource (watchlist), and the key content (specified symbols). It differentiates from sibling tools like update_watchlist_by_id and delete_watchlist_by_id because 'new' signals creation rather than modification or deletion.
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 by the word 'new' and by the sibling set: this is the watchlist creation tool, distinct from update, delete, add-asset, and list tools. However, it does not explicitly mention when not to use it or direct users toward alternatives like add_asset_to_watchlist_by_id when modifying an existing watchlist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_watchlist_by_idA
Delete a specific watchlist by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| watchlist_id | Yes | watchlist id |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description must disclose behavioral traits. It only states the action 'delete' without mentioning permanence, cascading effects, auth requirements, or error behavior. Minimal value beyond the name.
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?
Single sentence with zero waste; front-loaded verb and object.
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?
Tool is simple with one well-documented parameter; description is adequate for basic usage, though it omits behavioral details like return codes or idempotency, which are not critical given low 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 covers 100% of parameter with description 'watchlist id', so baseline 3 applies. Description adds no additional meaning to the 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?
Description uses specific verb 'Delete' with resource 'watchlist' and qualifier 'by its ID', clearly distinguishing from sibling operations like update_watchlist_by_id or get_watchlist_by_id.
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 explicit when-to-use or alternative mention. Usage is implied by the name and action, but the description lacks guidance on prerequisites or distinctions from other watchlist operations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
do_not_exercise_options_positionB
Submits a do-not-exercise instruction for a held option contract.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol_or_contract_id | Yes | Option contract symbol or ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action without explaining side effects, reversibility, or any submission requirements. No mention of potential outcomes or special conditions, making it insufficiently transparent for an action that modifies an option position.
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 10 words, front-loaded with the verb 'Submits.' It contains no redundant information and is efficiently 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?
This is an action tool with no output schema and no annotations. The description fails to provide context such as when the instruction is valid, what happens after submission, or any restrictions. Given the existence of the closely related exercise_options_position, more explanatory detail is required to fully understand the tool's behavior and constraints.
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 has one parameter with a description ('Option contract symbol or ID'), giving 100% coverage. The tool description adds the qualifier 'held option contract,' clarifying that the parameter must refer to a contract in the user's position, which goes beyond the schema's generic phrasing and improves semantic clarity.
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 ('Submits') and a resource ('do-not-exercise instruction for a held option contract'), clearly distinguishing it from the sibling exercise_options_position. The 'do-not-exercise' phrasing directly contrasts with the exercise action, 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?
No guidance is provided on when to use this tool versus exercise_options_position or other alternatives. The description does not mention prerequisites, timing, or exclusions, leaving the agent to infer usage solely from the name and generic description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exercise_options_positionA
Exercises a held option contract, converting it into the underlying asset.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol_or_contract_id | Yes | Option contract symbol or ID. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must cover behavioral disclosure. It reveals the primary effect (converting option to underlying asset), which is valuable, but it does not mention reversibility, cash requirements, expiration constraints, or whether it applies to both calls and puts. This is a moderate level of transparency.
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, concise sentence that immediately states the action and result. Every word contributes value, and the structure is front-loaded with the key verb.
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 too brief for a financial action tool with no annotations or output schema. It does not clarify behavior for both call and put options (the phrase 'converting it into the underlying asset' is call-centric and may mislead for puts), nor does it mention prerequisites, return values, or side effects. This leaves 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?
The input schema already fully describes the only parameter ('Option contract symbol or ID.'), so schema coverage is 100%. The tool description adds no additional parameter meaning, hence 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's function with a specific verb ('exercises') and resource ('held option contract'), and adds the key consequence ('converting it into the underlying asset'). This distinguishes it from siblings like 'do_not_exercise_options_position' and 'place_option_order'.
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 use case (exercise an option you hold) but does not explicitly explain when to use it versus alternatives, nor mention any prerequisites or exclusions. The sibling tool 'do_not_exercise_options_position' is not referenced, so guidance on when not to use this tool is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_alpaca_docFetch Alpaca DocARead-only
Fetch one Alpaca ReadMe documentation page by page ID. Use after search_alpaca_docs returns a relevant page ID, or when a page ID is already known. Read-only; not for API endpoint lookup by method and path.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces this with 'Read-only'. It adds useful context about the tool's narrow scope (fetching documentation pages by ID) but does not disclose additional behavioral details such as error handling, pagination, or response format. With annotations covering the safety profile, this is adequate 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?
Three sentences with no redundancy. Each sentence earns its place: the first states the core function, the second gives usage context, and the third clarifies the tool's limitation. Information is front-loaded and scannable.
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 fetch-by-ID tool with one parameter, read-only annotations, and an output schema present, the description covers everything an agent needs: what it does, when to use it, what the ID means, and what it is not for. No critical 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 schema only defines an 'id' string with no description, so the tool description carries the full burden for parameter meaning. It clarifies that 'id' is a documentation page ID, which is essential for correct invocation. Since there is only one parameter and its purpose is clearly stated, the description compensates well for the 0% 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 identifies the action ('Fetch one Alpaca ReadMe documentation page'), the resource ('Alpaca ReadMe documentation page'), and the key parameter ('page ID'). It also differentiates itself from related lookup tools by explicitly stating it is not for API endpoint lookup by method and path.
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: after search_alpaca_docs returns a relevant page ID, or when a page ID is already known. It also provides a clear exclusion ('not for API endpoint lookup by method and path'), which helps route the agent away from sibling tools like search_alpaca_api_specs or get_alpaca_endpoint_docs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_activitiesB
Returns a list of account activities such as fills, dividends, and transfers.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Filter activities by their creation date (created_at), not the activity's settlement date. For non-trade activities such as fees, the creation date is typically the day after the trade date (in UTC). Both formats YYYY-MM-DD and YYYY-MM-DDTHH:MM:SSZ are supported. | |
| after | No | Get activities created after this date. Both formats YYYY-MM-DD and YYYY-MM-DDTHH:MM:SSZ are supported. | |
| until | No | Get activities created before this date. Both formats YYYY-MM-DD and YYYY-MM-DDTHH:MM:SSZ are supported. | |
| category | No | The activity category. Cannot be used with "activity_types" parameter. | |
| order_id | No | Filter activities associated with a specific order. Useful for retrieving the fills that make up a completely filled order. | |
| direction | No | The chronological order of response based on the activity datetime. | desc |
| page_size | No | The maximum number of entries to return in the response. | |
| page_token | No | Token used for pagination. Provide the ID of the last activity from the last page to retrieve the next set of results. | |
| activity_types | No | A comma-separated list of activity types used to filter the results. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It only says returns a list; there is no mention of pagination, default ordering, date semantics (created_at vs settlement date), or how filtering parameters affect the result. The schema partially covers some of this, but the description itself adds little behavioral 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?
A single, front-loaded sentence with no filler. The examples are meaningful and help convey the tool's scope without adding 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 output schema and 100% parameter coverage reduce the burden on the description. However, with nine parameters and a large sibling set, the description lacks usage context such as when to choose this over get_account_activities_by_type or how pagination behaves. It is adequate but leaves clear 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?
Input schema coverage is 100%, so the baseline is 3. The description's examples of fills, dividends, and transfers loosely align with activity_types but add no parameter semantics or syntax beyond what the schema already documents. It does not compensate with additional 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?
States a specific verb and resource: returns account activities, with informative examples (fills, dividends, transfers). It is clear but does not explicitly distinguish itself from the sibling get_account_activities_by_type, though the difference is partially inferable from the name.
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 on when to use this tool versus alternatives such as get_account_activities_by_type or get_orders. It does not state scenarios, exclusions, or that a more targeted tool exists for filtered activity types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_activities_by_typeC
Returns account activity entries for a specific type of activity.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Filter activities by their creation date (created_at), not the activity's settlement date. For non-trade activities such as fees, the creation date is typically the day after the trade date (in UTC). Both formats YYYY-MM-DD and YYYY-MM-DDTHH:MM:SSZ are supported. | |
| after | No | Get activities created after this date. Both formats YYYY-MM-DD and YYYY-MM-DDTHH:MM:SSZ are supported. | |
| until | No | Get activities created before this date. Both formats YYYY-MM-DD and YYYY-MM-DDTHH:MM:SSZ are supported. | |
| order_id | No | Filter activities associated with a specific order. Useful for retrieving the fills that make up a completely filled order. | |
| direction | No | The chronological order of response based on the activity datetime. | desc |
| page_size | No | The maximum number of entries to return in the response. | |
| page_token | No | Token used for pagination. Provide the ID of the last activity from the last page to retrieve the next set of results. | |
| activity_type | Yes | The activity type you want to view entries for. A list of valid activity types can be found at the bottom of this page. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral burden, but it only restates the obvious retrieval behavior and type filter. It omits context such as pagination behavior, created_at-based filtering, and the fact that activity_type values come from an external enumerated list; much of that detail lives only in the parameter schema.
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 tight sentence with the verb and object front-loaded. It is appropriately concise, though it is so brief that it skips usage differentiation and behavioral context that would have made it more valuable.
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 8 parameters, no annotations, and a required activity_type whose valid values are not enumerated, the one-sentence description is insufficient for confident invocation. It does not explain how this endpoint relates to get_account_activities nor where valid activity_type values can be found; the output schema helps with return shape but not with these usage 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 description coverage is 100%, and the parameters already carry detailed descriptions for date filtering, pagination, ordering, and order_id association. The tool description itself adds no parameter-level meaning beyond the word 'type', which maps straightforwardly to the required activity_type 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 concrete verb and resource ('Returns account activity entries') and names the core filter ('for a specific type of activity'), which distinguishes it from the broader get_account_activities sibling. It is clear, though the differentiation is implicit rather than 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?
No guidance is given for when to use this tool versus get_account_activities or other activity-related endpoints. The description and schema leave the relationship to sibling tools unstated, so an agent has no basis for choosing between them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_configA
Retrieves the current account configuration settings, including trading restrictions, margin settings, PDT checks, and options trading level.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It explicitly conveys a read-only operation ('Retrieves') and indicates the current state of the configuration, adding context beyond the tool name. While it does not discuss error conditions or permissions, the zero-parameter, read-only nature makes this adequate, though slightly more detail on response traits could push it higher.
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 leads with the action and includes a concise list of the settings covered. There is no filler 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?
The tool has zero parameters and includes an output schema for response details, so the description's job is simply to state what the tool does and what it covers. The sentence fully achieves this, making the description complete for this simple read-only 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?
This tool has zero parameters, so the baseline is 4 per the rubric. The description cannot add parameter-specific meaning because there are none; the description's enumeration of output contents is the relevant semantic contribution.
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 'Retrieves' and clearly identifies the resource as 'account configuration settings', while enumerating key settings (trading restrictions, margin, PDT checks, options level). This differentiates it from siblings like get_account_info and update_account_config.
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 this tool: whenever the agent needs the account's configuration settings, such as margin or PDT status. It does not explicitly mention alternatives or exclusion criteria, but the specificity of the listed settings provides enough contextual guidance to distinguish it from other account-related tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_account_infoA
Retrieves and formats the current account information including balances and status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'retrieves and formats,' but does not explain what 'formats' means, whether authentication is required, data freshness, or any side effects. Basic read-only behavior is implied but not explicitly 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 a single, front-loaded sentence that is efficient and avoids excessive detail. The phrase 'and formats' is slightly vague and does not add much actionable value, but overall it is 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?
Given the tool's simplicity (no parameters) and the presence of an output schema, the description is adequate. It identifies the core resource and data elements ('balances and status'). However, it could slightly benefit from noting that it returns current data or clarifying the 'formats' aspect, though the output schema likely covers return structure.
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 100% schema description coverage, so there are no parameter semantics to explain. Per the guideline, this yields a baseline of 4. The description adds no unnecessary parameter information, which 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 what the tool does: 'Retrieves and formats the current account information including balances and status.' It uses a specific verb ('retrieves') and resource ('current account information') and adds distinguishing detail ('balances and status') that separates it from siblings like get_account_config or get_account_activities.
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 about when to use this tool versus alternatives. It doesn't mention exclusions, prerequisites, or scenarios where another tool (e.g., get_account_config) would be more appropriate. The context signals show no such guidance in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_assetsA
Get all available assets with optional filtering. WARNING: The unfiltered response is very large (thousands of assets). Always narrow results with the status, asset_class, or exchange parameters. To look up a single asset, use get_asset instead.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | e.g. "active". By default, all statuses are included. | |
| exchange | No | Optional AMEX, ARCA, BATS, NYSE, NASDAQ, NYSEARCA, OTC or CRYPTO | |
| attributes | No | Comma separated values to query for more than one attribute. Assets which have any of the given attributes will be included. Supported values: - `ptp_no_exception`: Asset is a Publicly Traded Partnership (PTP) without a qualified notice; non-U.S. customers may incur 10% withholding on gross proceeds as per IRS guidance, and are blocked from being purchased by default. - `ptp_with_exception`: Users can open positions in these PTPs without general restrictions. - `ipo`: Accepting limit orders only before the stock begins trading on the secondary market. - `has_options`: The underlying equity has listed options available on the platform. Note: if the equity had inactive/expired contracts in the past, this will still show up. - `options_late_close`: Indicates the underlying asset's options contracts close at 4:15pm ET instead of the standard 4:00pm ET. - `fractional_eh_enabled`: Indicates the asset accepts fractional orders during extended hours sessions (pre-market, post-market, and overnight if enabled). - `overnight_tradable`: Asset is eligible for overnight (24x5) trading in supported venues on the platform. - `overnight_halted`: Asset is eligible for overnight trading but is currently halted/blocked for overnight sessions due to risk, corporate action, compliance, or venue constraints. | |
| asset_class | No | Defaults to us_equity. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It warns about the large unfiltered response size and advises filtering, which is important behavioral context beyond the schema. It doesn't mention pagination or rate limits, but the warning is the most critical behavioral trait for this list endpoint, so 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?
The description is two sentences with zero wasted words. It front-loads the purpose, includes an essential warning, and names the alternative tool. Every sentence contributes 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?
Given the output schema exists, return values don't need explanation. The description covers the essential usage context: it's a list tool with optional filters, warns about the large response, and directs to a more specific sibling tool. This is complete for a filtered-list tool with fully documented 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?
Schema description coverage is 100%, with each parameter already having a detailed description, especially the attributes enum. The description adds a hint to use status, asset_class, or exchange for narrowing, but doesn't add new syntax or detail 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 uses a specific verb and resource: "Get all available assets with optional filtering." It explicitly distinguishes from the sibling tool get_asset by stating "To look up a single asset, use get_asset instead," making the scope clear.
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 by warning that the unfiltered response is very large and instructing to always narrow results with status, asset_class, or exchange. It also names the alternative tool (get_asset) for single-asset lookups, which is clear exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_positionsA
Retrieves all current positions in the portfolio as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full burden of behavioral disclosure. It only states the return format (JSON) and does not mention whether the operation is read-only, requires permissions, or if there are any side effects. This is a significant gap for a tool with no annotation support.
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 with no filler. Every word contributes to understanding the tool's action, scope, and output format.
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 that there are no parameters and an output schema exists, the description is sufficient. It specifies what the tool does ('retrieves all current positions'), the scope ('in the portfolio'), and the return format ('as JSON'), which is complete for a simple read-only listing 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 tool has zero parameters, so the schema trivially covers 100% of parameters. The baseline of 4 applies since there is no parameter information to add; the description correctly focuses on what the tool returns.
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 'Retrieves' and the resource 'all current positions in the portfolio', making it distinct from singular siblings like get_open_position and portfolio history tools. The 'all' and 'current' wording provides specific 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 use when a complete snapshot of current positions is needed, but it does not explicitly mention when not to use it or point to alternatives such as get_open_position for a single position. Guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_alpaca_endpoint_docsGet Alpaca Endpoint DocsARead-only
Fetch reference docs for one exact Alpaca API endpoint by method and path. Use when the endpoint is already resolved and details such as parameters, request shape, responses, or examples are needed. Read-only; does not execute the endpoint; excludes Broker API.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| title | No | Trading API | |
| method | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds useful behavioral context beyond those annotations by stating 'Read-only; does not execute the endpoint; excludes Broker API.' This clarifies that fetching docs is a safe operation and sets expectations about scope. 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 with no filler. It front-loads the core purpose, then the usage condition, then the behavioral caveats. 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 tool is simple, has an output schema, and annotations cover safety. The description clearly handles the main decision point (resolved endpoint vs. searching). The only notable gap is the undocumented 'title' parameter, but the default value in the schema mitigates this. Overall it is nearly complete 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 description coverage is 0%, so the description must compensate. It explains that 'method and path' identify the exact endpoint, which adds meaning to those two parameters. However, it does not explain the optional 'title' parameter or provide formatting/value guidance for path or method. This is partial but not complete compensation.
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: 'Fetch reference docs for one exact Alpaca API endpoint by method and path.' It also distinguishes the tool from sibling search/list tools by noting the endpoint must be 'already resolved' and explicitly excludes Broker API. This leaves no ambiguity about 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 a clear usage condition: 'Use when the endpoint is already resolved and details such as parameters, request shape, responses, or examples are needed.' It also clarifies what the tool does not do ('does not execute the endpoint') and its boundary ('excludes Broker API'). It does not explicitly name alternative sibling tools, but the condition strongly implies when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_assetB
Retrieves and formats detailed information about a specific asset.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol_or_asset_id | Yes | symbol or assetId. CUSIP is also accepted for US equities. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'retrieves and formats' but doesn't explain data freshness, potential errors, required permissions, or any limitations. The vagueness of 'formats' also leaves room for ambiguity about the output shape.
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 with no wasted words. It is front-loaded with the action and resource, making it easy to parse quickly.
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 read tool with an output schema, the description is minimally sufficient. However, it lacks context about where this fits relative to snapshot tools and what asset classes are supported, so it's not fully 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 parameter schema fully describes symbol_or_asset_id (including CUSIP acceptance), achieving 100% coverage. The description adds no extra 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 clearly states the verb 'retrieves and formats' and the resource 'detailed information about a specific asset', which is distinct from sibling tools like get_all_assets that list assets. It precisely indicates the scope of a single asset.
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 versus alternatives such as get_stock_snapshot or get_crypto_snapshot. There is no mention of asset classes, use cases, or exclusions, leaving the agent to infer applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calendarA
Retrieves and formats market calendar for specified date range. WARNING: Always provide start and end dates (YYYY-MM-DD). Without date bounds the response contains the entire multi-year calendar and will be extremely large.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | The last date to retrieve data for (inclusive). | |
| start | No | The first date to retrieve data for (inclusive). | |
| date_type | No | Indicates what start and end mean. Default: TRADING. If TRADING is specified, returns a calendar whose trading date matches start, end. If SETTLEMENT is specified, returns the calendar whose settlement date matches start and end. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It usefully reveals that unbounded requests return an extremely large multi-year response, but it leaves 'formats' vague and does not specify what the calendar entries represent beyond what the schema's date_type parameter already describes.
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 focused sentences: the main action is stated first, and the critical warning follows immediately. There is 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?
An output schema exists and all parameters are documented in the schema, so the description need not repeat return details. The warning covers the main invocation hazard. Still, a brief mention of what the calendar contains (e.g., trading holidays, non-trading days) would make it fully self-contained.
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 all parameters, so the baseline is 3. The description adds value by specifying the expected YYYY-MM-DD format and by warning that both bounds should always be supplied even though they are not required by the schema. It adds no new semantics for date_type, but the schema already documents that enum.
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 and resource ('Retrieves and formats market calendar') and limits scope to a date range. It does not explicitly differentiate from sibling tools, but the 'market calendar' resource is distinct enough among the listed 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 warning clearly instructs the caller to always provide start and end dates, explaining the consequence of omission. It does not mention alternatives or when-not-to-use, but there is no obvious sibling for calendar retrieval.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_clockA
Retrieves and formats current market status and next open/close times.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool retrieves and formats data, indicating a read-only operation. However, it does not describe potential side effects, authentication requirements, or behavior when the market is closed (e.g., whether next open/close times are still returned). This minimal disclosure is adequate but leaves 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, well-structured sentence that front-loads the action ('Retrieves and formats') and the target information ('current market status and next open/close times'). No unnecessary words or repetition.
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, has no parameters, and an output schema is present (per context signals). The description conveys the core purpose without needing to detail return fields. It could be slightly more specific about what 'market status' includes (e.g., open/closed, extended hours), but given the output schema, this is adequate.
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 covers 100% of parameter semantics. The description adds no parameter-specific information, but none is needed. Per guidelines, a zero-parameter tool gets a baseline score of 4.
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 and formats current market status and next open/close times. It specifies a distinct resource (current market status, times) and is easily distinguishable from sibling tools like get_calendar, which focus on calendar dates rather than the current state.
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 implied usage is evident: when you need to know if the market is open and when it next opens/closes. However, it does not explicitly mention alternatives or provide exclusion criteria. Since get_calendar is a sibling tool that might be confused with this, additional guidance on when to use get_clock vs get_calendar would improve the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_corporate_action_announcementA
Retrieves a single corporate action announcement by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The corporate announcement's id |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It indicates a read operation via 'Retrieves' but discloses no other behavioral traits such as 404/error handling, permissions, or what happens if the ID does not exist. The description is minimal and does not add value beyond the name and parameter schema.
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 concise sentence that directly states the action without unnecessary words. It is well-structured and 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 simplicity of the tool (one parameter, output schema exists) the description is adequate for basic usage. However, it lacks context on error cases, prerequisites, or how this fits with the plural sibling tool, leaving gaps for an AI agent.
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 the 'id' parameter. The description's 'by ID' adds marginal emphasis but no new semantic detail, matching 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 clearly states the tool retrieves a single corporate action announcement by ID, which is a specific verb+resource+scope. It distinguishes from the sibling 'get_corporate_action_announcements' (plural) by indicating it operates on a single known ID.
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 'by ID' implies the tool is for fetching a specific announcement when the ID is known, but it does not explicitly differentiate when to use this versus the plural sibling tool or mention alternatives/exclusions. Guidance is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_corporate_action_announcementsA
Retrieves corporate action announcements (dividends, mergers, splits, spinoffs). Use a narrow date range and filter by symbol when possible — broad queries can return very large responses.
| Name | Required | Description | Default |
|---|---|---|---|
| cusip | No | The CUSIP of the company initiating the announcement. | |
| since | Yes | The start (inclusive) of the date range when searching corporate action announcements. This should follow the YYYY-MM-DD format. The date range is limited to 90 days. | |
| until | Yes | The end (inclusive) of the date range when searching corporate action announcements. This should follow the YYYY-MM-DD format. The date range is limited to 90 days. | |
| symbol | No | The symbol of the company initiating the announcement. | |
| ca_types | Yes | A comma-delimited list of corporate action types. | |
| date_type | No | declaration_date, ex_date, record_date, or payable_date |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It usefully discloses that broad queries can return very large responses, which is a non-obvious operational trait. It does not mention pagination, rate limits, or the 90-day date restriction, though some of this is present in the schema.
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 tool's purpose, followed by a pointed performance warning. Every sentence earns its place and there is no redundant 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 rich input schema and presence of an output schema, the description is mostly sufficient for correct invocation. The main gap is the lack of differentiation from sibling tools like get_corporate_action_announcement and get_corporate_actions, which could leave an agent unsure if this is the right endpoint.
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 fully documents all six parameters. The description adds only practical guidance around narrowing date range and filtering by symbol, but it does not add new parameter-level meaning 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 states a specific verb and resource: "Retrieves corporate action announcements" with examples (dividends, mergers, splits, spinoffs). However, it does not distinguish itself from siblings like get_corporate_action_announcement (singular) or get_corporate_actions, so an agent may not know which tool to select for a given 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?
The description gives actionable usage guidance: "Use a narrow date range and filter by symbol when possible" and warns that broad queries return very large responses. It does not, however, mention when to prefer this tool over the sibling corporate action tools or state any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_corporate_actionsC
Retrieves and formats corporate action announcements.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | The inclusive end of the interval. The corporate actions are sorted by their `process_date`. Format: YYYY-MM-DD. Default: current day. | |
| ids | No | A comma-separated list of corporate action IDs. This parameter is mutually exclusive with all other filters (symbols, types, start, end, region, data_quality). | |
| sort | No | Sort data in ascending or descending order. | |
| limit | No | Maximum number of corporate actions to return in a response. The limit applies to the total number of data points, not the count per symbol! Use `next_page_token` to fetch the next set of corporate actions. | |
| start | No | The inclusive start of the interval. The corporate actions are sorted by their `process_date`. Format: YYYY-MM-DD. Default: current day. | |
| types | No | A comma-separated list of types. If not provided, search all types. The following types are supported: - reverse_split - forward_split - unit_split - cash_dividend - stock_dividend - spin_off - cash_merger - stock_merger - stock_and_cash_merger - redemption - name_change - worthless_removal - rights_distribution - partial_call - reorganization | |
| cusips | No | A comma-separated list of CUSIPs. | |
| region | No | The region to filter corporate actions by. - `us`: only US corporate actions - `non_us`: only non-US corporate actions - `all`: both US and non-US corporate actions | us |
| symbols | No | A comma-separated list of symbols. | |
| page_token | No | The pagination token from which to continue. The value to pass here is returned in specific requests when more data is available, usually because of a response result limit. | |
| data_quality | No | Controls which corporate actions are returned based on data quality. - `complete` (default): exclude corporate actions that are still missing required fields (for example, ex-date or CUSIP/ISIN) and have not yet been processed. Already-processed corporate actions are always included, even if they would otherwise be considered incomplete. - `all`: return matching corporate actions regardless of field completeness. | complete |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only says 'Retrieves and formats' and does not mention sorting by process_date, pagination, region defaults, data quality filtering, or that this is a read-only operation. The description adds minimal context beyond the tool's name.
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 with no wasted words. However, the brevity comes at the cost of useful context, and the sentence does little more than restate the tool's purpose as implied by its name.
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 tool has 11 parameters, no annotations, and several similarly named siblings. A one-sentence description is insufficient to guide correct selection and invocation. While the output schema and input schema provide structural detail, the description fails to explain how this tool fits among related corporate action endpoints.
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 each parameter is already documented in the input schema. The description itself adds no parameter-level meaning, but the high schema coverage means 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 a specific verb and resource: 'Retrieves and formats corporate action announcements.' This clearly conveys the core function. However, it does not distinguish this tool from the similarly named siblings such as get_corporate_action_announcement and get_corporate_action_announcements, leaving ambiguity about which tool to select.
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 no guidance on when to use this tool versus alternatives like get_corporate_action_announcement or get_corporate_action_announcements. It also does not mention important selection behaviors such as the mutual exclusivity of the 'ids' parameter or when to prefer this endpoint over related corporate action tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crypto_barsGet Crypto BarsARead-only
Retrieve historical price bars (OHLCV) for one or more cryptocurrencies.
When start is omitted, it is automatically computed as now minus the days/hours/minutes lookback.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Inclusive end time (RFC 3339). Omit for current time. | |
| days | No | Days to look back when start is omitted (default 1). | |
| sort | No | Timestamp sort order — "asc" (default) or "desc". | asc |
| hours | No | Additional hours in the lookback (default 0). | |
| limit | No | Max total data points returned across all symbols, 1–10000 (default 1000). | |
| start | No | Inclusive start time (RFC 3339). Omit to use relative lookback. | |
| minutes | No | Additional minutes in the lookback (default 0). | |
| symbols | Yes | Comma-separated crypto pairs (e.g. "BTC/USD" or "BTC/USD,ETH/USD"). | |
| timeframe | No | Bar aggregation period — "1Min", "5Min", "15Min", "30Min", "1Hour", "1Day", "1Week", or "1Month". | 1Hour |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the read-only nature is established. The description adds a useful behavioral detail—the automatic start-time computation from days/hours/minutes—which is not fully expressed in the schema. However, it does not address pagination, response ordering, or any cross-symbol aggregation behavior, so it only modestly extends 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 two sentences: a clear purpose statement followed by the one meaningful default behavior. It is front-loaded and contains no filler. 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?
Given the rich input schema, an output schema, and safety annotations, the description is largely sufficient for invoking the tool correctly. It could be more complete by contrasting with get_crypto_latest_bar or noting when this endpoint should be preferred, but that gap is more about selection guidance than call correctness. The auto-start sentence is a valuable addition for a 9-parameter 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%, with each of the 9 parameters already documented (types, defaults, enumerated timeframe values, and RFC 3339 formats). The description adds no new parameter semantics beyond grouping days/hours/minutes into the lookback computation. Baseline 3 is appropriate because 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 opens with 'Retrieve historical price bars (OHLCV) for one or more cryptocurrencies,' which names a specific verb, resource, and scope. The word 'historical' helps separate it from get_crypto_latest_bar and get_crypto_snapshot. It is unambiguous even without naming a sibling.
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 no explicit when-to-use or when-not-to-use guidance and does not reference any alternative tools like get_crypto_latest_bar or get_stock_bars. The only secondary sentence concerns default start-time computation, not selection context. This leaves an agent to infer applicability from the tool's name and purpose.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crypto_latest_barA
Returns the latest minute bar for one or more crypto symbols. The loc parameter is required — always set loc to "us".
| Name | Required | Description | Default |
|---|---|---|---|
| loc | Yes | Crypto location from where the latest market data is retrieved. | |
| symbols | Yes | A comma-separated list of crypto symbols. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full disclosure burden. It clearly states the read operation and adds a critical non-obvious constraint: 'always set loc to us,' despite the enum listing other locations. It does not mention auth or rate limits, but 'Returns' implies a safe read, and the output schema covers return structure.
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 fluff: the core action is front-loaded, followed by the critical loc constraint. Every word contributes to correct invocation.
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 two-parameter read-only tool with an output schema, the description is nearly complete. It covers the data returned, the required location, and symbol list shape. It omits possible limits on symbol count or multi-symbol return format, but those are likely handled by the output schema. The low complexity makes this sufficient.
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%, setting a baseline of 3. The description adds value beyond the schema by specifying that symbols must be 'one or more' and by mandating loc='us' even though the schema permits other enum values. This is meaningful guidance an agent cannot infer from the schema alone.
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 'Returns the latest minute bar for one or more crypto symbols,' clearly stating the verb, resource, and scope. It differentiates well from siblings like get_crypto_latest_quote (quote vs. bar) and get_crypto_bars (historical vs. latest).
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 a precise invocation instruction ('always set loc to us') but does not explicitly name alternatives or state when to use this tool over siblings. Tool-selection guidance is only implied by the phrase 'latest minute bar' versus sibling names. This is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crypto_latest_orderbookA
Returns the latest orderbook for one or more crypto symbols. The loc parameter is required — always set loc to "us". Note: the response includes the full order book depth and can be large.
| Name | Required | Description | Default |
|---|---|---|---|
| loc | Yes | Crypto location from where the latest market data is retrieved. | |
| symbols | Yes | A comma-separated list of crypto symbols. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly notes that the response includes the full order book depth and 'can be large,' which warns the agent about payload size. It also instructs to always set loc to 'us,' which is a directive beyond the schema's enum description. This adds meaningful context without contradicting any structured data. It does not mention side effects, but as a read operation that is acceptable. Overall, it discloses key behavioral traits beyond what the schema provides.
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 with no redundant words. The purpose is front-loaded in the first sentence, and the critical usage note and size warning follow efficiently. Every sentence contributes information that is not already in the schema, so it 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?
Given the tool has only two parameters (both required) and an output schema exists, the description covers the essential points: what it returns, the crucial loc instruction, and a warning about response size. There is nothing an agent needs to call this tool correctly that is missing. The output schema handles return value details, so the description need not elaborate further.
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 has complete descriptions for both parameters (100% coverage), so the baseline is 3. The description adds value by advising 'always set loc to "us"'—this is not in the schema and tells the agent the correct value to use in practice. For symbols, the description reaffirms 'one or more crypto symbols' but the schema already explains the comma-separated list format. The extra loc guidance pushes this above 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 states a specific action ('Returns the latest orderbook'), a resource ('orderbook'), and scope ('for one or more crypto symbols'). It clearly distinguishes from sibling tools like get_crypto_latest_quote or get_crypto_snapshot, which return different data. The intent is unambiguous and an agent can immediately know what data this tool provides.
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 concrete usage instruction: 'The loc parameter is required — always set loc to "us".' This is practical guidance for calling the tool correctly. However, it does not mention when to prefer this tool over alternatives (e.g., get_crypto_latest_quote or get_crypto_snapshot), nor does it state exclusions or conditions for selection. The guidance is useful but not about tool selection, so it only partially satisfies the dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crypto_latest_quoteA
Returns the latest quote for one or more crypto symbols. The loc parameter is required — always set loc to "us".
| Name | Required | Description | Default |
|---|---|---|---|
| loc | Yes | Crypto location from where the latest market data is retrieved. | |
| symbols | Yes | A comma-separated list of crypto symbols. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure on its own; 'Returns' does signal a read-only quote retrieval, and the loc requirement is stated. It does not mention side effects, rate limits, or freshness, but for a simple quote lookup with an output schema these omissions are minor.
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 operation and followed by the one required caveat; 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?
For a two-parameter quote tool with an output schema, the description covers the core operation and the critical loc convention. It could be stronger by naming relevant sibling tools, but nothing required to make a correct first call 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?
Both parameters are already described in the schema (100% coverage), so the baseline is 3. The description adds practical value by instructing the agent to always select 'us' among the loc enum values, which is not otherwise indicated as preferred.
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 first sentence names a specific verb ('Returns'), a precise resource ('latest quote'), and a scope ('one or more crypto symbols'), so an agent can separate it from get_stock_latest_quote, get_option_latest_quote, and get_crypto_latest_trade. The sibling differentiation is not explicit, but the resource and qualifiers are enough to make 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 one operational rule: the loc parameter is required and must always be set to 'us'. It does not, however, name any sibling tool or state when this tool should be preferred over alternatives such as get_crypto_quotes or get_crypto_latest_trade, so usage context is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crypto_latest_tradeA
Returns the latest trade for one or more crypto symbols. The loc parameter is required — always set loc to "us".
| Name | Required | Description | Default |
|---|---|---|---|
| loc | Yes | Crypto location from where the latest market data is retrieved. | |
| symbols | Yes | A comma-separated list of crypto symbols. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It adds a useful operating constraint ('always set loc to "us"') and implies a read-only operation, but it does not mention authentication expectations, data-locality implications, or the meaning of 'latest' in terms of market data freshness. The output schema covers return values, so that is not a gap.
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 with no filler: the first gives the tool's purpose, and the second gives the critical call constraint. Every part 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 low-complexity read tool with fully documented parameters and an output schema, the description covers what is needed to call it correctly: what it returns, the required loc value, and the symbols input. It is slightly incomplete only in not explaining when this endpoint should be selected over the related crypto quote, snapshot, or trades endpoints.
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 both parameters. The description adds meaningful guidance by instructing the agent to always pick 'us' from the loc enum, which is exactly the kind of selection help an agent needs. It also reinforces that the tool handles one or more symbols.
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 a concrete action—'Returns the latest trade'—on a specific resource ('crypto symbols'). The use of 'trade' and 'crypto' clearly distinguishes it from sibling tools like get_crypto_latest_quote or get_crypto_latest_bar, even without explicitly naming them.
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 given for when to prefer this tool over get_crypto_trades, get_crypto_latest_quote, or get_crypto_snapshot. The only operational note is loc='us', which is parameter-level instruction, not a use-case or alternative-selection guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crypto_quotesGet Crypto QuotesARead-only
Retrieve historical bid/ask quotes for one or more cryptocurrencies.
When start is omitted, it is automatically computed as now minus the days/hours/minutes lookback.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Inclusive end time (RFC 3339). Omit for current time. | |
| days | No | Days to look back when start is omitted (default 0). | |
| sort | No | Timestamp sort order — "asc" (default) or "desc". | asc |
| hours | No | Additional hours in the lookback (default 0). | |
| limit | No | Max total data points returned across all symbols, 1–10000 (default 1000). | |
| start | No | Inclusive start time (RFC 3339). Omit to use relative lookback. | |
| minutes | No | Additional minutes in the lookback (default 15). | |
| symbols | Yes | Comma-separated crypto pairs (e.g. "BTC/USD" or "BTC/USD,ETH/USD"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly, so the description correctly aligns with that. It adds useful behavioral context beyond the schema by explaining that omitted start is computed as now minus the days/hours/minutes lookback. This is a meaningful disclosure of default behavior 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 compact and front-loaded: the first sentence identifies exactly what the tool does, and the second sentence provides the most important default behavior. There is no filler or redundant restatement of the schema.
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 8-parameter tool with a fully documented schema and an output schema, the description covers the essential decision-making information: what is retrieved, for which asset class, and how the key time-range default works. The remaining parameter details are already handled by the schema and 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 value by connecting start, days, hours, and minutes into a single formulaic behavior, which the individual parameter descriptions do not fully express. It does not need to restate each 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 states a specific verb ('Retrieve'), a specific resource ('historical bid/ask quotes'), and a clear domain ('cryptocurrencies'). The word 'historical' distinguishes it from latest-quote siblings like get_crypto_latest_quote, and 'crypto' distinguishes it from stock/option quote 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 gives clear contextual guidance for the relative lookback behavior when start is omitted. It does not explicitly name alternatives or state when not to use this tool, but the 'historical' qualifier and sibling names make the intended use inferable without confusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crypto_snapshotB
Returns a snapshot for one or more crypto symbols including latest trade, quote, minute bar, daily bar, and previous daily bar. The loc parameter is required — always set loc to "us".
| Name | Required | Description | Default |
|---|---|---|---|
| loc | Yes | Crypto location from where the latest market data is retrieved. | |
| symbols | Yes | A comma-separated list of crypto symbols. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It conveys that this is a read-only retrieval operation and lists the returned data componentshol. However, it does not mention authentication needs, rate limits, or potential failure modes, and the loc instruction could mislead 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 a single concise sentence that front-loads the tool's scope and output contents. Every phrase contributes to understanding, with no filler or repetition.
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 there are only two parameters, the description is mostly sufficient. However, the inaccurate loc instruction makes it less reliable, and since there are no annotations, the description is the only behavioral source; a brief note on supported locations or expected use would improve completeness.
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 a parametertion instruction, 'always set loc to "us"', but that conflicts with the schema enum that includes 'us', 'us-1', 'us-2', 'eu-1', and 'bs-1'. This actively misleads rather than clarifying parameter semantics.
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 names a specific verb ('Returns'), a specific resource ('snapshot for one or more crypto symbols'), and enumerates the contained data types (trade, quote, minute bar, daily bar, previous daily bar). This clearly distinguishes it from sibling tools that return only a single data type such as get_crypto_latest_quote or get_crypto_latest_trade.
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 only usage guidance is 'always set loc to "us"', which addresses a parameter value rather than tool selection. There is no explanation of when an agent should choose this snapshot tool over alternative crypto data tools, nor any when-not-to-use or exclusion context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_crypto_tradesGet Crypto TradesARead-only
Retrieve historical trade data for one or more cryptocurrencies.
When start is omitted, it is automatically computed as now minus the days/hours/minutes lookback.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Inclusive end time (RFC 3339). Omit for current time. | |
| days | No | Days to look back when start is omitted (default 0). | |
| sort | No | Timestamp sort order — "asc" (default) or "desc". | asc |
| hours | No | Additional hours in the lookback (default 0). | |
| limit | No | Max total data points returned across all symbols, 1–10000 (default 1000). | |
| start | No | Inclusive start time (RFC 3339). Omit to use relative lookback. | |
| minutes | No | Additional minutes in the lookback (default 15). | |
| symbols | Yes | Comma-separated crypto pairs (e.g. "BTC/USD" or "BTC/USD,ETH/USD"). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 covered. The description adds useful behavioral context by explaining how start is computed when omitted. However, it does not disclose other behaviors such as pagination, cross-symbol limit application, or error conditions, though some of this is present in the schema and output schema.
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 with no filler. The core action is front-loaded in the first sentence, and the important start/lookback nuance is in the second. 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?
With a fully described input schema, an output schema, and annotations covering read-only safety, the description only needs to add non-obvious behavior. It does that for the start/lookback interaction. The main gap is routing guidance among sibling crypto tools, but that is not essential for a correct call given the rich 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?
Schema description coverage is 100%, so the schema already documents all 8 parameters. The description adds a clarifying note about the interaction of start with days/hours/minutes, but it does not substantively enrich the meaning of individual parameters beyond what the schema provides. 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 opens with a specific verb and resource: 'Retrieve historical trade data for one or more cryptocurrencies.' It clearly distinguishes this from sibling latest-trade, bar, quote, and snapshot tools, and the plural support ('one or more') is stated explicitly.
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 historical trade data but does not explicitly state when to prefer this tool over get_crypto_latest_trade, get_crypto_bars, or get_crypto_quotes. The relative lookback behavior is explained, but no when-not-to-use or alternative-selection guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fixed_income_latest_quotesA
Returns the latest quotes for fixed income securities (bonds, treasuries). Provide a comma-separated list of ISINs (e.g. 'US912797SX61,US912810SK51'). Returns bid/ask prices, sizes, and yield-to-maturity for each security.
| Name | Required | Description | Default |
|---|---|---|---|
| isins | Yes | A comma-separated list of ISINs with a limit of 100. | |
| trade_size | No | Filters to best bid/ask where the minimum trade size is less than or equal to the given numeric value. For any negative value the best bid/ask will be returned for the smallest trade size on either side. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden of behavioral disclosure. It clearly states what the tool returns (bid/ask prices, sizes, yield-to-maturity) and the required input format, which gives the agent an accurate mental model. It does not cover error handling or latency, but for a read-only quote retrieval this is sufficient.
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, with the core purpose front-loaded in the first sentence and a concrete example and output details in the second. Every sentence adds value, 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?
Given the tool's simplicity and the existence of an output schema, the description sufficiently covers purpose, input requirements, and return content. It does not explain edge cases like invalid ISINs, but the combination of schema descriptions and output schema makes it complete enough for an agent to use the tool effectively.
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 (ising list and trade_size) with 100% coverage. The description reinforces the isins parameter with an example but adds no additional meaning for trade_size. Thus it merely meets the baseline without exceeding what the schema 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 the tool's function: returning latest quotes for fixed income securities. It specifically names the asset class (bonds, treasuries) and distinguishes it from sibling quote tools for stocks, crypto, and options. The verb 'Returns' is precise and actionable.
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 usage context by telling the agent to provide a comma-separated list of ISINs, including an example. It implies this is the tool for fixed income quotes. However, it does not explicitly state when not to use it or mention alternative tools, so it lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_locateB
Returns a single locate request by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| locate_id | Yes | The locate ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for behavioral disclosure. It only says 'Returns' without detailing error behavior, authentication requirements, side effects, or its read-only nature. It also does not clarify what happens when the ID does not 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 a single, front-loaded sentence that directly states the tool's purpose. There is no wasted wording 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?
For a simple single-ID retrieval tool, the description combined with the complete input schema and output schema provides an adequate core contract. However, it could benefit from noting its relationship to get_locates or handling of missing IDs, so it is slightly above the minimum viable.
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 with a clear description for locate_id, so the schema already documents the parameter. The description's phrase 'by its ID' adds no additional semantic detail beyond what the schema provides, 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 ('Returns') and a specific resource ('a single locate request by its ID'), clearly distinguishing it from sibling tools like get_locates (plural, likely listing) and get_locate_quotes. It precisely identifies 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 provides no guidance on when to use this tool versus alternatives such as get_locates or get_locate_quotes. It lacks any mention of prerequisites, exclusions, or alternative conditions, so the agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_locate_quotesA
Returns locate availability and pricing for one or more symbols. Provide a comma-separated list of symbols.
| Name | Required | Description | Default |
|---|---|---|---|
| symbols | Yes | Comma-separated list of stock symbols. Maximum 100 unique symbols. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool returns data (read-only), but it does not mention any additional behavioral traits such as data freshness, rate limits, required permissions, or handling of invalid symbols. The description adds minimal context beyond the basic read operation, which is insufficient for a tool with no annotation support.
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 core purpose and followed by a concise usage instruction. Every word earns its place, with no redundancy or irrelevant information. This is an example of efficient writing.
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 single-parameter read tool with an output schema available, so the description covers the essential purpose and invocation. The main gap is not differentiating from similar sibling tools like 'get_locates', but given the low complexity and presence of an output schema, the description is sufficiently complete for correct use.
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 the 'symbols' parameter already described as a comma-separated list with a max of 100 unique symbols. The description merely repeats this ('Provide a comma-separated list of symbols'), adding no new semantic meaning. According to the rubric, a baseline of 3 is appropriate when the schema fully covers parameter semantics.
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: 'Returns locate availability and pricing for one or more symbols.' It uses a specific verb ('returns') and identifies a distinct resource ('locate availability and pricing'), which differentiates it from sibling tools like get_stock_quotes or get_locates. The scope is explicit, 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 implies when to use this tool (when you need locate quotes for symbols) and gives input instructions ('Provide a comma-separated list of symbols'). However, it does not provide explicit alternatives or exclusions, such as explaining the difference between this tool and the similar 'get_locates' or 'get_locate' siblings. Usage context is clear but not differentiated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_locatesB
Returns locate requests for the account, filtered by status, symbol, or date range. Results are sorted by creation date descending.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Filter locates with locate trading date before this date (exclusive). Format: YYYY-MM-DD. The locate trading date uses America/New_York and rolls at 8pm ET. | |
| limit | No | Maximum number of results to return. | |
| start | No | Filter locates with locate trading date on or after this date. Format: YYYY-MM-DD. The locate trading date uses America/New_York and rolls at 8pm ET. | |
| status | No | Locate status. | |
| symbol | No | Filter by stock symbol. | |
| page_token | No | Used for pagination, this token retrieves the next page of results. It is obtained from the response of the preceding page when additional pages are available. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden for behavioral disclosure. It mentions the sort order (creation date descending) but omits pagination behavior, result limits, and any details about the date timezone semantics that are only in the schema. For a read tool, this is a minimal but present 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 two sentences long, front-loads the core purpose, and contains no filler or 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?
With an output schema present, return values are covered. However, given the absence of annotations and the large set of sibling tools, the description does not hint at when to use this list endpoint versus the singular get_locate, nor does it mention pagination for large result sets. The rich schema partially compensates, but the description itself is minimal.
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 provides 100% coverage with detailed descriptions for all six parameters, including formats, enums, and pagination token mechanics. The description adds no extra meaning beyond summarizing that filtering is by status, symbol, or date range, 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 clearly states it returns locate requests for the account and lists the filter dimensions (status, symbol, date range). It uses a specific verb and resource. While it does not explicitly differentiate from the sibling get_locate, the plural 'requests' strongly implies a list operation, so it mostly distinguishes 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?
No guidance is given on when to use this tool versus alternatives like get_locate (singular) or create_locate. The description only explains what the tool does, not when it should be chosen. There are no exclusions or alternative tool mentions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_moversA
Returns the top market movers (gainers and losers) based on real-time SIP data.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Number of top market movers to fetch (gainers and losers). Will return this number of results for each. By default, 10 gainers and 10 losers. | |
| market_type | Yes | Market type (stocks or crypto). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that results are based on real-time SIP data and that both gainers and losers are returned, which is useful behavioral context. However, it does not specify the calculation period, sorting, or any potential rate limits, leaving some transparency 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 that is front-loaded and free of unnecessary words. It conveys the purpose and data source economically, 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 is simple and provides an output schema, so the description doesn't need to explain return structure. It covers the essential purpose and data source. The description is complete enough for this level of complexity, though additional caveats (e.g., market hours) could be added.
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 input schema already fully explains both parameters (market_type and top). The tool description adds no parameter-specific information beyond what the schema provides, 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: returning top market movers (gainers and losers) using real-time SIP data. It is specific about the resource and differentiates from sibling tools like get_most_active_stocks by focusing on movers rather than activity.
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 tool versus alternatives. It only states what the tool returns, leaving the agent to infer usage context. No exclusions or sibling comparisons are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_most_active_stocksB
Screens the market for most active stocks by volume or trade count.
| Name | Required | Description | Default |
|---|---|---|---|
| by | No | The metric used for ranking the most active stocks. | volume |
| top | No | The number of top most active stocks to fetch per day. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavior but provides only a general screening action and the ranking metric. It does not mention output structure, time frame (per day), or limitations, placing the burden on the schema instead.
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 concise sentence that front-loads the purpose and includes the key differentiating detail (volume or trade count). 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 simple structure with output schema and complete parameter descriptions, the description is minimally viable. However, it lacks usage differentiation from get_market_movers and does not explicitly clarify 'per day' semantics, leaving some context 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 description coverage is 100% and documents both 'by' and 'top' clearly. The description adds no new parameter detail beyond restating the 'by' metric, 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?
Description uses the verb 'screens' and clearly identifies the resource (most active stocks) and the ranking criteria (by volume or trade count). It distinguishes from quote/bar retrieval siblings, but does not explicitly contrast with the similar get_market_movers.
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 on when to use this tool versus alternatives. It does not mention scenarios, prerequisites, or exclusions, and the overlap with get_market_movers is unaddressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_newsA
Retrieves news articles for stocks and crypto. Filter by symbols, date range, and sort order. Returns headlines, summaries, URLs, and associated ticker symbols.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | The inclusive end of the interval. Format: RFC-3339 or YYYY-MM-DD. Default: the current time if the user has a real-time access for the feed, otherwise 15 minutes before the current time. | |
| sort | No | Sort articles by updated date. | desc |
| limit | No | Limit of news items to be returned for a result page. | |
| start | No | The inclusive start of the interval. Format: RFC-3339 or YYYY-MM-DD. Default: the beginning of the current day, but at least 15 minutes ago if the user doesn't have real-time access for the feed. | |
| symbols | No | A comma-separated list of symbols for which to query news. | |
| page_token | No | The pagination token from which to continue. The value to pass here is returned in specific requests when more data is available, usually because of a response result limit. | |
| include_content | No | Boolean indicator to include content for news articles (if available). | |
| exclude_contentless | No | Boolean indicator to exclude news articles that do not contain content. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return type (headlines, summaries, URLs, ticker symbols) but does not mention pagination behavior, result limits, or content inclusion flags—these are left to the schema. The behavior is not misleading, but the description adds only modest transparency beyond the schema's parameter descriptions.
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 with no filler. The first sentence immediately states the core function, and the second covers filtering and output. Every word adds value, making it highly efficient and 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 has 8 optional parameters and an output schema, the description is reasonably complete. It covers the main use case (filtering and retrieving news) without explaining return values in detail, which is appropriate since the output schema exists. It could mention pagination or limits, but those are well-defined in the schema, so the description suffices for initial 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%, so each parameter already has a description. The tool description summarizes key filtering dimensions (symbols, date range, sort order) but does not add detail beyond the schema. This aligns with the baseline of 3 when schema covers parameter semantics.
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 states 'Retrieves news articles for stocks and crypto,' which is a specific verb+resource combination. It clearly differentiates from sibling tools like quotes, bars, and trades, which retrieve market data rather than news. The mention of 'headlines, summaries, URLs, and associated ticker symbols' further clarifies the tool's 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 says 'Filter by symbols, date range, and sort order,' which establishes the tool's typical usage context. While it doesn't explicitly exclude alternatives or name when-not-to-use, the sibling list shows no other news retrieval tool, so the usage context is clear without needing exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_open_positionB
Retrieves and formats details for a specific open position.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol_or_asset_id | Yes | symbol or assetId |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the burden. It indicates a read operation via 'Retrieves' and implies no mutation, but it does not disclose behavior on missing positions, authentication requirements, or any formatting details. This is a minimal but not misleading description.
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 concise sentence that earns its place without fluff. It is appropriately sized for a simple retrieval tool.
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 nature of the tool, one parameter, and an output schema that covers return structure, the description is mostly complete. However, it lacks any contextual guidance on when to prefer this over get_all_positions, leaving 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 fully describes the parameter with 100% coverage ('symbol or assetId'). The description adds no additional parameter semantics beyond the generic reference to a 'specific open position'.
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 verb 'Retrieves' and specifies 'details for a specific open position', clearly distinguishing it from sibling tools like get_all_positions. The term 'formats' adds a hint about output structure, though it's slightly vague. Overall, it states a specific verb and resource.
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 usage guidance is provided. The description does not mention when to use this tool instead of getting all positions or closing a position, nor does it specify prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_option_barsB
Retrieves historical bar (OHLCV) data for one or more option contracts.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | The inclusive end of the interval. Format: RFC-3339 or YYYY-MM-DD. Default: the current time if the user has a real-time access for the feed, otherwise 15 minutes before the current time. | |
| sort | No | Sort data in ascending or descending order. | |
| limit | No | The maximum number of data points to return in the response page. The API may return less, even if there are more available data points in the requested interval. Always check the `next_page_token` for more pages. The limit applies to the total number of data points, not per symbol! | |
| start | No | The inclusive start of the interval. Format: RFC-3339 or YYYY-MM-DD. Default: the beginning of the current day, but at least 15 minutes ago if the user doesn't have real-time access for the feed. | |
| symbols | Yes | A comma-separated list of contract symbols with a limit of 100. | |
| timeframe | Yes | The timeframe represented by each bar in aggregation. You can use any of the following values: - `[1-59]Min` or `[1-59]T`, e.g. `5Min` or `5T` creates 5-minute aggregations - `[1-23]Hour` or `[1-23]H`, e.g. `12Hour` or `12H` creates 12-hour aggregations - `1Day` or `1D` creates 1-day aggregations - `1Week` or `1W` creates 1-week aggregations - `[1,2,3,4,6,12]Month` or `[1,2,3,4,6,12]M`, e.g. `3Month` or `3M` creates 3-month aggregations | |
| page_token | No | The pagination token from which to continue. The value to pass here is returned in specific requests when more data is available, usually because of a response result limit. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it offers only a single sentence covering the basic retrieval action. It omits pagination behavior, default start/end semantics, and real-time access constraints that the schema parameter descriptions mention.
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, front-loaded sentence is efficient and appropriately sized. It could be slightly richer, but it wastes no words and the core purpose is immediately visible.
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?
Even with an output schema provided, the description is incomplete for tool selection. It lacks usage guidance, behavioral notes, and any differentiation from sibling bar/quote/trade tools, so an agent would have to infer when to invoke it.
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 only hints at the 'symbols' parameter via 'one or more option contracts' and adds no meaning beyond the detailed per-parameter documentation already present 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 uses a specific verb ('Retrieves'), names the exact resource ('historical bar (OHLCV) data'), and targets 'one or more option contracts'. This clearly distinguishes it from stock and crypto bar siblings without needing to open the schema.
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 given on when to use this tool versus alternatives like get_option_trades, get_option_contract, or get_stock_bars. The description only states what the tool does, not the conditions that select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_option_chainA
Retrieves option chain data for an underlying symbol, including latest trade, quote, implied volatility, and greeks for each contract. The response can be very large. Use the type (call/put), strike_price_gte/lte, expiration_date, and limit parameters to narrow results.
| Name | Required | Description | Default |
|---|---|---|---|
| feed | No | The source feed of the data. `opra` is the official OPRA feed, `indicative` is a free indicative feed where trades are delayed and quotes are modified. Default: `opra` if the user has a subscription, otherwise `indicative`. | opra |
| type | No | Filter contracts by the type (call or put). | |
| limit | No | Number of maximum snapshots to return in a response. The limit applies to the total number of data points, not the number per symbol! Use `next_page_token` to fetch the next set of responses. | |
| page_token | No | The pagination token from which to continue. The value to pass here is returned in specific requests when more data is available, usually because of a response result limit. | |
| root_symbol | No | Filter contracts by the root symbol. | |
| updated_since | No | Filter to snapshots that were updated since this timestamp, meaning that the timestamp of the trade or the quote is greater than or equal to this value. Format: RFC-3339 or YYYY-MM-DD. If missing, all values are returned. | |
| expiration_date | No | Filter contracts by the exact expiration date (format: YYYY-MM-DD). | |
| strike_price_gte | No | Filter contracts with strike price greater than or equal to the specified value. | |
| strike_price_lte | No | Filter contracts with strike price less than or equal to the specified value. | |
| underlying_symbol | Yes | The financial instrument on which an option contract is based or derived. | |
| expiration_date_gte | No | Filter contracts with expiration date greater than or equal to the specified date. | |
| expiration_date_lte | No | Filter contracts with expiration date less than or equal to the specified date. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It adds a key behavioral trait: 'The response can be very large,' which warns about payload size. However, it doesn't disclose pagination behavior or data source (e.g., real-time vs delayed), which could affect invocation.
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 fluff. First sentence states the purpose, the second provides usage guidance. Immediately front-loaded with the 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 12 parameters and a rich output schema, the description covers the essential purpose and filtering guidance. It doesn't explain pagination, but the schema includes page_token descriptions. It lacks explicit comparison to sibling tools, but the content (trade, quote, IV, greeks) helps differentiate. Overall adequate for a 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 coverage is 100%, so baseline is 3. The description adds value by highlighting the most relevant filter parameters (type, strike_price_gte/lte, expiration_date, limit) and their purpose in narrowing results. This gives the agent actionable guidance beyond 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 clearly states 'Retrieves option chain data for an underlying symbol' with a specific verb and resource, listing included data (trade, quote, IV, greeks). This distinguishes it from sibling tools like get_option_contract or get_option_snapshot.
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 does not explicitly name alternative tools, but it provides clear context for when filtering is needed ('The response can be very large. Use the type... parameters to narrow results'). This implies usage for broad chain queries but lacks explicit exclusion or alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_option_contractA
Retrieves a single option contract by symbol or contract ID.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol_or_id | Yes | symbol or contract ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Retrieves' implies a read-only operation, but the description does not disclose any behavioral traits such as potential error responses, required permissions, or differences from similar snapshot/quote tools. It adds minimal value beyond the tool name.
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, concise sentence that is front-loaded with the verb and resource. It contains no redundant words and is 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 adequate for a simple single-parameter retrieval tool, especially given the presence of an output schema. However, it lacks guidance on how to format symbols or distinguish this tool from the many similar option-related siblings (e.g., 'get_option_snapshot', 'get_option_latest_quote'). The completeness is sufficient but not enriched.
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 covers 100% of the single parameter ('symbol_or_id' with 'symbol or contract ID'). The tool description merely repeats this information and adds no extra semantic detail, such as the expected format of a symbol or how to use a contract ID. Baseline 3 applies because schema coverage is high.
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 ('Retrieves'), the resource ('option contract'), and the method ('by symbol or contract ID'). It explicitly says 'single', which distinguishes it from the plural sibling 'get_option_contracts' and other option-related tools like 'get_option_chain'.
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 tool is for retrieving a single option contract when you have a symbol or contract ID. However, it does not explicitly mention alternatives or when not to use it (e.g., for batch lookups use 'get_option_contracts'). It provides clear context but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_option_contractsC
Retrieves option contracts for underlying symbol(s).
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | The type of the option contract. | |
| limit | No | The number of contracts to limit per page (default=100, max=10000). | |
| ppind | No | The ppind(Penny Program Indicator) field indicates whether an option contract is eligible for penny price increments, with `true` meaning it is part of the Penny Program and `false` meaning it is not. | |
| style | No | The style of the option contract. | |
| status | No | Filter contracts by status (active/inactive). By default only active contracts are returned. | |
| page_token | No | Used for pagination, this token retrieves the next page of results. It is obtained from the response of the preceding page when additional pages are available. | |
| root_symbol | No | Filter contracts by the root symbol. | |
| expiration_date | No | Filter contracts by the exact expiration date (format: YYYY-MM-DD). | |
| strike_price_gte | No | Filter contracts with strike price greater than or equal to the specified value. | |
| strike_price_lte | No | Filter contracts with strike price less than or equal to the specified value. | |
| show_deliverables | No | Include deliverables array in the response. | |
| underlying_symbols | No | Filter contracts by one or more underlying symbols. | |
| expiration_date_gte | No | Filter contracts with expiration date greater than or equal to the specified date. | |
| expiration_date_lte | No | Filter contracts with expiration date less than or equal to the specified date. By default this is set to the next weekend. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only implies a read-only operation via 'Retrieves' but omits important behaviors like pagination, default filters (e.g., active contracts only), or any side effects. This is insufficient for a tool with such a broad filter set.
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, direct sentence with no extraneous content, making it concise and front-loaded. However, its brevity leaves out valuable context, so it loses a point for being too sparse relative to 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 a rich schema and output schema, the description is minimal and does not address the tool's complexity, such as whether it supports pagination, how it relates to get_option_contract, or what kind of data is returned. This makes the description incomplete for an agent to confidently select and invoke the 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 has 100% parameter description coverage, so the schema itself documents all parameters. The description adds no additional meaning beyond the resource type, earning the baseline score of 3 as 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 clearly states the tool retrieves option contracts for underlying symbols, using a specific verb and resource. However, it does not distinguish itself from sibling tools like get_option_contract (singular) or get_option_chain, which could be confused for similar functionality.
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 versus alternatives. The description merely states what it does, without mentioning suitable scenarios or exclusions, leaving the agent to infer usage from the tool name and parameters alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_option_exchange_codesA
Retrieves the mapping of exchange codes to exchange names for option market data. Useful for interpreting exchange fields returned by other option data tools.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does indicate a read-only operation via 'Retrieves', but it doesn't disclose any additional behavioral traits like idempotency, safety, or whether it's a static map vs. dynamic query. For a simple lookup tool, this is adequate but lacks 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?
The description is two sentences, front-loaded with the main action and purpose. Every word earns its place. It's efficient and clear without any 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 tool's simplicity (0 parameters, output schema present), the description is complete. It explains what the tool does and why it's useful, and the output schema covers return values. The context signals confirm no hidden complexity, so nothing 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 tool has zero parameters, and the schema confirms no required inputs. With 0 params, the baseline is 4. The description doesn't need to explain parameters, and the mapping functionality is self-explanatory. The baseline for 0 parameters 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: 'Retrieves the mapping of exchange codes to exchange names for option market data.' This is a specific verb and resource, and the 'useful for interpreting exchange fields' distinguishes it from sibling option data tools. It's a reference lookup, not a data retrieval 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 clear usage context: 'Useful for interpreting exchange fields returned by other option data tools.' This implies when to use it, but it doesn't explicitly state when not to use it or mention alternatives. It gives a strong contextual clue without formal exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_option_latest_quoteA
Retrieves and formats the latest quote for one or more option contracts including bid/ask prices, sizes, and exchange information.
| Name | Required | Description | Default |
|---|---|---|---|
| feed | No | The source feed of the data. `opra` is the official OPRA feed, `indicative` is a free indicative feed where trades are delayed and quotes are modified. Default: `opra` if the user has a subscription, otherwise `indicative`. | opra |
| symbols | Yes | A comma-separated list of contract symbols with a limit of 100. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden for behavioral disclosure. It states the action and output content but doesn't delve into nuances like latency, indicative feed modifications, or formatting specifics. The schema's feed description covers some of this, but the description itself adds limited behavioral context beyond the basic 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 a single, well-structured sentence that immediately states the purpose and key output attributes. It is front-loaded with the action and resource, with no filler or 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?
Given the tool's simplicity (2 parameters, output schema provided), the description offers a clear overview. It doesn't explicitly mention multi-symbol support or the feed parameter, but those are fully covered in the schema. The combination of the description and structured data is sufficient for a basic read tool, though a bit more context about output format could be added.
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 both parameters, so the baseline is 3. The description doesn't add any parameter-level detail beyond what the schema already provides, so it neither elevates nor reduces the score.
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 phrase 'Retrieves and formats' and clearly identifies the resource as 'latest quote for one or more option contracts.' It also lists concrete content (bid/ask prices, sizes, exchange information), which distinguishes it from sibling tools like get_option_latest_trade or get_stock_latest_quote.
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 no guidance on when to use this tool versus alternatives. It doesn't mention the feed selection trade-offs or suggest scenarios where this tool is preferred. Although the schema's feed description gives some context, the main description lacks any usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_option_latest_tradeB
Retrieves the latest trade for one or more option contracts.
| Name | Required | Description | Default |
|---|---|---|---|
| feed | No | The source feed of the data. `opra` is the official OPRA feed, `indicative` is a free indicative feed where trades are delayed and quotes are modified. Default: `opra` if the user has a subscription, otherwise `indicative`. | opra |
| symbols | Yes | A comma-separated list of contract symbols with a limit of 100. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the obvious action and does not mention potential delays, feed differences, data source implications, or any limitations. Without this, the agent cannot anticipate the behavior beyond the basic function.
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, concise sentence communicates the core functionality without any unnecessary words. The structure is front-loaded with the verb and resource.
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, the presence of a complete output schema, and full schema descriptions for parameters, the description is adequate. It could be enhanced with usage guidance, but the essential information for invoking the tool is present.
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 both parameters (feed, symbols) have descriptive schema text. The tool description itself adds no additional parameter meaning, 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 action (retrieves), the resource (latest trade), and the scope (one or more option contracts). It distinguishes itself from sibling tools like get_option_latest_quote (quotes vs. trades) and get_option_trades (historical vs. latest).
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 no guidance on when to use this tool versus alternatives such as get_option_latest_quote or get_option_trades. It does not mention scenarios, prerequisites, or exclusions. The usage context is implied by the name but not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_option_snapshotA
Retrieves comprehensive snapshots of option contracts including latest trade, quote, implied volatility, and Greeks.
| Name | Required | Description | Default |
|---|---|---|---|
| feed | No | The source feed of the data. `opra` is the official OPRA feed, `indicative` is a free indicative feed where trades are delayed and quotes are modified. Default: `opra` if the user has a subscription, otherwise `indicative`. | opra |
| limit | No | Number of maximum snapshots to return in a response. The limit applies to the total number of data points, not the number per symbol! Use `next_page_token` to fetch the next set of responses. | |
| symbols | Yes | A comma-separated list of contract symbols with a limit of 100. | |
| page_token | No | The pagination token from which to continue. The value to pass here is returned in specific requests when more data is available, usually because of a response result limit. | |
| updated_since | No | Filter to snapshots that were updated since this timestamp, meaning that the timestamp of the trade or the quote is greater than or equal to this value. Format: RFC-3339 or YYYY-MM-DD. If missing, all values are returned. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavior. It only lists content fields and says 'comprehensive', but fails to disclose important behaviors such as pagination (limit/page_token), feed distinctions (opra vs indicative), or that snapshots may reflect trade/quote timestamps. This is a significant gap for a tool with such parameters.
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, front-loaded with the primary action ('Retrieves comprehensive snapshots') and ends with the key inclusions. No wasted words; every component adds 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?
The schema and output schema are rich, so not explaining return format is acceptable. However, the description lacks behavioral context (pagination, feed selection) and usage guidance, which are critical for an agent to select and invoke this tool correctly among many option-related siblings. It is 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?
The schema has 100% description coverage for all five parameters, including meanings, defaults, and constraints. The tool description adds no parameter-specific semantics 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 uses a specific verb ('Retrieves') and resource ('comprehensive snapshots of option contracts'), and explicitly lists the included data fields (latest trade, quote, implied volatility, Greeks). This clearly distinguishes it from sibling tools like get_option_latest_quote or get_option_chain, which target narrower or different data.
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 'comprehensive snapshots' implies this is for broad option data rather than a single latest quote or trade, but no explicit alternatives are mentioned. There is no direct 'when to use vs. when not to use' guidance, leaving the agent to infer from the word 'comprehensive'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_option_tradesB
Retrieves historical trade data for one or more option contracts.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | The inclusive end of the interval. Format: RFC-3339 or YYYY-MM-DD. Default: the current time if the user has a real-time access for the feed, otherwise 15 minutes before the current time. | |
| sort | No | Sort data in ascending or descending order. | |
| limit | No | The maximum number of data points to return in the response page. The API may return less, even if there are more available data points in the requested interval. Always check the `next_page_token` for more pages. The limit applies to the total number of data points, not per symbol! | |
| start | No | The inclusive start of the interval. Format: RFC-3339 or YYYY-MM-DD. Default: the beginning of the current day, but at least 15 minutes ago if the user doesn't have real-time access for the feed. | |
| symbols | Yes | A comma-separated list of contract symbols with a limit of 100. | |
| page_token | No | The pagination token from which to continue. The value to pass here is returned in specific requests when more data is available, usually because of a response result limit. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden, but it only states the basic retrieval action and resource scope. It does not disclose pagination behavior, default time-window behavior depending on real-time access, or the cross-symbol limit semantics, all of which affect how the tool is invoked.
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 focused sentence that front-loads the core action and resource. 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 a fully documented input schema and an output schema, a one-sentence description is largely sufficient for a straightforward historical data retrieval tool. It lacks only the routing guidance to alternatives, which prevents a perfect score.
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 six parameters in detail. The description adds no parameter-specific meaning beyond the phrase 'one or more option contracts,' which reinforces the required symbols parameter but does not exceed 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 names a specific verb ('Retrieves'), a precise resource ('historical trade data'), and a scope ('one or more option contracts'). It also distinguishes this from nearby siblings like get_option_latest_trade (historical vs. latest) and get_option_bars (trades vs. 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?
The description gives no guidance on when to choose this endpoint over the related get_option_latest_trade, get_stock_trades, or get_crypto_trades. An agent must infer usage from the name and schema alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_by_client_idA
Retrieves a single order specified by the client order ID. Note: if the order was replaced, this returns the original order (status "replaced") with a replaced_by field pointing to the new order ID.
| Name | Required | Description | Default |
|---|---|---|---|
| client_order_id | Yes | The client-assigned order ID. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses a crucial non-obvious behavior: replaced orders return the original order with a replaced_by field. This adds significant transparency beyond the basic retrieval statement, though it does not cover error handling or authentication.
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 purpose and followed by a relevant caveat. There is no fluff or 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?
Given the tool's simplicity (one parameter, output schema present), the description covers the essential purpose and a key edge case. Output schema handles return format details, so the description is complete enough 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 description coverage is 100%, so the schema fully documents the client_order_id parameter. The description adds no additional parameter details beyond what's in 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 action (retrieves) and resource (a single order) with a specific lookup criterion (client order ID). It distinguishes from sibling tools like get_order_by_id by emphasizing the client-assigned ID.
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 when to use this tool by specifying 'client order ID', which contrasts with get_order_by_id for internal IDs. However, it does not explicitly state alternatives or exclusion conditions, though the context makes the usage reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_by_idA
Retrieves a single order by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| nested | No | If true, the result will roll up multi-leg orders under the legs field of primary order. | |
| order_id | Yes | order id |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations provided, so the description carries the full burden. The verb 'retrieves' indicates a read-only operation, which is a clear behavioral signal. While it doesn't mention potential error conditions or response details, those are adequately covered by the output schema, and for a simple retrieval this is satisfactory.
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 with no wasted words, front-loading the core purpose of retrieving an order by ID. It is appropriately sized for the tool's simplicity.
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-order retrieval, the description combined with the input schema (which covers parameters fully) and the output schema (which defines return values) is complete enough. No critical information is missing for an agent 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?
The schema already documents both parameters with 100% coverage, including a clear description for the nested parameter. The description adds no new meaning beyond confirming the lookup is by order_id, so it stays at the 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 uses a specific verb 'retrieves' and identifies the resource as 'a single order', with the scope 'by its ID'. This clearly distinguishes it from sibling tools like get_orders (plural) and get_order_by_client_id, which use a different lookup key.
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 should be used when the caller has an order ID, but it does not explicitly state when to use it instead of alternatives like get_order_by_client_id or get_orders. No exclusions or alternative suggestions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ordersC
Retrieves and formats orders with the specified filters.
| Name | Required | Description | Default |
|---|---|---|---|
| side | No | Filters down to orders that have a matching side field set. | |
| after | No | The response will include only ones submitted after this timestamp (exclusive.) | |
| limit | No | The maximum number of orders in response. Defaults to 50 and max is 500. | |
| until | No | The response will include only ones submitted until this timestamp (exclusive.) | |
| nested | No | If true, the result will roll up multi-leg orders under the legs field of primary order. | |
| status | No | Order status to be queried. open, closed or all. Defaults to open. | |
| symbols | No | A comma-separated list of symbols to filter by (ex. "AAPL,TSLA,MSFT"). A currency pair is required for crypto orders (ex. "BTCUSD,BCHUSD,LTCUSD,ETCUSD"). | |
| direction | No | The chronological order of response based on the submission time. asc or desc. Defaults to desc. | |
| asset_class | No | A comma-separated list of asset classes, the response will include only orders in the specified asset classes. By specifying `us_option` as the class, you can query option orders by underlying symbol using the symbols parameter. | |
| after_order_id | No | Return orders submitted after the order with this ID (exclusive). Mutually exclusive with `before_order_id`. Do not combine with `after`/`until`. | |
| before_order_id | No | Return orders submitted before the order with this ID (exclusive). Mutually exclusive with `after_order_id`. Do not combine with `after`/`until`. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that it retrieves and formats orders, leaving out important behaviors such as default status (open), default limit (50), pagination, ordering (desc), and the effect of the 'nested' parameter. The schema captures these details, but the description adds no extra behavioral context beyond the name.
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 with no filler words. It efficiently communicates the core action and resource, earning top marks for 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?
Despite having an output schema, the tool is complex with 11 parameters, but the description is too sparse. It does not mention that this is a list endpoint returning an array of orders, nor any high-level behaviors like default filtering or the distinction from single-order tools. The description leaves significant context unstated, making it incomplete for agent guidance.
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 input schema already documents all 11 parameters. The description merely mentions 'specified filters' without elaborating on any parameter meanings, adding no value beyond the schema. Per the calibration, a baseline of 3 is appropriate when 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 uses a specific verb ('Retrieves') and resource ('orders'), indicating a listing operation. The phrase 'with the specified filters' clarifies that it supports filtering, but it does not explicitly distinguish it from sibling order-related tools like get_order_by_id or get_order_by_client_id. The plural 'orders' and the presence of filter parameters make the purpose clear enough.
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 versus alternatives. It does not mention that get_order_by_id or get_order_by_client_id should be used for fetching individual orders, nor any exclusions for combining filters. The description implies a filtering use case but offers no explicit usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_portfolio_historyC
Retrieves account portfolio history (equity and P/L) over a requested time window.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | The timestamp the data is returned up to in RFC3339 format (including timezone specification). Defaults to the current time. If provided, the `end` value is always normalized to the `America/New_York` timezone and adjusted to the nearest `timeframe` interval, e.g. seconds are always truncated and the time is rounded backwards to the nearest interval of `1Min`, `5Min`, `15Min`, or `1H`. When `intraday_reporting` is either `market_hours` or `extended_hours`, the `end` value is adjusted to not occur after session close on the specified day. For example if the `intraday_reporting` is `extended_hours`, and the timestamp specified is `2023-10-19T21:33:00-04:00`, `end` is adjusted to `2023-10-19T20:00:00-04:00`. `end` may be combined with `start` or `period`. Providing all of `start`, `end`, and `period` is invalid. | |
| start | No | The timestamp the data is returned starting from in RFC3339 format (including timezone specification). Defaults to `end` minus `period` If provided, the `start` value is always normalized to the `America/New_York` timezone and adjusted to the nearest `timeframe` interval, e.g. seconds are always truncated and the time is rounded backwards to the nearest interval of `1Min`, `5Min`, `15Min`, or `1H`. If `timeframe=1D` and `start` is not a valid trading date, find the next available trading date. For example, if `start` occurs on Saturday or Sunday after converting to the America/New_York timezone, `start` is adjusted to the first weekday that is not a market holiday (e.g. Monday). If `timeframe` is less than `1D` and `intraday_reporting` is not `continuous`, `start` always reflects the beginning of a market session. If `start` is between midnight and the end (inclusive) of an active trading day, `start` is set to the beginning of the session on the specified day. Otherwise, if `start` occurs outside of the market session, the next available market date is used. For example, when `intraday_reporting=market_hours` and `start=2023-10-19T23:59:59-04:00`, the provided `start` date occurs outside of the regular market session. The effective `start` timestamp is adjusted to the beginning of the next session: `2023-10-20T09:30:00-04:00` `start` may be be combined with one of `end` or `period`. Providing all of `start`, `end`, and `period` is invalid. | |
| period | No | The duration of the data in `number` + `unit` format, such as 1D, where `unit` can be D for day, W for week, M for month and A for year. Defaults to 1M. Only two of `start`, `end` and `period` can be specified at the same time. For intraday timeframes (\<1D) only 30 days or less can be queried, for 1D resolutions there is no such limit, data is available since the creation of the account. | |
| pnl_reset | No | `pnl_reset` defines how we are calculating the baseline values for Profit And Loss (pnl) for queries with `timeframe` less than 1D (intraday queries). The default behavior for intraday queries is that we reset the pnl value to the previous day's closing equity for each **trading** day. In case of crypto (given its continuous nature), this might not be desired: specifying "no_reset" disables this behavior and all pnl values returned will be relative to the closing equity of the previous trading day. For 1D resolution all PnL values are calculated relative to the `base_value`, we are not resetting the base value. | per_day |
| timeframe | No | The resolution of time window. 1Min, 5Min, 15Min, 1H, or 1D. If omitted, 1Min for less than 7 days period, 15Min for less than 30 days, or otherwise 1D. For queries with longer than 30 days of `period`, the system only accepts 1D as `timeframe`. | |
| cashflow_types | No | The cashflow activities to include in the report. One of 'ALL', 'NONE', or a comma-separated list of activity types. | |
| extended_hours | No | **deprecated**: Users are strongly advised to **rely on the `intraday_reporting` query parameter** for better control of the reporting range. If true, include extended hours in the result. This is effective only for timeframe less than 1D. | |
| intraday_reporting | No | For intraday resolutions (<1D) this specifies which timestamps to return data points for: Allowed values are: - **market_hours** Only timestamps for the core equity trading hours are returned (usually 9:30am to 4:00pm, trading days only) - **extended_hours** Returns timestamps for the whole session including extended hours (usually 4:00am to 8:00pm, trading days only) - **continuous** Returns price data points 24/7 (for off-session times too). To calculate the equity values we are using the following prices: Between 4:00am and 10:00pm on trading days the valuation will be calculated based on the last trade (extended hours and normal hours respectively). After 10:00pm, until the next session open the equities will be valued at their official closing price on the primary exchange. | market_hours |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for disclosing behavioral traits. It only mentions 'requested time window' which is already implicit in the schema. It omits critical behaviors like timezone normalization, default timeframe selection, PnL reset logic, and intraday reporting modes, all of which are described in the schema but not in the description itself.
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 with no wasted words. It is clear and front-loaded with the key action and resource. However, it is under-specified, which slightly reduces the score from a perfect 5, but conciseness itself is strong.
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 (8 parameters, output schema, detailed behavioral rules), the description is too brief to be considered complete. It doesn't mention the customizable timeframe, the intraday reporting choices, or the PnL reset behavior, which are central to using the tool effectively. The schema compensates, but the description itself is inadequate for a high-complexity 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 no parameter-level semantics beyond the generic 'time window', while the schema thoroughly documents all eight parameters. The description provides no additional value for parameter understanding.
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 resource ('account portfolio history') and the action ('Retrieves'), with specific details about equity and P/L over a time window. It is distinct from sibling tools like get_account_info or get_account_activities because it focuses on historical time-series data, 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 description provides no guidance on when to use this tool versus alternatives. It only states the basic function, leaving the agent to infer appropriate usage from the schema and context. No exclusions or alternative tool mentions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_barsGet Stock BarsARead-only
Retrieve historical price bars (OHLCV) for one or more stocks.
When start is omitted, it is automatically computed as now minus the days/hours/minutes lookback.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Inclusive end time (RFC 3339). Omit for current time. | |
| asof | No | As-of date (YYYY-MM-DD) for point-in-time symbol mapping. Useful for backtesting with historical ticker changes. | |
| days | No | Days to look back when start is omitted (default 5). | |
| feed | No | Data feed — "sip" (all US exchanges, default, paid), "iex" (IEX only, free tier), "otc", or "boats". | |
| sort | No | Timestamp sort order — "asc" (default) or "desc". | asc |
| hours | No | Additional hours in the lookback (default 0). | |
| limit | No | Max total data points returned across all symbols, 1–10000 (default 1000). | |
| start | No | Inclusive start time (RFC 3339). Omit to use relative lookback. | |
| minutes | No | Additional minutes in the lookback (default 0). | |
| symbols | Yes | Comma-separated tickers (e.g. "AAPL" or "AAPL,MSFT,GOOG"). | |
| currency | No | Price currency (ISO 4217, e.g. "USD"). Default USD. | |
| timeframe | No | Bar aggregation period — "1Min", "5Min", "15Min", "30Min", "1Hour", "1Day", "1Week", or "1Month". | 1Day |
| adjustment | No | Price adjustment — "raw", "split", "dividend", "spin-off", or "all". Comma-separated combos allowed (e.g. "split,dividend"). Default "raw". | raw |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With readOnlyHint=true and openWorldHint=true already provided by annotations, the description adds useful behavioral context: when start is omitted, it is computed as now minus the days/hours/minutes lookback. This clarifies a non-obvious default behavior beyond what structured annotations convey.
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 with no filler. The core purpose is front-loaded, and the second sentence earns its place by explaining a key default 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 rich input schema with 100% parameter coverage, the presence of an output schema, and read-only annotations, the description is largely sufficient. It could be slightly more complete with an explicit pointer to sibling tools for latest bars or trades, but nothing critical is missing 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?
Schema description coverage is 100%, so the baseline is 3. The description adds value by synthesizing the interaction between start, days, hours, and minutes into a single behavioral rule, helping the agent understand how the relative lookback actually works.
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 ('Retrieve') with a precise resource ('historical price bars (OHLCV) for one or more stocks'). This clearly distinguishes it from sibling tools like get_stock_latest_bar, get_crypto_bars, and get_option_bars by asset class and historical 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 the tool is for historical stock bar data, but it does not explicitly state when to prefer this tool over alternatives like get_stock_latest_bar or get_stock_trades. There is no direct comparison or exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_latest_barB
Get the latest minute bar for one or more stocks.
| Name | Required | Description | Default |
|---|---|---|---|
| feed | No | The source feed of the data. - `sip`: all US exchanges - `iex`: Investors EXchange - `delayed_sip`: SIP with a 15 minute delay - `boats`: Blue Ocean, overnight US trading data - `overnight`: derived overnight US trading data - `otc`: over-the-counter exchanges Default: `sip` if the user has the unlimited subscription, otherwise `iex`. | |
| symbols | Yes | A comma-separated list of stock symbols. | |
| currency | No | The currency of all prices in ISO 4217 format. Default: USD. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavior. However, the description only restates the tool's basic function and adds no behavioral context such as data delay, feed selection, default behavior, or limitations. It does not even mention that multiple symbols are supported beyond the input schema.
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 that is clear and front-loaded. Every word adds meaning, and there is no wasted text or unnecessary detail. It is appropriately concise for a simple tool.
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 and the existence of an output schema, the description is partially complete. It clearly identifies the resource and action, but it lacks guidance on usage context versus sibling tools and does not disclose behavioral details like feed defaults, despite those being in the schema. The presence of the output schema reduces the need to explain return values, so a score of 3 is appropriate.
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 100% parameter coverage with descriptions for feed, symbols, and currency, so the description adds little value here. It does reinforce that multiple symbols can be supplied ('one or more stocks'), which is marginally helpful, but this is already conveyed by the schema's 'comma-separated list' 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 uses a specific verb and resource: 'Get the latest minute bar for one or more stocks.' It clearly distinguishes from sibling tools like get_stock_bars, get_stock_quotes, and get_stock_trades by focusing on the latest minute bar rather than historical bars or other data types.
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 any guidance on when to use this tool versus alternatives. It does not mention, for example, that get_stock_bars should be used for historical bar data, or that get_stock_latest_quote/trade are for quotes/trades. The usage context is only implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_latest_quoteC
Retrieves and formats the latest quote for one or more stocks.
| Name | Required | Description | Default |
|---|---|---|---|
| feed | No | The source feed of the data. - `sip`: all US exchanges - `iex`: Investors EXchange - `delayed_sip`: SIP with a 15 minute delay - `boats`: Blue Ocean, overnight US trading data - `overnight`: derived overnight US trading data - `otc`: over-the-counter exchanges Default: `sip` if the user has the unlimited subscription, otherwise `iex`. | |
| symbols | Yes | A comma-separated list of stock symbols. | |
| currency | No | The currency of all prices in ISO 4217 format. Default: USD. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden. It only states retrieval and formatting, without disclosing data source behavior, default feeds, delay implications, or output formatting specifics. Minor credit is given for the word 'formats' hinting at output structure.
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 with no redundancy. It is concise and to the point, though it could include additional contextual guidance without becoming overly long.
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 output schema and rich parameter descriptions cover return values and parameter details, reducing the need for the description to explain them. However, the description lacks usage guidance and behavioral context relative to sibling tools, making it merely adequate with clear 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 input schema covers 100% of parameters with descriptive text, including enum values, defaults, and ISO currency details. The description adds no additional parameter semantics, 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 uses a specific verb ('retrieves and formats') and clearly identifies the resource ('latest quote for one or more stocks'). It distinguishes from historical or trade-focused siblings by focusing on 'latest quote', though it does not explicitly call out the alternative get_stock_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?
No guidance is provided on when to use this tool versus siblings like get_stock_quotes, get_stock_latest_trade, or get_option_latest_quote. There are no examples, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_latest_tradeB
Get the latest trade for one or more stocks.
| Name | Required | Description | Default |
|---|---|---|---|
| feed | No | The source feed of the data. - `sip`: all US exchanges - `iex`: Investors EXchange - `delayed_sip`: SIP with a 15 minute delay - `boats`: Blue Ocean, overnight US trading data - `overnight`: derived overnight US trading data - `otc`: over-the-counter exchanges Default: `sip` if the user has the unlimited subscription, otherwise `iex`. | |
| symbols | Yes | A comma-separated list of stock symbols. | |
| currency | No | The currency of all prices in ISO 4217 format. Default: USD. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, but it only states the action without any context. It does not mention feed options, response format, or latency, though some of these are captured in the input schema.
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, concise sentence with no unnecessary words. It is front-loaded with the verb and resource, making it immediately clear what the tool does.
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 nature of the tool and the presence of an output schema and rich input schema, the description is minimally adequate. However, it lacks any mention of nuances like feed defaults or the fact that multiple symbols are supported, which could leave users to infer these from the schema alone.
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 provides 100% coverage of all three parameters, including descriptions for each. The description adds no additional meaning beyond the schema, 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 action ('Get'), the resource ('latest trade'), and the scope ('one or more stocks'), making it easily distinguishable from historical trade tools. However, it does not explicitly differentiate itself from siblings like get_stock_trades or get_crypto_latest_trade, relying primarily on its name.
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 versus alternatives such as get_stock_quotes or get_stock_trades. The only hint is the word 'latest' in the name, which implies the tool is for current trades, but this is not explicitly stated in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_quotesGet Stock QuotesARead-only
Retrieve historical bid/ask quotes (level 1) for one or more stocks.
When start is omitted, it is automatically computed as now minus the days/hours/minutes lookback.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Inclusive end time (RFC 3339). Omit for current time. | |
| asof | No | As-of date (YYYY-MM-DD) for point-in-time symbol mapping. | |
| days | No | Days to look back when start is omitted (default 0). | |
| feed | No | Data feed — "sip" (all US exchanges, default, paid), "iex" (free tier), "otc", or "boats". Paper/free accounts must set feed="iex" to avoid 403 errors. | |
| sort | No | Timestamp sort order — "asc" (default) or "desc". | asc |
| hours | No | Additional hours in the lookback (default 0). | |
| limit | No | Max total data points returned across all symbols, 1–10000 (default 1000). | |
| start | No | Inclusive start time (RFC 3339). Omit to use relative lookback. | |
| minutes | No | Additional minutes in the lookback (default 20). | |
| symbols | Yes | Comma-separated tickers (e.g. "AAPL" or "AAPL,MSFT"). | |
| currency | No | Price currency (ISO 4217). Default USD. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool readOnly and openWorld, so the description is not burdened with safety. It adds a valuable behavioral detail: when start is omitted, the tool computes it from days/hours/minutes lookback. It does not discuss pagination or data coverage, but the output schema covers return shape.
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, no filler, and the main purpose is front-loaded. The behavioral caveat is in a separate sentence, making 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?
For an 11-parameter tool, the description relies appropriately on the rich schema and output schema. It covers the one non-obvious default (start auto-computation). It could optionally mention feed restrictions or examples, but these are documented in the schema, so the agent is not left without critical information.
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 all 11 parameters. The description's note about start being computed from lookback restates and slightly clarifies the schema's 'Omit to use relative lookback', but adds no new parameter-level 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 states a specific verb ('Retrieve'), resource ('historical bid/ask quotes (level 1)'), and scope ('one or more stocks'), which clearly distinguishes it from sibling tools like get_stock_latest_quote (latest) and get_stock_bars (OHLCV).
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 through 'historical' and 'level 1' but does not explicitly name alternatives or state when not to use this tool. There is no direct routing to siblings such as get_stock_latest_quote or get_stock_bars, leaving selection to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_snapshotA
Retrieves comprehensive snapshots of stock symbols including latest trade, quote, minute bar, daily bar, and previous daily bar.
| Name | Required | Description | Default |
|---|---|---|---|
| feed | No | The source feed of the data. - `sip`: all US exchanges - `iex`: Investors EXchange - `delayed_sip`: SIP with a 15 minute delay - `boats`: Blue Ocean, overnight US trading data - `overnight`: derived overnight US trading data - `otc`: over-the-counter exchanges Default: `sip` if the user has the unlimited subscription, otherwise `iex`. | |
| symbols | Yes | A comma-separated list of stock symbols. | |
| currency | No | The currency of all prices in ISO 4217 format. Default: USD. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses the data contents but does not mention operational behaviors such as rate limits, authentication, or feed selection behavior (which is left to the schema). The description does provide a clear picture of what data is returned, but lacks behavioral 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?
The description is a single, well-structured sentence that front-loads the purpose and lists the data components without any 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?
Given the tool's moderate complexity (3 params, one enum) and the presence of an output schema, the description adequately covers what the tool returns. It could further explain that it consolidates multiple data types in one call, positioning it against individual sibling endpoints, but it is still reasonably 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 each parameter (feed, symbols, currency) already having detailed descriptions including enum values and defaults. The tool description adds no extra parameter-level meaning, so the baseline score 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 the action ('Retrieves'), the resource ('snapshots of stock symbols'), and enumerates the included data components (latest trade, quote, minute bar, daily bar, previous daily bar). This distinguishes it from sibling tools like get_stock_bars, get_stock_quotes, and get_stock_trades.
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 the comprehensive snapshot option, suggesting it consolidates data that individual sibling tools provide. However, it does not explicitly state when to use this tool over alternatives or mention any exclusions, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_stock_tradesGet Stock TradesARead-only
Retrieve historical trade data for one or more stocks.
When start is omitted, it is automatically computed as now minus the days/hours/minutes lookback.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Inclusive end time (RFC 3339). Omit for current time. | |
| asof | No | As-of date (YYYY-MM-DD) for point-in-time symbol mapping. | |
| days | No | Days to look back when start is omitted (default 0). | |
| feed | No | Data feed — "sip" (all US exchanges, default, paid), "iex" (free tier), "otc", or "boats". Paper/free accounts must set feed="iex" to avoid 403 errors. | |
| sort | No | Timestamp sort order — "asc" (default) or "desc". | asc |
| hours | No | Additional hours in the lookback (default 0). | |
| limit | No | Max total data points returned across all symbols, 1–10000 (default 1000). | |
| start | No | Inclusive start time (RFC 3339). Omit to use relative lookback. | |
| minutes | No | Additional minutes in the lookback (default 20). | |
| symbols | Yes | Comma-separated tickers (e.g. "AAPL" or "AAPL,MSFT"). | |
| currency | No | Price currency (ISO 4217). Default USD. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 a specific behavioral detail beyond annotations: the automatic lookback computation when start is omitted. This provides useful context for how the tool behaves. No contradiction with annotations; the description is consistent with a read-only 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 sentences with no redundancy. The main purpose is front-loaded in the first sentence, and the second sentence provides a key behavioral detail. Every word earns its place, and the structure is clean.
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 11 parameters, the description plus a 100% schema cover the parameter semantics, and an output schema covers return structure. Annotations provide safety. The description adds the crucial default-start behavior. However, it lacks guidance on tool selection among trade-related siblings, which is a minor gap but does not prevent correct invocation given the schemas.
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 all parameters have descriptions. The tool description only reinforces the start/lookback behavior that is already partially documented in the schema ('Omit to use relative lookback'). It does not add significant new meaning for other parameters. Given the high schema coverage, a 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 verb and resource: 'Retrieve historical trade data for one or more stocks.' It distinguishes itself from siblings like get_stock_latest_trade (latest trade) and get_stock_bars (bars) by specifying historical trade data. No ambiguity about what it 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 implies usage for historical trades but does not explicitly state when to use this tool versus alternatives. It mentions a behavioral nuance about the default start computation, but lacks guidance on choosing among the many sibling trade-related tools. No exclusions or alternatives are specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watchlist_by_idA
Get a specific watchlist by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| watchlist_id | Yes | watchlist id |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the action without disclosing error behavior, authentication needs, or what happens if the ID is not found. This is a minimal 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?
A single concise sentence that front-loads the action and resource. Every word earns its place with no redundant 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?
For a simple one-parameter retrieval with an output schema present, the description is sufficient. It lacks explicit error-case information, but the output schema covers the return structure, making the overall context adequate.
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% for the single parameter watchlist_id. The description adds no additional meaning beyond restating 'by its ID', so it does not exceed the baseline for high 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 verb 'Get', the resource 'watchlist', and the scope 'specific by ID'. This distinguishes it from get_watchlists, which lists all watchlists.
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 explicit when-to-use or alternatives are given. However, the name and description imply it is for retrieving a single watchlist when its ID is known, so usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_watchlistsA
Get all watchlists for the account.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden for behavioral disclosure. It indicates a read operation with 'Get', but does not describe any potential side effects, permissions, or return details beyond the action. The simple getter nature is clear, but additional context is sparse.
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 concise sentence of seven words, front-loading the action and resource. Every word adds value and there is 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?
With no parameters and an output schema present, the description is nearly complete for a simple list operation. It clearly identifies what is returned (all watchlists for the account), though it omits potential nuances like ordering or filters, which are mostly moot given the absence of parameters.
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 is complete and there is nothing for the description to clarify. Baseline score of 4 applies because no parameter explanation 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 states the verb and resource: 'Get all watchlists for the account.' It distinguishes from sibling tools like get_watchlist_by_id by explicitly saying 'all', making its 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?
The description implies usage when all watchlists are needed, but it does not explicitly compare with alternatives like get_watchlist_by_id or mention any exclusions. The guidance is minimal, relying on the tool name and general context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_alpaca_api_endpointsList Alpaca API EndpointsARead-only
List endpoints for one allowed Alpaca OpenAPI spec. Use when browsing the available endpoint inventory for Trading API, Market Data API, or Authentication API before narrowing to a specific endpoint. Read-only; excludes Broker API; prefer search_alpaca_api_specs for targeted lookup.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Trading API |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description reinforces the read-only nature already indicated by annotations and adds useful behavioral boundaries: it operates on one allowed spec and excludes Broker API. It does not explain the output structure, but the output schema exists and the annotations cover the safety profile, so the added contextual value is meaningful.
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 carry the full purpose, usage context, read-only status, exclusions, and an alternative tool reference with no wasted words. The primary action and scope are 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 metadata-browsing tool with one optional parameter, an output schema, and annotations covering read-only behavior, the description is complete. It tells the agent what the tool does, when to use it, what scope limitations exist, and which sibling to prefer for targeted lookup.
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 0% and there are no enums, but the description compensates by naming the three allowed API areas: Trading API, Market Data API, and Authentication API. This gives the agent a clear sense of what the 'title' parameter should contain, even though the description does not explicitly map the parameter to those values or mention the default.
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 endpoints for a single Alpaca OpenAPI spec inventory, specifically distinguishing Trading API, Market Data API, and Authentication API while excluding Broker API. This is a specific verb+resource combination that differentiates it from related search and documentation 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 when to use the tool ('when browsing the available endpoint inventory... before narrowing to a specific endpoint') and names the preferred alternative for targeted lookup ('prefer search_alpaca_api_specs'). It also provides an exclusion (Broker API), giving clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_crypto_orderPlace Crypto OrderCDestructive
Place a cryptocurrency order.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | No | Number of coins/tokens. Mutually exclusive with notional. | |
| side | Yes | "buy" or "sell". | |
| type | No | "market", "limit", or "stop_limit". | market |
| symbol | Yes | Crypto pair (e.g., "BTC/USD", "ETH/USD"). | |
| notional | No | Dollar amount to trade. Mutually exclusive with qty. Only valid for market orders. | |
| stop_price | No | Required for stop_limit orders. | |
| limit_price | No | Required for limit and stop_limit orders. | |
| time_in_force | No | "gtc" (default) or "ioc". Crypto does not support "day" or "fok". | gtc |
| client_order_id | No | Unique idempotency key. If the request times out, you can safely retry with the same value — the API will reject duplicates. Recommended for every order. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose destructiveHint=true, readOnlyHint=false, and idempotentHint=false. The description adds no behavioral context beyond the word 'place'—no mention of live trading impact, order execution behavior, or retry semantics. 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 very short and free of filler, which is good, but it is terse to the point of adding little value beyond the tool name. It is not poorly structured, but brevity here is under-specification rather than effective concision.
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 high-stakes order tool with 9 parameters, a single generic sentence is insufficient. The schema covers parameter syntax, but the description offers no guidance on order type selection, risk warnings, or when this tool is appropriate relative to similar order tools.
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 tool description itself adds no parameter meaning, but the schema thoroughly documents qty, notional, order types, stop/limit prices, time-in-force, and idempotency keys.
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 ('place') and a clear object ('cryptocurrency order'), which distinguishes it from stock and option order tools by asset class. However, it is essentially the title restated and does not explicitly name or contrast 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?
There is no guidance on when to use this tool versus place_stock_order or place_option_order. The asset class is implied by 'crypto', but no explicit context, exclusions, or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_option_orderPlace Option OrderADestructive
Place an options order (single-leg or multi-leg).
For single-leg orders, provide symbol, side, and qty. For multi-leg orders, provide qty, legs, and optionally order_class="mleg" (auto-inferred). Symbol and side on the parent are not needed for multi-leg.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | Yes | Number of contracts. Required for both single-leg and multi-leg orders. For multi-leg, this is the strategy multiplier — each leg's ratio_qty is scaled by this value (e.g., qty="10" with ratio_qty="2" = 20 contracts for that leg). | |
| legs | No | List of leg dicts for multi-leg orders (max 4). Each leg requires "symbol" and "ratio_qty" (string). Optional per-leg fields: "side" ("buy" or "sell") and "position_intent". | |
| side | No | "buy" or "sell". Required for single-leg. | |
| type | No | "market" or "limit". | market |
| symbol | No | OCC option symbol (e.g., "AAPL250321C00150000"). Required for single-leg. | |
| limit_price | No | Required for limit orders. For multi-leg, this is the net debit/credit (positive = debit/cost, negative = credit/proceeds). | |
| order_class | No | Set to "mleg" for multi-leg orders. Automatically inferred when legs are provided. | |
| time_in_force | No | "day" only. Options do not support other values. | day |
| client_order_id | No | Unique idempotency key. If the request times out, you can safely retry with the same value — the API will reject duplicates. Recommended for every order. | |
| position_intent | No | "buy_to_open", "buy_to_close", "sell_to_open", or "sell_to_close". Clarifies whether the trade opens or closes a position. Optional but recommended. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide the core behavioral profile: readOnlyHint=false and destructiveHint=true. The description adds some useful behavior, such as the auto-inference of order_class='mleg' and that symbol/side are unnecessary on the parent for multi-leg. But it does not disclose execution traits like market vs. limit default behavior, possibility of rejection, or financial risk beyond what destructiveHint implies. It adds modest value 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 four short, purposeful segments: a one-sentence purpose statement, then a clear bullet-like breakdown for each order type, and a final negation about unneeded fields. Every sentence earns its place; there is zero filler or repetition. It is front-loaded with the tool's main function and compactly conveys the critical branching logic.
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 (10 parameters, multi-leg structures, market vs. limit types), the description covers the two essential order modes and their required parameters. The rich schema handles per-parameter details like limit_price, time_in_force, and client_order_id, and an output schema exists proportional to the task. The only gap is that the description does not mention the market/limit distinction or position_intent context, but these are well documented in the schema, so the overall picture is complete enough.
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 nominal. The description goes beyond the schema by explicitly tying parameters to usage modes: symbol/side/qty for single-leg, and qty/legs/order_class for multi-leg. This grouping adds relational meaning that the flat schema alone does not convey, making it genuinely helpful. It earns a 4.
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 direct statement, 'Place an options order (single-leg or multi-leg)', which names a specific verb, resource, and scope. It immediately differentiates from sibling tools like place_stock_order and place_crypto_order by specifying options, and it further distinguishes between single-leg and multi-leg variants. No ambiguity about 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?
The description provides explicit branch-based guidance: for single-leg orders, 'provide symbol, side, and qty'; for multi-leg orders, 'provide qty, legs, and optionally order_class="mleg"'. It also clarifies that symbol and side are not needed for multi-leg. However, it does not explicitly name alternative tools or state when to choose this over place_stock_order or place_crypto_order, so it stops short of a perfect 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_stock_orderPlace Stock OrderBDestructive
Place a stock or ETF order.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | No | Number of shares. Mutually exclusive with notional. | |
| side | Yes | "buy" or "sell". | |
| type | No | Order type — "market", "limit", "stop", "stop_limit", "trailing_stop". | market |
| symbol | Yes | Stock ticker (e.g., "AAPL", "SPY"). | |
| notional | No | Dollar amount to trade. Mutually exclusive with qty. Only valid for market orders with time_in_force="day". | |
| stop_price | No | Required for stop and stop_limit orders. | |
| limit_price | No | Required for limit and stop_limit orders. | |
| order_class | No | "simple", "bracket", "oco", or "oto". Automatically set to "bracket" when take_profit or stop_loss params are provided. | |
| trail_price | No | Dollar trail amount for trailing_stop orders. | |
| time_in_force | No | "day", "gtc", "opg", "cls", "ioc", or "fok". | day |
| trail_percent | No | Percent trail for trailing_stop orders. | |
| extended_hours | No | Allow execution in pre-market, after-hours, and overnight sessions. Only works with type="limit" and time_in_force="day" or "gtc". | |
| client_order_id | No | Unique idempotency key. If the request times out, you can safely retry with the same value — the API will reject duplicates. Recommended for every order. | |
| stop_loss_stop_price | No | Stop price for bracket stop-loss leg. | |
| advanced_instructions | No | Alpaca Elite Smart Router routing/algo payload. Stocks-only (the Elite docs explicitly note options and crypto reject the payload). Requires the account to be on Elite Smart Router routing; non-Elite accounts will see the field ignored or rejected by Alpaca's API. Shapes: DMA Gateway (direct routing): {"algorithm": "DMA", "destination": "NYSE"|"NASDAQ"|"ARCA", "display_qty": "<round lot, optional>"} Only with type="limit"|"market" and time_in_force="day"; not compatible with opg/cls/gtc or stop orders. VWAP (Volume-Weighted Average Price): {"algorithm": "VWAP", "start_time": "<RFC3339, optional>", "end_time": "<RFC3339, optional>", "max_percentage": "<0<x<1, optional>"} Does NOT participate in open/close auctions. TWAP (Time-Weighted Average Price): {"algorithm": "TWAP", "start_time": "<RFC3339, optional>", "end_time": "<RFC3339, optional>", "max_percentage": "<0<x<1, optional>"} Does NOT participate in open/close auctions. NOTE: PATCH /v2/orders/{id} already documents `advanced_instructions` in the OpenAPI spec (PatchOrderRequest), and `replace_order_by_id` exposes it through auto-generation — this patch only addresses the POST-side asymmetry. | |
| stop_loss_limit_price | No | Limit price for bracket stop-loss leg. | |
| take_profit_limit_price | No | Limit price for bracket take-profit leg. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds no behavioral detail beyond what the annotations already provide. Annotations already signal destructiveHint=true, readOnlyHint=false, and idempotentHint=false, so the agent knows this is a side-effectful operation, but the description itself contributes no extra context about execution, settlement, or consequences.
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 with zero wasted words and the core action front-loaded. It is appropriately concise, though for a tool with 17 parameters and many order types, the description is arguably too terse to provide broader orientation.
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 rich schema and annotations cover parameters and safety signals, so the minimal description is not fatal. However, for a complex order-placement tool with siblings like place_crypto_order and place_option_order, the description omits high-level guidance about order types, immediate execution risks, and routing to alternatives.
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 parameter descriptions are highly detailed and self-sufficient. The tool description adds no additional parameter semantics, 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 states a clear verb and resource: 'Place a stock or ETF order.' The asset-class qualifier ('stock or ETF') implies a distinction from place_crypto_order and place_option_order, but it does not explicitly name the siblings or the exact scope beyond those two words.
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 resource scope ('stock or ETF') gives implied usage context, so an agent can infer this is the right tool for equities/ETFs rather than crypto or options. However, it does not explicitly say when to prefer this over alternatives, nor does it mention exclusions like order types that require other tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_asset_from_watchlist_by_idA
Remove an asset by symbol from a specific watchlist.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes | symbol name to remove from the watchlist content | |
| watchlist_id | Yes | Watchlist ID |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states the removal action without revealing side effects such as whether the removal is permanent or what happens if the asset is not found. This lack of behavioral context is a significant gap for a mutation 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 one concise sentence with no wasted words. It front-loads the action and object while omitting unnecessary details, making it highly efficient.
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 with 2 well-documented parameters and an output schema, so the description does not need to explain return values. However, it lacks context about the effect of removal (e.g., permanence) and does not distinguish itself from deleting an entire watchlist. The description is minimally adequate but not fully complete for a mutation operation.
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 clear parameter descriptions for symbol and watchlist_id. The description adds no extra meaning beyond 'by symbol' and 'specific watchlist', which aligns with the schema but does not enhance understanding. Baseline 3 is appropriate when the schema fully documents 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 'Remove an asset by symbol from a specific watchlist' clearly identifies the action (remove), the resource (asset from watchlist), and the required identifiers (symbol, watchlist). This distinguishes it from sibling tools like add_asset_to_watchlist_by_id and delete_watchlist_by_id.
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 through its clear action, but it does not explicitly state when to prefer this tool over alternatives or provide exclusions. No mention is made of when not to use it (e.g., for removing an entire watchlist) or any prerequisites like requiring an existing watchlist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
replace_order_by_idB
Replaces an existing open order with updated parameters. At least one optional field must be provided.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | No | number of shares to trade. You can only patch full shares for now. Qty of equity fractional orders are not allowed to change. Non-IPO notional orders cannot be replaced at all - no fields (qty, limit_price, stop_price, etc.) can be modified; cancel and resubmit instead. | |
| trail | No | the new value of the trail_price or trail_percent value (works only for type="trailing_stop") | |
| notional | No | New notional (dollar amount) for the order. Only valid for IPO indications of interest (`asset_class: "ipo"`); will be rejected for any other asset class. Mutually exclusive with `qty` on the same replace request. | |
| order_id | Yes | order id | |
| stop_price | No | required if original order type is limit or stop_limit | |
| limit_price | No | Required if original order's `type` field was `limit` or `stop_limit`. In case of `mleg`, the limit_price parameter is expressed with the following notation: - A positive value indicates a debit, representing a cost or payment to be made. - A negative value signifies a credit, reflecting an amount to be received. | |
| time_in_force | No | The Time-In-Force values supported by Alpaca vary based on the order's security type. Here is a breakdown of the supported TIFs for each specific security type: - Equity trading: day, gtc, opg, cls, ioc, fok. - Options trading: day. - Crypto trading: gtc, ioc. Below are the descriptions of each TIF: - day: A day order is eligible for execution only on the day it is live. By default, the order is only valid during Regular Trading Hours (9:30am - 4:00pm ET). If unfilled after the closing auction, it is automatically canceled. If submitted after the close, it is queued and submitted the following trading day. However, if marked as eligible for extended hours, the order can also execute during supported extended hours. - gtc: The order is good until canceled. Non-marketable GTC limit orders are subject to price adjustments to offset corporate actions affecting the issue. We do not currently support Do Not Reduce (DNR) orders to opt out of such price adjustments. - opg: Use this TIF with a market/limit order type to submit "market on open" (MOO) and "limit on open" (LOO) orders. This order is eligible to execute only in the market opening auction. Any unfilled orders after the open will be cancelled. OPG orders submitted after 9:28am but before 7:00pm ET will be rejected. OPG orders submitted after 7:00pm will be queued and routed to the following day's opening auction. On open/on close orders are routed to the primary exchange. Such orders do not necessarily execute exactly at 9:30am / 4:00pm ET but execute per the exchange's auction rules. - cls: Use this TIF with a market/limit order type to submit "market on close" (MOC) and "limit on close" (LOC) orders. This order is eligible to execute only in the market closing auction. Any unfilled orders after the close will be cancelled. CLS orders submitted after 3:50pm but before 7:00pm ET will be rejected. CLS orders submitted after 7:00pm will be queued and routed to the following day's closing auction. Only available with API v2. - ioc: An Immediate Or Cancel (IOC) order requires all or part of the order to be executed immediately. Any unfilled portion of the order is canceled. Only available with API v2. Most market makers who receive IOC orders will attempt to fill the order on a principal basis only, and cancel any unfilled balance. On occasion, this can result in the entire order being cancelled if the market maker does not have any existing inventory of the security in question. - fok: A Fill or Kill (FOK) order is only executed if the entire order quantity can be filled, otherwise the order is canceled. Only available with API v2. | |
| client_order_id | No | A unique identifier for the new order. Automatically generated if not sent. (<= 128 characters) | |
| advanced_instructions | No | Advanced instructions for Elite Smart Router: https://docs.alpaca.markets/docs/alpaca-elite-smart-router |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the action and the 'at least one optional field' constraint; it does not disclose that replacing may cancel the old order, that certain order types (e.g., non-IPO notional) cannot be replaced at all, or what side effects or errors to expect. Key behavioral traits are missing.
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 with zero filler: the action is front-loaded, and the key constraint is stated immediately. Every word earns its place, making it an exemplary concise definition.
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 complex tool with 9 parameters, nested objects, and asset-class-specific rules (e.g., IPO notional, trailing stops, mleg notations). The description does not mention critical restrictions like 'non-IPO notional orders cannot be replaced' or that limit_price/stop_price may be required based on the original order type. While the output schema and rich parameter descriptions cover some details, the main description is insufficient for such a nuanced mutation operation.
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 meaningful cross-parameter semantics by stating 'At least one optional field must be provided', a constraint not encoded in the schema's required/optional structure. This helps agents avoid sending a no-op request, justifying a score above 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 states a specific verb ('Replaces') and a clear resource ('existing open order'), immediately differentiating it from order creation or cancellation tools among the siblings. However, it does not explicitly name or contrast with sibling alternatives like 'place_stock_order' or 'cancel_order_by_id', so it stops short of a 5.
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 'existing open order' implies the tool is for modifying already-placed orders rather than creating or canceling them, but there is no explicit guidance on when to use this versus alternatives such as placing a new order or canceling and resubmitting. No exclusions, prerequisites, or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_alpaca_api_specsSearch Alpaca API SpecsARead-only
Search Alpaca API reference endpoints by topic, operation, path fragment, parameter, or schema term. Use when the exact method and path are unknown. Read-only; does not execute endpoints; searches Trading API, Market Data API, and Authentication API only; excludes Broker API. Use query; do not use pattern.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint annotation, the description adds meaningful behavioral context: it does not execute endpoints, it searches only Trading/Market Data/Authentication APIs, and it excludes Broker API. The instruction 'Use `query`; do not use `pattern`' also clarifies an important operational constraint.
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, no filler, with purpose front-loaded and usage/scope details following in logical order. Every sentence contributes actionable 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 single-parameter read-only search tool, the description covers what it searches, when to use it, what it does not do, and the parameter to use. Together with the existing output schema and annotations, 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 schema provides only a bare 'query' string with 0% description coverage ROC, so the description carries the full burden. It compensates by defining what the query can match and explicitly instructing to use `query` rather than `pattern`, giving the agent enough semantics to call the tool correctly.
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 ('Search'), a clear resource ('Alpaca API reference endpoints'), and the dimensions of search ('topic, operation, path fragment, parameter, or schema term'). It also distinguishes itself from similar doc/endpoint tools by scoping to reference endpoints and excluding Broker API.
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 says 'Use when the exact method and path are unknown,' giving a clear trigger condition. However, it does not name alternative sibling tools like get_alpaca_endpoint_docs or fetch_alpaca_doc, nor does it state an explicit 'when not to use' rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_alpaca_docsSearch Alpaca DocsARead-only
Search Alpaca documentation pages and guides. Use for conceptual or product questions about setup, account rules, funding, trading, market data, events, or FAQs. Read-only; not for exact API method/path lookup; prefer search_alpaca_api_specs for endpoint, parameter, or schema questions.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, and destructiveHint=false, so safety is covered. The description reinforces the read-only nature and adds the limitation that it is not for exact API lookup, but contributes no additional behavioral context such as return shape, pagination, or rate limits. With output schema present, the gap is acceptable.
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 carry the core purpose, the usage context, the read-only nature, and an explicit exclusion with alternative routing. Every sentence earns its place, and the primary action 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 single-parameter search tool with read-only annotations and an output schema present, the description covers purpose, usage boundaries, and sibling alternative completely. An agent has enough context to decide when to select this tool and what kind of query to supply.
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 0%, and the only parameter is 'query' with no schema-level documentation. The description implies that query is a natural-language conceptual/product question, but it does not explicitly define the parameter's format or expectations. The one-parameter context and the tool's search intent make this minimally 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 states a specific verb and resource: searching Alpaca documentation pages and guides, scoped to conceptual/product questions about setup, account rules, funding, trading, market data, events, or FAQs. It clearly distinguishes this from exact API method/path lookup by naming search_alpaca_api_specs as the 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?
Explicitly says when to use this tool — conceptual or product questions — and when not to: exact API method/path lookup. It names the preferred sibling tool for endpoint, parameter, or schema questions, so an agent has clear routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_account_configA
Updates one or more account configuration settings. Only the fields you provide will be changed; all others retain their current values.
| Name | Required | Description | Default |
|---|---|---|---|
| no_shorting | No | If true, account becomes long-only mode. | |
| suspend_trade | No | If true, new orders are blocked. | |
| fractional_trading | No | If true, account is able to participate in fractional trading | |
| trade_confirm_email | No | all or none. If none, emails for order fills are not sent. | |
| max_margin_multiplier | No | Can be "1", "2", or "4" | |
| ptp_no_exception_entry | No | If set to true then Alpaca will accept orders for PTP symbols with no exception. Default is false. | |
| disable_overnight_trading | No | If true, overnight trading is disabled. | |
| max_options_trading_level | No | The desired maximum options trading level. 0=disabled, 1=Covered Call/Cash-Secured Put, 2=Long Call/Put, 3=Spreads/Straddles. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It communicates that updates are partial (only provided fields change), which is a critical behavior. It does not detail side effects, permissions, or error handling, but the partial update disclosure adds meaningful transparency beyond the basic 'updates' verb.
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 primary action and immediately followed by the key partial-update clarification. Every word earns its place with no waste.
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 benefits from a rich schema and output schema, so return values do not need elaboration. The description covers the essential update semantics and partial-update behavior. It does not mention prerequisites or postconditions, but for a config update tool this is largely adequate.
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 parameters are already well-documented. The description adds little beyond stating the partial-update semantics, which is a general behavior rather than per-parameter detail. 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 updates account configuration settings, using the specific verb 'updates' and naming the resource. This distinguishes it from the sibling 'get_account_config' and other config-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 provides clear context on how to use the tool, emphasizing that only provided fields are changed and others are retained. It does not explicitly name alternatives or when-not-to-use conditions, but the partial-update behavior serves as a key usage guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_watchlist_by_idA
Update an existing watchlist. IMPORTANT: this replaces the entire watchlist. You must include the symbols parameter with the full list of desired symbols, otherwise all assets will be removed.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | The new watchlist name. | |
| symbols | No | List of asset symbols to include in the watchlist. The existing assets will be replaced with the new list. | |
| watchlist_id | Yes | watchlist id |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does this well by explicitly warning that the operation 'replaces the entire watchlist' and that omitting symbols 'will remove all assets'—critical destructive behavior an agent must know before invoking.
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 with no filler. The most important behavioral constraint is front-loaded in an 'IMPORTANT' warning, ensuring an agent notices it immediately.
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 moderate-complexity replacement operation, the description is complete. It covers the purpose, the destructive default behavior, and the critical parameter requirement. An output schema exists, so not describing return values is acceptable.
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 extra semantic value beyond the schema by warning that the symbols parameter must contain the full desired list and that omitting it leads to all assets being removed. This clarification is essential for correct invocation.
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 operation: 'Update an existing watchlist.' The important note that this 'replaces the entire watchlist' distinguishes it from sibling tools like add_asset_to_watchlist_by_id and remove_asset_from_watchlist_by_id, even though those alternatives aren't named.
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 its use case: use this tool when you want to replace an entire watchlist, as opposed to making incremental additions or removals. However, it does not explicitly name alternative tools or state when-not-to-use it, leaving some routing inference to the agent.
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.
41 tool updates
v2.3.2- Changed
add_asset_to_watchlist_by_id1 field changed- removed
Input schema / properties / symbol / x-stoplightRemoved value: -{ - "id": "wb0v0f7q0ms5e" -}
- Added
create_locate - Changed
create_watchlist2 fields changed- removed
Input schema / properties / symbols / items / nullableRemoved value: -true - changed
Input schema / properties / symbols / items / typePrevious value: -"string"New value: +[ + "string", + "null" +]
- Added
fetch_alpaca_doc - Changed
get_account_activities6 fields changed- changed
Input schema / properties / activity_types / items / descriptionPrevious value: -"- FILL\n Order fills (both partial and full fills)\n\n- TRANS\n Cash transactions (both CSD and CSW)\n\n- MISC\n Miscellaneous or rarely used activity types (All types except those in TRANS, DIV, or FILL)\n\n- ACATC\n ACATS IN/OUT (Cash)\n\n- ACATS\n ACATS IN/OUT (Securities)\n\n- CFEE\n Crypto fee\n\n- CSD\n Cash deposit(+)\n\n- CSW\n Cash withdrawal(-)\n\n- DIV\n Dividends\n\n- DIVCGL\n Dividend (capital gain long term)\n\n- DIVCGS\n Dividend (capital gain short term)\n\n- DIVFEE\n Dividend fee\n\n- DIVFT\n Dividend adjusted (Foreign Tax Withheld)\n\n- DIVNRA\n Dividend adjusted (NRA Withheld)\n\n- DIVROC\n Dividend return of capital\n\n- DIVTW\n Dividend adjusted (Tefra Withheld)\n\n- DIVTXEX\n Dividend (tax exempt)\n\n- FEE\n Fee denominated in USD\n\n- INT\n Interest (credit/margin)\n\n- INTNRA\n Interest adjusted (NRA Withheld)\n\n- INTTW\n Interest adjusted (Tefra Withheld)\n\n- JNL\n Journal entry\n\n- JNLC\n Journal entry (cash)\n\n- JNLS\n Journal entry (stock)\n\n- MA\n Merger/Acquisition\n\n- NC\n Name change\n\n- OPASN\n Option assignment\n\n- OPCA\n Option corporate action\n\n- OPCSH\n Option cash deliverable for non-standard contracts\n\n- OPEXC\n Option exercise\n\n- OPEXP\n Option expiration\n\n- OPTRD\n Option trade\n\n- PTC\n Pass Thru Charge\n\n- PTR\n Pass Thru Rebate\n\n- REORG\n Reorg CA\n\n- SPIN\n Stock spinoff\n\n- SPLIT\n Stock split\n\n- FOPT\n Free of Payment Transfers"New value: +"- FILL\n Order fills (both partial and full fills)\n\n- TRANS\n Cash transactions (both CSD and CSW)\n\n- MISC\n Miscellaneous or rarely used activity types (All types except those in TRANS, DIV, or FILL)\n\n- ACATC\n ACATS IN/OUT (Cash)\n\n- ACATS\n ACATS IN/OUT (Securities)\n\n- CFEE\n Crypto fee\n\n- CGD\n Capital gain distribution\n\n- CSD\n Cash deposit(+)\n\n- CSW\n Cash withdrawal(-)\n\n- DIV\n Dividends\n\n- DIVCGL\n Dividend (capital gain long term)\n\n- DIVCGS\n Dividend (capital gain short term)\n\n- DIVFEE\n Dividend fee\n\n- DIVFT\n Dividend adjusted (Foreign Tax Withheld)\n\n- DIVNRA\n Dividend adjusted (NRA Withheld)\n\n- DIVROC\n Dividend return of capital\n\n- DIVTW\n Dividend adjusted (Tefra Withheld)\n\n- DIVTXEX\n Dividend (tax exempt)\n\n- FEE\n Fee denominated in USD\n\n- INT\n Interest (credit/margin)\n\n- INTNRA\n Interest adjusted (NRA Withheld)\n\n- INTTW\n Interest adjusted (Tefra Withheld)\n\n- JNL\n Journal entry\n\n- JNLC\n Journal entry (cash)\n\n- JNLS\n Journal entry (stock)\n\n- MA\n Merger/Acquisition\n\n- NC\n Name change\n\n- OPASN\n Option assignment\n\n- OPCA\n Option corporate action\n\n- OPCSH\n Option cash deliverable for non-standard contracts\n\n- OPEXC\n Option exercise\n\n- OPEXP\n Option expiration\n\n- OPTRD\n Option trade\n\n- PTC\n Pass Thru Charge\n\n- PTR\n Pass Thru Rebate\n\n- REO\n Reorganization\n\n- REORG\n Reorg CA\n\n- SPIN\n Stock spinoff\n\n- SPLIT\n Stock split\n\n- FOPT\n Free of Payment Transfers\n\n- OCT\n On chain transactions (blockchain deposits/withdrawals)" - changed
Input schema / properties / activity_types / items / enumPrevious value: -[ - "FILL", - "TRANS", - "MISC", - "ACATC", - "ACATS", - "CFEE", - "CSD", - "CSW", - "DIV", - "DIVCGL", - "DIVCGS", - "DIVFEE", - "DIVFT", - "DIVNRA", - "DIVROC", - "DIVTW", - "DIVTXEX", - "FEE", - "INT", - "INTNRA", - "INTTW", - "JNL", - "JNLC", - "JNLS", - "MA", - "NC", - "OPASN", - "OPCA", - "OPCSH", - "OPEXC", - "OPEXP", - "OPTRD", - "PTC", - "PTR", - "REORG", - "SPIN", - "SPLIT", - "FOPT" -]New value: +[ + "FILL", + "TRANS", + "MISC", + "ACATC", + "ACATS", + "CFEE", + "CGD", + "CSD", + "CSW", + "DIV", + "DIVCGL", + "DIVCGS", + "DIVFEE", + "DIVFT", + "DIVNRA", + "DIVROC", + "DIVTW", + "DIVTXEX", + "FEE", + "INT", + "INTNRA", + "INTTW", + "JNL", + "JNLC", + "JNLS", + "MA", + "NC", + "OPASN", + "OPCA", + "OPCSH", + "OPEXC", + "OPEXP", + "OPTRD", + "PTC", + "PTR", + "REO", + "REORG", + "SPIN", + "SPLIT", + "FOPT", + "OCT" +] - added
Input schema / properties / activity_types / items / examplesAdded value: +[ + "FILL" +] - removed
Input schema / properties / activity_types / items / x-examplesRemoved value: -{ - "example-1": "FILL" -} - changed
Input schema / properties / date / descriptionPrevious value: -"Filter activities by the activity date. Both formats YYYY-MM-DD and YYYY-MM-DDTHH:MM:SSZ are supported."New value: +"Filter activities by their creation date (created_at), not the activity's settlement date. For non-trade activities such as fees, the creation date is typically the day after the trade date (in UTC). Both formats YYYY-MM-DD and YYYY-MM-DDTHH:MM:SSZ are supported." - added
Input schema / properties / order_idAdded value: +{ + "description": "Filter activities associated with a specific order. Useful for retrieving the fills that make up a completely filled order.", + "example": "fe060a1b-5b45-4eba-ba46-c3a3345d8255", + "format": "uuid", + "type": "string" +}
- Changed
get_account_activities_by_type2 fields changed- changed
Input schema / properties / date / descriptionPrevious value: -"Filter activities by the activity date. Both formats YYYY-MM-DD and YYYY-MM-DDTHH:MM:SSZ are supported."New value: +"Filter activities by their creation date (created_at), not the activity's settlement date. For non-trade activities such as fees, the creation date is typically the day after the trade date (in UTC). Both formats YYYY-MM-DD and YYYY-MM-DDTHH:MM:SSZ are supported." - added
Input schema / properties / order_idAdded value: +{ + "description": "Filter activities associated with a specific order. Useful for retrieving the fills that make up a completely filled order.", + "example": "fe060a1b-5b45-4eba-ba46-c3a3345d8255", + "format": "uuid", + "type": "string" +}
- Changed
get_all_assets5 fields changed- changed
Input schema / properties / attributes / descriptionPrevious value: -"Comma separated values to query for more than one attribute. Assets which have any of the given attributes will be included.\n\nSupported values:\n- `ptp_no_exception`: Asset is a Publicly Traded Partnership (PTP) without a qualified notice; non-U.S. customers may incur 10% withholding on gross proceeds as per IRS guidance, and are blocked from being purchased by default.\n- `ptp_with_exception`: Users can open positions in these PTPs without general restrictions.\n- `ipo`: Accepting limit orders only before the stock begins trading on the secondary market.\n- `has_options`: The underlying equity has listed options available on the platform. Note: if the equity had inactive/expired contracts in the past, this will still show up.\n- `options_late_close`: Indicates the underlying asset's options contracts close at 4:15pm ET instead of the standard 4:00pm ET.\n- `fractional_eh_enabled`: Indicates the asset accepts fractional orders during extended hours sessions (pre-market, post-market, and overnight if enabled).\n- `overnight_tradable`: Asset is eligible for overnight (24x5) trading in supported venues on the platform.\n- `overnight_halted`: Asset is not eligible for overnight trading but is currently halted/blocked for overnight sessions due to risk, corporate action, compliance, or venue constraints."New value: +"Comma separated values to query for more than one attribute. Assets which have any of the given attributes will be included.\n\nSupported values:\n- `ptp_no_exception`: Asset is a Publicly Traded Partnership (PTP) without a qualified notice; non-U.S. customers may incur 10% withholding on gross proceeds as per IRS guidance, and are blocked from being purchased by default.\n- `ptp_with_exception`: Users can open positions in these PTPs without general restrictions.\n- `ipo`: Accepting limit orders only before the stock begins trading on the secondary market.\n- `has_options`: The underlying equity has listed options available on the platform. Note: if the equity had inactive/expired contracts in the past, this will still show up.\n- `options_late_close`: Indicates the underlying asset's options contracts close at 4:15pm ET instead of the standard 4:00pm ET.\n- `fractional_eh_enabled`: Indicates the asset accepts fractional orders during extended hours sessions (pre-market, post-market, and overnight if enabled).\n- `overnight_tradable`: Asset is eligible for overnight (24x5) trading in supported venues on the platform.\n- `overnight_halted`: Asset is eligible for overnight trading but is currently halted/blocked for overnight sessions due to risk, corporate action, compliance, or venue constraints." - added
Input schema / properties / attributes / items / descriptionAdded value: +"Unique characteristic of an asset. Supported values:\n- `ptp_no_exception`: Asset is a Publicly Traded Partnership (PTP) without a qualified notice; non-U.S. customers may incur 10% withholding on gross proceeds as per IRS guidance, and are blocked from being purchased by default.\n- `ptp_with_exception`: Users can open positions in these PTPs without general restrictions.\n- `ipo`: Accepting limit orders only before the stock begins trading on the secondary market.\n- `has_options`: The underlying equity has listed options available on the platform. Note: if the equity had inactive/expired contracts in the past, this will still show up.\n- `options_late_close`: Indicates the underlying asset's options contracts close at 4:15pm ET instead of the standard 4:00pm ET.\n- `fractional_eh_enabled`: Indicates the asset accepts fractional orders during extended hours sessions (pre-market, post-market, and overnight if enabled).\n- `overnight_tradable`: Asset is eligible for overnight (24x5) trading in supported venues on the platform.\n- `overnight_halted`: Asset is eligible for overnight trading but is currently halted/blocked for overnight sessions due to risk, corporate action, compliance, or venue constraints." - added
Input schema / properties / attributes / items / exampleAdded value: +"ptp_no_exception" - changed
Input schema / properties / exchange / descriptionPrevious value: -"Optional AMEX, ARCA, BATS, NYSE, NASDAQ, NYSEARCA or OTC"New value: +"Optional AMEX, ARCA, BATS, NYSE, NASDAQ, NYSEARCA, OTC or CRYPTO" - changed
Input schema / properties / status / descriptionPrevious value: -"e.g. “active”. By default, all statuses are included."New value: +"e.g. \"active\". By default, all statuses are included."
- Added
get_alpaca_endpoint_docs - Changed
get_calendar2 fields changed- removed
Input schema / properties / end / x-go-typeRemoved value: -"legacyTime" - removed
Input schema / properties / start / x-go-typeRemoved value: -"legacyTime"
- Changed
get_corporate_action_announcement1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"The corporate announcement’s id"New value: +"The corporate announcement's id"
- Changed
get_corporate_action_announcements3 fields changed- changed
Input schema / properties / ca_types / descriptionPrevious value: -"A comma-delimited list of Dividend, Merger, Spinoff, or Split."New value: +"A comma-delimited list of corporate action types." - added
Input schema / properties / ca_types / itemsAdded value: +{ + "description": "The type of corporate action.", + "enum": [ + "Spinoff", + "Merger", + "Split", + "Reorg", + "Dividend" + ], + "example": "Dividend", + "title": "CorporateActionCaType", + "type": "string" +} - changed
Input schema / properties / ca_types / typePrevious value: -"string"New value: +"array"
- Changed
get_corporate_actions8 fields changed- added
Input schema / properties / data_qualityAdded value: +{ + "default": "complete", + "description": "Controls which corporate actions are returned based on data quality.\n\n- `complete` (default): exclude corporate actions that are still missing required\n fields (for example, ex-date or CUSIP/ISIN) and have not yet been processed.\n Already-processed corporate actions are always included, even if they would\n otherwise be considered incomplete.\n- `all`: return matching corporate actions regardless of field completeness.\n", + "enum": [ + "complete", + "all" + ], + "type": "string" +} - changed
Input schema / properties / ids / descriptionPrevious value: -"A comma-separated list of corporate action IDs. This parameter is mutually exclusive with all other filters (symbols, types, start, end).\n"New value: +"A comma-separated list of corporate action IDs. This parameter is mutually exclusive with all other filters (symbols, types, start, end, region, data_quality).\n" - added
Input schema / properties / regionAdded value: +{ + "default": "us", + "description": "The region to filter corporate actions by.\n\n- `us`: only US corporate actions\n- `non_us`: only non-US corporate actions\n- `all`: both US and non-US corporate actions\n", + "enum": [ + "us", + "non_us", + "all" + ], + "type": "string" +} - added
Input schema / properties / sort / allOfAdded value: +[ + { + "default": "asc", + "description": "Sort data in ascending or descending order.", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } +] - removed
Input schema / properties / sort / defaultRemoved value: -"asc" - removed
Input schema / properties / sort / enumRemoved value: -[ - "asc", - "desc" -] - removed
Input schema / properties / sort / x-go-nameRemoved value: -"TypeSort" - changed
Input schema / properties / types / descriptionPrevious value: -"A comma-separated list of types. If not provided, search all types.\n\nThe following types are supported:\n - reverse_split\n - forward_split\n - unit_split\n - cash_dividend\n - stock_dividend\n - spin_off\n - cash_merger\n - stock_merger\n - stock_and_cash_merger\n - redemption\n - name_change\n - worthless_removal\n - rights_distribution\n"New value: +"A comma-separated list of types. If not provided, search all types.\n\nThe following types are supported:\n - reverse_split\n - forward_split\n - unit_split\n - cash_dividend\n - stock_dividend\n - spin_off\n - cash_merger\n - stock_merger\n - stock_and_cash_merger\n - redemption\n - name_change\n - worthless_removal\n - rights_distribution\n - partial_call\n - reorganization\n"
- Changed
get_crypto_bars9 fields changed- added
Input schema / properties / days / descriptionAdded value: +"Days to look back when start is omitted (default 1)." - added
Input schema / properties / end / descriptionAdded value: +"Inclusive end time (RFC 3339). Omit for current time." - added
Input schema / properties / hours / descriptionAdded value: +"Additional hours in the lookback (default 0)." - added
Input schema / properties / limit / descriptionAdded value: +"Max total data points returned across all symbols,\n 1–10000 (default 1000)." - added
Input schema / properties / minutes / descriptionAdded value: +"Additional minutes in the lookback (default 0)." - added
Input schema / properties / sort / descriptionAdded value: +"Timestamp sort order — \"asc\" (default) or \"desc\"." - added
Input schema / properties / start / descriptionAdded value: +"Inclusive start time (RFC 3339). Omit to use relative lookback." - added
Input schema / properties / symbols / descriptionAdded value: +"Comma-separated crypto pairs (e.g. \"BTC/USD\" or\n \"BTC/USD,ETH/USD\")." - added
Input schema / properties / timeframe / descriptionAdded value: +"Bar aggregation period — \"1Min\", \"5Min\", \"15Min\",\n \"30Min\", \"1Hour\", \"1Day\", \"1Week\", or \"1Month\"."
- Changed
get_crypto_latest_bar1 field changed- removed
Input schema / properties / loc / x-go-nameRemoved value: -"TypeLatestLoc"
- Changed
get_crypto_latest_orderbook1 field changed- removed
Input schema / properties / loc / x-go-nameRemoved value: -"TypeLatestLoc"
- Changed
get_crypto_latest_quote1 field changed- removed
Input schema / properties / loc / x-go-nameRemoved value: -"TypeLatestLoc"
- Changed
get_crypto_latest_trade1 field changed- removed
Input schema / properties / loc / x-go-nameRemoved value: -"TypeLatestLoc"
- Changed
get_crypto_quotes8 fields changed- added
Input schema / properties / days / descriptionAdded value: +"Days to look back when start is omitted (default 0)." - added
Input schema / properties / end / descriptionAdded value: +"Inclusive end time (RFC 3339). Omit for current time." - added
Input schema / properties / hours / descriptionAdded value: +"Additional hours in the lookback (default 0)." - added
Input schema / properties / limit / descriptionAdded value: +"Max total data points returned across all symbols,\n 1–10000 (default 1000)." - added
Input schema / properties / minutes / descriptionAdded value: +"Additional minutes in the lookback (default 15)." - added
Input schema / properties / sort / descriptionAdded value: +"Timestamp sort order — \"asc\" (default) or \"desc\"." - added
Input schema / properties / start / descriptionAdded value: +"Inclusive start time (RFC 3339). Omit to use relative lookback." - added
Input schema / properties / symbols / descriptionAdded value: +"Comma-separated crypto pairs (e.g. \"BTC/USD\" or\n \"BTC/USD,ETH/USD\")."
- Changed
get_crypto_snapshot1 field changed- removed
Input schema / properties / loc / x-go-nameRemoved value: -"TypeLatestLoc"
- Changed
get_crypto_trades8 fields changed- added
Input schema / properties / days / descriptionAdded value: +"Days to look back when start is omitted (default 0)." - added
Input schema / properties / end / descriptionAdded value: +"Inclusive end time (RFC 3339). Omit for current time." - added
Input schema / properties / hours / descriptionAdded value: +"Additional hours in the lookback (default 0)." - added
Input schema / properties / limit / descriptionAdded value: +"Max total data points returned across all symbols,\n 1–10000 (default 1000)." - added
Input schema / properties / minutes / descriptionAdded value: +"Additional minutes in the lookback (default 15)." - added
Input schema / properties / sort / descriptionAdded value: +"Timestamp sort order — \"asc\" (default) or \"desc\"." - added
Input schema / properties / start / descriptionAdded value: +"Inclusive start time (RFC 3339). Omit to use relative lookback." - added
Input schema / properties / symbols / descriptionAdded value: +"Comma-separated crypto pairs (e.g. \"BTC/USD\" or\n \"BTC/USD,ETH/USD\")."
- Added
get_fixed_income_latest_quotes - Added
get_locate - Added
get_locate_quotes - Added
get_locates - Added
get_news - Changed
get_option_bars4 fields changed- added
Input schema / properties / sort / allOfAdded value: +[ + { + "default": "asc", + "description": "Sort data in ascending or descending order.", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } +] - removed
Input schema / properties / sort / defaultRemoved value: -"asc" - removed
Input schema / properties / sort / enumRemoved value: -[ - "asc", - "desc" -] - removed
Input schema / properties / sort / x-go-nameRemoved value: -"TypeSort"
- Changed
get_option_contracts5 fields changed- changed
Input schema / properties / page_token / examplePrevious value: -"MA=="New value: +"eyJpZCI6IjU1MGU4NDAwLWUyOWItNDFkNC1hNzE2LTQ0NjY1NTQ0MDAwMCJ9Cg" - changed
Input schema / properties / style / descriptionPrevious value: -"Filter contracts by the style (american/european)."New value: +"The style of the option contract." - added
Input schema / properties / style / exampleAdded value: +"american" - changed
Input schema / properties / type / descriptionPrevious value: -"Filter contracts by the type (call/put)."New value: +"The type of the option contract." - added
Input schema / properties / type / exampleAdded value: +"call"
- Changed
get_option_trades4 fields changed- added
Input schema / properties / sort / allOfAdded value: +[ + { + "default": "asc", + "description": "Sort data in ascending or descending order.", + "enum": [ + "asc", + "desc" + ], + "type": "string" + } +] - removed
Input schema / properties / sort / defaultRemoved value: -"asc" - removed
Input schema / properties / sort / enumRemoved value: -[ - "asc", - "desc" -] - removed
Input schema / properties / sort / x-go-nameRemoved value: -"TypeSort"
- Changed
get_orders2 fields changed- changed
Input schema / properties / asset_class / items / enumPrevious value: -[ - "us_equity", - "us_option", - "crypto", - "all" -]New value: +[ + "us_equity", + "us_option", + "crypto", + "crypto_perp", + "treasury", + "corporate", + "global_equity", + "us_index", + "us_equity_chain", + "ipo", + "all" +] - changed
Input schema / properties / symbols / descriptionPrevious value: -"A comma-separated list of symbols to filter by (ex. “AAPL,TSLA,MSFT”). A currency pair is required for crypto orders (ex. “BTCUSD,BCHUSD,LTCUSD,ETCUSD”)."New value: +"A comma-separated list of symbols to filter by (ex. \"AAPL,TSLA,MSFT\"). A currency pair is required for crypto orders (ex. \"BTCUSD,BCHUSD,LTCUSD,ETCUSD\")."
- Changed
get_stock_bars13 fields changed- added
Input schema / properties / adjustment / descriptionAdded value: +"Price adjustment — \"raw\", \"split\", \"dividend\",\n \"spin-off\", or \"all\". Comma-separated combos allowed\n (e.g. \"split,dividend\"). Default \"raw\"." - added
Input schema / properties / asof / descriptionAdded value: +"As-of date (YYYY-MM-DD) for point-in-time symbol mapping.\n Useful for backtesting with historical ticker changes." - added
Input schema / properties / currency / descriptionAdded value: +"Price currency (ISO 4217, e.g. \"USD\"). Default USD." - added
Input schema / properties / days / descriptionAdded value: +"Days to look back when start is omitted (default 5)." - added
Input schema / properties / end / descriptionAdded value: +"Inclusive end time (RFC 3339). Omit for current time." - added
Input schema / properties / feed / descriptionAdded value: +"Data feed — \"sip\" (all US exchanges, default, paid),\n \"iex\" (IEX only, free tier), \"otc\", or \"boats\"." - added
Input schema / properties / hours / descriptionAdded value: +"Additional hours in the lookback (default 0)." - added
Input schema / properties / limit / descriptionAdded value: +"Max total data points returned across all symbols,\n 1–10000 (default 1000)." - added
Input schema / properties / minutes / descriptionAdded value: +"Additional minutes in the lookback (default 0)." - added
Input schema / properties / sort / descriptionAdded value: +"Timestamp sort order — \"asc\" (default) or \"desc\"." - added
Input schema / properties / start / descriptionAdded value: +"Inclusive start time (RFC 3339). Omit to use relative lookback." - added
Input schema / properties / symbols / descriptionAdded value: +"Comma-separated tickers (e.g. \"AAPL\" or \"AAPL,MSFT,GOOG\")." - added
Input schema / properties / timeframe / descriptionAdded value: +"Bar aggregation period — \"1Min\", \"5Min\", \"15Min\",\n \"30Min\", \"1Hour\", \"1Day\", \"1Week\", or \"1Month\"."
- Changed
get_stock_quotes11 fields changed- added
Input schema / properties / asof / descriptionAdded value: +"As-of date (YYYY-MM-DD) for point-in-time symbol mapping." - added
Input schema / properties / currency / descriptionAdded value: +"Price currency (ISO 4217). Default USD." - added
Input schema / properties / days / descriptionAdded value: +"Days to look back when start is omitted (default 0)." - added
Input schema / properties / end / descriptionAdded value: +"Inclusive end time (RFC 3339). Omit for current time." - added
Input schema / properties / feed / descriptionAdded value: +"Data feed — \"sip\" (all US exchanges, default, paid),\n \"iex\" (free tier), \"otc\", or \"boats\".\n Paper/free accounts must set feed=\"iex\" to avoid 403 errors." - added
Input schema / properties / hours / descriptionAdded value: +"Additional hours in the lookback (default 0)." - added
Input schema / properties / limit / descriptionAdded value: +"Max total data points returned across all symbols,\n 1–10000 (default 1000)." - added
Input schema / properties / minutes / descriptionAdded value: +"Additional minutes in the lookback (default 20)." - added
Input schema / properties / sort / descriptionAdded value: +"Timestamp sort order — \"asc\" (default) or \"desc\"." - added
Input schema / properties / start / descriptionAdded value: +"Inclusive start time (RFC 3339). Omit to use relative lookback." - added
Input schema / properties / symbols / descriptionAdded value: +"Comma-separated tickers (e.g. \"AAPL\" or \"AAPL,MSFT\")."
- Changed
get_stock_trades11 fields changed- added
Input schema / properties / asof / descriptionAdded value: +"As-of date (YYYY-MM-DD) for point-in-time symbol mapping." - added
Input schema / properties / currency / descriptionAdded value: +"Price currency (ISO 4217). Default USD." - added
Input schema / properties / days / descriptionAdded value: +"Days to look back when start is omitted (default 0)." - added
Input schema / properties / end / descriptionAdded value: +"Inclusive end time (RFC 3339). Omit for current time." - added
Input schema / properties / feed / descriptionAdded value: +"Data feed — \"sip\" (all US exchanges, default, paid),\n \"iex\" (free tier), \"otc\", or \"boats\".\n Paper/free accounts must set feed=\"iex\" to avoid 403 errors." - added
Input schema / properties / hours / descriptionAdded value: +"Additional hours in the lookback (default 0)." - added
Input schema / properties / limit / descriptionAdded value: +"Max total data points returned across all symbols,\n 1–10000 (default 1000)." - added
Input schema / properties / minutes / descriptionAdded value: +"Additional minutes in the lookback (default 20)." - added
Input schema / properties / sort / descriptionAdded value: +"Timestamp sort order — \"asc\" (default) or \"desc\"." - added
Input schema / properties / start / descriptionAdded value: +"Inclusive start time (RFC 3339). Omit to use relative lookback." - added
Input schema / properties / symbols / descriptionAdded value: +"Comma-separated tickers (e.g. \"AAPL\" or \"AAPL,MSFT\")."
- Added
list_alpaca_api_endpoints - Changed
place_crypto_order9 fields changed- added
Input schema / properties / client_order_id / descriptionAdded value: +"Unique idempotency key. If the request times out,\n you can safely retry with the same value — the API\n will reject duplicates. Recommended for every order." - added
Input schema / properties / limit_price / descriptionAdded value: +"Required for limit and stop_limit orders." - added
Input schema / properties / notional / descriptionAdded value: +"Dollar amount to trade. Mutually exclusive with qty.\n Only valid for market orders." - added
Input schema / properties / qty / descriptionAdded value: +"Number of coins/tokens. Mutually exclusive with notional." - added
Input schema / properties / side / descriptionAdded value: +"\"buy\" or \"sell\"." - added
Input schema / properties / stop_price / descriptionAdded value: +"Required for stop_limit orders." - added
Input schema / properties / symbol / descriptionAdded value: +"Crypto pair (e.g., \"BTC/USD\", \"ETH/USD\")." - added
Input schema / properties / time_in_force / descriptionAdded value: +"\"gtc\" (default) or \"ioc\". Crypto does not\n support \"day\" or \"fok\"." - added
Input schema / properties / type / descriptionAdded value: +"\"market\", \"limit\", or \"stop_limit\"."
- Changed
place_option_order10 fields changed- added
Input schema / properties / client_order_id / descriptionAdded value: +"Unique idempotency key. If the request times out,\n you can safely retry with the same value — the API\n will reject duplicates. Recommended for every order." - added
Input schema / properties / legs / descriptionAdded value: +"List of leg dicts for multi-leg orders (max 4). Each leg\n requires \"symbol\" and \"ratio_qty\" (string). Optional\n per-leg fields: \"side\" (\"buy\" or \"sell\") and\n \"position_intent\"." - added
Input schema / properties / limit_price / descriptionAdded value: +"Required for limit orders. For multi-leg, this is\n the net debit/credit (positive = debit/cost,\n negative = credit/proceeds)." - added
Input schema / properties / order_class / descriptionAdded value: +"Set to \"mleg\" for multi-leg orders. Automatically\n inferred when legs are provided." - added
Input schema / properties / position_intent / descriptionAdded value: +"\"buy_to_open\", \"buy_to_close\", \"sell_to_open\",\n or \"sell_to_close\". Clarifies whether the trade\n opens or closes a position. Optional but\n recommended." - added
Input schema / properties / qty / descriptionAdded value: +"Number of contracts. Required for both single-leg and\n multi-leg orders. For multi-leg, this is the strategy\n multiplier — each leg's ratio_qty is scaled by this\n value (e.g., qty=\"10\" with ratio_qty=\"2\" = 20\n contracts for that leg)." - added
Input schema / properties / side / descriptionAdded value: +"\"buy\" or \"sell\". Required for single-leg." - added
Input schema / properties / symbol / descriptionAdded value: +"OCC option symbol (e.g., \"AAPL250321C00150000\").\n Required for single-leg." - added
Input schema / properties / time_in_force / descriptionAdded value: +"\"day\" only. Options do not support other\n values." - added
Input schema / properties / type / descriptionAdded value: +"\"market\" or \"limit\"."
- Changed
place_stock_order17 fields changed- added
Input schema / properties / advanced_instructionsAdded value: +{ + "anyOf": [ + { + "additionalProperties": true, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Alpaca Elite Smart Router routing/algo\npayload. Stocks-only (the Elite docs explicitly note options\nand crypto reject the payload). Requires the account to be\non Elite Smart Router routing; non-Elite accounts will see\nthe field ignored or rejected by Alpaca's API. Shapes:\n DMA Gateway (direct routing):\n {\"algorithm\": \"DMA\",\n \"destination\": \"NYSE\"|\"NASDAQ\"|\"ARCA\",\n \"display_qty\": \"<round lot, optional>\"}\n Only with type=\"limit\"|\"market\" and time_in_force=\"day\";\n not compatible with opg/cls/gtc or stop orders.\n VWAP (Volume-Weighted Average Price):\n {\"algorithm\": \"VWAP\",\n \"start_time\": \"<RFC3339, optional>\",\n \"end_time\": \"<RFC3339, optional>\",\n \"max_percentage\": \"<0<x<1, optional>\"}\n Does NOT participate in open/close auctions.\n TWAP (Time-Weighted Average Price):\n {\"algorithm\": \"TWAP\",\n \"start_time\": \"<RFC3339, optional>\",\n \"end_time\": \"<RFC3339, optional>\",\n \"max_percentage\": \"<0<x<1, optional>\"}\n Does NOT participate in open/close auctions.\nNOTE: PATCH /v2/orders/{id} already documents\n`advanced_instructions` in the OpenAPI spec\n(PatchOrderRequest), and `replace_order_by_id` exposes\nit through auto-generation — this patch only addresses\nthe POST-side asymmetry." +} - added
Input schema / properties / client_order_id / descriptionAdded value: +"Unique idempotency key. If the request times out,\n you can safely retry with the same value — the API\n will reject duplicates. Recommended for every order." - added
Input schema / properties / extended_hours / descriptionAdded value: +"Allow execution in pre-market, after-hours, and\n overnight sessions. Only works with type=\"limit\"\n and time_in_force=\"day\" or \"gtc\"." - added
Input schema / properties / limit_price / descriptionAdded value: +"Required for limit and stop_limit orders." - added
Input schema / properties / notional / descriptionAdded value: +"Dollar amount to trade. Mutually exclusive with qty.\n Only valid for market orders with time_in_force=\"day\"." - added
Input schema / properties / order_class / descriptionAdded value: +"\"simple\", \"bracket\", \"oco\", or \"oto\". Automatically\n set to \"bracket\" when take_profit or stop_loss params\n are provided." - added
Input schema / properties / qty / descriptionAdded value: +"Number of shares. Mutually exclusive with notional." - added
Input schema / properties / side / descriptionAdded value: +"\"buy\" or \"sell\"." - added
Input schema / properties / stop_loss_limit_price / descriptionAdded value: +"Limit price for bracket stop-loss leg." - added
Input schema / properties / stop_loss_stop_price / descriptionAdded value: +"Stop price for bracket stop-loss leg." - added
Input schema / properties / stop_price / descriptionAdded value: +"Required for stop and stop_limit orders." - added
Input schema / properties / symbol / descriptionAdded value: +"Stock ticker (e.g., \"AAPL\", \"SPY\")." - added
Input schema / properties / take_profit_limit_price / descriptionAdded value: +"Limit price for bracket take-profit leg." - added
Input schema / properties / time_in_force / descriptionAdded value: +"\"day\", \"gtc\", \"opg\", \"cls\", \"ioc\", or \"fok\"." - added
Input schema / properties / trail_percent / descriptionAdded value: +"Percent trail for trailing_stop orders." - added
Input schema / properties / trail_price / descriptionAdded value: +"Dollar trail amount for trailing_stop orders." - added
Input schema / properties / type / descriptionAdded value: +"Order type — \"market\", \"limit\", \"stop\", \"stop_limit\",\n \"trailing_stop\"."
- Changed
replace_order_by_id7 fields changed- added
Input schema / properties / advanced_instructions / examplesAdded value: +[ + { + "algorithm": "DMA", + "destination": "NYSE", + "display_qty": "100" + }, + { + "algorithm": "TWAP", + "end_time": "2025-07-21T15:30:00-04:00", + "max_percentage": "0.314", + "start_time": "2025-07-21T09:30:00-04:00" + }, + { + "algorithm": "VWAP", + "end_time": "2025-07-21T15:30:00-04:00", + "max_percentage": "0.314", + "start_time": "2025-07-21T09:30:00-04:00" + } +] - changed
Input schema / properties / advanced_instructions / properties / destination / enumPrevious value: -[ - "NYSE", - "NASDAQ", - "ARCA" -]New value: +[ + "NYSE", + "NASDAQ", + "ARCA", + "IEX", + "MEMX" +] - removed
Input schema / properties / advanced_instructions / x-examplesRemoved value: -{ - "example-1": { - "algorithm": "DMA", - "destination": "NYSE", - "display_qty": 100 - }, - "example-2": { - "algorithm": "TWAP", - "end_time": "2025-07-21T15:30:00-04:00", - "max_percentage": 0.314, - "start_time": "2025-07-21T09:30:00-04:00" - }, - "example-3": { - "algorithm": "VWAP", - "end_time": "2025-07-21T15:30:00-04:00", - "max_percentage": 0.314, - "start_time": "2025-07-21T09:30:00-04:00" - } -} - added
Input schema / properties / notionalAdded value: +{ + "description": "New notional (dollar amount) for the order. Only valid for IPO indications of interest (`asset_class: \"ipo\"`); will be rejected for any other asset class.\nMutually exclusive with `qty` on the same replace request.", + "example": "750", + "type": "string" +} - changed
Input schema / properties / qty / descriptionPrevious value: -"number of shares to trade.\n\nYou can only patch full shares for now.\n\nQty of equity fractional/notional orders are not allowed to change."New value: +"number of shares to trade.\n\nYou can only patch full shares for now.\n\nQty of equity fractional orders are not allowed to change. Non-IPO notional orders cannot be replaced at all - no fields (qty, limit_price, stop_price, etc.) can be modified; cancel and resubmit instead." - changed
Input schema / properties / time_in_force / descriptionPrevious value: -"The Time-In-Force values supported by Alpaca vary based on the order's security type. Here is a breakdown of the supported TIFs for each specific security type:\n- Equity trading: day, gtc, opg, cls, ioc, fok.\n- Options trading: day.\n- Crypto trading: gtc, ioc.\n\nBelow are the descriptions of each TIF:\n- day:\n A day order is eligible for execution only on the day it is live. By default, the order is only valid during Regular Trading Hours (9:30am - 4:00pm ET). If unfilled after the closing auction, it is automatically canceled. If submitted after the close, it is queued and submitted the following trading day. However, if marked as eligible for extended hours, the order can also execute during supported extended hours.\n\n- gtc:\n The order is good until canceled. Non-marketable GTC limit orders are subject to price adjustments to offset corporate actions affecting the issue. We do not currently support Do Not Reduce (DNR) orders to opt out of such price adjustments.\n\n- opg:\n Use this TIF with a market/limit order type to submit “market on open” (MOO) and “limit on open” (LOO) orders. This order is eligible to execute only in the market opening auction. Any unfilled orders after the open will be cancelled. OPG orders submitted after 9:28am but before 7:00pm ET will be rejected. OPG orders submitted after 7:00pm will be queued and routed to the following day’s opening auction. On open/on close orders are routed to the primary exchange. Such orders do not necessarily execute exactly at 9:30am / 4:00pm ET but execute per the exchange’s auction rules.\n\n- cls:\n Use this TIF with a market/limit order type to submit “market on close” (MOC) and “limit on close” (LOC) orders. This order is eligible to execute only in the market closing auction. Any unfilled orders after the close will be cancelled. CLS orders submitted after 3:50pm but before 7:00pm ET will be rejected. CLS orders submitted after 7:00pm will be queued and routed to the following day’s closing auction. Only available with API v2.\n\n- ioc:\n An Immediate Or Cancel (IOC) order requires all or part of the order to be executed immediately. Any unfilled portion of the order is canceled. Only available with API v2. Most market makers who receive IOC orders will attempt to fill the order on a principal basis only, and cancel any unfilled balance. On occasion, this can result in the entire order being cancelled if the market maker does not have any existing inventory of the security in question.\n\n- fok:\n A Fill or Kill (FOK) order is only executed if the entire order quantity can be filled, otherwise the order is canceled. Only available with API v2."New value: +"The Time-In-Force values supported by Alpaca vary based on the order's security type. Here is a breakdown of the supported TIFs for each specific security type:\n- Equity trading: day, gtc, opg, cls, ioc, fok.\n- Options trading: day.\n- Crypto trading: gtc, ioc.\n\nBelow are the descriptions of each TIF:\n- day:\n A day order is eligible for execution only on the day it is live. By default, the order is only valid during Regular Trading Hours (9:30am - 4:00pm ET). If unfilled after the closing auction, it is automatically canceled. If submitted after the close, it is queued and submitted the following trading day. However, if marked as eligible for extended hours, the order can also execute during supported extended hours.\n\n- gtc:\n The order is good until canceled. Non-marketable GTC limit orders are subject to price adjustments to offset corporate actions affecting the issue. We do not currently support Do Not Reduce (DNR) orders to opt out of such price adjustments.\n\n- opg:\n Use this TIF with a market/limit order type to submit \"market on open\" (MOO) and \"limit on open\" (LOO) orders. This order is eligible to execute only in the market opening auction. Any unfilled orders after the open will be cancelled. OPG orders submitted after 9:28am but before 7:00pm ET will be rejected. OPG orders submitted after 7:00pm will be queued and routed to the following day's opening auction. On open/on close orders are routed to the primary exchange. Such orders do not necessarily execute exactly at 9:30am / 4:00pm ET but execute per the exchange's auction rules.\n\n- cls:\n Use this TIF with a market/limit order type to submit \"market on close\" (MOC) and \"limit on close\" (LOC) orders. This order is eligible to execute only in the market closing auction. Any unfilled orders after the close will be cancelled. CLS orders submitted after 3:50pm but before 7:00pm ET will be rejected. CLS orders submitted after 7:00pm will be queued and routed to the following day's closing auction. Only available with API v2.\n\n- ioc:\n An Immediate Or Cancel (IOC) order requires all or part of the order to be executed immediately. Any unfilled portion of the order is canceled. Only available with API v2. Most market makers who receive IOC orders will attempt to fill the order on a principal basis only, and cancel any unfilled balance. On occasion, this can result in the entire order being cancelled if the market maker does not have any existing inventory of the security in question.\n\n- fok:\n A Fill or Kill (FOK) order is only executed if the entire order quantity can be filled, otherwise the order is canceled. Only available with API v2." - changed
Input schema / properties / trail / descriptionPrevious value: -"the new value of the trail_price or trail_percent value (works only for type=“trailing_stop”)"New value: +"the new value of the trail_price or trail_percent value (works only for type=\"trailing_stop\")"
- Added
search_alpaca_api_specs - Added
search_alpaca_docs - Changed
update_account_config3 fields changed- removed
Input schema / properties / dtbp_checkRemoved value: -{ - "description": "both, entry, or exit. Controls Day Trading Margin Call (DTMC) checks.", - "enum": [ - "both", - "entry", - "exit" - ], - "type": "string" -} - removed
Input schema / properties / pdt_checkRemoved value: -{ - "description": "`both`, `entry`, or `exit`. If entry orders will be rejected on entering a position if it could result in PDT being set for the account. exit will reject exiting orders if they would result in PDT being set.", - "example": "entry", - "type": "string" -} - removed
Input schema / properties / ptp_no_exception_entry / x-stoplightRemoved value: -{ - "id": "8qvrtnzouzp80" -}
- Changed
update_watchlist_by_id4 fields changed- changed
Input schema / properties / name / descriptionPrevious value: -"The watchlist name."New value: +"The new watchlist name." - changed
Input schema / properties / symbols / descriptionPrevious value: -"List of asset symbols to include in the watchlist."New value: +"List of asset symbols to include in the watchlist. The existing assets will be replaced with the new list." - removed
Input schema / properties / symbols / items / nullableRemoved value: -true - changed
Input schema / properties / symbols / items / typePrevious value: -"string"New value: +[ + "string", + "null" +]
61 tool updates
v2.0.0- Added
add_asset_to_watchlist_by_id - Added
cancel_all_orders - Added
cancel_order_by_id - Added
close_all_positions - Added
close_position - Added
create_watchlist - Added
delete_watchlist_by_id - Added
do_not_exercise_options_position - Added
exercise_options_position - Added
get_account_activities - Added
get_account_activities_by_type - Added
get_account_config - Added
get_account_info - Added
get_all_assets - Added
get_all_positions - Added
get_asset - Added
get_calendar - Added
get_clock - Added
get_corporate_action_announcement - Added
get_corporate_action_announcements - Added
get_corporate_actions - Added
get_crypto_bars - Added
get_crypto_latest_bar - Added
get_crypto_latest_orderbook - Added
get_crypto_latest_quote - Added
get_crypto_latest_trade - Added
get_crypto_quotes - Added
get_crypto_snapshot - Added
get_crypto_trades - Added
get_market_movers - Added
get_most_active_stocks - Added
get_open_position - Added
get_option_bars - Added
get_option_chain - Added
get_option_contract - Added
get_option_contracts - Added
get_option_exchange_codes - Added
get_option_latest_quote - Added
get_option_latest_trade - Added
get_option_snapshot - Added
get_option_trades - Added
get_order_by_client_id - Added
get_order_by_id - Added
get_orders - Added
get_portfolio_history - Added
get_stock_bars - Added
get_stock_latest_bar - Added
get_stock_latest_quote - Added
get_stock_latest_trade - Added
get_stock_quotes - Added
get_stock_snapshot - Added
get_stock_trades - Added
get_watchlist_by_id - Added
get_watchlists - Added
place_crypto_order - Added
place_option_order - Added
place_stock_order - Added
remove_asset_from_watchlist_by_id - Added
replace_order_by_id - Added
update_account_config - Added
update_watchlist_by_id
TDQS
Scored across 72 tools
Most tools partition cleanly by asset class and data type, but several overlapping pairs create ambiguity: get_corporate_actions vs. get_corporate_action_announcements, get_option_contracts vs. get_option_chain, and historical get_stock_quotes/get_crypto_quotes vs. the get_*_latest_quote tools. The descriptions clarify intent, but the tool names alone would often make selection error-prone.
The set predominantly follows a get_<resource> pattern with clear action prefixes like place_, cancel_, update_, delete_, and create_, making the convention easy to learn. Deviations include get_corporate_actions versus get_corporate_action_announcement(s) and historical quote tools that omit "historical" in their names, but there is no style mixing such as camelCase.
With 72 tools, this server far exceeds both the 25+ "too many" threshold and the 50+ "extreme mismatch" threshold. The Alpaca domain is broad and most tools are distinct, but exposing this many tools in one MCP server makes tool selection expensive and overwhelming for an agent.
The tool surface is highly comprehensive, covering account, orders, positions, watchlists, assets, market data for stocks/crypto/options/fixed income, news, calendar, corporate actions, locates, and API documentation. Order lifecycle and watchlist CRUD are complete, and there are no obvious dead ends in core workflows.
Maintenance
Related MCP Connectors
Alpaca MCP — real-time US stock market data via the Alpaca Market Data API
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
Research-only MCP server: your AI as a quant research desk. 90 tools, no trades, no brokers.
Automate trading on your own Alpaca account - build, backtest and run strategies via your AI.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server enabling LLMs like Claude to interact with the Alpaca trading API through natural language for stock trading, checking positions, fetching market data, and managing your account.27MIT
- AlicenseDqualityDmaintenanceMCP server that exposes Alpaca Market Data & Broker API as tools, enabling access to financial data like stock bars, assets, market days, and news through the Message Control Protocol.422 npm2ISC
- AlicenseNot gradedqualityDmaintenanceAn MCP server implementation for Alpaca's Trading API that enables LLMs to interact with Alpaca's trading infrastructure using natural language, supporting stock, options, and crypto trading, portfolio management, watchlists, and market data.4MIT
- AlicenseAqualityDmaintenanceAn MCP server that exposes trading analytics — technical indicators, portfolio state, risk metrics, and backtest results — as tools an LLM agent can call.5MIT