stock-research-mcp
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., "@stock-research-mcpGive me a deep research report on NVDA"
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.
Stock Research MCP Server
An MCP (Model Context Protocol) server that provides comprehensive stock research tools for Claude. Aggregates data from Alpha Vantage and Finnhub APIs.
Features
Real-time quotes and historical price data
Company profiles and fundamental analysis
Technical indicators (SMA, EMA, RSI, MACD, Bollinger Bands)
Support/resistance level calculations
Analyst ratings and price targets
News sentiment analysis
Insider trading activity
Macro economic indicators
Deep research reports combining all data sources
Trading execution via Alpaca (paper and live trading)
Related MCP server: Alpha Vantage MCP Server
Installation
Clone the repository:
cd stock-research-mcpCreate a virtual environment and install the package:
uv venv .venv
source .venv/bin/activate
uv pip install -e ".[dev]"Configure API keys in
.env:
ALPHA_VANTAGE_API_KEY=your_key_here
FINNHUB_API_KEY=your_key_here
# Alpaca Trading (optional)
ALPACA_API_KEY=your_key_here
ALPACA_SECRET_KEY=your_secret_here
ALPACA_PAPER=true # Set to false for live trading
# Risk Controls (optional)
TRADING_MAX_ORDER_VALUE=5000
TRADING_MAX_POSITION_SIZE=10000
TRADING_ALLOWED_SYMBOLS=AAPL,MSFT,GOOGL # Leave empty for all symbolsGet free API keys at:
Alpha Vantage: https://www.alphavantage.co/support/#api-key
Finnhub: https://finnhub.io/register
Alpaca: https://alpaca.markets/ (free paper trading account)
Usage with Claude Code
Add to your Claude Code MCP configuration:
claude mcp add stock-research -- .venv/bin/python -m stock_research.serverOr use the installed script:
claude mcp add stock-research -- .venv/bin/stock-research-mcpOr manually add to ~/.claude/mcp.json:
{
"mcpServers": {
"stock-research": {
"command": "/path/to/stock-research-mcp/.venv/bin/stock-research-mcp"
}
}
}Available Tools
Market Data
get_quote(ticker)- Real-time quoteget_historical_prices(ticker, timeframe, interval)- Historical OHLCV data
Company Analysis
get_company_profile(ticker)- Company overviewget_financials(ticker)- Key financial metrics and ratiosget_earnings(ticker)- Earnings history and surprises
Technical Analysis
get_technical_indicators(ticker, indicators)- SMA, EMA, RSI, MACD, BBandsget_support_resistance(ticker, lookback_days)- Support/resistance levels
Sentiment & Activity
get_news_sentiment(ticker, limit)- News articles with sentimentget_insider_trades(ticker)- Insider buying/sellingget_analyst_ratings(ticker)- Analyst consensus and price targets
Macro
get_macro_context()- Economic indicators (Fed rate, yields, GDP, CPI)
Research
generate_deep_research(ticker, research_type)- Comprehensive research report
Trading (Alpaca)
get_trading_account()- Account info, buying power, equityget_positions()- All open positionsget_position(symbol)- Position for specific symbolplace_market_order(symbol, qty, side)- Market orderplace_limit_order(symbol, qty, side, limit_price)- Limit orderplace_stop_order(symbol, qty, side, stop_price)- Stop orderplace_stop_limit_order(symbol, qty, side, stop_price, limit_price)- Stop-limit orderget_orders(status)- List orders (open/closed/all)cancel_order(order_id)- Cancel specific ordercancel_all_orders()- Cancel all open ordersclose_position(symbol)- Close position for symbolclose_all_positions()- Liquidate all positionsget_trading_config()- View current risk limits
Development
Run tests:
pytestExample Usage
Once configured, ask Claude:
"Give me a deep research report on NVDA"
"What's the current price and technical setup for AAPL?"
"Show me analyst ratings for MSFT"
"What's the macro environment looking like?"Trading Examples
"Show me my current positions"
"Buy 10 shares of AAPL at market"
"Place a limit order for 5 shares of MSFT at $400"
"Set a stop loss on my NVDA position at $120"
"What's my account buying power?"⚠️ Warning: Trading involves real money. Start with paper trading (
ALPACA_PAPER=true) to test your strategies. The server includes risk controls but you are responsible for your trades.
Rate Limits
Alpha Vantage Free Tier: 25 API calls/day
Finnhub Free Tier: 60 API calls/minute
The server uses aggressive caching to stay within free tier limits.
License
MIT
Available Tools
25 toolscancel_all_ordersA
Cancel all open orders.
Use with caution - this will cancel ALL pending orders.
Returns count of cancelled 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?
With no annotations provided, the description carries the full burden. It warns 'Use with caution,' explicitly states that ALL pending orders will be cancelled, and discloses the return value as a count. This is strong behavioral disclosure for a destructive bulk operation, though it does not explicitly discuss irreversibility or side effects beyond cancellation.
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 short sentences: the action, a caution, and the return value. Every sentence earns its place, and the warning is front-loaded where it matters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema present, the description provides the necessary scope, caution, and outcome. Nothing essential is missing for an agent to decide whether to invoke it and what to expect.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there is no parameter documentation burden. The schema coverage is vacuously complete, and the description appropriately adds no parameter details.
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 ('Cancel') and resource ('all open orders'), and reinforces the scope with 'ALL pending orders.' This clearly distinguishes it from the singular sibling cancel_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 makes the usage context unmistakable: use this when you want to cancel every open order. It does not explicitly name cancel_order as the alternative for single-order cancellation, but the all-encompassing scope is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_orderC
Cancel an open order.
Args: order_id: The order ID to cancel
Returns confirmation of cancellation.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes |
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 mentions the cancellation and confirmation, but omits side effects, failure conditions, irreversibility, or what happens if the order is no longer open.
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 short, front-loaded, and free of filler. The Args and Returns lines are helpful, though they partially duplicate structured schema and output-schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter cancellation tool, the description covers the basic operation, argument, and confirmation. It lacks edge-case behavior and alternative routing, but the low complexity keeps the gaps modest.
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 description adds a small amount of meaning beyond the schema by saying order_id is 'the order ID to cancel'. However, schema coverage is 0%, and the description does not explain how to obtain the ID or any format/validity requirements, so compensation is only marginal.
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, 'Cancel an open order', clearly identifying the resource and operation. It does not explicitly distinguish itself from sibling tools like cancel_all_orders or close_position, so it stops short of a perfect score.
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 alternatives such as cancel_all_orders or close_position. The description only states the action without providing selection criteria or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_all_positionsA
Close all open positions.
Use with extreme caution - this will liquidate your entire portfolio. Also cancels all open orders.
Returns count of positions closed.
| 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 openly discloses the destructive nature ('liquidate your entire portfolio'), the additional side effect of canceling all open orders, and the return value (count of positions closed). This is excellent transparency for a high-impact action.
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—four short sentences—with each sentence earning its place: the core action, the caution, the secondary effect, and the return value. It is front-loaded with the primary purpose and warning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description is complete. It explains what the tool does, the critical side effect, the cancellation of orders, and the return value. Nothing an agent needs to decide whether to invoke it safely 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 takes zero parameters and the schema is empty, so there is no parameter meaning for the description to add. The baseline for zero-parameter tools is 4, and the description appropriately focuses on behavior rather than 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 states a specific verb and resource ('Close all open positions') and goes further by noting it also cancels all open orders, distinguishing it from siblings like close_position and cancel_all_orders. The scope is unambiguous: the entire portfolio is affected.
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 'Use with extreme caution - this will liquidate your entire portfolio' clearly communicates the gravity and the only sensible condition for use: an intentional full exit. It doesn't explicitly name alternatives or exclusions, but the description's scope and the sibling list make it obvious when this tool is appropriate versus close_position or cancel_all_orders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
close_positionA
Close an entire position for a symbol.
Args: symbol: Stock symbol to close position for
Places a market order to sell (for long) or buy (for short) all shares of the position.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
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 behavioral burden and largely delivers: it discloses the order type (market), the direction logic (sell for long, buy for short), and the full-scope liquidation ('all shares'). It stops short of edge cases such as behavior when no position exists, but the essential execution traits are transparent.
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 compact sentences with the purpose line front-loaded. The Args block is partially redundant with the schema but earns its place because it is the only source of parameter semantics; every sentence contributes either purpose, parameter meaning, or execution 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?
For a single-parameter tool with an output schema present, the description covers purpose, execution behavior, and parameter meaning. Missing only minor edge-case disclosure (e.g., what happens when the position does not exist), which does not block 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 0%, so the description must compensate, and the Args block does: 'Stock symbol to close position for' clarifies both the value type (stock symbol) and its role (identifies the position being closed). This adds real meaning beyond the bare schema title 'Symbol.'
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?
Opens with a specific verb + resource + scope: 'Close an entire position for a symbol.' The second sentence further specifies mechanics (market order, sell for long, buy for short, all shares), which distinguishes it from sibling close_all_positions and read-only get_position. An agent can identify exactly what this tool does without inspecting 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?
The phrase 'entire position for a symbol' plus 'all shares of the position' gives clear situational context: use when fully liquidating a single position rather than partially closing or liquidating everything. However, it never explicitly names alternatives like close_all_positions or place_market_order for partial exits, so no explicit exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analyst_ratingsA
Get analyst ratings and price targets for a stock.
Args: ticker: Stock symbol (e.g., 'AAPL', 'MSFT')
Returns: Analyst consensus, rating counts, and price targets.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
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 conveys a read-only operation and summarizes the returned content, but it does not mention data source, freshness, coverage caveats, or error behavior. It is neither misleading nor rich.
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 well-structured, with the core purpose front-loaded and separate Args/Returns sections. There is no redundant or filler language.
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 tool with an output schema, the description provides the essential purpose, argument semantics, and return summary. It is slightly incomplete regarding edge cases or data freshness, but not critically so.
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 names the 'ticker' parameter, while the description adds meaningful semantics: it labels it as a stock symbol and provides concrete examples such as 'AAPL' and 'MSFT'. This compensates well for the 0% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets analyst ratings and price targets for a stock. This distinguishes it from sibling tools like get_quote or get_financials by naming a distinct resource and output type.
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 stock's analyst consensus or price targets are needed, but it does not explicitly state when to prefer this over alternatives or when not to use it. No sibling comparison or exclusionary 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_company_profileA
Get company profile and overview.
Args: ticker: Stock symbol (e.g., 'AAPL', 'MSFT')
Returns: Company profile including name, sector, industry, description, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
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. 'Get' strongly implies a read-only operation and the Returns section describes the output, but the description does not explicitly state read-only behavior, potential errors, data freshness, or any rate-limit implications. This is barely adequate for a simple getter.
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 well-organized with clear 'Args' and 'Returns' sections. Every sentence earns its place, and 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?
For a one-parameter getter with an output schema available, the description covers the essential call contract: what the tool does, what input it needs, and what the return contains. No additional information is necessary for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so effectively by defining 'ticker' as a stock symbol and providing concrete examples ('AAPL', 'MSFT'), which fully clarifies the only required 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 clearly states the resource ('company profile and overview') and the verb 'Get', so an agent understands the tool's basic purpose. However, it does not explicitly differentiate this from sibling tools like get_quote or get_company_news, relying on the resource name alone for distinction.
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 when-to-use guidance or mention of alternatives is provided. The description explains the input and return value but does not help an agent choose between this and related tools such as get_quote or get_company_news.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_earningsA
Get earnings history and upcoming earnings date.
Args: ticker: Stock symbol (e.g., 'AAPL', 'MSFT')
Returns: Earnings data including quarterly history and surprises.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
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 of behavioral disclosure. It does state that the tool returns 'quarterly history and surprises,' which adds scope beyond the tool name. However, it doesn't explicitly mention that the operation is read-only, nor does it describe any limitations like lookback periods or data sources. For a simple read tool this is adequate but not thorough.
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 well-structured. It opens with a clear one-line purpose, then provides an Args section and a Returns section. Every sentence earns its place, and there is no filler or 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 one-parameter read tool with an output schema available, the description is largely complete. It explains the required parameter and summarizes the return content. The only notable gap is the absence of guidance about how this tool relates to other data tools like get_financials, but that is more relevant to usage guidelines than to contextual completeness for invoking 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?
Schema description coverage is 0%, so the description must fully compensate for the single parameter. It explains that ticker is a stock symbol and provides concrete examples ('AAPL', 'MSFT'). An agent receives enough information to pass a correct value without any ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: 'Get earnings history and upcoming earnings date.' It focuses on earnings data, distinguishing it from most siblings (quotes, technicals, orders). However, it doesn't explicitly differentiate from get_financials, which could also involve earnings information.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like get_financials, get_analyst_ratings, or get_company_profile. The description gives no context for selecting this tool, no exclusions, and no mention of scenarios where another tool would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_financialsA
Get key financial metrics and ratios.
Args: ticker: Stock symbol (e.g., 'AAPL', 'MSFT')
Returns: Financial metrics including valuation ratios, margins, growth rates.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
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 must carry the burden. It discloses that the tool is a read operation ('Get') and summarizes returned metrics, which is useful. It does not mention data recency, source, or the fact that financials are fundamental metrics rather than live market data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses; the purpose is front-loaded, and the Args/Returns structure is scannable. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A one-parameter read tool with an output schema and a clear return summary is well covered. The only weakness is the missing routing note relative to a large sibling set, but that is a usage issue.
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 has 0% description coverage, but the docstring defines ticker as 'Stock symbol' and gives format examples (AAPL, MSFT), which is meaningful added value. For a single simple parameter this is nearly complete, though not exhaustive on accepted formats.
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 operation and resource: 'Get key financial metrics and ratios,' and further enumerates content categories (valuation ratios, margins, growth rates). It is distinct from siblings like get_quote or get_technical_indicators in terms of resource, though it does not explicitly name 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?
The description implies usage for financial-metric needs but provides no explicit guidance about when to prefer get_financials over overlapping siblings such as get_quote or get_earnings. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_historical_pricesA
Get historical price data for a stock.
Args: ticker: Stock symbol (e.g., 'AAPL', 'MSFT') timeframe: Time range - '1D', '1W', '1M', '3M', '1Y', '5Y' interval: Data interval - '1min', '5min', '15min', '30min', '60min', '1day'
Returns: Historical OHLCV data as a list of candles.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| interval | No | 1day | |
| timeframe | No | 1M |
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 behavioral burden. It discloses the return shape as 'a list of candles' and implies a read-only operation via 'Get', but it does not mention ordering, adjustment, timezone handling, pagination, or rate limits. This is adequate for a simple historical data fetch but not richly transparent.
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 opens with a concise purpose statement and then uses compact Args/Returns blocks. Every line carries useful information, and no filler or redundant phrasing is present.
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 straightforward read-only historical data tool with an output schema available, the description covers purpose, all parameters, and the return format. The only notable omission is explicit guidance to use get_quote for current prices, but that is not necessary for correctly invoking this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so all parameter semantics must come from the description. It defines ticker with examples, timeframe with accepted values, and interval with accepted values, fully compensating for the schema's lack of descriptive detail.
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 'Get historical price data for a stock', giving a specific verb and resource. The mention of OHLCV candles helps distinguish it from related market-data tools in the sibling list, though it doesn't explicitly name any sibling 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 intended use is reasonably implied by 'historical price data' and the argument descriptions, and sibling tools like get_quote or get_technical_indicators have naturally different purposes. However, the description does not explicitly state when to use this tool versus those alternatives, nor does it mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_insider_tradesA
Get insider trading activity for a stock.
Args: ticker: Stock symbol (e.g., 'AAPL', 'MSFT')
Returns: Recent insider transactions and overall insider sentiment.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
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 disclosure burden. It does state the tool is a read-style operation ('Get') and summarizes the return as 'Recent insider transactions and overall insider sentiment,' but it does not explain how 'recent' is defined, data source limitations, or any rate/access considerations.
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 short and well-organized: a one-line purpose statement followed by clearly labeled Args and Returns sections. There is no filler, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with an output schema available, the description covers the essential purpose, the required argument, and the high-level return. More detail on the meaning of 'recent' would improve it, but nothing critical is missing given the tool's 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?
The input schema only provides the parameter name and type, while the description adds meaning by defining ticker as 'Stock symbol' and giving concrete examples like 'AAPL' and 'MSFT.' This compensates for the schema's lack of property description, though it is still fairly minimal.
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: 'Get insider trading activity for a stock.' This clearly differentiates it from sibling tools like get_quote or get_technical_indicators, and the Returns line narrows the scope to transactions and sentiment.
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 insider trading information is needed, but it does not explicitly state when to prefer this tool over alternatives or when not to use it. There is no mention of related tools or exclusions, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_macro_contextA
Get current macroeconomic indicators and context.
Returns: Key economic indicators including Fed funds rate, treasury yields, GDP growth, unemployment, and inflation (CPI).
| 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 of behavioral disclosure. It specifies the output content (key indicators) and the 'Get' verb implies read-only behavior, but it does not mention data freshness, source, or any retrieval caveats. For a simple read-only tool, this is adequate but not deeply transparent.
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: an immediate statement of purpose followed by a concise list of returned indicators. Every sentence adds value, and there is no fluff, repetition, or irrelevant detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool takes no inputs, so invocation is unambiguous, and an output schema exists to define the exact return shape. Given the tool's simplicity, the description's indicator list plus the output schema provide enough for an agent to select and call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties, so there are no parameters for the description to clarify. The zero-parameter baseline is 4, and the description appropriately focuses on output rather than input 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 opens with a specific verb ('Get') and a distinct resource ('current macroeconomic indicators and context'), then enumerates concrete indicators. This clearly differentiates it from siblings like get_quote, get_technical_indicators, and get_company_profile, which target micro-level market or company 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 description implies a use case by listing Fed funds rate, treasury yields, GDP, unemployment, and CPI, but it never explicitly states when an agent should choose this tool over siblings, nor does it name alternatives. Usage is reasonably inferred but not directly guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_news_sentimentA
Get news articles and sentiment analysis for a stock.
Args: ticker: Stock symbol (e.g., 'AAPL', 'MSFT') limit: Maximum number of articles to return (default 20)
Returns: News articles with sentiment scores and overall sentiment summary.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| ticker | Yes |
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 basic behavior: returns news articles, sentiment scores, and an overall sentiment summary, plus the limit default. However, it does not mention read-only guarantees, error behavior, ticker validation, sentiment scale, or any external data source caveats.
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 well-structured: a one-sentence purpose, an Args section, and a Returns section. Every line adds value, with key information front-loaded and no filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with only two parameters and an output schema available, the description covers the essential calling contract: what it does, the main parameters, and the return shape. It lacks explicit alternative routing, but this is a minor gap given the tool's self-contained purpose.
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 fully explains both parameters: ticker with concrete examples ('AAPL', 'MSFT') and limit with its default and meaning ('Maximum number of articles to return'). This is strong compensation for the bare JSON 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?
Opening line states a specific verb ('Get'), specific resource ('news articles and sentiment analysis'), and scope ('for a stock'). This clearly distinguishes the tool from sibling quote, technical indicator, and trading tools without ambiguity.
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 intended use is implied by the name and description: fetch news sentiment for a stock. However, there is no explicit guidance on when to prefer this over alternatives or any exclusions, so the agent must infer context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_orderA
Get details of a specific order by ID.
Args: order_id: The order ID returned when placing an order
Returns order status, fill details, and timestamps.
| Name | Required | Description | Default |
|---|---|---|---|
| order_id | Yes |
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 disclosure. It states the return content (order status, fill details, timestamps) but leaves the read-only/non-destructive nature implicit in the word 'Get' and does not mention errors, permissions, or rate limits. This is adequate but not thorough.
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 with the core action, followed by a one-line argument explanation and a one-line return summary. Every sentence contributes necessary information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a single required parameter and an output schema that can document return fields, the description covers the essential operation, parameter source, and return summary. It omits explicit read-only confirmation and error behavior, but the overall context is adequate for a low-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?
The schema provides only the type and title for order_id, but the description adds meaningful provenance: 'The order ID returned when placing an order.' For a single parameter, this fully tells the agent where the value comes from and how to obtain it.
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 ('Get details') and resource ('a specific order by ID'), clearly differentiating this single-order lookup from sibling get_orders. The phrase 'by ID' also distinguishes it from position-lookup or 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 provides clear context (use when you have an order ID from placement) and implicitly excludes list operations, but it does not explicitly name alternatives like get_orders for listing or cancel_order for management. This is sufficient for a simple lookup, though not maximally explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ordersA
Get a list of orders with optional filters.
Args: status: Filter by status - 'open', 'closed', or 'all' limit: Maximum number of orders to return (default 50) symbol: Filter by stock symbol (optional)
Returns list of orders matching the criteria.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | open | |
| symbol | No |
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 clearly states the return type, the optional filters, valid status values, the limit default behavior, and that symbol is optional. It does not cover edge cases like empty results, pagination, or account scoping, but the core behavior is transparent.
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, front-loaded, and uses a clear Args/list structure. Every sentence contributes useful information, and there is no filler or repetition beyond a helpful closing return statement.
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 three-parameter read tool with an output schema, the description covers all parameters and the return type. It lacks some context about account scope and relationship to sibling order tools, but the essential calling information 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?
The schema has 0% description coverage, but the description's Args section fully documents every parameter: status values ('open', 'closed', 'all'), limit as a maximum with default 50, and symbol as an optional filter. This adds meaningful semantics beyond the bare type and default information 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 starts with a clear verb-plus-resource statement: 'Get a list of orders with optional filters.' The plural 'orders' and the filter language distinguish it from the singular get_order tool and the order-mutation siblings. It communicates exactly 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 no explicit guidance on when to use this tool versus get_order, place_market_order, cancel_order, or other order-related siblings. It only implies a read-only listing use case through the verb 'get' and the plural resource. No alternatives or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_positionA
Get position for a specific symbol.
Args: symbol: Stock symbol (e.g., 'AAPL')
Returns position details or null if no position exists.
| Name | Required | Description | Default |
|---|---|---|---|
| symbol | Yes |
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 burden. It usefully discloses that null is returned when no position exists, but it does not explicitly state read-only behavior, error handling, or any prerequisites beyond a symbol.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, leading with purpose, then an Args block, then return behavior. Every sentence adds value; 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 single required parameter and an existing output schema, the description covers the essential invocation and return behavior. The only notable gap is the absence of explicit differentiation from get_positions, though the symbol parameter strongly implies the intended use case.
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%, but the description compensates well by defining 'symbol' as a stock symbol and giving the concrete example 'AAPL'. This adds practical meaning beyond the raw schema property name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get'), resource ('position'), and scope ('for a specific symbol'), making the tool's function clear. It implicitly distinguishes from the sibling get_positions by emphasizing 'specific symbol', though it does not explicitly name that 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?
Usage context is implied: to fetch a single position, pass a symbol. However, the description does not explicitly state when to use this tool instead of get_positions, nor does it provide exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_positionsA
Get all open positions in the portfolio.
Returns a list of positions with:
Symbol and quantity
Market value and cost basis
Unrealized P/L and percentage
Current price and average entry price
| 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?
There are no annotations, so the description carries the behavioral disclosure burden. It clearly communicates a read-only list operation and enumerates exactly what the response will contain: symbol, quantity, market value, cost basis, unrealized P/L, current price, and average entry price. It does not cover error cases or authentication requirements, but for a simple read-only portfolio snapshot this is not a significant 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 short, front-loaded summary followed by a clean bullet list of return fields. Every sentence and item adds value; 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 zero parameters, a read-only purpose, and an available output schema, the description is complete enough for tool selection and invocation. It states the portfolio scope and enumerates the returned data points, so an agent knows what to expect without needing additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to document. The baseline of 4 applies because no parameter guidance is needed and there is no risk of misuse from undocumented arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') and resource ('all open positions in the portfolio'), making the tool's purpose immediately clear. It also distinguishes itself from the sibling get_position by emphasizing 'all open positions', so an agent can tell it is a list operation rather than a single-position lookup.
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 establishes the context for use: when an agent needs the full set of open positions in the portfolio. It does not explicitly name alternatives or state when not to use it, but the 'all open positions' phrasing provides enough contextual direction to select this tool over similar siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_quoteA
Get real-time quote for a stock.
Args: ticker: Stock symbol (e.g., 'AAPL', 'MSFT')
Returns: Quote data including price, change, volume, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
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 disclosure burden. 'Get' implies a read-only query and the Returns section lists what data comes back, but nothing is said about authentication, rate limits, or whether the quote is delayed or live. Acceptable for a simple read tool but not richly transparent.
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 with the main purpose, followed by a compact Args/Returns structure. Each section earns its place, though the docstring format is slightly more verbose than necessary.
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 parameter and an output schema, so the description is mostly sufficient. However, it lacks usage guidance and behavioral context like whether the quote is live or delayed. It is adequate but not comprehensive.
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 provides 'ticker' as a string with no description, so the description compensates by explaining that ticker is a stock symbol and giving concrete examples ('AAPL', 'MSFT'). This adds real meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb-resource pair: 'Get real-time quote for a stock.' It conveys the tool's core function and distinguishes it from siblings like get_technical_indicators and get_macro_context, though it does not explicitly name 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?
Usage context is implied: an agent would use this when it needs a current stock quote. But there is no explicit guidance on when not to use it or which alternative tool to choose, leaving some interpretation to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_support_resistanceB
Calculate support and resistance levels for a stock.
Args: ticker: Stock symbol (e.g., 'AAPL', 'MSFT') lookback_days: Number of days to analyze (default 60)
Returns: Support and resistance levels with current price position.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| lookback_days | No |
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 core calculation and return value. It does not disclose that this is a read-only, side-effect-free analysis operation—important given siblings that place orders and close positions—nor does it explain the calculation methodology or data source (daily vs. intraday, live vs. delayed). The word 'Calculate' implies non-mutation, but that is inference, not 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 tightly structured: a front-loaded one-sentence purpose followed by a compact Args/Returns layout. Every line earns its place—ticker examples, the lookback_days default, and a one-line return summary—with no wasted words or repetition 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 a low-complexity tool (2 parameters, only 1 required, output schema present), the description covers the essential call contract: what it does, both parameters, and the return shape, with the output schema handling return detail. The gaps are the missing read-only/side-effect disclosure (no annotations) and no methodology or selection context relative to get_technical_indicators. Adequate for invocation, but incomplete for confident routing.
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, and it does: it defines ticker with concrete examples ('AAPL', 'MSFT') and lookback_days as 'Number of days to analyze' including the 60-day default, enriching the schema's bare titles. It could add constraints like min/max lookback or how the window affects level reliability, but the essential meaning of both parameters is covered.
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-plus-resource statement, 'Calculate support and resistance levels for a stock,' which clearly identifies the tool's function and is naturally distinct from siblings like get_quote, get_historical_prices, and get_technical_indicators. However, it never explicitly names or contrasts a sibling, so differentiation is implicit rather than stated.
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 offers no guidance on when to choose this tool over the 24 siblings. It does not mention alternatives such as get_technical_indicators or get_historical_prices, nor does it state exclusions or selection criteria, leaving the agent to infer usage purely 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_technical_indicatorsA
Get technical indicators for a stock.
Args: ticker: Stock symbol (e.g., 'AAPL', 'MSFT') indicators: List of indicators to fetch. Options: 'sma', 'ema', 'rsi', 'macd', 'bbands'. If None, fetches all.
Returns: Technical indicator values and trend analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | ||
| indicators | No |
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 transparency burden. It discloses the default behavior ('If None, fetches all') and the return content ('values and trend analysis'), but does not mention data source, update frequency, limitations, or any operational caveats. This is adequate but not rich.
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, front-loaded with its purpose, and uses a clean Args/Returns structure. Every sentence contributes useful information without repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only data tool with an output schema present, the description covers the essential input semantics and default behavior. It is slightly incomplete only in not offering comparison with overlapping market-data siblings or more behavioral context, but it provides sufficient information 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 coverage is 0%, so the description must fully explain the parameters, and it does. It gives ticker examples, defines indicators as a list, enumerates the valid option strings, and specifies the None default behavior. This is exactly the information an agent needs beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Get technical indicators for a stock.' It lists concrete indicator types (sma, ema, rsi, macd, bbands), which clearly differentiates it from raw price, quote, and support/resistance 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 choose this tool over alternatives such as get_historical_prices or get_support_resistance. The description defines what the tool fetches, but does not mention when not to use it or which sibling covers overlapping use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trading_accountA
Get trading account information.
Returns account details including:
Buying power and cash available
Portfolio value and equity
Account status and restrictions
Whether this is a paper trading 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?
With no annotations provided, the description must carry behavioral disclosure. It implies a read-only operation through 'Get' and lists what is returned, which is useful. However, it does not explicitly state that it has no side effects, does not mention authentication or account-selection behavior, and does not clarify whether 'trading account' refers to the default/authenticated account.
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, front-loaded with the action, and uses a tight bullet list for the key returned account details. Every sentence and bullet adds relevant information without padding.
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 no-parameter getter with an output schema, the description is largely complete: it names the resource and covers the main account data areas. It is slightly undermined by not noting which account is returned (e.g., the authenticated/default account) and by the absence of any read-only or usage clarification, but these are minor given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is fully covered by an empty properties object, so there is nothing for the description to add. The baseline for a no-parameter tool is 4, and the description appropriately does not invent parameter guidance.
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 gets trading account information and adds specific detail via bullets (buying power, portfolio value, status, paper-trading flag). It is not a vague tautology, but it does not explicitly distinguish itself from sibling tools like get_trading_config or get_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 gives no guidance on when to use this tool versus alternatives. It does not mention that it is the right choice for account-level balances/status as opposed to positions, orders, or configuration, nor does it 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_trading_configA
Get current trading configuration and risk limits.
Returns:
Whether paper trading is enabled
Maximum position size allowed
Maximum single order value
List of allowed symbols (if restricted)
| 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 carries the transparency burden. The verb 'Get' clearly marks this as read-only, and the bullet list tells the agent exactly what kind of data to expect. For a zero-parameter getter this is sufficient; missing permission or staleness caveats are not critical here.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single concise opening sentence is followed by a scannable four-item bullet list. Every line adds value and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only configuration getter with an output schema, the description is complete: an agent knows the purpose, the exact returned fields, and that no input is needed. No important calling information 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?
There are zero parameters, so the schema already fully defines the call surface. The description adds no parameter documentation, which is unnecessary; the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object — 'Get current trading configuration and risk limits' — and then enumerates four concrete return values. No sibling tool covers configuration, so an agent can select it unambiguously.
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 intended use is implied by the name and the return list: retrieve account-wide config caps and paper-trading status. However, the description does not explicitly say when to prefer it over related tools such as get_trading_account or get_positions, nor does it give 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.
place_limit_orderA
Place a limit order at a specified price.
Args: symbol: Stock symbol (e.g., 'AAPL') qty: Number of shares to trade side: 'buy' or 'sell' limit_price: Maximum price (buy) or minimum price (sell) time_in_force: 'day', 'gtc', 'ioc', 'fok'
Returns order confirmation. Order will only fill at limit_price or better.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | Yes | ||
| side | Yes | ||
| symbol | Yes | ||
| limit_price | Yes | ||
| time_in_force | No | day |
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 transparency burden. It discloses the critical execution trait: 'Order will only fill at limit_price or better,' and notes that an order confirmation is returned. It does not discuss resting order behavior or partial fills, but the essential fill-price guarantee is clearly communicated.
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 purpose is front-loaded in the first sentence, the Args section is formatted for quick scanning, and the closing behavioral note is the only extra detail. 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?
An output schema exists, so the description only needs to state that an order confirmation is returned, which it does. All parameters are covered and the fill rule is explained. It lacks explicit cross-references to sibling order types, but that gap is more about usage guidance than invocation 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?
The input schema provides 0% description coverage, and the tool description fully compensates. It defines every parameter, gives a symbol example, specifies side as buy/sell, explains limit_price as maximum or minimum depending on side, and enumerates valid time_in_force values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Place a limit order at a specified price.' This clearly distinguishes the tool from siblings like place_market_order and place_stop_order by naming the order type and the price constraint.
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 orders that should execute only at or better than a specified price, stating 'Order will only fill at limit_price or better.' However, it does not explicitly name alternatives or state when to use a market or stop order, so usage guidance remains implied rather than direct.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_market_orderA
Place a market order to buy or sell shares.
Args: symbol: Stock symbol (e.g., 'AAPL') qty: Number of shares to trade side: 'buy' or 'sell' time_in_force: Order duration - 'day', 'gtc' (good till cancelled), 'ioc' (immediate or cancel), 'fok' (fill or kill)
Returns order confirmation with order ID and status.
Note: Market orders execute at the current market price. Use limit orders for price control.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | Yes | ||
| side | Yes | ||
| symbol | Yes | ||
| time_in_force | No | 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 provided, the description carries the full burden of behavioral disclosure. It discloses that market orders execute at the current market price and that the tool returns an order confirmation with order ID and status. It does not mention slippage risk or partial fills, but the key execution behavior is stated.
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 well-structured: an opening action statement, a short Args block, a returns line, and a final note that adds practical guidance. Every line earns its place and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides enough detail for a real trading action: parameter semantics, execution behavior, and return value. It does not mention prerequisites like account funding or potential failure modes, but given the output schema exists and the core workflow is clearly documented, the description 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?
Schema description coverage is 0%, so the description must compensate. It clearly explains all four parameters, including the acceptable values for side and time_in_force, and gives an example symbol. This fully covers the gap left by the input schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Place a market order to buy or sell shares.' It clearly distinguishes this tool from sibling order types by naming the market order and contrasting it with limit orders in the note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the core use case and explicitly says 'Use limit orders for price control,' giving the agent a clear alternative condition. It does not, however, address when stop or stop-limit orders might be preferred, so it is slightly incomplete relative to the full sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_stop_limit_orderA
Place a stop-limit order combining stop and limit orders.
Args: symbol: Stock symbol (e.g., 'AAPL') qty: Number of shares to trade side: 'buy' or 'sell' stop_price: Price at which the limit order is triggered limit_price: Limit price for the triggered order time_in_force: 'day' or 'gtc'
When stop_price is reached, a limit order at limit_price is placed.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | Yes | ||
| side | Yes | ||
| symbol | Yes | ||
| stop_price | Yes | ||
| limit_price | Yes | ||
| time_in_force | No | 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 provided, the description carries the full burden of behavioral disclosure. It goes beyond a simple statement of purpose by explaining that when stop_price is reached, a limit order at limit_price is placed, which is the core conditional behavior. This gives an agent an accurate mental model of the execution flow, though it does not cover edge cases like partial fills or order rejections.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and efficient: a one-sentence purpose, a clear argument list, and a single explanatory line for the order behavior. Every sentence contributes unique value, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (6 parameters, no annotations, but an output schema exists), the description is thorough enough for correct invocation. It explains all parameters and the order trigger mechanism. Minor gaps like order status handling or permission requirements are not mentioned, but the core behavior is fully covered.
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 0% description coverage, so the description must explain every parameter, and it does. It defines symbol as a stock symbol example, qty as number of shares, side as 'buy' or 'sell', stop_price as the trigger price, limit_price as the price for the triggered order, and time_in_force as 'day' or 'gtc'. This adds substantial meaning beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Place a stop-limit order combining stop and limit orders,' which clearly specifies the action, resource, and nature of the order. It also distinguishes itself from sibling tools like place_stop_order and place_limit_order by explicitly stating it is a combination, and then clarifies the triggering mechanism.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when the tool is appropriate: whenever a stop-limit order is needed, as it explains the stop-then-limit behavior. It does not explicitly name alternatives or provide when-not-to-use guidance, but the purpose is specific enough that an agent can infer the correct choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_stop_orderA
Place a stop order that triggers at a specified price.
Args: symbol: Stock symbol (e.g., 'AAPL') qty: Number of shares to trade side: 'buy' or 'sell' stop_price: Price at which the order becomes a market order time_in_force: 'day' or 'gtc'
Useful for stop-loss orders to limit downside risk.
| Name | Required | Description | Default |
|---|---|---|---|
| qty | Yes | ||
| side | Yes | ||
| symbol | Yes | ||
| stop_price | Yes | ||
| time_in_force | No | 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 carries the behavioral burden. It correctly explains the stop order lifecycle: it rests until stop_price is hit, then becomes a market order. It does not detail slippage, fill risk, or what happens if the stop is not hit, but the core execution behavior is 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 compact, front-loads the purpose, then lists parameters in a scannable block, and ends with a single useful use-case sentence. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the live-order nature and missing annotations, the description covers the essential parameter semantics and behavior; output schema covers return shape. It omits caveats like stop-price placement relative to market or fill guarantees, but an agent has enough to invoke and select 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?
Input schema provides only names/types with 0% description coverage, so the description must educate the agent. It defines each parameter, gives a concrete example for symbol, restricts side to 'buy' or 'sell', and time_in_force to 'day' or 'gtc', and clarifies that stop_price is the trigger-to-market price.
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 the exact action and resource ('Place a stop order') and defines the triggering mechanic ('triggers at a specified price' and 'becomes a market order'), which differentiates it from market, limit, and stop-limit siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit use case ('Useful for stop-loss orders to limit downside risk'), which helps an agent decide when a stop order is appropriate. It does not name alternative tools or exclusion cases, so it stops short of full routing guidance.
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.
25 tool updates
v0.1.0- First observed
cancel_all_orders - First observed
cancel_order - First observed
close_all_positions - First observed
close_position - First observed
get_analyst_ratings - First observed
get_company_profile - First observed
get_earnings - First observed
get_financials - First observed
get_historical_prices - First observed
get_insider_trades - First observed
get_macro_context - First observed
get_news_sentiment - First observed
get_order - First observed
get_orders - First observed
get_position - First observed
get_positions - First observed
get_quote - First observed
get_support_resistance - First observed
get_technical_indicators - First observed
get_trading_account - First observed
get_trading_config - First observed
place_limit_order - First observed
place_market_order - First observed
place_stop_limit_order - First observed
place_stop_order
TDQS
Scored across 25 tools
Research tools are clearly separated by data type, and order tools are distinct by order type. The only mild ambiguity is between get_trading_account and get_trading_config, and between get_positions/get_position, though singular/plural helps.
Tool names follow a consistent verb_noun pattern: get_* for data retrieval, place_* for order entry, cancel_* for cancellations, and close_* for position liquidation. There are no mixed naming conventions or vague verbs.
25 tools is at the heavy end, especially since the server mixes research functionality with a fairly complete trading execution suite. The count is not unreasonable, but the scope feels broader than the 'stock-research-mcp' name suggests.
Research coverage is strong: quotes, history, fundamentals, technicals, sentiment, insider trades, and macro context are all present. Trading coverage is also solid with order placement, retrieval, cancellation, and position management, though order modification is missing.
Maintenance
Related MCP Connectors
Global stock research, ML forecasts, valuation signals, screeners & portfolio tracking in Claude
Unified financial infrastructure connecting AI agents directly to trade live/demo brokerage accounts, Web3 non-custodial wallets, real-time market data across equities, ETFs, crypto, forex, options, DeFi swaps, and prediction markets, institutional research feeds, and algorithmic strategy backtesters.
Agentic brokerage access to a US brokerage account: quotes, orders, positions, cash and documents.
AI stock intelligence: prices, fundamentals, technicals, news, macro regime, and sector signals.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables natural language trading operations through Alpaca's Trading API, supporting stocks, options, crypto, portfolio management, and real-time market data access through AI assistants like Claude.MIT
- AlicenseCqualityDmaintenanceProvides access to real-time and historical stock market data through the Alpha Vantage API, enabling financial analysis and market data queries through natural language.100118 PyPI74Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables trading and portfolio management through the Alpaca API, allowing users to place orders, manage positions and watchlists, access market data, and retrieve account information through natural language.22 npm3ISC
- FlicenseNot gradedqualityCmaintenanceProvides comprehensive stock intelligence and technical analysis by integrating Alpha Vantage and Finnhub data. It enables users to generate detailed research reports and retrieve real-time market metrics, indicators, and news sentiment.-